AI coach · PWA
Zitto e Corri
Personal project · 2026 – today
Training apps are good at recording runs and bad at changing the plan when life gets in the way. Zitto e Corri puts activity tracking, a rolling training plan and a conversational coach in one installable web app, with the model working inside clear boundaries.
The app
Screens from the installed app (PWA) on a phone, with the author's own training data.

Home: the next session with its intensity profile, the week at a glance and the coach. 
A rolling plan towards the goal race, with training phases and what was done. 
The coach answers with the athlete's real data and updates the plan. Every reply shows tokens and cost. 
AI analysis of a run against the plan, with heart-rate zones and the cost of the call. 
Readiness from recovery and sleep, synced from the watch.
- LLM providers, routed per task
- 2LLM providers, routed per task
- automated tests
- 100+automated tests
- of plan synced to the watch
- 7 daysof plan synced to the watch
- Training data
- Context contract
- LLM
- Zod validation
- Proposal
- Athlete approves
AI as part of the architecture
Structured output only
Every model call returns JSON against a schema and is validated with Zod before anything reaches the database. Free text is for the chat bubble, never for state.
Human in the loop
The coach proposes new, moved or removed sessions and the athlete approves them. Actions on recorded runs, like excluding an aborted session, are reversible.
A typed context contract
Athlete profile, training state, current plan, memories and recent evaluations are assembled into named sections, so each prompt carries what its task needs.
Model routing and cost tracking
Chat and run analysis can use different models across Gemini and OpenRouter. Tokens and cost are recorded per call and summed per month.
Data and integrations
- FIT and GPX imports with pace-coloured maps, splits, heart rate and training load.
- Two-way Intervals.icu sync: runs, sleep and HRV come in; the next seven days of the plan go out as structured workouts on Amazfit watches.
- Heat-adjusted target paces from the Open-Meteo forecast, and an import API secured by a personal key.
Engineering
Supabase Postgres with row-level security keeps each athlete's data separate. Scheduled jobs on Vercel run the daily and weekly syncs, web push handles reminders, and the core logic is covered by more than a hundred tests.
Stack
Next.jsTypeScriptSupabasePostgreSQLGeminiOpenRouterZodMapLibreWeb PushVercel Cron