Restaurant Wi-Fi is not a data centre. It drops, it lags, it shares a router with the card machine. The kiosk I built for SVSFood was designed with that in mind from the first screen.
A local queue, not a spinner
When an order is confirmed, it is written to local storage first and marked as pending. A background worker sends it to the API. If the request fails, the order stays in the queue and retries. The customer sees a receipt either way.
Make retries safe
Every order carries a client-generated id. If the first request actually succeeded and the response was lost, the retry hits the same id and the server returns the existing order instead of creating a duplicate. This one detail is the difference between offline mode and offline chaos.
Show staff the truth
A small sync indicator in the staff view shows how many orders are waiting. End-of-day reset is guarded by a staff PIN so nobody wipes the queue by accident.