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 у реальному часі.