All projects
Case study · 05

SaaS · Multi-restaurant · Web

QR Menu SaaS

The initial idea starts from a simple need: offer small establishments a clean, easy-to-administer mobile menu accessible without an app. The product has gradually evolved into a single platform able to serve several restaurants and activate modules based on their needs.

Status
Personal project — in development
My role
Design and development of the product: architecture, frontend, API, data, authentication, and reliability of the order → kitchen flow.
Stack
React · Vite · TypeScript · Tailwind · Node.js · Express · SQLite · Better Auth · Playwright
05

From QR code to a multi-restaurant kitchen display

01

Product context

QR Menu is a multi-restaurant web application built around a menu accessible via QR code. The product serves several establishments from a shared foundation, with product and availability management on the restaurant owner’s side, and is progressively extending toward ordering and a kitchen display.

  • Public menu accessible via QR code or URL
  • Menu, product, and availability management by the restaurant owner
  • Multi-restaurant foundation, isolated per establishment
  • Progressive extension toward ordering and a kitchen display

02

Main flow

The flow connects menu configuration by the restaurant owner through to order tracking in the kitchen, with strict server-side rules at every step.

  • The restaurant configures its menu, categories, products, prices, and availability
  • A customer opens the public menu from a QR code or a URL
  • They build an order, linked to a table or prepared for pickup
  • The order is recorded and confirmed, without exposing an internal identifier
  • The kitchen team receives it on a dedicated screen
  • Its status progresses through a controlled state machine until completion

03

Menu and ordering

Each restaurant structures its menu by categories and items, with prices, availability, options, and combos. An order can be linked to a table via a contextualized QR code, or prepared for pickup.

  • Categories, items, prices, and availability
  • Options and combos
  • Order linked to a table or to pickup
  • Order structured and confirmed before being sent to the kitchen
QR Menu public menu viewed on mobile, with categories and items.
Public menu viewed on mobile.
QR Menu order confirmation screen.
Order confirmation, before being sent to the kitchen.

04

Kitchen display

A dedicated kitchen display lets the team track ongoing orders and their progress, from submission through to completion.

  • Active orders, with table or pickup indication
  • Controlled transitions: pending → in preparation → ready → completed, with cancellation possible in allowed states
  • Order age and pickup time when applicable
  • Actions available depending on the order’s current state
QR Menu kitchen display showing active orders with their status.
Kitchen display (KDS): active orders and status transitions.

05

Overall architecture

The architecture stays deliberately simple, with a consistent stack across frontend, API, and data.

  • Frontend — React · Vite · TypeScript · Tailwind
  • API — Node.js · Express · TypeScript · Zod
  • Data — SQLite
  • Authentication / security — Better Auth · server-side sessions · roles · multi-tenant isolation · rate limiting
  • Quality — Vitest · Supertest · Playwright

06

Reliability and operations

The reliability of the order → kitchen flow was addressed before adding payment, with several safeguards.

  • Idempotency key against double clicks and network retries
  • Controlled status transitions to prevent concurrent overwrites
  • Opaque public token for order tracking
  • Status-change log
  • Full-flow tests with Playwright
  • Data isolation per restaurant (multi-tenant)

07

Current limits

The project has not launched commercially yet. This page reflects only the features actually developed and tested at the time of publication.

  • Real customer payment not included in the published scope
  • Real SaaS subscriptions not included in the published scope
  • No commercial launch at this stage
  • Production deployment, a real pilot, and operational constraints still to be validated

Next project

L’Infinie de la Chaize