A booking-to-checkout system built for a family-run mountain guesthouse — a rolling room calendar across every channel, automatic room assignment, and per-stay pricing that adjusts itself, replacing a routine of Booking.com messages, a paper ledger, and a lot of memory.
A returning guest's most recent room of that type is offered first, if it's free for the new dates.
A family or group booking multiple rooms gets a contiguous run of room numbers, not whatever's scattered free.
Otherwise, the first free room of the right type — skipping anything blocked for maintenance.
The obvious way to handle a booking date is to hand the "YYYY-MM-DD" string straight to the browser's built-in date tools, which quietly convert it through a UTC timestamp on the way in and back out again. Depending on where the guest is and what time they book, that hidden conversion can bump a checkout date onto the wrong calendar day entirely. Every date here is read and written straight from its own year/month/day, with no timestamp conversion involved.
A fixed month grid cuts a stay in half the moment it crosses month-end. The room calendar scrolls as a continuous, rolling window instead, so a nine-night stay over a month boundary still reads as one uninterrupted bar.
Room rates and the per-night extra-person charge both read from a single pricing catalog edited in one place. Guest count above a room's base occupancy is priced automatically — change the dates or add a guest, and the surcharge line recalculates itself rather than waiting to be re-entered.
Built to run standalone on local demo data with no database configured at all, so the front desk could start using the board immediately — then switched over to a managed cloud database once the schema was ready, without changing how the screen worked.