LingQ's engine is a reader: bring in a text, split it into words, show a meaning when you click one, and keep every word's status from new to known so the page stays colour-coded. An agent builds that for one language in a sitting or two. The weekend goes on what turns it into a product: splitting Chinese and Japanese, a dictionary or translation source for each language, audio that follows the text, and statistics you can trust over months. What a prompt can't produce is the library of 50,000-plus lessons, the tutors and the community, and free readers such as Lute already cover the reading loop.
Before you buildLingQ Free works for a trial run, but 20 saved words and 5 imports go fast. If you only want the reading loop, Lute and LinguaCafe are free and already built.
Build me a local reader for learning one language from texts, to replace LingQ. Requirements: - Node.js 22 + TypeScript: a Fastify API and a React front end built with Vite. `npm start` serves http://127.0.0.1:4820 only. - Storage: better-sqlite3 in ./data/reader.db: lessons (title, language, text, optional audio file path, source URL), terms (lowercased form, translation, notes, status new / 1-4 / known / ignored, created and updated dates) and a log of every status change that the statistics page reads. - Import: paste text, upload .txt or .epub (`epub2`), or give a URL (`@mozilla/readability` with `jsdom`). Long texts are split into pages of about 1,500 characters. An audio file can be attached to a lesson and plays in an HTML5 player above the text. - Tokenizing: words come from `Intl.Segmenter` set to the lesson language, so Japanese and Chinese split too. Dragging across words saves a phrase of up to four words as one term. - Reader: every word is coloured by its status and known words stay plain. Clicking a word opens a side panel with a translation, example sentences from my own lessons and buttons for each status; keys 1 to 4, K and I set the status while a word is selected. - Translation: word and sentence meanings from an OpenAI-compatible endpoint (LLM_BASE_URL and LLM_API_KEY in .env), cached per word and sentence so each is paid for once. Links to Wiktionary open in a new tab. - Statistics: words read per day, new terms per day and a known-word count over time. - Export: all terms as CSV and as an Anki-importable tab-separated file. - Single user. No accounts, no telemetry, local-first. Outbound calls: the translation endpoint and the URLs I import; the README must say that the clicked word and its sentence are sent. - Out of scope: a lesson library, tutors and points, text-to-speech voices, mobile apps, timestamp-aligned audio, flashcard review. - README: setup, the .env keys, where the data lives, and how to import an Export All LingQs CSV.
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 LingQ Premium.
Add a LingQ importer to the reader in this folder. Requirements: - A command `reader import-lingq <file>` that reads the CSV from Vocabulary > More Actions > Export All LingQs. Read the header row first and print the column mapping; do not assume names. - Map LingQ's statuses onto the reader's own (new, 1-4, known) with a table I can edit at the top of the file, and keep the saved translation, the example sentence and the date when present. - `--dry-run` is the default and prints counts of new, updated and skipped terms; `--apply` writes. Running it twice must not create duplicates. - Update the README with the export steps.
Add a review mode to the reader in this folder. Requirements: - A Review page that shows one term at a time: the word first, then the translation and the sentence it came from, with buttons Again, Hard, Good and Easy. - Schedule with the FSRS algorithm (`ts-fsrs`); store due date, stability and difficulty per term. - A daily cap on new cards and on reviews in .env, and a counter on the home page of cards due today. - Terms at status known leave the queue; Again on a known term moves it back to status 4. - Update the README.
Add timestamped audio to the reader in this folder. Requirements: - A command `reader align <lesson-id>` that runs `faster-whisper` locally on the lesson's audio with word timestamps and matches them to the lesson text sentence by sentence. - Store sentence start and end times in SQLite; while the audio plays, highlight the current sentence and keep it in view. Clicking a sentence seeks to it. - Where alignment confidence is low, mark the sentence and let me nudge its start time by hand. - Update the README with the model size to pick and what the first run downloads.
Add a transcript importer to the reader in this folder. Requirements: - Import by URL: a YouTube link through `yt-dlp` (subtitles in the lesson language, manual ones preferred over automatic), and a podcast RSS episode with its audio attached to the lesson. - If no subtitles exist, offer to transcribe the audio locally with `faster-whisper`. - Clean the text: merge subtitle fragments into sentences and drop timing tags and music cues. - Keep the source URL on the lesson and show it as a link. - Update the README, including a note to import only content you may keep.
The pitch is a steady supply of material you can follow, with your vocabulary tracked against it. The free plan stops at 20 saved words, so anyone reading daily hits the wall in an afternoon, and years of word statuses become a reason to stay.
Estimate · Runs on your machine. The only running cost is translation: LLM tokens for each new word and sentence, cached after the first look-up, or nothing with LibreTranslate. The build is token usage on your agent plan.
Checked 2026-10-19 against LingQ Premium's docs: 1, 2, 3, 4, 5, 6
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 20 saved words and phrases, 5 lessons created from imported content, 1 audio playlist; no flashcard quizzes, statistics, offline access or full-sentence translations. |
| Premium | $14.99 | $10 | Unlimited saved words, imports and playlists, flashcard quizzes, full-sentence translations, auto-generated audio for imported lessons, statistics, language challenges and offline access. |
| Premium Plus | $29.99 | $22.50 | Everything in Premium plus 6x audio transcription, AI voices, an advanced Lynx chat and AI-simplified lessons. |
Free keeps 20 saved words, 5 imported lessons and 1 audio playlist, with access to the library of audio and transcripts.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: The library of 50,000-plus lessons with audio and transcripts in 40-plus languages, Tutors and points for writing correction and live conversation.
About $14.99 a month on the Premium plan, $179.88 a year (checked 2026-10-19).
The library of 50,000-plus lessons with audio and transcripts in 40-plus languages; Tutors and points for writing correction and live conversation; Language challenges and the community around them; The mobile apps with offline access; Word splitting, dictionaries and translations already tuned for each language. If any of those matter to you, keep paying.
Yes: Lute v3 (open source), LinguaCafe (open source), Learning with Texts (open source).