Enrolment — an ANUhub slice

The system that reliably ruins my week is ANUhub’s unit enrolment flow: a course you want has no places left, or adding it silently blows your credit-point load, and you find out after the click rather than before. This prototype is that one slice, wired end to end over the real ANU course catalogue — all 6,003 course offerings for 2026 and 2027, imported from Programs and Courses — with the constraints enforced server-side instead of left to a form that accepts anything.

Where the data comes from

src/data/courses.json is the ANU Programs and Courses catalogue, fetched by pnpm courses:fetch (scripts/fetch-courses.ts). P&C renders its catalogue search client-side from /data/CourseSearch/GetCourses, which returns a whole commencement year in one response, so the import is two requests rather than a crawl of six thousand pages. Course code, title, session, career and credit points are ANU’s.

Places are not. P&C publishes no class sizes, so this app derives a capacity and a number of places already taken from a hash of the course code — deterministic, so it is stable across reseeds and redeploys, and deliberately shaped so about one course in sixteen is full and you actually run into the constraint while browsing. It is invented data. The page says so under the table, and it is the one thing here a marker should not read as ANU fact.

What good looks like here