Skip to main content
Fluenta — cover

Избранное

Fluenta fluenta.club

AI-приложение для изучения английского — один Go-бинарь со встроенным веб-UI, локальный Whisper и оценка через Claude Haiku. Вживую на fluenta.club.

  • Go
  • PostgreSQL 18
  • Whisper (local STT)
  • Claude Haiku
  • SM-2 SRS
  • Docker Swarm
  • Traefik
  • Hetzner

Проблема

Большинство приложений для языков — тяжёлые SaaS-стеки, которые перестают работать, как только пропадает сеть или подписка. Я хотел обратного: весь курс A1→C1/C2 в одном бинаре, который запускается офлайн, с ИИ как опциональным улучшением, а не жёсткой зависимостью.

Архитектура

Fluenta поставляется как один самодостаточный Go-бинарь со встроенным веб-UI поверх PostgreSQL 18. Ни PHP, ни Node-рантайма, ни отдельного фронт-сервера — бинарь и есть приложение.

  • Офлайн-ядро (без ключа): полный каталог Roadmap (6 уровней, 60 юнитов), все материалы (видео, аудио учебника/тетради, произношение, тесты, PDF), интерактивные упражнения (вставь слово / выбери вариант) и SM-2 карточки с интервальным повторением для слов и неправильных глаголов.
  • Говорение: браузер записывает голос → локальный Whisper распознаёт на устройстве → Claude Haiku оценивает ответ с баллом, разбором и образцом.
  • Письмо: текст на вход → Claude Haiku возвращает балл по грамматике/лексике и исправленный вариант.
  • Опциональный ключ: ANTHROPIC_API_KEY включает AI-оценку и авто-генерацию упражнений B1+/B2+/C1 из текста учебника. Без него всё остальное работает.

Доставка

GitLab CI/CD собирает образ и пушит в приватный registry; Docker Swarm за Traefik на Hetzner его крутит, а docker stack deploy делает health-checked rolling update — первый прод-деплой поднялся HTTP 200 с живым лендингом на fluenta.club.

Highlights

  • Один бинарь + PostgreSQL — тривиально деплоится, тривиально бэкапится.
  • Распознавание речи на устройстве (Whisper) держит голос локально; в облако уходит только транскрипт для оценки.
  • Offline-first: курс полностью юзабелен без затрат на API; Claude — вишенка, а не торт.

Уроки

  • Сделав ИИ опциональным, я был вынужден построить реально полезный офлайн-продукт под ним — а это продукт лучше.
  • Один Go-бинарь — самая честная история деплоя: что тестируешь, то и едет в прод.