Pick courses, then discover the timetable they produce.
EdinburghAI Flip the Script
Describe the week.Choose the legal year.
No 9ams, Fridays free, King's Buildings days together. Aperture finds course sets that fit, then checks every degree rule.
Courses in this plan · 7 · 120 cr
4 compulsory lectures still land on Friday.
The sequence is backwards.
The week becomes the input. Degree rules and timetable clashes become checks, not surprises.
Describe the week, then get the legal course sets that can produce it.
Three moves, one legal year.
Describe the week. Check the rules. Choose a timetable that survives both.
Describe the week
Write the shape you want: no early starts, Friday afternoon free, one campus day, courses you want or will not take.
Simulated previewDescribe a change
Every constraint stays visible and removable.
Try a sentence
Applied
Check the degree rules
Compulsory courses, option credits, 120 credits, prerequisites and semester balance are checked against the programme table.
Demo dataWhy this plan works
Each check keeps the source sentence beside it.
Compulsory courseINFR09051 Informatics Large Practical
Group ASelect exactly 50 credits
Semester 2 optionsChoose 20 to 40 credits
These are Computer Science courses in Semester 2 open to third-year undergraduate students.
Open sourcePrerequisiteMachine Learning requires Foundations of Data Science
Students MUST have passed: Informatics 2 - Foundations of Data Science (INFR08030)
Open sourceChoose the legal year
Compare legal course sets, choose tutorial groups, and see every unavoidable miss in the published timetable.
Demo dataCourses in this plan · 7 · 120 cr
No avoidable preference misses.
The demo is grounded.
Every number comes from the committed programme data and timetable export.
Built to be checked.
The language model handles language. The solver makes the decision.
Next.js 16 and React 19
One App Router codebase for the page, planner and API routes.
TypeScript 5 and zod
Shared domain types and validated API inputs. Server code never trusts the client.
Deterministic TypeScript solver
Legal-year search and scoring stay fast, inspectable and outside the language model.
Mongoose 9 and MongoDB Atlas
Persistent programme data when available, with committed JSON as the demo fallback.
Cached DRPS and CTB exports
The committed scrape runs the demo without a live university request.
Tailwind 4 and scoped CSS
Utility layout for the page and a landing-specific visual system without global overrides.
Vercel
The Next.js app ships without a separate frontend or hosting layer.
AI coding tools were used to build this project. The rule checks and timetable decisions remain deterministic.
What is real, and what is not.
The boundary is explicit because a timetable tool should earn trust before it earns a click.
One programme
UTCMPSI Computer Science, years 1 to 4. No other degree programme is loaded.
Cached data
The demo reads committed 2026/27 scrape and timetable files. It does not pull live university data.
Timetable coverage
66 of 68 course records have timetable events. Two catalogue courses do not.
Not enrolment
Plans suggest course sets and tutorial groups. The university allocates groups and enrolment.
Parser boundary
Live sentence parsing needs a configured LLM endpoint. The previews on this page are simulated from fixed demo data.
Published clashes
If compulsory lectures clash in the published timetable, Aperture shows the forced miss.