Years & batches
Add a year
All years
Divisions
Add a division
All divisions
Subjects
Add a subject
All subjects
Staff
Add staff
All staff
Rooms
Add a room
All rooms
Fixed slots
Add a fixed slot
All fixed slots
Settings & import
Department
Import from JSON
Importing replaces everything currently in the app — years, divisions, subjects, staff, rooms and fixed slots. You'll need to press Generate again afterward. Not sure of the shape? Download the template first.
Choosing a file imports it immediately — you don't need to also paste it below. The paste box is only there for when you don't have a file handy (e.g. copying JSON from somewhere else); use whichever one is convenient, never both.
Or, instead of choosing a file, paste JSON directly:
Import from CSV
CSV import is additive (per table) rather than a full replace — pick which table you're loading, download that table's template so the columns match, then choose your file. A row updates an existing entry if the name(s) already match, otherwise it's added as new.
Export
Download everything currently in the app as a JSON file — useful as a backup, or to hand-edit and re-import.
Or download each table's current data as CSV — same layout as the CSV templates above, so it can be re-imported later. One file per non-empty table.
Sample / reset
Generate
Timetable
Violations
Print & export
This prints every generated batch timetable, one after another. Regenerate first if you've made changes.
Info & help
Department data
Years & batches
Each year has its own weekly working window and teaching days — e.g. Second Year runs 9:00–4:00, Third Year runs 10:00–5:00. Optionally reserve a lunch break within that window; no session is ever scheduled over it. Split a year into divisions on the Divisions page if it has parallel sections.
Divisions
Optional. If a year runs parallel sections (Div A, Div B…) that can have different subjects, staff, or simultaneous classes, add them here. A year with no divisions is scheduled as one single group.
Subjects
A subject belongs to one year, and optionally one division. The same subject name can appear twice with a different division and staff member — e.g. Computer Networks taught by Prof. A in Div A and Prof. B in Div B.
Staff
Set how many continuous hours a staff member may teach before the scheduler must leave them a free slot. One staff member can be assigned to subjects in different years or divisions — the scheduler tracks their busy hours globally, so it never double-books them across a year boundary either.
Rooms
Every room has one fixed category. The scheduler never places a Lecture session in a Lab, or a Lab session in a Lecture room — if no room of the right category is free, the session is left unscheduled and logged, never silently misplaced.
Fixed slots
Cross-departmental subjects that must sit at one locked day and hour, every week. These are placed before anything else and are never moved. The subject you pick already carries its year/division.
Settings & import
Global options, sample data, and JSON import/export.
Schedule
Generate
Runs a constraint search across your years, divisions, subjects, staff and rooms, then keeps the best of several attempts.
Timetable
View the generated week by batch (year or division), by staff member, or by room.
Violations
Anything the search couldn't satisfy cleanly is logged here rather than hidden. Hard clashes should never appear; soft violations (continuity, unmet minimum, no matching room type) may.
Print & export
Produces a clean, print-ready view of every batch's timetable — use your browser's Print dialog and choose "Save as PDF" to export.