CodePrism Technologies logoCodePrism Technologies
Case Study — Multi-Tenant SaaS

Building a Commission-Free QR Menu & Ordering Platform for Independent Restaurants

A multi-tenant SaaS that turns a restaurant's paper menu into a mobile menu, a per-table QR code and a direct ordering channel, built so an independent restaurant keeps its margin instead of paying a marketplace commission of up to 30%.

PlatformWeb (Next.js + NestJS)
Duration4-day build sprint
TypeMulti-Tenant SaaS
Stack13 technologies
PROJECT OVERVIEW

56

Domain model tables shipped in one schema

2×

Tenant isolation enforced independently (ORM + Postgres RLS)

30%

Marketplace commission the direct-ordering channel is designed to recover

THE CHALLENGE

WhatsApp messaging gets complicated at scale.

Independent restaurants wanting online ordering are pushed onto delivery marketplaces charging commissions of up to 30% in France, while cheap QR-menu tools treat allergen data as free text and model prix-fixe formule menus as unstructured text instead of orderable choice groups. Codeprism built Carte Numérique (a multi-tenant SaaS that gives a restaurant its own digital menu, per-table QR ordering and a kitchen order queue), specified and stress-tested against a real, corrupted paper-menu scan from its first design partner, Royal Punjab in Paris.

Challenge 1

Marketplace commissions of up to 30% eat directly into delivery margin

Challenge 2

Menus frozen in print: a price change means a reprint, not an edit

Challenge 3

Cheap QR-menu tools treat allergen declaration as free text, not the structured legal requirement it is under EU 1169/2011

Challenge 4

Prix-fixe formule menus modelled as text, not as orderable choice groups, where the lunch trade actually happens

Challenge 5

Comparable products rely on one restaurant-wide QR plus a manually typed table number, so orders can't be reliably attributed to a table

Measurable Impact
56Domain model tables, 22 enums, covering every aggregate from tenancy through billing
2×Tenant isolation enforced independently at the ORM layer and in Postgres row-level security
108Real dishes across 18 sections (plus 3 formules) digitized from a corrupted restaurant scan and loaded as seed data
4 daysFrom finalized specification to a working three-persona MVP, verified end-to-end against a live backend
WHAT WE LEARNED
01

Modelling the whole long-range domain up front costs nothing when the MVP only touches part of it, and saves a re-migration later

02

Two independent layers of tenant isolation is the right amount for a multi-tenant SaaS: one alone has a known bypass

03

The unglamorous data problem (a corrupted paper-menu scan) is the actual product moat, not the QR code or the menu UI

04

Collapsing three planned frontends into one Next.js app with route-group-level auth shipped a working three-persona loop in days, not the weeks a three-surface build would have taken

Technologies Background
Our Technologies

Built with technologies we trust.

NestJS
Next.js
React
PostgreSQL 16
Prisma
Row-Level Security
Redis
BullMQ
JWT (Passport)
Argon2id
qrcode
Tailwind CSS
TypeScript

Project Goals

Let a restaurant onboard itself, build its own digital menu, and publish it without developer involvement
Give every table its own QR code that carries the diner straight into an order tagged to that table: no app install, no manual table entry
Let kitchen and front-of-house staff see incoming orders grouped by table and move each through its lifecycle in real time
Give the platform operator a cross-tenant console to see every onboarded restaurant and act on one without database access
Model the full long-range domain up front, so the MVP and every later phase land on the same schema with no re-migration

The Outcome

A commission-free direct ordering channel, live end-to-end from QR scan to kitchen queue, built and verified in the same week the specification was finalized.

Conclusion & Impact

"This project showed that a defensible restaurant-ordering SaaS isn't won on the QR code: every part of that pitch is commoditised in France. It's won on the parts competitors treat as an afterthought: compliance-grade allergen data instead of a free-text field, an ingestion pipeline that survives a real corrupted phone scan instead of a clean demo PDF, formules modelled as real orderable structure instead of a text blob, and tenant isolation that fails closed instead of leaking. Designing the full long-range domain model before writing the first controller meant the MVP and every later phase land on the same schema with zero rework."

Have a project in mind?

Let's discuss how we can help you build your next big thing.
Reach out and our team will be in touch.

Protected by reCAPTCHA. Google Privacy & Terms apply.

Building systems that hold up in production.

Bring up the problem others won't attempt.