A full-stack web restaurant management system designed to replace paper-based workflows with a streamlined, real-time order-to-payment lifecycle. The system supports four employee roles—Manager, Staff (Waiter), Chef, Cashier—each with distinct permissions and dashboards.
UI/Prototype reference (Figma): https://www.figma.com/design/ee5qyBs9MTQ6OMZnE3LFcG/Restaurant-Management-App
Deployment Link (Azure VM): http://webdevfromthitlwin.koreacentral.cloudapp.azure.com/login
- Thit Lwin Win Thant
- Honey Linn
- Eaint Myat Thu
Traditional paper-based restaurant operations often cause:
- miscommunication between dining area and kitchen
- slow billing and payment handling
- limited visibility into real-time sales performance
Restaurant employees with role-based responsibilities:
- Manager
admin@gmail.com
1234 - Staff (Waiter)
waiter@rest.com
1234 - Chef
chef@gmail.com
1234 - Cashier
cashier@rest.com
1234
This system helps reduce customer waiting time, minimize human errors (orders, tax, totals), and provides managers with instant insights (e.g., daily sales totals) for better decision-making.
-
Role-Based Access Control (RBAC)
Secure login with distinct permissions for Manager, Staff, Chef, and Cashier. -
Table Management
Real-time visualization of table status (e.g., Free vs Seated) and seat capacity. -
Digital Ordering System
Menu browsing + “add to cart” ordering with automatic tax and total calculation. -
Kitchen Display System (KDS)
Chef workflow to move orders across stages such as Processing → Finish → Completed. -
Manager Dashboard
- Today’s Sales
- Total Orders
- CRUD for Staff/User management
- CRUD for Menu management
-
Sales Performance Ranking
Automated Top 5 best-selling menu items based on aggregated order quantities. -
Peak Traffic Visualization
Bar chart showing order volume by hour (helps staffing decisions). -
Payment Method Analysis
Breakdown of payment types: Cash vs Card vs QR. -
Average Order Value (AOV)
Real-time average revenue per table.
Fields: menu_item_id, name, price, is_available, photo, category
Operations: Manager CRUD; Staff read (view menu)
Fields: user_id, name, email, password, role (manager/chef/staff/cashier), phone_no
Operations: CRUD staff access + login/authentication
Fields: order_id, table_id, user_id (staff), order_time, status (new/processing/ready/paid)
Operations: create order, view active, update status, void
Fields: table_id, table_no, capacity
Operations: Manager CRUD; Staff read table availability
Fields: order_item_id, order_id, menu_item_id, quantity, unit_price
Operations: add/remove/update items in cart and order summary
Fields: kitchen_status_id, order_id, chef_user_id, kitchen_status, start_time, finish_time
Operations: ticket generation, queue viewing, status updates, archive completed
Fields: payment_id, order_id, cashier_user_id, pay_time, method (cash/card/qr), tax, discount, payment_status
Operations: invoice creation, transaction viewing, mark paid, void transaction
- Frontend: React.js
- Backend: Node.js (Express)
- Database: MongoDB
- Deployment: Microsoft Azure VM
Install dependencies and run the development server:
npm i
npm run dev- Start MongoDB with Docker
cd backend
docker compose up -d- Create a single environment file at the project root
Create a
.envfile in the workspace root and add:
MONGODB_URI=<your mongo connection string>MONGODB_DB=<your database name>VITE_API_BASE_URL=http://localhost:3003
- Start the backend
cd backend
npm i
npm run devBackend runs on: http://localhost:3003
The API expects:
MONGODB_URI(Mongo connection string)MONGODB_DB(database name)