Skip to main content
Fluenta — cover

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