Demo prototype · not a product ← Back to the demo
Phase 1 MVP · technical demo

Gemini orchestration for a nomad travel companion

A working prototype of the AI layer: one orchestrator that routes each request to the right module, enforces tier limits, grounds answers in live Google Search / Maps, meters every call, and runs a live two-way voice interpreter. The phone screens are a mock-up to show the flows; the console beside them shows what the orchestrator is doing.

What is shown

M1 · Orchestrator

Router (flash-lite) → guardrails → tier/quota check → module → cache → event log. User context: tier, journey stage, travel style, home currency.

Guardrails

Booking/payment intents return a requiresConfirmation draft — nothing is booked or charged. Visa answers are grounded and must cite official sources, otherwise withheld.

M4 · Journey plan

"30 days in Medellín under $2K": budget split, neighbourhoods, weekly plan, real places — Google Search grounding, plus Maps grounding on paid tiers. All prices marked as estimates, sources listed.

M4 · Touchdown

2–3 airport transfer options, a 48-hour checklist, an honest safety block with emergency numbers and sources.

M7 · Translate Intercom

Gemini Live API over a server-side WebSocket bridge (key never reaches the browser). Measures first-audio latency, meters voice seconds against the tier. Text fallback on flash-lite.

Tiers & metering

Free-dom, Navigator $19, Voyager $59, Autopilot $89. Limits per feature; on hit the server returns a structured upgrade card (rendered as the sheet). Every model call is logged with tokens, latency, tier, cost.

Architecture

Mobile app Flutter / RN client mic PCM 16 kHz Existing backend NestJS: auth, users, billing, bookings out of scope here AI orchestrator · Cloud Run (Node/TS) Router (flash-lite, intent → module) User context: tier · stage · profile Guardrails: confirm-before-act · cite visas Quota check → upgrade card M4 Plan /Touchdown M7 LiveWS bridge Cache · metering · event log(D1 / JSONL in demo) Gemini API / Vertex AI • flash — reasoning + grounding • flash-lite — router, translate • Live API — speech ⇄ speech • Google Search grounding • Google Maps grounding (separate calls — not combinable) BigQuery (analytics) events table · cost per user/tier schema: docs/bigquery-schema.json demo writes D1 / JSONL instead NMT / Cloud Translation for bulk text — later, behind same router HTTPS + WSuser / tierREST + WSstream

Same code runs two ways: src/node.ts (Cloud Run, Dockerfile, PORT, JSONL events) and src/worker.ts (this public demo on Cloudflare Workers + D1). In production, user/tier would come from the NestJS backend via a signed token, and events would stream to BigQuery.

Estimated AI cost per user per month

Assumed usage profile × cost per call. Per-call costs are measured from this demo's event log where available, otherwise from test runs. Rates: …. 30% of grounded calls assumed served from cache.

TierPricePlansTouchdownChatTranslateVoiceAI costMargin
Loading…

What is not done (honestly)

Demo prototype for a technical proposal. Not affiliated with any travel brand.