Reservation engine V2 · staff full-window
The biggest shift of the year. /dashboard/book is now a three-column command center with two-phase commit saga, four-layer pricing, and automatic rollback. Roiback is the first adapter that writes to real hotels.
What changes
Until v2.9 GolfStay sold golf on top of existing hotel bookings (P1a · post-checkin mini-app). With v2.9 the hotel can sell the room + tee times directly from GolfStay, in a single atomic transaction (P1b · standalone engine).
Major changes
- /dashboard/book: new full-window three-column screen (Search + Results + Cart). Replaces the previous manual wizard in staff flows.
- Two-phase commit saga: atomic booking with reverse-order automatic rollback if any step fails. Audit timeline visible to the operator at /dashboard/bookings/[id]/timeline.
- Four-layer pricing: rack rate → tenant override → agency contract → staff override. Every layer visible in the final breakdown.
- Write adapters: new IBookingEngineWriteAdapter implemented by Roiback. Enables real-time hotel inventory sales with rate verification before confirm.
- Per-tenant feature flags: ENGINEV2ENABLED + ROIBACKWRITEENABLED. Selective activation per pilot hotel.
- Polymorphic line items: one booking can hold HOTELSTAY + TEETIME + EXTRA + CAR_RENTAL lines.
- Hold expiration: each draft holds inventory for 15 minutes; cleanup cron releases expired holds.
Validation
41 automated tests, 5 production smoke rounds with live feedback. C1 IDOR, C2 race condition in cancelGolf, I4 R2B prefix guard — all resolved before merge.
Next step
Enable ENGINEV2ENABLED for the two pilot hotels (Oliva Nova + Las Dunas) after the last two blockers: RESERVATION_* email triggers and rewrite of the mini-app endpoint to Reservation.
- v2.8
Metered billing + dark mode + Odoo fiscal
Stripe metered billing with threshold or cycle close. Odoo issues the Spanish fiscal invoice automatically. Dark mode across the app with no hydration flash.
- v2.7
Public self-signup + admin kill-switch
/signup is now a four-step wizard that creates a TRIAL organisation and sends the OWNER invitation. Honeypot + per-IP rate limit. Kill-switch from admin if needed.
- v2.6
Integrations marketplace · SUPERADMIN CMS
Integrations now live in a DB-editable table from /admin/integrations. Tenants can install / uninstall any adapter from a marketplace view with cards.