Restaurant POS System
A full-stack point-of-sale and kitchen management system — built from a broken installation into a working system used by staff every day in real restaurant operations.
The existing setup relied on manual coordination between waiters and kitchen staff.
Orders were communicated verbally or through disconnected tools, leading to:
There was no unified system connecting waiter input to kitchen execution.
Built a complete restaurant POS system covering the full operational flow:
The system connects all stages of restaurant operations into a unified workflow.
→ Rebuilt order flow logic
Diagnosed and fixed SellPosController — orders were not being stored correctly, status fields were wrong, and service-type mapping was broken.
→ Implemented kitchen display system
KitchenController had the wrong status filters and a sub_type query that always returned zero rows. Fixed the query so orders appear and persist on screen.
→ Fixed auto-refresh wipe bug
Kitchen screen refreshed every 10s via AJAX — but the response was returning empty HTML and overwriting active order cards. Traced and fixed across three controller methods.
→ Structured order routing
Built category tab system that correctly sets service type per session. Orders now route to the right queue based on cafe vs. restaurant mode.
→ Deployed and secured server environment
Configured the production Linux server via SSH — file permissions, environment variables, database access, and the cPanel/Docker setup.
→ Ongoing maintenance and iteration
Continued to extend the system — table display, payment flow UX, header branding, product loading, and kitchen screen stability — responding to real operational feedback.
This is how an order moves through the system:
From waiter input to kitchen execution — each step is handled by a distinct component.
[ SYSTEM WALKTHROUGH ]
Interactive POS — Waiter → Preview → Kitchen / Café → Complete
[ STEP 1 OF 2 ]
How is the customer ordering?
Category tabs, table selector, order cart. Works on mobile and tablet.
[→] View liveLive order queue, auto-refreshes every 10s. Previously returned empty — fixed by correcting status filter and removing a broken sub_type query.
[→] View liveTransaction overview, table occupancy, daily revenue, and order history.
Stack
System
Deployment
Architecture
COMPONENTS:
- Order Service
- Kitchen Display
- Table Manager
FLOW:
Waiter → Order → Queue → Kitchen → Status Update → Serve
ENV:
Production deployment (live system) Key bugs fixed
BUG: Kitchen screen always returned empty
FIX: status filter was set to 'final' only — orders sit in 'ordered' state, so nothing ever showed. Fixed: whereIn(['ordered','final'])
BUG: Orders disappeared 10s after appearing
FIX: AJAX refresh called getOrdersByStatus() with sub_type='cafe'. That column is NULL on all rows — response was empty HTML, wiping the DOM on every tick.
BUG: sub_type column always NULL
FIX: Column existed but was never populated on insert. Removed from all WHERE clauses. Service type now handled as a session parameter only.