The shell of Duolingo is simple: short exercises, a streak counter and a hearts-style limit, and an agent builds that in a sitting. What you cannot build is the course behind it, written and tested by Duolingo's own team, with recorded audio and speech scoring. A spaced-repetition trainer that quizzes you on real sentences from Tatoeba, read aloud by the browser's built-in voice, is a fair substitute for someone past the beginner stage. It will not take a total beginner from zero.
Before you buildDuolingo's free tier gives the full course with ads. Try it, and Anki with a shared deck, before paying or building anything.
Build me a personal spaced-repetition sentence trainer to replace the practice side of Super Duolingo. Requirements: - Python 3.12 + FastAPI serving plain HTML pages on http://127.0.0.1:4950, with a little vanilla JS and no front-end framework. `python -m trainer` starts it. - Content: TATOEBA_DIR in .env points at the sentence and link exports downloaded from tatoeba.org/downloads for one language pair. `python -m trainer import` keeps sentences that have a translation and 4 to 12 words, ranks them by word frequency so common words come first, and loads them into SQLite. - Storage: sqlite3 in ./data/trainer.db: sentences, one card per sentence with its scheduling state (the `fsrs` package), every answer with a timestamp, and a daily log used for the streak. - Daily session: 20 cards, new ones capped at 8 (both in settings). Each card asks one of three things: type the translation, pick it from four options, or hear the sentence (browser `speechSynthesis`) and type what was said. - Checking and rating: ignore case and punctuation (accents optional, a setting); an answer one letter off is "close". Right, close and wrong map to FSRS Good, Hard and Again; always show the right sentence with the differences marked and the next review date; quitting keeps progress. - Streak: a day counts at 20 cards. Show the streak, a 30-day grid and the cards due tomorrow; one missed day per week is forgiven. - Optional: with LLM_API_KEY and an OpenAI-compatible URL in .env, a "why was I wrong?" button explains one answer. Off by default. - Single user. No accounts, no telemetry, local-first; the only outbound call is the LLM endpoint if set. - Out of scope: a beginner curriculum, speech recognition, leagues, friends, mobile apps. - README: where to download the Tatoeba files, their licence (credit the contributors), and a plain warning that this suits people who already know the basics, not total beginners.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Duolingo Super.
Extend the sentence trainer in this folder. Requirements: - Add a `tts` setting with two choices: `browser` (the current speechSynthesis) and `piper`, which generates a WAV per sentence with the Piper command-line voice you name in .env. - Cache each WAV in ./data/audio/<sentence id>.wav the first time it is needed and serve it with a Range-capable route. - A `python -m trainer prefetch` command pre-generates audio for the next 200 due cards. - Update the README with where to download a Piper voice and how much disk the cache uses per thousand sentences.
Add a weak-words mode to the sentence trainer in this folder. Requirements: - Split each answer into words and keep a per-word miss count in SQLite. - A "Weak words" page lists the 30 words with the most misses in the last 30 days and the sentences they appear in. - A 10-card extra session built from sentences that contain those words, not counted toward the streak. - Show a word's miss history as a small bar chart drawn with plain SVG. - Update the README.
Add a word-list importer to the sentence trainer in this folder. Requirements: - `python -m trainer import-words <file.csv>` reads one word per row (an optional second column for notes). - For each word, find the 3 shortest Tatoeba sentences that contain it and add them as new cards, tagged with the list name. - Print how many words found no sentence, and write them to ./data/no-match.txt. - A setting limits new cards to a chosen list so I can study one list at a time. - Update the README with the CSV format.
Super is usually bought to remove friction from a habit that already works: no ads between lessons and no cap on mistakes. The pull is the streak, the league and a course that decides what to do each day. A home-built trainer is easy to stop opening.
Estimate · Runs locally for free. The optional explanations cost a fraction of a cent each through an API. The build session is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | Full courses, ads between lessons and a cap on how many mistakes you can make. |
| Super | $12.99 | $7 | No ads, no mistake limit, practice built from your mistakes and the other Super perks. |
| Super Family | — | $10 | Super for the plan manager and up to five other people. |
| Duolingo Max | custom | — | A higher tier with AI conversation and answer-explanation features. |
The full course path is free with ads and a limit on mistakes; Super removes both.
Not really. Super is usually bought to remove friction from a habit that already works: no ads between lessons and no cap on mistakes. The pull is the streak, the league and a course that decides what to do each day. A home-built trainer is easy to stop opening. The prompt on this page builds the closest honest substitute.
About $12.99 a month on the Super plan, $155.88 a year (checked 2026-10-19).
A structured course that tells you what to learn next, from zero; Native-speaker audio and pronunciation checks; Leagues, friend streaks and the social pressure that keeps people opening the app; The other courses and modes inside the app, such as math, music and chess; Mobile apps with reminders and home-screen widgets. If any of those matter to you, keep paying.
Yes: Anki (open source), Tatoeba (open source), Language Transfer (free).