← Proyectos

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.