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 to MaterialApp.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.

Functions

main() → void Overview
App entry point. Boots Supabase, spawns DuTaToApp, and lazily starts Firebase + notification services in the background so the UI paints without waiting on native init.