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
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
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.
The AI brain
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
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.
Cached schedule, offline workouts, on-device AI fallback.
TLS 1.3 only. JWT bearer per request, rotated on refresh.
Stateless workers. No long-lived per-user storage.
Postgres with row-level security: only your user_id reads your data.
Embeddings for retrieval — never your raw text in plaintext form to third parties.
One-tap delete account wipes Postgres, vectors, and stored media.
Engineering principles
If the AI does not return it, we do not invent it. Bugs surface immediately.
Five focused agents beat one giant prompt. Fewer hallucinations, better tools.
Your context is fetched fresh each turn. Models stay small; answers stay grounded.
Pre-cached plans and on-device generation keep training going on a plane.
Replies render as they are produced. Nothing waits for a full response to start.
Row-level security, signed URLs, full delete — not bolt-on toggles.
Built with
The fastest way to understand how it all fits together is to use it.