A kitchen display the cook actually likes.
One ticket per (course_group, station). Tap a header to claim it, tap a line to mark it. Bump fires every line in the group as ready. Real-time across every station, no polling.
The Cold Prep cook doesn't have to scan a mixed-station card.
A 'Sides' course-group containing both a Cold Prep salad and a Hot Prep side renders as two tickets in expo views. Per-station cooks see only their items via the server's station filter.
- Course-group rollupA single Bump on a group ticket bumps every line in it — even across multiple legacy courses.
- Per-card claimTap a ticket header to claim it. Every other KDS in the kitchen sees the color flip via kds.course.claim.
- Per-line markTap an item to strike it through pre-bump. Broadcasts kds.item.mark across stations.
- BumpFires every line in the group ready. Cashier cart rows flip color, booking row picks up the tint.
Column or accordion. Whatever suits the station.
- Column modeOne column per order, tickets stacked vertically. Tap a column-header pill to focus a single table.
- Accordion grid modeOne card per order, expandable course-group sections with a 3-tap header cycle.
- Vertical zoom sliderPersists across launches. Cooks set their own card size.
- Edge indicatorsThin glowing bar on the right edge when tickets exist off-screen during a rush.
Restocked? Sent the wrong dish? One tap to re-fire.
The hamburger's Recall pulls the most-recently-bumped line on the active station back to new, restamps kitchen_completed_at, and broadcasts so cashier + bar see the order come back online. Recalled tickets show with a red Re-Called banner.
See what every other station is doing without leaving yours.
Station pills in the sidebar glow when another station has open work. The Cold Prep cook can see Hot Prep is busy without peeking at their screen.
- Glow indicatorPer-station pill lights up when other stations have open work.
- Dynamic card heightsTwo-item tickets render short, nine-item ones render tall — no wasted screen real estate.
- Hamburger menuRecall last bump, Refresh, Sign out — within finger's reach during a rush.
Heartbeat watchdog + auto-reconnect. No more 'why didn't the order appear?'
Every Custom Brite App pings the realtime channel every 30 seconds and forces a reset if no frame arrives within 60. That catches the zombie-socket case where a laptop sleep or NAT timeout leaves a TCP connection half-open — the kind of failure where the screen still looks alive but no events flow.
- Client-side heartbeatProactive ping every 30s. The Pusher protocol only specifies a server-initiated heartbeat; the client-side counterpart catches the half-open case it doesn't cover.
- Silence watchdogIf 60 seconds elapse with no frame at all (not even our own pong), the connection is treated as dead and reset.
- Auto re-subscribeAfter a reconnect, every active channel re-issues its pusher:subscribe automatically. Operators see no gap.