Restaurant SaaS with QR Ordering & Multi-Theme Storefronts

Multi-tenant restaurant SaaS: one Laravel backend, three Next.js apps, live order tracking.

Laravel 12 backend + Turborepo of three Next.js 15 apps for restaurant SaaS.

Role
Sole architect & developer

The problem

Restaurant brands needed QR-code ordering, live kitchen updates, and their own themed storefront — without each brand requiring a separate deployment or codebase to maintain.

The approach

Designed a Laravel 12 API backend paired with a Turborepo of three Next.js 15 apps (customer ordering, kitchen/staff dashboard, and admin), using PostgreSQL 16 for data, Redis for caching and queues, Laravel Reverb for real-time order and kitchen updates over WebSockets, and MinIO for S3-compatible media storage.

The outcome

One deployable stack serving many restaurant brands with live order tracking.

Stack

  • Laravel 12
  • PostgreSQL 16
  • Redis
  • Laravel Reverb
  • Next.js 15
  • MinIO

How it's built

Watch the system move between operational states, and trace a single request step by step through the stack.

Restaurant SaaS Architecture

STATE: GUEST QR SCAN
Turborepo (Next.js 15 / React 19)Platform • Admin • Storefront
Storefront:Sushi & Omakase Theme
Session:Expiring QR Token (Table 04)
Laravel 12 (PHP 8.3) CoreAI SDK Agents + Multitenancy
Persistence:PostgreSQL 16 + MinIO (S3)
Pipeline:Redis Queue > Order Dispatched
Reverb WSKITCHEN OPS
Payload:Order #1042 In-Flight
Sync:Broadcast Live ✓
Admin AppMANAGEMENT
Engine:Menu & AI Agent
Status:Standby
Guest scans the table QR. The Next.js storefront loads its active theme, and Laravel broadcasts real-time tickets to the kitchen via Laravel Reverb.

One Laravel core, three Next.js apps, live over Reverb WebSockets.

Restaurant SaaS • Live Order Lifecycle

STEP 1/6
Guest Storefront • Next.js 15
table QR scan presents Expiring Token (Table:14); loads scoped tenant theme (Sushi / Omakase) • 0 ms local
Object Store • MinIO S3 & Redis
menu items, modifier add-ons, and visual food assets served directly from hot Redis cache & S3 buckets • ~12 ms
API Gateway • Laravel 12 / PHP 8.3
guest submits $185 cart; token verified, preventing stale table spoofing; cart pushed to Redis queue • ~18 ms
PostgreSQL 16 • Laravel AI SDK
transaction committed into primary database; AI conversational agent processes special dietary requests • ~45 ms
Live Engine • Laravel Reverb
order event broadcasts instantly over WebSockets on private channel: tenant.8.kitchen
Admin Operations • React 19 KDS
kitchen terminal chimes; ticket renders with seat numbers & prep timings • sub-second delivery

System architecture

Open in new tab ↗

← All projects