This was delivered for a client under NDA, so it's shown here without identifying details - the focus is on what was built and how.
The product is a multi-location restaurant ordering and operations platform. It spans a Flutter customer ordering app, web ordering and marketing surfaces, an internal operations dashboard, and an Express API layer that normalizes the ordering contracts between the frontend products and provider systems.
On the customer side, the ordering experience covers the full path from location selection to menu browsing, product customization, basket management, checkout, rewards, saved addresses, order history, and order tracking. The app and web surfaces do not talk directly to raw provider APIs; they rely on the BFF to expose stable, app-shaped contracts.
On the operations side, the dashboard gives the team control over the back office: orders, menus, ingredients, stores, customers, analytics, exports, notifications, support, messaging, and internal jobs. That matters because restaurant ordering is operational software, not just a cart flow - store availability, menu overlays, payment handoff, order imports, webhooks, email/notification delivery, product analytics, error monitoring, support tickets, and customer history all have to stay aligned.
The architecture is a Turborepo monorepo with shared packages for UI, database access, environment validation, utilities, logging, and config. The API server connects provider-backed ordering, loyalty, checkout, email delivery, push/device notifications, product analytics, error monitoring, and support workflows to Postgres/Prisma persistence, Redis-backed queues, webhooks, cron jobs, and admin-facing read models.