Problem and solution
Problem
Restaurant orders need to move clearly from each table to the kitchen while staff retain role-specific controls.
Solution
A QR-based ordering system with real-time Socket.io updates, a kitchen display, table management, and role-based administration.
Technical approach
- Per-table QR ordering without app installation
- Kitchen display with real-time order status updates
- Four staff roles, menu media management, and sales reporting
Implementation details
A complete QR-based restaurant ordering system built with Next.js 14, Node.js, and Express for real-time ordering and restaurant operations. The system generates a unique QR code for each table, allowing customers to scan, browse, and order without installing an application. Menu management supports categories, creating, editing, or hiding items, and image uploads through Cloudinary. Customers can add menu items to a cart, include notes, and confirm an order. The Kitchen Display System receives orders in real time through Socket.io and lets kitchen staff confirm and update their status immediately. Role-based access control defines four roles—Owner, Manager, Chef, and Waiter—each limited to the relevant functions. Table management supports opening and closing tables, printing QR codes, and viewing real-time table status. The sales dashboard reports daily, weekly, and monthly revenue with order history and digital receipts. The frontend uses Next.js 14 App Router, TypeScript, Tailwind CSS, and shadcn/ui. The backend uses Node.js, Express, Socket.io, Prisma ORM, PostgreSQL, and JWT. Socket.io provides real-time communication, role-based controls manage permissions, and Cloudinary stores menu images.