Overview topic
Overview
Dutato is an active learning app that prevents cognitive debt by using Claude as a Socratic AI tutor. Instead of giving direct answers, the AI enforces reflection, asks probing questions, and gates advanced features by demonstrated mastery level (0–5).
This API reference covers the Flutter client. Backend code (Supabase Edge Functions, migrations) lives in supabase/ and is not documented here.
Pillars
- Cognitive debt prevention — no direct answers until the learner has engaged with the material
- Mastery levels (0–5) — feature gating driven by demonstrated knowledge
- Kolb's learning cycle — every session tracks CE, RO, AC, AE phases
- Spaced repetition — SM-2 + FSRS for review scheduling (
core/utils/fsrs.dart,core/utils/spaced_repetition.dart)
Where to start
| If you want to… | Start here |
|---|---|
| See the layer diagram and dependency rules | Architecture |
| Find how the client talks to Supabase / Claude / OpenAI | Data Sources |
| Understand Riverpod wiring and provider layout | Providers |
| Browse screens, routes, and shell widgets | Screens & Widgets |
Entry points
lib/main.dart— bootstraps Firebase, Supabase, eager Riverpod providers, then hands off toMaterialApp.router.lib/config/routes.dart— GoRouter route table. Shell routes wrap the authenticated tree.lib/config/env_config.dart— runtime environment (prod,staging), Supabase URL/anon key, Claude keys read from--dart-define.
The source of truth for layers, codegen, and web vs native behavior is the next page.