Product · Reservations · Menu
Coffee shop
Reservations that know a table is busy for ninety minutes
Table reservations with turn times and table combining, plus a menu whose modifiers actually affect the price. Slots are offered only when a real table can seat the party for as long as it will be sitting there.
- TypeScript
- React
- Vitest
- 31 tests
turn time 90 min
Seatings
Struck-through slots are genuinely unbookable, not merely outside opening hours. Book one and watch the following slots close too — a party occupies its table for the whole turn, not just the minute it arrives.
Menu
Kapeng Barako
Batangas liberica, brewed strong.
₱120.00
Latte
Double shot, steamed milk.
₱155.00
Tapsilog
Cured beef, garlic rice, fried egg.
₱220.00
Ube Cake
Purple yam, macapuno.
₱185.00
Pandesal Basketsold out
Six pieces, salted butter.
₱95.00
Order
Nothing added yet.
Book a table at 7pm, then look at 7:30 and 8:00 — both are gone. A party of four occupies its table for ninety minutes, not for the instant it was booked.
Switch the party size to eight and watch most of the service close. Nothing here seats eight alone, so it depends on two adjoining tables being free at once.
What this is, and what it is not
This is the part of the product that is worth building carefully: the rules that decide what can be sold, for how much, and what happens when the answer is no. It is a real engine with tests beside it, running in your browser with no server involved.
It is not a whole product. There is no login, no database and no payment provider — those are known quantities, and building them here would demonstrate nothing that the interesting half does not already demonstrate better. State lives in the page and resets when you reload it.
Read the full case study