The reservation ledger — room types, rate plans, and overbooking protection at the database
Every stay is a reservation against a room type: standard, suite, cottage, or a custom type the property defines, each carrying its own rate plan. A guest picks check-in and check-out dates; the ledger checks the requested room against every existing reservation for that room using a half-open [check-in, check-out) window, so a stay ending the morning a new guest checks in is legal, but two reservations whose windows overlap by even one night are not. This is enforced by an exclusion constraint at the database, not by an application-level date-range comparison a race condition could slip past. Two guests racing to book the last room on the same dates both get a clean, retryable conflict — never a silent double-booked room, never a guest arriving to find someone else’s luggage in the room. Minimum-stay rules (a 2-night minimum on a holiday weekend, a 7-night minimum in peak season) are enforced at the same reservation-creation boundary. The reservation ledger is DESIGNED TO THIS SPECIFICATION AND IS NOT BUILT YET — there is no reservation table and no exclusion constraint in the database today.
Specified · not built yet
The housekeeping board — clean, dirty, inspected, out-of-order, and turnover time between guests
Every room carries a housekeeping status: clean, dirty, inspected, or out-of-order. A checkout flips the room to dirty automatically; housekeeping staff mark it clean once serviced, and a supervisor marks it inspected before it is offered to the next reservation — a room does not silently become bookable the moment a guest leaves. Turnover time between guests is tracked per room, so a property can see which rooms are consistently slow to turn and staff accordingly. A room flagged out-of-order (a broken fixture, an ongoing repair) is automatically excluded from availability for the maintenance window a manager sets, without anyone having to remember to block it manually on the calendar. The housekeeping board is DESIGNED TO THIS SPECIFICATION AND IS NOT BUILT YET.
Specified · not built yet
Channel-manager sync — one calendar, pushed to every OTA the property lists on
A boutique property rarely sells only through its own site: it lists on multiple online travel agencies at once, and the single hardest operational problem in small hospitality is keeping availability and rate in sync across all of them so the same room is never sold twice from two different channels. The channel-distribution layer is designed to push rate and availability changes outward to connected OTAs and pull confirmed bookings back into the same reservation ledger that enforces the overbooking exclusion constraint — so an OTA-originated booking is checked against the identical database-level guarantee as a direct booking. This sync layer is in active development; no live OTA connection is enabled today. A property using hotelroom.software today manages direct bookings and its own calendar; multi-channel OTA push is the next build milestone, not a shipped capability.
Specified · depends on the reservation ledger, which is not built yet
Rate plans & seasonal pricing — date-range rates and minimum-stay rules, not a black-box AI
A room type carries one or more rate plans, each keyed to a date range: a shoulder-season rate, a peak-week rate, a last-minute rate for a room still open inside a short window. The nightly rate a guest sees at booking time is computed by matching their requested dates against the active rate plan for that room type, with minimum-stay rules applied at the same step. This is a rules-based rate table, described honestly: it is not a revenue-management AI, not an automatic demand forecaster, and not a promise of yield-optimized pricing. A property sets its own rates and minimum-stay rules; the engine applies them consistently and correctly, every time, without a staff member manually updating a spreadsheet before a holiday weekend. The rate-plan engine is SPECIFIED AND NOT BUILT YET.
Specified · not built yet (rules-based by design, never AI pricing)
Group & event room blocks — multiple rooms held under one reservation record
A wedding party, a small conference, or a family reunion needs more than one room held together, often with a group rate distinct from the standing rate plan. A group block reserves a set of rooms under one parent reservation record, with each room still subject to the same overbooking exclusion constraint individually — a group block cannot double-book a room any more than a single reservation can. The organizer sees one summary; the property sees each room’s individual status on the same housekeeping board as every other stay. Group and event room blocks are SPECIFIED AND NOT BUILT YET.
Specified · not built yet