- 01Telegram / Web
- 02FastAPI
- 03RQ + Redis
- 04GNU Backgammon CLI
- 05Разбор и экспорт
3
процесса на двух серверах
7
платных услуг
2
интерфейса: Telegram и веб
От бота, который отправлял матч-файлы, до web-продукта для анализа партий в нарды и преподавания.
С чего начали
Начали с небольшого Telegram-бота для отправки матч-файлов. По мере работы появлялись новые задачи, и я развивал систему вместе с продуктом.
Что требовалось
У GNU Backgammon не было подходящего API для нужного сценария. Анализ был доступен через CLI, а пользователям требовались понятные результаты в web-интерфейсе.
Что я сделал
- Разработал API-прослойку вокруг CLI GNU Backgammon и обработку его консольного вывода
- Добавил визуализации, полностью редактируемый лендинг и систему статей
- Три процесса: бот на aiogram, FastAPI с Mini Apps и веб-кабинетом, RQ-воркер анализа на отдельной машине
- Два сервера в приватной сети Tailscale: Redis и PostgreSQL наружу не смотрят, воркер ходит к ним по внутреннему интерфейсу
- Очередь разбора: файл матча в S3 → RQ → gnubg под распределённым локом в Redis → результат обратно в S3; пользователю показывается позиция в очереди
- Воркер не обращается к Telegram вообще - только пишет статус в Redis. Уведомления шлёт процесс бота, чтобы анализ не зависел от доступности Telegram API и прокси
- Две аудитории одним кодом: Telegram-пользователи и веб-аккаунты сведены через "теневого пользователя", поэтому выдача разборов и карточек не раздваивается
- Семь платных услуг с балансами из промокодов и пакетов; остаток проверяется в middleware на уровне роутеров
- Админка на Flask-AppBuilder: пользователи, промокоды, расписания, пул Telegram-прокси с автоотключением мёртвых и алертом
- Веб-сервисы: анализ матчей и манигеймов, пошаговый плеер, разбор ошибок в четырёх режимах, конструктор позиции, счёт пипсов, выгрузка в PDF и Excel
Как развивался проект
Бот стал частью закрытого web-продукта, ориентированного прежде всего на преподавание. В одной системе появились анализ, визуализации, материалы и интерфейсы для работы с партиями.
Что получилось
Пользователь загружает матч и получает разбор ошибок, статистику и экспорт. Инструмент без готового API встроен в продукт через собственную прослойку, очередь и обработку результатов.
Что показывает этот кейс
Нестандартная интеграция CLI, проектирование backend и постепенное развитие продукта из одной небольшой функции.