Architecture
- 01Arrival date & time
- 02Room & stay length
- 03Guest details
- 04Server-side pricing
- 05Room-time lock
- 06Booking reference
The problem
The hotel sells rooms by the length of the stay (3, 12 or 24 hours, plus extra hours), not by the night, so a standard nightly booking engine doesn't fit, and two guests must never be sold the same room at the same time.
What I built
- 1
A multi-step booking flow: arrival date and time, room and stay length with optional extra hours, guest details and a review step, ending with a booking reference.
- 2
No double bookings, enforced by PostgreSQL: every held room-time, including the cleaning buffer, sits under an exclusion constraint written inside a transaction that locks the room type.
- 3
Availability, prices and totals are all computed on the server; if a price changed since the guest's quote, the booking stops and shows the new price instead of going through at a stale one.
- 4
A private guest page to view, print, add to calendar or cancel, and a staff admin with an hour-by-hour availability timeline, a booking status workflow, stay extensions and editable rooms, rates and content.
- 5
Per-page SEO with hotel and room structured data, tested from 320 px phones to 4K with zero automated accessibility (axe) violations.
Result
Built and tested end to end, from the guest booking flow to the staff admin. The hotel is setting up its rooms before launch.

