Нужен был дневник тренировок, которым пользуются прямо в Telegram: без регистрации, паролей и установки приложения.
За основу взят open-source трекер openGym — PWA со входом по passkeys и хранением данных в JSON-файлах. Его нужно было переделать под Telegram Mini App: другой вход, нормальная база, бот с уведомлениями и интерфейс, удобный в зале одной рукой.
• Вход через проверку подписи Telegram (initData, HMAC-SHA256) на каждом запросе — без сессий и экрана входа, профиль создаётся первым запросом.
• Перевёл хранение с JSON-файлов на PostgreSQL: схема из 11 таблиц, миграции, слой данных.
• Telegram-бот на grammY: команды /today и /weight, кнопка меню с Mini App, напоминания о тренировке по расписанию, сообщение о конце отдыха без дублей (FOR UPDATE SKIP LOCKED), запись веса одним сообщением.
• Переделал интерфейс: неоновая тема с проверенным контрастом, новый экран подхода (вес с прошлого раза, таймер отдыха, момент рекорда), онбординг, MainButton, BackButton и виброотклик Telegram.
• Убрал лишнее из исходного проекта: Capacitor, Web Push, passkeys, админку.
• Деплой: Docker Compose (Postgres + API с ботом + nginx), TLS Let's Encrypt, ежедневные бэкапы с проверкой восстановления.
• 46 тестов API на одноразовом Postgres.
Приложение работает в боте @open_fitness_bot (открывается кнопкой меню).
— План на неделю: пропущенный день переносится одним касанием.
— Экран подхода: вес с прошлого раза, таймер отдыха, вспышка при новом рекорде.
— 1324 упражнения с анимациями, графики веса и прогресса, карта нагрузки по мышцам.
— Бот напоминает о тренировке и о конце отдыха.
Логика тренировок, прогрессии и рекордов взята из openGym (AGPL-3.0); моя часть — перенос в Telegram, база, бот, новый интерфейс и деплой.