calibur
Back to Inventory
In ProgressWeb / Academic

MIS Department Portal

Academic portal for 200+ students with results, resources, question bank, and curriculum versioning.

Next.js 16TypeScriptPrisma 7PostgreSQLCloudflare R2NextAuth.jsshadcn/uiTailwind CSS

The Problem

The MIS department had no centralized student portal. Results, question papers, course notes, and resources were scattered across WhatsApp groups and outdated sites — no searchable archive, no role-based access control, and no link to curriculum data.

The Solution

A full-stack Next.js 16 portal with @mis.du.ac.bd-restricted OAuth, a 16-model Prisma schema with curriculum versioning, and presigned Cloudflare R2 uploads. Students get a results viewer, a multi-level filterable question bank, and a public academics page rendering the entire curriculum.

Key Features

  • Google OAuth restricted to @mis.du.ac.bd institutional emails
  • Per-student results viewer organized by semester and curriculum
  • Filterable question bank: Program → Batch → Semester → Course → Exam
  • Resources module synced to Cloudflare R2 (slides, books, outlines)
  • Curriculum versioning resolves semester-course mappings per batch revision
  • Presigned R2 uploads — direct browser-to-R2, bypassing the server
  • MIS 20 Fund integration via REST API, gated by roll number

Technical Challenges

01 · Curriculum-Aware Filtering

The same course can sit in semester 3 under one curriculum revision and semester 4 under another. Solution: a CurriculumEntry join table dynamically resolves a student's semester-course map per their batch's curriculum revision — no hardcoded logic anywhere.

02 · Presigned R2 Upload Flow

Vercel serverless functions have memory and timeout limits — routing big files through the server would fail. Solution: two-step flow — client requests a presigned PUT URL, uploads directly to R2, then sends the resulting public URL back to the server for DB persistence.

03 · Role-Based Edge Middleware

Per-component access checks scale poorly. Solution: a single Next.js edge middleware intercepts /dashboard/* and /admin/* before any rendering, verifying role at the CDN edge.

Future Scope

  • Student notes submission with admin approval
  • Faculty research paper directory
  • Event calendar with image gallery