Product architecture
How Orda turns a QR scan into a brewing cup in under three minutes.
Customer journey
Scan
QR at table opens menu
Browse
Live menu by café
Pay
Card or wallet
Brew
Café receives
Pickup
Status: ready
System overview
┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ Customer │ scan │ Edge │ RPC │ Orders │
│ (Mobile) │────────▶│ Gateway │────────▶│ Service │
└─────────────┘ └─────┬───────┘ └──────┬───────┘
│ │
┌──────────────┼────────────┐ ▼
▼ ▼ ▼ ┌──────────────┐
┌────────────┐ ┌──────────┐ ┌────────┐ │ Rules │
│ Menu │ │ Payments │ │ Auth │ │ Engine │
│ Service │ │ (Stripe) │ │ (JWT) │ └──────┬───────┘
└─────┬──────┘ └────┬─────┘ └────────┘ │
│ │ webhook ▼
▼ ▼ ┌──────────────┐
┌──────────────────────────┐ │ Café │
│ Postgres + Realtime │◀───────────│ Dashboard │
└──────────────────────────┘ └──────────────┘
Rules engine
Each order is evaluated by a small deterministic rules engine that handles inventory, café hours, capacity, and promotions before confirmation.
Inventory check
Reject items marked sold-out by the café staff in the last 60s.
Café hours
Validate the café is currently open and accepting orders.
Capacity guard
If active orders > threshold, queue with realistic ETA.
Promo eligibility
Apply ORDA10 / first-order / loyalty stacking rules.
Payment policy
Pre-auth on card; verify wallet token signature.
Fraud signals
Velocity check, device fingerprint, and IP geo.
Data flow
1. Payment intent
Client creates a PaymentIntent via /api/checkout; the rules engine validates the cart.
2. Webhook confirm
Stripe → /api/webhooks/stripe → mark order paid → publish event to café.
3. Realtime fan-out
Order broadcast to café dashboard, KDS printer, and customer device.
4. Status updates
Café advances state (pending → preparing → ready → completed).
5. Analytics pipeline
Events stream into the warehouse for dashboards & cohort analysis.
Globally-distributed serverless for <80ms TTFB anywhere.
Row-level security, live order pushes to dashboards.
Payment surfaces tokenized, never touching our servers.