Skip to main content

Build Status Coverage

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.

Documentation

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

Allure test report

Release files for echo-words 1.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for echo-words 1.11.0
File Size Uploaded
echo_words-1.11.0.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for echo-words 1.11.0
File Interpreter ABI Platform
echo_words-1.11.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.8 MB

Release files / echo_words-1.11.0.tar.gz

Download URL echo_words-1.11.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
fc04e5158642e40efa83683e556a5b3fc5457695a2eccf4cbe328a27b4ff3503
BLAKE2b-256 checksum
How to use checksums
f1bc1f752ead82a77275fd772e47e33f36ce10a02877651ce8abcb1f09b27d4e
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.11.0-py3-none-any.whl

Download URL echo_words-1.11.0-py3-none-any.whl
Size 92.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6b2de63b1a667ccee3112a4086f8f46c4b837dbddbf356f337660649177b70cb
BLAKE2b-256 checksum
How to use checksums
be06a76f0cc54adffbb2a1b0b954668ac2573a2525e40c0d5f95ed322c678c2b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.12.2

2 release files

1.12.1

2 release files

1.12.0

2 release files

1.11.2

2 release files

1.11.1

2 release files

This release

1.11.0 This release

2 release files

1.10.1

2 release files

1.10.0

2 release files

1.9.0

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.4

2 release files

1.7.3

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page