Backend Engineering

Restaurant SaaS with QR Ordering & Multi-Theme Storefronts — A Developer's Deep Dive

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

2026-09-121 min read

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

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

Live architecture demo

See it move, not just read about it.

Re-using the original animation from the linked project — same diagrams and trace you see on the case-study page.

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 posts