ANU room booking

A slice of the room-booking system ANU staff and students actually deal with: a fixed set of rooms, a booking form, and one rule that makes a room a real constraint instead of just a label on an event — two bookings for the same room can’t overlap in time.

Pick a room, say what it’s for and when, and book it — or, if you’re not sure which room, say what you need instead (a seat range, a projector, a wheelchair-accessible room) and get back the available rooms that fit best. The booking lands in SQLite immediately (reload the page — it’s still there), and shows up on every other open tab within a second or two over a live stream, the way a shared booking board should.

What good looks like here

Good, for this slice, means:

What I chose not to build: this isn’t the whole ANU room-booking system. There’s no recurring bookings, no login, no cancellation, and the room catalogue is a fixed seed list rather than the real one. The recommender also doesn’t save a search. Modelling one true constraint (no double- booking) plus a real recommendation path end to end mattered more than breadth. The rules this produced live in CLAUDE.md; the checks that protect them live in spec/bookings.test.ts, spec/migration.test.ts, and spec/invariants.test.ts.