Architecture

How Zealova thinks,
learns, and adapts.

A multi-agent AI coach, a streaming Python API, an offline-capable Flutter client, and a privacy model that lets you delete everything. Here is the full picture — without the marketing fog.

The stack

Five layers, one product

Click any layer to see what lives there. Designed so a request can fail loudly at one boundary instead of silently corrupting the next.

Anatomy of a message

What happens when you ask the coach something

A single chat turn fans out across eight services. The animation below shows the same path a real food-photo message takes — start to finish.

YouFlutter appEdgeJWT · rate limitVisionmedia classifierRoutermention · media · intentAgentspecialist for the turnToolslog · swap · adaptPostgresyour row · RLSReplystreamed back
Step 1 / 7

The AI brain

A router and five specialists

One giant prompt is a leaky abstraction. We split coaching into focused agents — each with its own tools — and let a router pick the right one per turn.

Router

mention → media →
intent → keyword

Where your data lives

Six places, one tap to delete them all

Every byte has a home and a reason for being there. We do not hoard data — and you do not have to email us to leave.

On your device

Local

Cached schedule, offline workouts, on-device AI fallback.

In transit

Encrypted

TLS 1.3 only. JWT bearer per request, rotated on refresh.

In the API

Ephemeral

Stateless workers. No long-lived per-user storage.

In your row

Isolated

Postgres with row-level security: only your user_id reads your data.

In the vectors

Retrieval

Embeddings for retrieval — never your raw text in plaintext form to third parties.

Yours to delete

Reversible

One-tap delete account wipes Postgres, vectors, and stored media.

Engineering principles

Six rules we wrote down so we would not break them

01

No mock data in production

If the AI does not return it, we do not invent it. Bugs surface immediately.

02

Specialists over generalists

Five focused agents beat one giant prompt. Fewer hallucinations, better tools.

03

Retrieval over memorization

Your context is fetched fresh each turn. Models stay small; answers stay grounded.

04

Offline is a first-class mode

Pre-cached plans and on-device generation keep training going on a plane.

05

Stream by default

Replies render as they are produced. Nothing waits for a full response to start.

06

Privacy is the default

Row-level security, signed URLs, full delete — not bolt-on toggles.

Built with

The stack, on a single line

Flutter·iOS · Android · Widgets
FastAPI·Async Python API
Supabase·Postgres · Auth · RLS
Google Gemini·LLM · Vision
LangGraph·Agent orchestration
ChromaDB·Vector retrieval
Render·Backend hosting
Vercel·Marketing site
RevenueCat·Subscriptions
AWS S3·Media storage
FCM · APNs·Push delivery
SendGrid·Lifecycle email

See the architecture in motion.

The fastest way to understand how it all fits together is to use it.