Architecture overview

A 30,000-foot tour of how the pieces fit together.

Stack

  • Next.js 16 App Router, React 19, React Compiler.
  • Supabase: Postgres, Auth, Storage (resumable TUS uploads), pgvector for embeddings, RLS-first.
  • Mapbox GL for 3D terrain, satellite imagery, globe view.
  • Vercel AI SDK v6 + Anthropic Claude (Haiku / Sonnet / Opus).
  • Model Context Protocol server (HTTP Streamable + SSE).
  • Langfuse for tracing, prompt versioning, token accounting.
  • TanStack Query (server cache) + Jotai (atomic local state).
  • Vercel for deploy and OTEL instrumentation.

Why TanStack Query + Jotai (not Redux)

TanStack Query owns server state — caching, invalidation, optimistic updates. Jotai owns ephemeral UI state — playback position, selected POI, filter atoms. The split keeps server data normalized in one place and lets components stay tiny.

Data flow at a glance

  • Strava webhooks → ingest pipeline → FIT parser → metrics extraction → Postgres.
  • Rides → fitness model (Bannister) → CTL/ATL/TSB snapshots.
  • Ride context + memory → AI coach (tool-using) → response + extracted memory.
  • MCP server exposes search_rides, get_ride, get_fitness_state, generate_workout, ask_coach, etc. — scope-gated.

Read the full write-up on Orbital