Years & batches

Add a year

All years

Divisions

Add a division

All divisions

Subjects

Add a subject

Give two "batch" subjects (e.g. one with batch B1, one with batch B2) the same division and time requirements to model a division split across two labs at once — they're allowed to run in parallel with each other, but not with a whole-division (no-batch) subject at the same time.

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

How it schedules: each year's lunch break (if set) is reserved first, then fixed slots are locked in. Remaining subject-sessions are placed with a most-constrained-first search so that no division, staff member, or room is ever double-booked, no session lands in the lunch break, and a Lecture session never lands in a Lab (or vice versa). A dynamic-programming pass checks each staff member's daily hour sequence — across every year and division they teach in — to enforce the maximum-continuous-teaching limit; if a session genuinely cannot be placed without breaking that limit, it is placed anyway and logged as a violation rather than left unscheduled.

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.