The kitchen display is a dedicated full-screen view for the kitchen: large, readable order cards with auto-refresh and optional sound on new orders.
- URL:
/kitchen(e.g.http://localhost:4202/kitchen) - Access: Same as Orders — authenticated users with order access (owner, admin, kitchen, bartender, waiter, receptionist). Route protected by
authGuardandorderAccessGuard.
- Full-screen layout — No sidebar; header with title, “Back to orders” link, sound toggle, and last-refresh time.
- Large order cards — Order #, table name, customer (if any), relative order time; list of items with quantity, name, notes, and item status (pending / preparing / ready / delivered).
- Read-only — No status change controls; status updates are done from the main Orders page (
/orders). - Active orders only — Shows orders in status: pending, preparing, ready, partially_delivered. Completed/paid/cancelled are not shown.
- Auto-refresh — Polling every 15 seconds plus live updates via WebSocket when order data changes.
- Optional sound — Toggle “Sound on” / “Sound off”. When on, a short double beep plays on WebSocket events
new_orderanditems_added. Preference is stored inlocalStorage(kitchen-display-sound).
- Sidebar: link “Kitchen display” (same nav block as Orders). Opens
/kitchen. - From kitchen view: “Back to orders” returns to
/orders.
Translation keys under KITCHEN_DISPLAY.* and NAV.KITCHEN_DISPLAY in front/public/i18n/ (en, de, es, ca).
When the tenant defines kitchen stations under Settings → Kitchen stations, each product can be mapped to a station (or use tenant defaults for unmapped items by category: food vs beverages). Order lines then include kitchen_station_id, kitchen_station_name, and kitchen_station_route (kitchen | bar).
- Kitchen display (
/kitchen) and Bar display (/bar) show a Station filter when at least one station exists for that route. All stations shows every line for that display; a specific station shows only lines resolved to that station. - Query param:
?station=<id>bookmarks a station view; omit orallfor all stations. - Printing: Browser / invoice printing is unchanged. Splitting physical kitchen tickets per station (e.g. one printout per grill vs cold line) is a follow-up for a local print agent or bridge; see
docs/PRINTING.md.
- Component:
front/src/app/kitchen-display/kitchen-display.component.ts - Route:
app.routes.ts—/kitchenwithauthGuardandorderAccessGuard - API:
ApiService.getOrders(false)and WebSocketorderUpdates$;GET /tenant/kitchen-stationsfor the filter; station CRUD and defaults under Settings (owner/admin). - Tests:
front/src/app/kitchen-display/kitchen-display.component.spec.ts; backendback/tests/test_kitchen_stations.py(resolution helpers).
