Skip to content
All work

order-taking-pos

A point-of-sale platform for takeaway and retail counters, combining self-service ordering, cashier workflows and stock control in one system.

Role
Architecture, backend, frontend
Period
2023 — Present
Stack
0
Order channels unified
<0s
Ticket to kitchen
0
Offline sales lost
01

Problem

TODO: replace with the real brief. Counter staff were running three disconnected tools — a till, a paper ticket system and a spreadsheet for stock. Orders were re-keyed by hand at every step, which is where the errors and the queue time came from.

TODO: Re-keying orders between till and kitchen
TODO: Stock counts drifting from reality within days
TODO: No usable record of what actually sold, by hour
02

Solution

TODO: replace. One system covering the whole counter: a self-service ordering surface, a cashier view, and a kitchen display, all reading the same order state. Stock decrements as orders are confirmed rather than in a nightly batch.

TODO: Shared order state across all three surfaces
TODO: Stock movements derived from sales, not entered
TODO: Offline-tolerant so a dropped connection does not stop trade
03

Architecture

TODO: replace. A Laravel API owns order state and stock, with a React front-end per surface. Writes queue locally when the network drops and reconcile on reconnect, so the till never blocks on connectivity.

Surfaces
Self-serviceCashierKitchen display
Application
Laravel APIQueue workersAuth
Data
PostgreSQLObject storage
04

Challenges

Offline writes without divergence

TODO: replace. Two tills accepting orders while offline can allocate the same last item. The resolution rule had to be decided in the domain, not left to whichever write landed second.

Stock accuracy under speed

TODO: replace. Decrementing stock on every confirmed order is correct but contended at peak. Batching within a short window kept both accuracy and throughput.

05

Outcome

TODO: replace with the real result, and only include figures you can actually evidence. Describe what changed for the people using it rather than what was built.