~/sajjad $ cat projects/table-bookings
← cd ../projects
Systems
Table booking system
Live£100/mo removed
Full schema and booking engine built into the group website, replacing a paid reservations platform. 395 historic bookings migrated across.
What I built
- Role-permissioned admin panel with a separate enquiries queue for large parties and private hire.
- Transactional guest confirmation email fires from a database webhook, not from the page. The booking row is written first and the email is triggered by that write — so a confirmation cannot be missed because a browser closed or a request timed out. That was exactly the failure mode of the platform this replaced, which silently dropped 21 confirmations across six months.
- Availability logic covering notice periods and past-slot filtering.
- A full integration handover specification for surfacing bookings inside the iOS app.
What went wrong
- Generated-column immutability blocking inserts.
- CDN serving an ES module where UMD was expected, and a variable name collision with a CDN global.
- RLS blocking anonymous inserts through a trigger, and select-after-insert failing under RLS.
- A timezone bug shifting UK dates back a day, and past-time bookings passing validation because only the date was checked.