Pierre
Full-stack restaurant ordering platform — menu browsing, cart, checkout, and live order tracking, with an admin dashboard behind role-based access.
Pi
Overview
Pierre is a food ordering platform built as a two-part application: a NestJS REST API and a Next.js App Router frontend. The backend follows a pragmatic clean architecture — every feature module runs Controller → Service → Repository, so business rules never build SQL and database rows never leave a module. Every response travels in a single envelope, and the Zod schemas that validate requests are the same objects that generate the Swagger docs.
What it does
- RESTful NestJS API with JWT authentication — access and rotating refresh tokens, reuse detection, and Argon2id password hashing.
- Role-based authorization with globally applied guards; public routes are the explicit exception, not the default.
- Relational data modelling with PostgreSQL and Drizzle ORM, with money stored as integer cents so floats never touch prices.
- Redis for read-through caching, rate limiting, refresh-token storage, and JWT blacklisting.
- Order lifecycle governed by a state machine, with domain events fanning out to BullMQ queues and Socket.IO clients.
- Next.js frontend covering menu browsing, cart, checkout, order tracking, and an admin dashboard.
- Containerized with Docker Compose and deployed behind Nginx with Let’s Encrypt HTTPS and GitHub Actions CI.
Built with
NestJSTypeScriptPostgreSQLDrizzle ORMRedisBullMQSocket.IONext.jsTailwind CSSJWTSwaggerDockerNginx