The booking engine is real
The engine before the chrome. Everything a booking system must never get wrong — keeping each business's data separate, avoiding clashes, an audit trail, and staff roles — now exists, is enforced in the database, and is verified against real Postgres in CI.
- Monorepo foundation: workspace layout, CI battery, and strict data separation between businesses with defense-in-depth (Postgres row-level security plus guards).
- Append-only audit log from the very first migration — every change is an attributed, immutable event.
- The booking engine: things you rent, staff, or schedule (one at a time or with shared capacity), weekly availability with seasons, blackouts, buffers, lead times, and slot granularity.
- A calendar that can't double-book: two people racing for the last spot can't both win, because the database itself resolves the clash, not app code. Multi-item bookings are all-or-nothing.
- Offerings with requirements and pools — “any stylist”, “two kayaks and a guide” — with automatic assignment at confirmation.
- Roles and permissions: platform-defined permission keys, per-business role composition, per-assignment scoping, and last-admin protection.
- Business setup with templates for your trade (outfitters, salon) that seed what you rent, offerings, and hours — fully editable after.