Featured work
Fluenta fluenta.club
AI-assisted English-learning app — a single Go binary with embedded web UI, local Whisper and Claude Haiku grading. Live at fluenta.club.
- Go
- PostgreSQL 18
- Whisper (local STT)
- Claude Haiku
- SM-2 SRS
- Docker Swarm
- Traefik
- Hetzner
The problem
Most language apps are heavy SaaS stacks that stop working the moment the network — or the subscription — goes away. I wanted the opposite: the entire A1→C1/C2 course in one binary you can run offline, with AI as an optional enhancement rather than a hard dependency.
Architecture
Fluenta ships as a single self-contained Go binary with an embedded web UI over PostgreSQL 18. No PHP, no Node runtime, no separate frontend server — the binary is the app.
- Offline core (no key needed): the full Roadmap catalog (6 levels, 60 units), all materials (video, textbook/workbook audio, pronunciation, tests, PDFs), interactive fill-in / multiple-choice exercises, and SM-2 spaced-repetition flashcards for vocabulary and irregular verbs.
- Speaking practice: the browser records your voice → local Whisper transcribes it on-device → Claude Haiku grades the answer with a score, a breakdown, and a model answer.
- Writing practice: text in → Claude Haiku returns a grammar/vocabulary score and a corrected version.
- Optional key: an
ANTHROPIC_API_KEYunlocks the AI grading and auto-generates B1+/B2+/C1 exercises from textbook text. Without it, everything else still works.
Delivery
GitLab CI/CD builds the image and pushes it to a private registry; Docker Swarm behind Traefik on Hetzner runs it, and docker stack deploy performs a health-checked rolling update — the first production deploy came up HTTP 200 with the landing live at fluenta.club.
Highlights
- One binary + PostgreSQL — trivially deployable, trivially backed up.
- On-device speech recognition (Whisper) keeps voice data local; the cloud only sees the transcript for grading.
- Offline-first: the course is fully usable with zero API cost; Claude is the cherry, not the cake.
Lessons
- Making AI optional forced a genuinely useful offline product underneath — which is a better product.
- A single Go binary is the most honest deployment story there is: what you test is exactly what ships.