How it works
Paste
Any text — article, book, lyrics, conversation, legal document
Parse
Sentences split into learnable objects: vocabulary, conjugation, grammar, idiom, nuance
Learn
Per-word micro-lessons with morphological analysis and grammatical context
Review
FSRS scheduling surfaces the right words at the right moment
Progress
i+1 recommendations find sentences just beyond your current level
Languages
Full morphological analysis — full · Rich morphology via Stanza — rich · Vocabulary / dictionary mode — standard
Spanishfull
Frenchfull
Germanfull
Russianfull
Japanesefull
Portuguesefull
Italianfull
Englishfull
Finnishrich
Latinmorph
Koine Greekmorph
Koreanmorph
Hindimorph
Turkishmorph
Arabicvocab · RTL
Hebrewvocab · RTL
Mandarinvocab · CJK
API
Self-hosted FastAPI backend. Parse text, retrieve lessons, submit reviews, get recommendations.
POST /ingest { "text": "Hola. Yo hablo español.", "language": "es", "content_type": "article" } → sentences with learnable objects (vocabulary, conjugation, grammar, idiom, nuance) → deterministic UUID per object: same word always same ID → source_document_id for reading-progression tracking POST /review { "object_id": "...", "quality": 3 } → next_interval_days (FSRS scheduling) GET /recommend?language=es → sentences at i+1 difficulty from your parse history
Self-host in 3 commands
cp .env.example .env make build make up # API on :8000 · frontend: python -m http.server 8080 -d frontend
Docs
- ARCHITECTURE.md — request flows, plugin system, FSRS, persistence, difficulty scoring
- ROADMAP.md — what is done and what is next
- PLUGIN_AUTHOR_GUIDE.md — write a language plugin
- CONTRIBUTING.md — setup, coding standards, tests
- VISION_ALIGNMENT.md — vision, current state, design principles
- DEPLOYMENT.md — production deployment guide