Избранное
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-бинарь — самая честная история деплоя: что тестируешь, то и едет в прод.