Problem
One overlapping room booking or instructor assignment can disrupt an entire timetable. Our two-person team built a shared application for course, exam and classroom planning, with distinct workflows for department heads, secretaries and instructors.
Data and application structure
React, Tailwind CSS and Axios connect the frontend to FastAPI services. Context API shares session state; JWT login and role-aware routes control the interface. Pydantic request/response schemas are separate from SQLAlchemy database models.
StudentCourse represents enrollment, ExamClassroom supports exams across multiple rooms and ExamSeating stores each student’s exam, classroom and seat. Defining a course and assigning it to an instructor and timetable are separate operations.
Scheduling rules
Course assignments check overlapping time intervals for rooms and instructors. Exam creation checks dates, times, room use and available capacity. Single-seat exam layouts use capacity // 2 as the usable room capacity.
Instructors can request changes to their exams. A request returns the exam to an awaiting-approval state for the department head to review. Timetables and calendars can be exported as PDFs.
Seating allocation
The algorithm retrieves enrolled students, checks total capacity and shuffles the list with random.shuffle. It partitions students across rooms and saves numbered seats. This is randomized capacity-based allocation, rather than a solver that optimizes the entire exam timetable.
Limitations
Some operations have backend role checks while others are restricted only in the interface. The next step is endpoint-wide authorization and role-based API tests. Replacing an existing seating plan should also be made atomic within one transaction.
Result
The project combines room management, scheduling conflict checks, exam approval, seating allocation and PDF reporting. Users prepare the timetable and the software validates assignments against business rules.
