Hazem Azzam

All projects
Full-Stack Web Application

Restaurant Ordering System

A production-grade, multi-branch restaurant ordering system built as a Turborepo monorepo with two Next.js apps — a customer storefront and a staff dashboard. Customers scan a table QR code, browse a per-branch menu, and place orders through a Google-authenticated account; staff manage the catalog, per-branch pricing and menus, and track incoming orders live via a filterable table and a kitchen kanban board. The backend is Supabase (PostgreSQL) with strict Row-Level Security, server-actions-only mutations, and Realtime fan-out for live order updates. The domain is split into 12 independent modules — Identity, Branches, Tables/QR, Products, Menu, Pricing, Promotions, Inventory, Orders, Payments, Notifications, and Customers — each following clean-architecture layering (presentation → application → domain, infrastructure at the edges) with no cross-schema foreign keys and integer-cents money handling.

Jul 2026 - Present
Restaurant Ordering System - Image 1

Overview

A multi-branch restaurant ordering platform — a QR dine-in storefront for customers plus a real-time staff dashboard — built as a modular, clean-architecture monorepo on Next.js and Supabase.

Key Challenges

  • Keeping 12 domain modules independently ownable while sharing contracts, without cross-schema coupling.
  • Designing RLS policies that scope storefront reads per-customer while giving staff branch-scoped access.
  • Getting checkout math right and immutable per order — pricing snapshots plus promotions plus service/VAT charges.

Key Achievements

  • Designed a modular clean-architecture monorepo (12 domain modules) with strict layer boundaries and no cross-schema foreign keys.
  • Built two Next.js apps — a customer storefront and a staff dashboard — sharing a typed UI component package.
  • Implemented QR-based dine-in ordering with required Google OAuth customer accounts and per-customer ordering sessions.
  • Enforced data isolation with Supabase Row-Level Security and a server-actions-only mutation boundary.
  • Delivered real-time order tracking — a filterable orders table plus a kitchen kanban board — over Supabase Realtime.
  • Modeled per-branch menus, pricing, promotions, and inventory reservations with immutable integer-cents checkout math.