Digital Menu
A full-stack restaurant menu and ordering platform built as a Turborepo monorepo: an admin dashboard for managing businesses, products, tables and orders; a customer-facing menu with a complete cart-to-payment flow; and a documented REST API.
What it does
- Admin dashboard — authenticated area to edit the business profile, manage products (price, category, availability), run table service, and advance orders through their status workflow.
- Customer ordering — public menu → cart → checkout (subtotal, 8% tax, total)
→ payment → confirmation, with cart state carried across pages via
sessionStorage. - REST API — NestJS service exposing businesses, products, tables and orders, fully documented with Swagger UI.
Architecture
Turborepo + pnpm workspaces, with apps and shared packages composed through workspace imports:
| Package | Role |
|---|---|
apps/web |
Next.js 16 admin dashboard + public menu |
apps/api |
NestJS 10 REST API (Swagger docs) |
apps/docs |
Documentation app |
packages/@repo/ui |
Shared React component library (source-imported, no build step) |
packages/@repo/eslint-config |
Composable ESLint configs |
packages/@repo/typescript-config |
Shared strict tsconfig bases |
Tech stack
- Monorepo — Turborepo, pnpm 9 workspaces
- Frontend — Next.js 16, React 19, Tailwind CSS 4, CSS Modules
- Backend — NestJS 10,
@nestjs/swagger - Language — TypeScript 5.9 (strict), zero-warning ESLint
Highlights
- End-to-end typed monorepo with a shared UI library consumed directly from source.
- Complete commerce flow — menu, cart, tax calculation, checkout and payment.
- Role-separated routing: middleware-protected admin routes vs. public customer pages.
- Documented API surface (businesses, products, tables, orders) with seeded demo data.