Aller au contenu principal
Petanque Life

Operator Booking Console (PL-T190)

F22.08 8 fonctionnalités

En bref

A hot-key-driven reception console for chain venues with single-screen flows for phone bookings, walk-ins, drop-ins and check-in. Tablet-first for the iPad behind the bar, SSE-live across every panel, with a Cmd-K command palette, debounced fuzzy customer search across passport plus recent guests, an aggregated landing API for one-tap operations, and 409-conflict pickers that resolve race conditions in two keystrokes.

Comment ça fonctionne

The operator console lives at /operator and is built around a tablet-sized iPad behind the bar — high information density, large hit-targets, no menus more than two taps deep. The /operator/today landing aggregates the day's schedule, status distribution, check-in-due ±30 min, walk-in counter, and next-slots per resource type into a single API call (GET /chain/operator/{location}/today) so the page paints in one round-trip. The Cmd-K command palette (OperatorCommandPalette) opens a fuzzy-filtered action list — new booking, check-in, walk-in, wait-list, ring-back, cancel — with badge tags showing the current walk-in count and check-in-due number, so the operator can keep both hands on the keyboard. /operator/quick-book embeds the QuickBookForm with a deterministic idempotency key and a 409-conflict picker that lets the operator pick alternative slots with Cmd-1, Cmd-2, Cmd-3; on success a toast offers an optional SMS confirmation send. /operator/walk-ins is a 3-panel layout: walk-in queue, ring-back queue, wait-list — items can be HTML5-dragged onto the floorplan, or assigned via a bottom-sheet on touch devices that don't drag well.

Customer search (CustomerSearch) debounces fuzzy queries against ChainPassport plus the last 90 days of guest-details, dedupes on phone/email, and autofocuses a "Create new" CTA when there are zero hits. /operator/check-in shows arrivals in a ±30 min window with name/phone filter and one-tap check-in against POST /chain/bookings/{id}/check-in. The whole console subscribes to SSE chain.bookings.{tenant}.{location} with a 400 ms debounced refetch so today's data and walk-ins stay live without polling.

Capacités clés

  • Cmd-K command palette with fuzzy filter + badge tags
  • /operator/today landing aggregated into one API call
  • QuickBookForm with deterministic idempotency + 409 picker (Cmd-1/2/3)
  • Walk-in / ring-back / wait-list 3-panel with drag-to-floorplan
  • CustomerSearch debounced fuzzy-search across passport + recent guests
  • Check-in vy with ±30 min window + one-tap check-in
  • SSE-live with 400 ms debounced refetch on bookings stream

En pratique

Friday at 17:45 the bar is filling up. Two regulars walk in without a booking — the host taps + walk-in, types "Bengt", picks Bengt Persson from the autocomplete, sets party = 2, and drops the card onto Lane 9 on the floorplan. Three seconds later the phone rings; the operator hits Cmd-K, types "qb", and lands in QuickBookForm.

The caller wants Saturday 19:00 for four — the form returns 409 with three suggested slots (18:30, 19:30, 20:00). The operator says "19:30 work for you?", presses Cmd-2, the booking writes, and a toast asks "Send SMS confirmation?" — they tap yes. The check-in counter on the landing card increments because another upcoming booking just entered the ±30 min window; the operator opens /operator/check-in and one-taps the arriving party.

None of these actions required leaving the keyboard or clicking refresh.

Fonctionnalités de ce sous-système

8
ID Status Fonctionnalités
F22.08.01 Livré Phone booking flow (/operator/quick-book med <QuickBookForm>, deterministisk idempotency-key, 409-konflikt-picker med ⌘1/⌘2/⌘3, success-toast med valfri SMS-bekräftelse)
F22.08.02 Livré Drop-in / walk-in queue (/operator/walk-ins 3-panel: walk-in-kö, ring-tillbaka, väntelista; HTML5-drag till floorplan; assign-via-bottom-sheet utan drag)
F22.08.03 Livré ⌘K hot-key driven via <OperatorCommandPalette> (action-set: ny bokning/incheckning/walk-in/väntelista/ring tillbaka/avboka, fuzzy-filter, badge-tags för walk-in-count + check-in-due)
F22.08.04 Livré Quick customer search via <CustomerSearch> (debounced fuzzy-sök över ChainPassport + senaste 90 dagars guest-details, dedup på phone/email, 0-träffar autofokuserar "Skapa ny"-CTA)
F22.08.05 Livré Operator landing (/operator/today) med dagens schema, status-fördelning, check-in-due ±30 min, walk-in-räknare och next-slots per resurs-typ — allt i ett aggregerat API-anrop
F22.08.06 Livré Check-in-vy (/operator/check-in) med ±30 min-fönster, namn/telefon-filter och ett-klick "Checka in" mot POST /chain/bookings/{id}/check-in
F22.08.07 Livré Operator-aggregat-API (GET /chain/operator/{location}/today + /customer-search + /next-slots) — en round-trip för landing, dedupad sök, slot-prober per resurs
F22.08.08 Livré SSE-live på chain.bookings.{tenant}.{location} med 400 ms debounced refetch av today-data + walk-ins