Browse help docs
Building a timetable the solver will stand behind
Describe the week and what has to be taught in it, and the solver proposes a timetable. It will tell you what it could not place and why, rather than forcing a lesson in and leaving somebody to find it in September.
For Timetablers, leadership and admin · reviewed 2 September 2026
The 1 points where someone must decide
Everything else can be worked on in any order. These cannot move without a person.
- PublicationCandidate → Published
Lay out the period grid
/admin/timetable · /management/timetable


Mrs. Johnson
Teacher
Periods
Including the ones nothing may be scheduled into
Period 1 · 08:30–09:20
Every teaching day
Break · 09:20–09:40
Every teaching day
Period 2 · 09:40–10:30
Every teaching day
Enrichment · 14:00–15:00
Wednesday only
Break and lunch sit in the grid on purpose, marked as non-teaching, so the solver leaves them alone instead of scheduling through them.
The grid is the shape of the week: each period has a label, a start and an end, and the days it runs on. A period that runs every teaching day needs no days listed.
Break and lunch belong in the grid rather than being left as gaps, marked as non-teaching. A solver that cannot see lunch will schedule a lesson through it, so the way to protect a period is to describe it rather than to omit it.
- Label, start and end time, and the days it runs.
- Non-teaching periods are visible to the solver and never filled.
- With no teaching periods defined, nothing can be generated at all — and the solver says exactly that.
State what has to be taught
/admin/timetable


Mrs. Johnson
Teacher
Requirements
What each class needs, per week
MYP8A · Mathematics
5 per week · S. Khan · Room 14
MYP8A · Games
2 per week · not on Wednesday
PYP4A · Unit of inquiry
4 per week · no room set
A blocked day is how a real constraint gets in: games needs the field, and the field is gone on Wednesday.
A requirement is one line: this class, this subject, this many periods a week — optionally with the teacher who takes it and the room it needs. That is the whole input, and it is deliberately small, because a timetable argument is usually about the requirements rather than about the algorithm.
Days can be blocked per requirement. This is where the awkward real constraints live, and stating them up front is cheaper than discovering them in the published week.
Generate a week and look at it
/admin/timetable


Mrs. Johnson
Teacher
Candidate timetable
Nothing is saved at this point
MYP8A · Mathematics
5 of 5 placed
MYP8A · Games
1 of 2 placed · no free period left that is not Wednesday
Teaching periods
30
Placed
27
Unplaced
1
Unplaced comes with a reason. Add periods, free a teacher, or ask for less — those are the only three fixes.
Generating shows what the solver would produce without writing anything. Requirements it could not fully place are listed as unplaced, each with the reason it failed — a lesson is never forced into a slot that breaks a constraint and left for somebody to discover later.
The candidate is checked for clashes using the same engine the live timetable is checked with, so a proposal cannot be presented as clean on the solver's own say-so.
- Unplaced is information, not a failure — it is the timetable telling you the week is over-subscribed.
- The three real fixes are more periods, a freer teacher, or fewer required periods.
- Nothing reaches the school until the candidate is accepted.
Accept it
/admin/timetable


Mrs. Johnson
Teacher
Publishing the week
Re-solved on the server before anything is written
Replace the published week
Solver starts from an empty week
Add to what is published
Keeps existing slots and fills around them
A candidate that clashes with itself is refused rather than written. A broken week is worse than no week.
Accepting can either replace the published week or add to it. Replacing starts the solver from an empty week; adding keeps what is already published and fills around it.
The week is solved again on the server at this point rather than taking the candidate the browser sends back. The roster may have moved since the preview, and a client can send anything it likes — neither is a good reason to publish a timetable to a school.
Gate · Publication
Candidate → Published
The re-solved week is checked for clashes before it is written, and a clashing candidate is refused outright. The solver should never produce one; if it does, that is a bug, and refusing is a better answer than publishing a broken week and finding out from a corridor full of children.
What everybody else reads
/teacher/timetable · /student/timetable · /parent/timetable


Mrs. Johnson
Teacher
Timetable · student portal
The published week, scoped to the reader
Period 1 · Mathematics
Room 14 · S. Khan
Break
—
Period 2 · Unit of inquiry
Room 6 · A. Iyer
Teachers see their own teaching week rather than the whole school's.
Once published, the week is what teachers, students and families read, and what attendance and cover are organised against. A teacher's view is narrowed to their own teaching rather than the whole school grid.
Keeping the timetable current is covered in Running the day — this doc is about building it in the first place.
Who can approve what
Designations are assigned in IB roles and are separate from the account role somebody signs in with.
| Designation | Sees | Approves |
|---|---|---|
| Admin | The whole school grid, unscoped | Periods, requirements, generating and publishing |
| Management | The whole school grid | The same as admin |
| Teacher | Their own teaching week | Nothing — the timetable is a school record |
| Student and family | The published week for that student | Nothing |
If something looks empty
Nothing can be generated at all
No teaching periods are defined, so there is nowhere to put anything. Build the period grid before the requirements — the solver reports this reason explicitly rather than returning an empty week.
A subject comes back unplaced every time
The week is over-subscribed for that constraint. The reason on the unplaced line says which one, and the fixes are the same three: add periods, free the teacher, or reduce the periods required.
Lunch has a lesson scheduled through it
The period is missing from the grid, or it is marked as teaching. A break the solver cannot see is a break it will fill.
Publishing was refused as clashing
The re-solved week clashed with itself, which should not happen. Nothing was written. That is a bug worth reporting rather than retrying.
The published week does not match the preview
The week is solved again when it is accepted, and the roster may have changed between the two. Generate again to see the current picture before publishing.
Still stuck?
Bring the unit you are working on. Thirty minutes with someone who has taught the programme.