la_carte_mobile
A restaurant ordering ecosystem: guests order from their phone, the team runs the floor from a tablet, the kitchen sees orders appear in real time.
A restaurant needs to orchestrate guest orders, kitchen prep, payments, POS and team — across five different platforms.
Monorepo Flutter (iOS + Android guest app) + Next.js (back-office + admin + POS) + Python (kitchen routing). Stripe, Apple Pay, Google Pay, Playwright & Artillery tests, Sentry monitoring.
174,060 lines of code, 5 apps, one operator from design to deployment.
Six months, five apps, one operator.
- ~170k Lines of code (Dart + TS)
- 147 Commits since Oct. 2025
- 5 Apps in one monorepo
- 1 Developer (me)
// Distribue une commande sur les stations de prep (cuisine, bar, froid).
// Chaque station a sa file, son débit, sa capacité de pointe.
export function routeOrder(order: Order, stations: Station[]): Route[] {
const routes: Route[] = []
for (const item of order.items) {
const eligible = stations.filter(s => s.canPrep(item.category))
// station la moins chargée qui tient encore la fenêtre d'envoi
const station = eligible
.sort((a, b) => a.currentLoad() - b.currentLoad())
.find(s => s.etaWith(item) <= item.expectedAt) ?? eligible[0]
routes.push({ station: station.id, item, startAt: station.nextSlot() })
station.enqueue(item)
}
return routes
}
This project is exactly what I look for in a freelance engagement: one person who understands the domain, designs the data flow, implements all five surfaces and owns ops. No handoff meetings, no "that's the front-end's bug". A product that ships, documented, pick-up-able by the next team.
The problem it solves
A restaurant usually runs on a stack of systems that don't talk to each other: POS over here, kitchen printer over there, delivery platforms somewhere else, and an owner flipping between four interfaces to figure out what's happening.
The intuition behind la_carte_mobile: give a single operator — manager, owner, shift lead — every tool to run the floor from one coherent stack. QR-code ordering, order flow, payments, analytics, all real-time.
Two apps, one shared backbone
- Guest mobile app (Flutter) — QR scan, menu browsing, cart, payment (Stripe / Apple Pay / Google Pay), real-time order tracking.
- Operator web app (Next.js) — dashboard, floor plan, order pipeline, kitchen/bar routing, team scheduling, register, analytics.
- Cloud Functions — payment orchestration, order state machine, real-time sync between guests and operators via Firestore.
- Dynamic QR codes — one per table, generated by the back-office, pointing to the menu filtered for that location.
- Test & observability stack — Playwright for E2E, Artillery for load, Sentry for prod monitoring.
A monorepo, a single source of truth
Everything lives in one repository — Flutter app at the root, website/ Next.js alongside, functions/ TypeScript for the event-driven backend, scripts/ for the PostGIS database (geographic floor plan).
Firestore is the real-time backbone: orders land there from mobile, Cloud Functions trigger payments and state transitions, the back-office listens and pushes changes to the kitchen tablet. Stripe Connect handles multi-restaurant money flows.