Skip to content
Vince.
Lab

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