Overview
Each ticket the KDS receives contains:- Table name or takeaway reference at the top
- Order number (timestamp-based, e.g.
14:32) and the sender’s name - Every item with quantity, modifiers, and any special notes the waiter added
- A live prep timer that starts on receipt and colour-shifts as it ages
- The station the item belongs to (Hot Kitchen, Cold, Bar, Grill, etc.)
How orders reach the KDS
DishInk uses a five-layer delivery chain so tickets get through even when the internet does not:1
Waiter or cashier taps Send to Kitchen
The order is written to the
table_order_items table with kds_status = sent_to_kitchen.2
Realtime push
A Supabase realtime channel (
waiter_kds_${restaurantId}) fans the change out to every subscribed KDS, POS, and Waiter device in milliseconds.3
LAN side-car broadcast
In parallel, the sender broadcasts the ticket over the local Wi-Fi network so devices on the same LAN see it even if the cloud is slow or down.
4
Kitchen print queue (optional)
If a kitchen printer is configured for the item’s station, a docket is queued to
kitchen_print_queue and printed automatically.5
Offline queue fallback
If both cloud and LAN fail, the order is stored in the device’s offline queue and syncs the moment connectivity returns.
The receiving KDS never has to poll. New tickets and status changes arrive by push. If a KDS ever gets out of sync, tap the refresh icon in the header — this calls
fetchItems() directly.Automatic station routing
Every menu category can be assigned to one or more kitchen stations (see Kitchen Statuses and the Kitchen Stations settings panel). When an item is sent:- DishInk looks up the item’s menu category.
- The category is matched to a station via the station’s
category_idslist. - If a match is found, the item is stamped with
kds_station= the station’s display name. - If no station is assigned, the item shows under its category name as a virtual station.
- If a category is assigned to multiple stations, the first matching station wins.
All shows every ticket in the house; tapping a station chip narrows to just that section.

KDS ticket board — Hot Kitchen filter active
Reading a fresh ticket
A new ticket lands with thesent_to_kitchen status. Read it from the top down:
- Table — where the food is going
- Time — when the ticket was fired (24-hour clock)
- Waiter — who to speak to about clarifications
- Items — quantity first, then item name in capitals so it is legible from a metre away
- Modifiers — indented with a
+(e.g.+ Extra Cheese) - Notes — indented with a
!and bolded (e.g.! No onions,! Allergy: nuts,! Cut in half)
The kitchen ticket never shows prices. This is deliberate — the kitchen sees what to cook, not what it costs.
Alerts and sound
- Every new ticket plays an audible chime. Use the Volume button in the KDS header to test the sound.
- If a station has a queue alert configured (e.g. 15 minutes), the KDS flashes a warning when any item at that station sits in the queue for longer than the threshold without anyone tapping Preparing.
- Tickets that pass their prep-time target (
prep_started_at + prep_time_target_minutes) are flagged Overdue and shown in red.
Offline behaviour
If the KDS loses internet:- The header pill switches from Online (emerald) to Offline (red, pulsing).
- The Connection Banner appears just below the header explaining what will happen.
- Existing tickets remain fully readable and interactive.
- Any status changes you make are queued locally, shown as
X QUEUEDin the header, and synced when the internet returns. - LAN-connected devices continue to broadcast updates to each other over Wi-Fi.

