Intelligent Scheduling for Smarter Campuses
https://optimized-timetable-frontend.vercel.app
Most colleges still rely on manual or spreadsheet-based timetable creation, leading to: Class clashes and faculty overload
Underutilized classrooms and labs
Uneven workload distribution
Frustrated students and faculty
With NEP 2020 promoting flexible and multidisciplinary learning, scheduling complexity has exploded — existing tools can’t keep up.
An AI-powered, web-based platform that automatically generates optimized timetables for colleges by balancing: Room utilization
Faculty workload
Student preferences
Fixed and elective slots
All while ensuring zero clashes and maximum efficiency.
Admins / HODs input:
Faculty, subjects, rooms, and constraints
Algorithm runs optimization (via Google OR-Tools / heuristic logic)
The system produces multiple optimized timetables ranked by efficiency
Users can review, tweak, and approve the final schedule
Exports available in PDF, CSV, or iCal for easy sharing
Frontend: React (TypeScript) Backend: Node.js (Express) Database: MySQL with Prisma ORM Optimizer Engine: Python microservice using Google OR-Tools (CP-SAT) Hosting: Dockerized on AWS / Render
🧑🏫 Faculty load & availability management
🏫 Classroom and lab capacity optimization
📅 Multi-department & multi-shift scheduling
⚖️ Automated conflict detection & rearrangement suggestions
🧮 Analytics dashboard for utilization insights
🔐 Role-based login and approval workflow
Saves 80% time vs manual scheduling
Increases classroom utilization by 20–30%
Eliminates faculty & room clashes
Improves satisfaction among faculty and students
Scalable for any university structure or NEP 2020-based curriculum
Student elective integration
Predictive faculty availability (AI-based)
Mobile app for personalized timetables
Integration with LMS platforms
To make academic scheduling smart, conflict-free, and adaptive — helping institutions focus less on logistics and more on learning outcomes.
Here’s your content formatted in Markdown for clean preview and readability:
Represents an academic department (like CSE, ECE, MECH, etc.) — acts as the core organizational unit.
- name → Full department name (e.g.,
"Computer Science and Engineering") - code → Short code (e.g.,
"CSE") - headOfDepartment → Name or ID of HOD
- totalFaculty, totalStudents → Department stats
- createdAt, updatedAt → Record tracking timestamps
- faculties → All faculty members in this department
- classrooms → Classrooms assigned to this department
- subjects → Subjects offered by the department
- timetableSlots → Slots scheduled under this department
- authorizedUsers → Admins/HODs tied to this department
💡 Use: You’ll use this as a central reference when generating department-wise timetables, faculty loads, and subject allocations.
Represents a faculty member and their workload preferences.
- name, email, phone
- maxWeeklyLoad → Maximum teaching hours per week
- averageLeavesPerMonth → To optimize schedules
- availableDays → JSON array (e.g.,
["Monday", "Wednesday"]) - preferredSlots → JSON array of preferred time windows
- departmentId → FK → Department
- subjects → Links through SubjectFaculty (many-to-many)
- timetableSlots → Timetable slots assigned to this faculty
💡 Use: Helps scheduler respect teacher availability, avoid overload, and balance lectures across week.
Represents a specific classroom or lab space.
- name → Classroom name (e.g.,
"CSE-Lab-1") - year, semester → Batch/semester it belongs to
- departmentId → FK → Department
- department → Linked department
- students → Students in this classroom
- timetableSlots → Slots conducted in this room
💡 Use: Prevents double-booking and helps allocate suitable rooms (e.g., labs for practicals).
Represents each student.
- name, rollNumber, email, phone
- classroomId → FK → Classroom
- attendancePercentage, enrollmentYear
- classroom → The class the student belongs to
💡 Use: Enables attendance and performance tracking, linked with timetables.
Stores course or subject information.
- code, name, departmentId
- credits, type (Lecture/Lab/Tutorial)
- lecturesPerWeek, labsPerWeek, semester
- durationPerClass, allowedRoomTypes, prerequisites
- department → Department offering the subject
- facultyAssignments → Many-to-many through SubjectFaculty
- timetableSlots → When/where subject is scheduled
💡 Use: Forms the backbone of timetable creation — defines teaching load and type of room needed.
Connects multiple faculties to multiple subjects (many-to-many).
- facultyId, subjectId → Composite key
- faculty → Faculty assigned
- subject → Subject taught
💡 Use: Allows co-teaching, lab assistance, or cross-department faculty handling.
Represents each lecture/lab time block.
- dayOfWeek, startTime, endTime
- subjectId, facultyId, classroomId, departmentId
- isFixed → For fixed lab sessions
- subject, faculty, classroom, department
- timetable (optional) → Belongs to a version of timetable
💡 Use: Core of the scheduling engine. Prevents conflicts using
@@unique([dayOfWeek, startTime, classroomId]).
Handles authentication and role-based access control.
- name, email, password, role
- departmentId, isActive
- department → The department they manage (optional)
- approvals → Links to timetable approvals
- generatedTimetables → Timetables created by this user
💡 Use: Differentiates access for SuperAdmins, HODs, and Faculty.
Stores a full timetable version (like "CSE Sem 3 - Draft 1").
- name, generatedById, status, scoreJson
- generatedBy → AuthorizedUser
- slots → All slots under this timetable
- approvals → Review/approval process
💡 Use: Enables multiple timetable versions, scoring, and comparisons before final approval.
Tracks approval workflow of timetables.
- timetableId, approverId, status, comments
- timetable → The timetable being approved
- approver → AuthorizedUser reviewing it
💡 Use: Implements hierarchical approval flow (Faculty → HOD → Admin).
Defines access levels:
SUPERADMIN | TIMETABLE_ADMIN | HOD | FACULTY | VIEWER
Tracks lifecycle:
PENDING | APPROVED | REJECTED
For each approval record:
PENDING | APPROVED | REJECTED
erDiagram
STUDENT {
int student_id PK
string name
string email
string department_id FK
int year
}
INSTRUCTOR {
int instructor_id PK
string name
string email
string department_id FK
}
COURSE {
int course_id PK
string course_name
string course_code
int credits
string department_id FK
}
DEPARTMENT {
string department_id PK
string department_name
string building
}
CLASSROOM {
int classroom_id PK
string room_number
int capacity
string building
}
TIMETABLE {
int timetable_id PK
int course_id FK
int instructor_id FK
int classroom_id FK
string day_of_week
string start_time
string end_time
}
ENROLLMENT {
int enrollment_id PK
int student_id FK
int course_id FK
string semester
}
%% RELATIONSHIPS %%
DEPARTMENT ||--o{ STUDENT : "has"
DEPARTMENT ||--o{ INSTRUCTOR : "has"
DEPARTMENT ||--o{ COURSE : "offers"
COURSE ||--o{ ENROLLMENT : "enrolled in"
STUDENT ||--o{ ENROLLMENT : "registers for"
COURSE ||--o{ TIMETABLE : "scheduled as"
INSTRUCTOR ||--o{ TIMETABLE : "teaches"
CLASSROOM ||--o{ TIMETABLE : "hosts"