echo-words
From a word you meet to a word you remember.
Understand words and expressions in context, hear their pronunciation, and send audio-backed flashcards straight to AnkiWeb — ready to sync into the Anki apps you already use.
echo-words explains; Anki makes you remember.
| A word, a phrase, a sentence |
Analysis, audio, card in Anki |
A sentence, translated and explained |
- Understand the word. Explore meanings, register, collocations, and translated examples. Choose the sense you want to learn.
- Learn from a sentence. Get a translation and an explanation of the difficult parts, then tap a word or expression to explore it.
- Keep it in Anki. Each selected sense becomes four cards covering recognition and production, with and without context, in its source-language deck.
Under the hood
Getting a complete answer from a changing model pool. Free LLM providers vary in availability, speed, and instruction-following. Through llmbroker, echo-words races two models and selects the first complete, usable answer. Streaming lets the reader start earlier; recovery preserves an existing explanation if card creation fails.
If your application needs a pool of free LLM providers with automatic failover and streaming, llmbroker is available as a standalone Python library.
Checking what the cards actually teach. Valid JSON can still contain the wrong meaning, an invented origin, or a word from the wrong language. Model-facing changes go through real-model benchmarks and a separate agent's review of the concrete answers. The evaluation records document both findings and remaining limitations.
Keeping the backend operational in less than 1G. FastAPI serves the Vue PWA and maintains Anki through its headless Python library, syncing directly with AnkiWeb. There is no separate application database or running Anki desktop instance. Access to the web app is restricted to a Tailscale network.
Development process
In this project, I experimented with a staged AI development workflow: Fable for design, sol for the initial implementation with iterative reviews automatically coordinated by Astra, and Opus for subsequent fixes, coordinating its own review cycles.
The continuity between those stages lives in the repository: a functional specification, decision records, and working plans. Agent instructions define the verification gates, including browser tests and real-model evaluation for changes to prompts or answer handling.
Contributing
uv sync
npm --prefix webapp ci
uv run playwright install chromium webkit
uv run inv dev # http://127.0.0.1:8080
uv run inv pre # lint, format, type-check, file hygiene
uv run inv test # Python + frontend suites
See Development and Deploy to Oracle Cloud in the docs.
Release files for echo-words 1.12.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| echo_words-1.12.2.tar.gz | 1.8 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| echo_words-1.12.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / echo_words-1.12.2.tar.gz
| Download URL | echo_words-1.12.2.tar.gz |
|---|---|
| Size | 1.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ee4467c0de14da593289f7f0b6c228bfc280e2e8406c1154141211e91303aced
|
|
BLAKE2b-256 checksum How to use checksums |
0ae2f0c220f6cef4d45b0dc533eafd64becb60e418e3a252006d55675b3b9b62
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / echo_words-1.12.2-py3-none-any.whl
| Download URL | echo_words-1.12.2-py3-none-any.whl |
|---|---|
| Size | 96.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
668b446162483f20a873fe991aeade969c34f94bdc2b56a037161b6b6c1de3d2
|
|
BLAKE2b-256 checksum How to use checksums |
ffcb96382fae53ccc2005d05f3dde3cfa914d284e21da77fd5d8b7e5bbd18a93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|