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.
Problem
The existing setup relied on manual coordination between waiters and kitchen staff.
Orders were communicated verbally or through disconnected tools, leading to:
- — missed or delayed orders during peak hours
- — no real-time visibility of order status
- — inconsistent handling of tables and order flow
There was no unified system connecting waiter input to kitchen execution.
What I Built
Built a complete restaurant POS system covering the full operational flow:
- — waiter order input
- — real-time kitchen display
- — table and order management
- — coordinated interaction across roles
The system connects all stages of restaurant operations into a unified workflow.
My Role
System Developer- → designed and implemented full POS workflow
- → built waiter ordering interface
- → implemented kitchen display logic
- → structured order routing between components
- → handled server setup, deployment, and production configuration
→ 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.
System Flow
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?
Interfaces
WAITER INTERFACE
Category tabs, table selector, order cart. Works on mobile and tablet.
→ View liveKITCHEN DISPLAY
Live order queue, auto-refreshes every 10s.
→ View liveADMIN DASHBOARD
Transaction overview, table occupancy, daily revenue, and order history.
Technical Breakdown
Stack
System
- — role-based interfaces (waiter, kitchen, admin)
- — real-time order handling
- — structured order lifecycle
Deployment
- — Linux server
- — production environment
- — secure configuration and service setup
Architecture
COMPONENTS:
Order Service
Kitchen Display
Table Manager
FLOW:
Waiter → Order → Queue → Kitchen → Status → 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.
Result
- → deployed and running in a live restaurant environment
- → used for daily order handling and kitchen coordination
- → replaced manual communication between staff
- → improved order tracking and operational visibility