CASE STUDY — FULL-STACK WEB APPLICATIONMenu QR
- YEAR
- 2026 — Present
- ROLE
- Solo Full-Stack Engineer & Architect
- TEAM SIZE
- 1 person
- LINKS
- Live site ↗
Case study by Hazem Azzam

01 — OVERVIEW
What it is
A multi-branch restaurant platform: QR table ordering for guests, a staff app for cashiers, waiters and the kitchen, and a manager dashboard, all on one NestJS + PostgreSQL API with permission-based access.
02 — CHALLENGES
Key challenges
- 01Letting several guests share one cart and place orders in rounds without duplicate submissions, using client-generated round IDs.
- 02Modeling per-branch menus and prices on top of one shared catalog, with price levels and per-branch not-sold-here and sold-out exceptions.
- 03Keeping 12 modules independent: separate PostgreSQL schemas, no cross-module foreign keys, and layer boundaries checked in lint rather than by convention.
03 — ACHIEVEMENTS
Key achievements
- 01Guest app (Next.js): QR table sessions with leader approval, a shared cart, order rounds protected against double submission, and bill requests. It talks to the API server-to-server, so the app key never reaches the browser.
- 02Staff app (React + Vite): one app for cashier, waiter and kitchen work, with screens and actions gated by 14 staff permissions: order register, tables board with session accept, pay and close, and a kitchen display.
- 03Manager dashboard (React + Vite, 66 screens): catalog with variations and add-ons, per-branch menus and sold-out control, price levels with bulk updates, tables and areas with printable QR sheets, employees and roles.
- 04NestJS API with 12 modules, each layered into domain, application, infrastructure and presentation, with the boundaries enforced by ESLint; one PostgreSQL schema per module and no cross-module foreign keys.
- 05Access control: JWT access tokens with database-backed refresh sessions, Argon2 password hashing, 44 permission keys, a role hierarchy where staff can only grant permissions they hold, and per-employee branch scoping.
- 06Quality gates: 495 API test files (unit and integration) and CI that runs lint, type checks, migrations, tests, and drift checks for the committed OpenAPI spec and the database migrations.
04 — STACK
Technologies used
- React
- Next.js
- TypeScript
- Tailwind CSS
- shadcn/ui
- TanStack Table
- React Query
- React Hook Form
- Zod
- Vitest
- GitHub Actions
- Vite
- REST API design
- OpenAPI
- Clean Architecture
- RBAC
- RTL/Arabic interfaces
- Node.js
- PostgreSQL
- NestJS
- JWT
- Redis
- Drizzle
- Docker