Week 1 prototypes: Cashier, Door, Tonight and Home
Clickable prototypes for the Day 2 sign-off (plan, section Sequence, Week 1 days 1 to 2). Each screen shows only what the contract's RPCs return, and every refusal uses the contract's reason. Nothing here talks to a backend: names, codes and amounts are fictional, and the page state resets on reload.
How to review, in about 30 minutes. Each prototype opens in a phone frame with a panel beside it: what to look at on the current screen, scripted paths through the flow, a jump list to every state, and that screen's open questions. At phone width the panel moves under the phone, so they also work on a real phone. Every state is reachable by tapping; the keypad and the code fields accept real input.
The four screens
Staff screens use the Activa admin design system (paper, white hairline cards, cacao actions, coral only as the wordmark dot). Home uses the approved 24 BLVD v2 member design.
Cashier
Staff app · cashier role · BLVD 24 and Upper House
The critical path, and the one to judge against the 15-second target. Scan opens the member card with every perk and its eligibility: free first drink and 10% off valid, the happy hour greyed as "Outside window 18:00–20:00" and untappable. Tap the drink, type the bill, pick the method, and PromptPay asks for the slip reference before logging. Then three verdicts: Paid with the redemption line (auto-resets after 8 s), Already used when a second till loses the race for the same free drink, and Perk changed when an admin edit lands between scan and tap. The typed-code fallback covers the dark-room case, including the expired-code refusal.
Open design questions
Drink value: fixed per benefit in admin, or picked by the cashier on each sale?
A refused perk at the log tap means asking for more money after the customer expected less. Acceptable, or reserve the perk at 'Redeem'?
One perk per bill (the RPC takes one grant). Should the free drink and 10% stack?
Show a used-up perk greyed on a fresh scan instead of hiding it?
The same scanner as the cashier, routed by what it reads. A member key shows tonight's table (VIP 4, party of 8, guest passes 3 of 7 in) and checks the table in with one tap. A GP- guest pass checks in on scan, names the host and table, and offers "Join as member". A ticket scanned a second time gets the red Already checked in that stays until the hostess taps. Look at whether the booking card gives her enough to wave a group through, and whether the red screen tells her what to do next.
Open design questions
Guest names on the booking (the contract returns counts only)?
'Already checked in' can't say when or by whom: add checked_in_at to tickets?
A member with a pass but no booking or ticket: walk in, and do we log the entry?
Record a refused entry, for the capacity-refund rule?
Staff app · manager, hostess, cashier · Upper House
The live floor list that replaces the LINE door groups. A totals strip (in tonight, tables arrived, logged at the tills, perks redeemed), events with tickets sold against checked in and a Happening now badge once an event has started, then tonight's bookings grouped by tier: Big VIP, VIP, Semi-VIP, the private room and standing. Late tables are flagged; free tables are counted. Tap Kanya's VIP 4 and check it in to see the board move. The same night runs through Door, so the numbers line up.
Open design questions
The hostess can read the till money through tonight(). Hide it for her?
When does 'Late' start, and is there a no-show release?
Realtime updates at launch, or refresh on open and pull-to-refresh?
Home v2 as it lands in apps/member. The pass card now carries the identity key: a QR rotating every 30 s with a draining countdown ring, opening the charcoal wallet with the typed fallback. Your night lists tonight's table and a ticket for 01:00 (still Friday's business day). Coming up shows 'You're going' on an owned event and 'Happening now' on a live one; the featured card swipes through a 4:5 carousel. Share offers exactly two choices, invite to the app or share on Instagram. The door-policy line sits under Your night and in every sheet. No hero gradient over images. Toggle Day in the panel to check the light mode.
Open design questions
'Your night' is tonight only, and tonight's items don't repeat in 'Coming up'. Right split?
Eat and Play punch-dot levels stay off Home until loyalty rules exist?
Carousel on the featured card only, or on every card?
Cross-cutting decisions the prototypes surfaced. Each has the default we build if there's no answer by Day 2.
1
Free drink valueFor the discount line the cashier picks ฿220, ฿280 or ฿350 on each sale (the contract passes p_item_value per call).
Default we buildA fixed item value on the benefit in admin, pre-selected on the keypad, cashier can change it. Saves a tap and a judgement call. Small contract addition: benefits.value holds the item value for free_item.
2
Perk refused at the log tap'Already used' and 'Perk changed' arrive after the bill was typed, so the cashier collects the full bill. The verdict screens say exactly how much.
Default we buildKeep the contract for launch. Measure how often it happens in the Upper House three-cashier dry run, and add a reserve call at 'Redeem' only if it shows up.
3
Ticket already checked inThe red screen can't say when or by whom, because check_in_ticket returns only the reason and tickets have no check-in time.
Default we buildAdd checked_in_at to event_tickets and return it with the holder's name. Cheap, and it lets the hostess tell a shared screenshot from a re-entry.
4
Money on the hostess's Tonight boardtonight() returns the till totals to every role that can call it, hostess included.
Default we buildHide the ฿ tile for hostess in the app at launch; strip it server-side in the Week 2 money round.
5
10% off at BLVD 24The contract seed scopes the 10% perk to Fairway, Mandrake, AMORE, Beso Beso, LULU and Karaoke. The cashier prototype shows it valid at BLVD 24 to demo the percent path.
Default we buildThe seed as written: at BLVD 24 the chip greys with "not valid at this venue". Ask the client if BLVD 24 food should qualify.
Stand-ins, not the real thing
QR codes are decorative. The real key encodes ACT1.<public_code>.<6-digit TOTP>, 30 s period, ±1 step accepted.
Event images are generated placeholders; real ones come from events.media (Week 2 upload).
The PromptPay amount QR in Cashier is the Week 2 option, shown so its place in the flow can be judged now.
Not in these prototypes
Store-and-forward when the signal drops at Upper House (Week 2).
Guest-pass creation and 'Invite your table' on the member side (Week 2).
In-app payment with Beam (R2.1); tickets and passes are sold at the cashier at launch.
Files: docs/prototypes/r2/ index, cashier, door, tonight, homeDeviations and contract questions: docs/r2/DEVIATIONS-proto.mdSelf-contained HTML, no build step, nothing deployed