Restaurant Order Management System
A web app for running restaurant orders: manage incoming orders, keep the menu live and take payment by QR code.
SpecSheet 001
- Role
- Sole developer
- Year
- 2022
- Language
- JavaScript
- Platform
- Web
- Reading
- 5 min
- Stack
- React
- Redux
- Immer
- Node.js
- Express
- MongoDB
- JWT
- Docker

Contents · 3 chapters
The problem
Restaurants juggle orders, a menu that changes through the day and payments, often on paper or across separate tools.
This app brings order management, a live menu and QR payment into one web application.
Decisions & trade-offs
3 decisions
Start as one React app
The live demo is the original single-page app: React and Redux on the front end, a Node and Express API with MongoDB behind it, JWT for authentication.
Then split it into services
In March 2022 the repository moved to a microservices layout: a TypeScript Express auth service backed by MongoDB, a shared npm package, a Next.js client, and Docker, Kubernetes and Skaffold for deployment. The auth service and shared package were built and tested; the rest of the migration was not finished.
Share code through a package
Error handling, request validation and the current-user and require-auth middleware live in a custom npm package, so every Express service reuses them instead of copying them.
The write-up
5 min read
What it does
Manage orders as they come in.
Live menu that can be changed while the restaurant is running.
QR payment so a table can pay without waiting for the bill.
Built with
A React and Redux front end (with Immer for state updates) talking to a Node and Express API backed by MongoDB. Requests are authenticated with JWT, and the services are packaged with Docker.


