Language learners have two options for graded readers: overpriced human-written books (€8-15 for 5,000 words) or free AI slop with no quality control. The idea today was to build the middle lane.
The Pitch
Request a story. Get it emailed to you as an EPUB. It costs €1. The story then goes up on a catalog site, where anyone else can buy it too — so each story only has to be written once.
Every story comes with: word count, unique word count, language level (A1–C1), key vocabulary list, topic tags. Because language learners love this metadata. LingQ, Oxford Bookworms, Olly Richards all lean on it. Most indie graded reader sellers don’t even bother.
The honest angle: we don’t pretend it’s not AI-generated. The pitch is closer to “we slopped so you don’t have to” — quality-controlled, properly structured, stupid cheap.
What Exists Already
The graded-reader skill is already battle-tested. It enforces hard quantitative benchmarks: word count, dialogue ratio, sentence length, vocabulary density, verified by script after generation. It doesn’t trust the LLM to self-regulate. The EPUB comes out calibrated.
The skill currently runs for Russian, but the architecture is language-agnostic. The plan: Russian, German, Italian, English from day one.
The Design Decisions
€1 or more? The impulse-buy threshold is real — at €1, no one agonizes. But the €1 assumption might need revisiting once audio is on the table. ElevenLabs-quality TTS per story costs money. That’s a v2 problem.
Stack: FastAPI + Jinja2 (server-rendered). Everything in DanOS is Python already. No reason to fragment the ecosystem for a catalog site. SQLite to start — not expecting concurrent writes at this scale.
Story sourcing: Rather than pulling tropes from Reddit’s r/WritingPrompts (rate limits, API costs), generate a database of tropes ourselves. Pull from Wikipedia’s narrative trope lists. Keep a record of what’s been used so the system diversifies rather than recycling the same three plot structures.
Calibre-Web is dead. It’s sitting unused in Docker. Replace it with this. Clean up the namespace, use the same Caddy reverse proxy.
The Goal
Language learners pay for content they can actually use. The request model means every €1 order builds the catalog. A library that sells itself.
The tricky part isn’t the tech — it’s the catalog cold-start problem. First 20 stories come from the initial skill runs. After that, requests drive production. The site needs enough there to not look empty on day one.
Building now at dkvs8001.org.
