Skip to content
Projects / A93-05

Läsa svenska

AI-written Swedish stories, checked by a linguistic validator, pitched at exactly the SFI course level you're on.

Part no.
A93-05
Status
live
Platform
Mobile · Web · API
Year
2026
Stack
PythonFastAPIClaude APIStanza NLPPostgresRedisExpo
1A→3DSFI course levels covered
0LLM say in whether a story is at level
58Commits in the first week
3Railway services: API, worker, cron
01 — The problem

Learners on SFI (Swedish for Immigrants) courses run out of reading that's at their level. Children's books are too childish and news is too hard. Asking ChatGPT for an "easy story" gives you whatever level it feels like.

02 — The case for it

An endless supply of reading at the right level, checked properly. Because a validator, not the model, decides whether text is on level, the app can make a promise teachers can trust. A tap-to-translate reader also tracks which words you've learned.

03 — Back of the napkin
Back of the napkinRough · not a forecast

Freemium for learners (≈ €5/mo), with school or municipality licences as the bigger prize.

  1. SFI learners in Sweden each year (rough)≈ 150,000
  2. ×Reachable and paying2%
  3. =Subscribers3,000
  4. ×Price€5/mo
  5. =Annual revenue≈ €180k
  6. ÷Each story is shared by every learner at that level
  7. =LLM cost per learner≈ cents
Running costs
Railway: API, worker, Redis, Postgres
≈ €50/mo
Nightly story generation (≈ 160 stories)
≈ €250/mo
Email login (Resend)
free tier
At 10× / 100×

The LLM bill grows with the number of stories, not the number of learners, because one validated story serves everyone at that level. At 100× users, the cost per learner falls.

Verdict

The most promising business here. A real, recurring, publicly funded audience, and costs that don’t grow with users.

04 — How it works
Diagram · Generate → validate → read
  1. 01Your levelSFI course 1A–3D, plus the words you’ve already learned.
  2. 02Claude draftsA cached course prompt, with structured JSON output through tool calls.
  3. 03ParseStanza lemmatises and tags every sentence.
  4. 04ValidateCoverage against the Kelly word list and a grammar ladder that builds level by level. Fail means regenerate.
  5. 05Read & learnTap a word for its meaning. Once you stop tapping it, it counts as learned.
06 — Engineering highlights
01

The LLM proposes

Model output is treated as a draft. A deterministic NLP validator makes the call on level, so quality doesn’t depend on prompt luck.

02

Grammar ladder

Grammar rules unlock course by course, so a 2B story can’t sneak in 3D grammar even when the vocabulary looks easy.

03

Production from day one

FastAPI, an arq worker on Redis, Postgres, a nightly cron and email-code login, running as three Railway services.