IIT Guwahati's shared academic library
Open CourseHub · Read the guide
CourseHub brings IIT Guwahati's scattered course material into one organised, searchable library. Students can browse resources by course and year, preview or download files, save frequently used material, and contribute resources for their peers.
Branch Representatives (BRs) maintain the structure for their assigned courses and review student contributions before publication. An administration portal supports student, BR, course, and content management across the platform.
- Course-based library organised as
Course → Year → Folder → File - Microsoft sign-in using IIT Guwahati institutional accounts
- Automatic course discovery from a student's academic registration
- Search and custom courses for material outside the current course list
- File previews, downloads, folder ZIPs, favourites, and shareable links
- Student contributions with a review queue and approval workflow
- BR tools for creating years and folders and managing course material
- Administration portal for students, BRs, courses, bulk imports, and course linking
- Shared legacy folders that let related course codes reuse material without duplication
| Student dashboard | Adding another course |
|
|
| Course browser and BR controls | Student contribution flow |
|
|
| Contribution status | Direct BR upload |
|
|
| Contribution review | Folder approval controls |
|
|
graph LR
Student["Student Web App<br/>React 18 · Vite · Redux"]
Admin["Admin Portal<br/>React 19 · Vite · Tailwind CSS"]
API["CourseHub API<br/>Node.js · Express"]
Auth["Identity<br/>Microsoft OAuth · JWT"]
DB["MongoDB<br/>Users · Courses · Folders · Files"]
Storage["Microsoft Graph · OneDrive<br/>Original Files"]
Media["ImageKit<br/>Permanent Thumbnails"]
Jobs["node-cron<br/>Course Cache Sync"]
Student --> API
Admin --> API
API --> Auth
API --> DB
API --> Storage
API --> Media
Jobs --> DB
Jobs --> Storage
The student-facing application is built with React, Vite, Redux, React Router, and SCSS. It provides the course dashboard, nested file browser, search, favourites, profile, and contribution workflows. Course trees are cached in the browser to make repeated navigation faster and reduce redundant API requests.
The separate administration portal uses React, Vite, and Tailwind CSS. It supports student and BR management, course dashboards, bulk course imports, course linking, contribution moderation, and course-cache synchronization.
The Node.js and Express API owns authentication, authorization, course and file metadata, contribution review, and administration workflows. MongoDB stores the application data, while Microsoft Graph and OneDrive provide file storage and delivery. ImageKit stores permanent thumbnails instead of relying on expiring OneDrive preview URLs.
Course allotments are cached in MongoDB after they are resolved from IITG's academic data. A scheduled job synchronizes the shared course cache each month.
- Students browse approved material, add courses, save favourites, and submit files.
- Branch Representatives organise assigned courses and review pending contributions.
- Administrators manage users, BR assignments, courses, imports, linking, and moderation.
Uploaded student material remains pending until a BR approves it. This keeps the library useful without requiring the core team to organise every file manually.
coursehub/
├── client/ # Student-facing React application
├── admin/ # Administration portal
├── server/ # Express API, jobs, integrations, and data models
├── docs/ # Architecture and implementation notes
└── deploy.sh # Production deployment helper
- Node.js 22 or newer
- npm
- MongoDB
- A Microsoft Entra application and Microsoft Graph access
- A OneDrive folder for course material
- ImageKit credentials for permanent thumbnails
The API must be running before either frontend can load live data.
cd server
cp .env.example .env
npm ci
npm run preflight
npm run devConfigure the values documented in server/.env.example.
cd client
cp .env.example .env
npm ci
npm run devSet VITE_API_BASE_URL to the local API origin.
cd admin
cp .env.example .env
npm ci
npm run devSet VITE_API_BASE_URL to the same API origin used by the student client.
Run the relevant checks before opening a pull request:
# Backend
cd server
npm run preflight
npm test
# Student client
cd client
npm run build
# Administration portal
cd admin
npm run lint
npm run builddevis the active development branch. Open feature and fix pull requests against it.prodreflects the deployed application and is updated after changes are considered stable.
Built and maintained by Coding Club, IIT Guwahati.








