All case studies
2 apps · 45 working daysFood service · Franchise2025–2026 · project closed
Case Study #03

MESO.
Two apps,
one food-service ecosystem.

A food-ordering PWA shipped in 25 working days. The POS for the Central Kitchen model — in 20 days. Then we wired them into a monorepo with one rule: only the POS writes to the database. That the architecture is ready for new channels was proven by an AI voice agent taking phone orders — hooked up in 2 days.

45 days
two apps shipped to production
11
business modules in the POS
MESO · 2 apps · 1 ecosystem
Delivery PWA · POS · Central Kitchen
MESOpos, Kitchen Display System
MESOpos, menu management with food cost
Meso Delivery, PWA menu

From the central kitchen
to the customer’s screen.

MESO · Delivery + POSKDS · Menu with food cost · Customer PWA
25 days
Meso Delivery
PWA: menu, cart, P24 payments, loyalty, live statuses.
20 days
MESOpos
11 modules: from KDS, through FEFO, to food cost.
25
REST API v1 endpoints
JWT + API keys. The only write path to the database.
150+
tests
Vitest + Playwright, incl. production smoke tests.

25 and 20 days were separate projects: the customer app and the POS. Stage three was the migration to a shared monorepo and full integration.

MESO is a “Smart Asian Comfort” franchise concept — Japanese comfort food in a model that saves on rent and staff, and invests in the product. Operationally it works like this: one Central Kitchen produces the broths, marinades and sauces, and mobile points of sale — food trucks and kiosks — sell them.

This model is great for business and merciless for technology. Off-the-shelf POS systems assume a restaurant with one kitchen and one stockroom. Delivery marketplaces take a commission on every order and keep the customer relationship. And a franchise needs, from day one, something most chains only get after years: central control of recipes, costs and stock across many locations at once.

Instead of bending the off-the-shelf tools, we built our own ecosystem. From scratch.

IAct

Your own ordering channel in 25 working days.

Meso Delivery is an installable PWA for delivery and pickup orders. Your own sales channel instead of marketplace commissions: a menu with variants and add-ons, a cart with suggestions, BLIK/card/Przelewy24 payments, the MESO Club loyalty program and live order status.

Video 01Meso Delivery · app showcase · desktop + mobileLoop · 50 sec.

Challenge #1 — an order that has no right to get lost.

The customer has paid, so the order must reach the kitchen — even if the POS happens to be down. Scroll through five real screens of the app and see what happens underneath at every step: from the payment webhook, through the retry queue with idempotency, to live status.

01 / 05
The customer browses
A menu with variants and add-ons in an installable PWA. No marketplace commission, no app-store download.
Keep scrolling — the order moves on ↓
Journey 01Order lifecycle · 5 real Delivery screens · scroll-drivenScrollytelling
IIAct

A POS for the Central Kitchen in 20 working days.

MESOpos is not a regular register. It is the operating system of the whole chain — 11 business modules in a modular-monolith architecture designed for the model: the Central Kitchen produces, the points of sale sell.

Challenge #2 — FEFO, a warehouse that thinks in dates.

In food service it is not enough to know how much of something you have. You need to know which batch and until when. Every goods receipt creates a batch with an expiry date; stock is drawn automatically from the batch expiring soonest (First Expired, First Out). The site manager sees upcoming expirations before they become a loss.

Challenge #3 — food cost without spreadsheets.

Recipes in MESO are nested: the marinade goes into the broth, the broth into the ramen. Changing one ingredient’s price in the Central Kitchen recalculates the cost of every dish across the chain. The owner sees margin at menu-item level — live, not in a quarterly spreadsheet.

From the register screen to food cost.

Click a module to see its screen
+ remaining modules
  • Sales (POS)Register screen with variants and modifiers
  • Kitchen (KDS)Kitchen-screen queue: timers, priorities
  • Batches & FEFOBatch tracking with expiry dates
  • DeliveriesGoods receipts into stock and batches
  • Users & rolesPermissions, admin panel, API keys
MESOpos dashboard with revenue, orders and top products
MESOpos menu management with categories and food cost
MESOpos BOM recipes with food cost calculation
MESOpos stock levels with SKUs, zones and allergens
MESOpos customer CRM with loyalty tiers and points
MESOpos online orders flowing in from the Delivery app
MESOpos staff list with roles, rates and work time
Revenue, orders, fulfillment time and top 5 products — the pulse of the whole chain in one view.
Screen 02MESOpos · 7 modules · screenshots from the production appInteractive
IIIAct

Monorepo: two apps, one source of truth.

Two working apps are not enough if they are meant to grow together. Stage three was the migration to Turborepo with three shared packages: @meso/core (types, enums, Zod schemas), @meso/api-client (a typed HTTP client with retry and backoff) and @meso/supabase.

Everything follows a single architectural rule: only the POS API writes to the database. Delivery and every future channel talk to the POS over REST. A new sales channel is an API client, not a new system.

Delivery PWA
customer channel
POS UI
operations channel
AI voice agent
phone channel
Kiosk
architecture-ready
Mobile app
architecture-ready
REST /api/v1/* · JWT + API keys← HMAC-SHA256 webhooks + retry
POS API
25 endpoints · the only writer to the database
SQL · Row-Level Security← Realtime → customer screen
Supabase PostgreSQL
82 migrations · RLS · Realtime
Diagram 02Ecosystem architecture · one write path, many channelsOnly POS writes

The POS actively notifies Delivery about status changes via HMAC-SHA256-signed webhooks with retry, and Supabase Realtime delivers the status to the customer’s screen within a second of the cook tapping the KDS. Menu sync runs one way: edit a product once, both channels are up to date.

An AI voice agent.
The phone that always picks up.

The agent holds the conversation in Polish and queries the POS API mid-call for availability, variants and prices. Hooked up in 2 working days.

ElevenLabsTwilioCloudflare Workers
01
The customer calls
Twilio picks up and streams the audio to the agent. No queue, no “please hold”.
02
The agent talks
The ElevenLabs agent takes the order in Polish: items, variants, add-ons.
03
Queries the POS live
During the call it checks availability, prices and variants in the POS API. Both ways.
04
The order hits the kitchen
It places the order through the same API as Delivery — “Phone” channel, KDS, statuses.
Scene 01Voice agent · ElevenLabs + Twilio + Cloudflare Workers → POS API2 working days

“A new sales channel is an API client, not a new system” — that rule passed its test sooner than we had planned. The payoff was out of proportion to the effort: zero missed calls, a line open 24 hours a day and orders that land in the kitchen with no human involved — at peak hours nobody has to choose between the pot and the phone.

Production is not a demo. I treat it like production.

Data access
Row-Level Security (Supabase)
API
JWT + API keys with granular permissions
Webhooks
HMAC-SHA256 signatures · retry · idempotency
Payments
Przelewy24: BLIK, cards · refunds from the POS
Tests
150+ — Vitest unit + Playwright E2E + production smoke tests
Monitoring
Sentry in both apps
CI / hosting
Vercel, preview environments, 82 database migrations
Stack — chosen for the problem, not the CV
Next.jsTypeScript (strict)ReactSupabase + RLSTurborepoZustandReact QueryZodTailwind CSSshadcn/uiPrzelewy24ElevenLabsTwilioCloudflare WorkersPlaywrightVitestSentryVercel
  1. Discovery & specificationThe Central Kitchen + points operating model turned into a functional spec for the POS and a spec for the PWA.
  2. ArchitectureModular monolith, API contracts, the “only POS writes” rule.
  3. Design & build: DeliveryThe PWA from landing page to checkout with Przelewy24.
  4. Build: POS11 modules: KDS, FEFO inventory, BOM recipes, CRM, staff.
  5. IntegrationAPI v1, HMAC webhooks, retry queues, idempotency.
  6. AI voice agentPhone orders 24/7: ElevenLabs + Twilio, a worker on Cloudflare, two-way communication with the POS.
  7. Monorepo migrationTurborepo, shared packages, one pipeline.
  8. Quality150+ tests, Sentry, production smoke tests.
  9. Maintenance & growthIterations, fixes and monitoring for the product’s whole life in production.

No handovers between a PM, an analyst, a designer and a developer — and no long decision path on the vendor’s side. One person who has known this ecosystem since day one — every next iteration is cheaper and faster, because nobody has to relearn the context.

MESO got its own commission-free ordering channel and a POS tailored to its operating model.

In 45 working days MESO got infrastructure that chains usually build over years: central recipes and costs, FEFO inventory, KDS, online ordering with payments and a phone line handled by AI. A new point of sale is a database record; a new channel is an API client.

The MESO concept itself was closed in March 2026 — for business reasons, not technological ones. The system went through the full cycle: from specification, through production, to real orders with payments.

45 working days. Two apps. One architecture.

Building a food-service chain and gluing operations together from five tools?

Or maybe you’re interested in the system itself? The entire MESO ecosystem — POS + delivery + AI voice agent — is for sale as a technology asset: production-proven code, documentation and handover support. Write to me and I’ll walk you through the details.