Project 12AI engineering
ECTS Ledger
An unofficial semester planner for the University of Vienna MSc Mathematics: a static page with no build step, fed by a Python client for the XML backend behind u:find, with module caps, date-level clash detection and an exam backlog.
The problem
The MSc Mathematics curriculum asks for 120 ECTS: 90 ECTS of coursework spread over four capped modules (ML1 30, ML2 30, MSE 8, MEL 22), the Master’s thesis (27) and the Defensio (3). u:find lists each semester’s courses, but it does not tell you how a selection fills those modules, whether two courses really clash when many slots run only every other week, or which exams are still open.
What I built
- Planner. A static page with no framework that allocates ECTS into the module caps. Graded courses claim caps first, and overrides are limited to the course’s own module or MEL. Your plan stays in your browser.
- u:find client. A Python client for the undocumented XML backend behind u:find, using the endpoints found in the web app’s own scripts. No catalogue ECTS value, timetable slot or exam date is typed in by hand.
- Clash detection. Each slot stores its cadence and its real meeting dates, so fortnightly slots that interleave are not flagged.
- Self-updating deployment. GitHub Actions rebuilds and validates the catalogue weekly and redeploys GitHub Pages.
Results
- operations
- 137course documents fetched by a full catalogue rebuild, in 3.1–5.3 s (seven local runs; network-bound)
- count
- 71automated tests: 45 pytest and 26 node:test
- evidence
- 90%of course documents must arrive, or the generator refuses to write a catalogue
The catalogue of 8 Nov 2026 has 52 courses for 2026S and 57 for 2026W, and a fresh rebuild reproduced it exactly. The planner is unofficial and not affiliated with the University of Vienna.
Links
- Live plannerOpen: Live planner
- RepositoryOpen: Repository