The two constraints
A street-food counter has very short transaction times, a menu the regulars know, high order volume relative to ticket value, and a high proportion of cash. That makes counter speed the revenue constraint and cash reconciliation the accuracy constraint — and most POS systems are built assuming card payment and a slower ticket.
Keeping the counter fast
- Keyboard shortcuts for the person who has rung the same thirty items for two years. Touch is for learning the menu; keys are for knowing it.
- Modifiers that do not cost a click each — extra chutney, no onion, less spicy are the whole menu here, not the exception.
- A kiosk lane that splits the queue without adding a person, on the same hardware as the counter.
- QR codes so guests waiting in line can order from where they stand.
- An order status board so the counter stops answering "is mine ready?" and can keep taking orders instead.
Cash that actually reconciles
Cash sales that only exist on paper are cash you cannot reconcile — and in a format where cash is a large share of takings, that is not a bookkeeping annoyance, it is the difference between knowing what you made and estimating it.
ThaliPOS closes the business day with drawer counts and a Z-report that includes cash tenders, not just card settlements. Every tender reaches the books, and the day ties out to the cent because money is held in integer cents throughout rather than in floating point.
Card payments run on a Stripe tap-and-chip reader when guests want them, and card data never passes through our software.
Outdoor, mobile and festival trading
Street-food operations trade in exactly the places connectivity is worst — festivals, markets, food courts, car parks, shared retail connections. This is the format where offline-first stops being an architecture preference and becomes the reason you can trade at all.
The counter, the kiosk and the kitchen screen run against a hub on your own network. With no internet at all, you keep taking orders and keep taking cash; card payments resume when connectivity does. How offline-first works →