Fitofan
Спортивная платформа: веб, мобильные приложения и бэкенд за ними
Одна платформа для атлетов, тренеров, клубов и фанатов: веб-приложение на 11 языках, приложения для iOS и Android и единый бэкенд, за который я отвечаю от начала до конца.
- Роль
- Senior Full-Stack & Mobile Engineer
- Период
- 2024 – 2026


Контекст
Fitofan обслуживает атлетов, тренеров, родителей, клубы и лиги через веб-приложение на Next.js, приложения на Flutter для iOS и Android и бэкенд на NestJS. Я отвечаю за поставку по всему стеку: архитектура, API, данные, инфраструктура и релизы, а с 2026 года самостоятельно поддерживаю мобильное приложение.
Задача
Держать продукт цельным в трёх кодовых базах и 11 языках, добавляя живые спортивные данные, платежи, публикацию в соцсетях и AI-функции без замедления релизов.
Реализовано на всех уровнях стека
- Веб-приложение на Next.js 16 по Feature-Sliced Design: 140+ страниц, 11 локалей, около 10 000 ключей перевода с проверкой паритета в CI
- Бэкенд на NestJS с 90+ модулями, PostgreSQL и 290+ миграциями, Swagger и проверками состояния сервиса
- Событийная синхронизация через RabbitMQ с идемпотентными потребителями, dead-letter-очередью и корреляционными идентификаторами
- Кеширование в Redis с инвалидацией через декораторы; шлюзы Socket.IO для комментариев и живых сессий
- Живые расписания матчей, результаты и коэффициенты из Sportmonks и API-Football; публикация в Meta, TikTok, LinkedIn и YouTube
- Подписки Finix плюс верификаторы платежей для Stripe, Square, PayPal, LiqPay, Mercado Pago, GCash и Monopay
- Ассистент на OpenAI с вызовом инструментов, транскрипция Whisper и генерация изображений через Replicate
- Приложение на Flutter: BLoC, офлайн-кеш Hive, Socket.IO, пуш-уведомления, AdMob, iOS Live Activities, 12 локалей, 360+ тестов
- CI/CD: lint- и i18n-гейты, Jest, многоэтапный Docker, реестр контейнеров, деплой через SSH; веб на Vercel
- Общие пакеты регистрации и создания клуба, которые GymTeam переиспользует через инжектируемый контракт хоста
- AI и компьютерное зрение в той же экосистеме: детское приложение для оценки спортивной подготовки с on-device оценкой позы на Flutter и подписками в приложении, а также браузерный анализ техники тхэквондо на MediaPipe и TensorFlow.js
Инженерные акценты
- Идемпотентные потребители событий: каждое сообщение записывается до подтверждения, поэтому повторы и воспроизведения никогда не применяются дважды
- Архитектура, которую обеспечивает инструментарий: правила слоёв, замороженный lint-бейзлайн, который может только уменьшаться, проверки циклических зависимостей и паритет i18n на каждом pull request
- Нативные iOS Live Activities, управляемые из Flutter через мост method channel
- Один сценарий регистрации, упакованный за контрактом хоста и используемый в двух продуктах
Что это даёт
Функции выходят в веб, мобильные приложения и бэкенд одним изменением, а платформа обменивается данными клубов с GymTeam в реальном времени.