GymTeam
Управління клубами: одна платформа, багато клубів
Сторона персоналу в екосистемі Fitofan: спортивні клуби ведуть учасників, заняття, чекін, прогрес і платежі, кожен клуб — у власному приватному просторі.
- Роль
- Senior Full-Stack Engineer
- Період
- 2025 – 2026


Контекст
GymTeam — це робоче місце власників клубів, менеджерів і тренерів; атлети та батьки користуються Fitofan, який також їх автентифікує. Я виокремив його з кодової бази Fitofan в окремий продукт і зробив більшу його частину.
Виклик
Обслуговувати багато незалежних клубів з одного застосунку зі строгою ізоляцією даних, приймати платежі на кожному ринку, де працюють клуби, і тримати дані клубів узгодженими з платформою атлетів у реальному часі.
Реалізовано на всіх рівнях стека
- Адмінка на Next.js 16 за Feature-Sliced Design: 80+ сторінок, 11 локалей
- Бекенд на NestJS: модуль на кожну сутність із use case'ами, репозиторіями та валідованими DTO; 95 міграцій
- Ізоляція тенантів: guard резолвить кожен клуб за id або slug і перевіряє членство до запуску будь-якого обробника
- Учасники, запрошення та пробні заняття, тижневі розклади з листами очікування, живий чекін, відвідуваність, навчальна програма та рівні поясів, відмови від відповідальності, домашні завдання, оцінювання
- Платежі: Finix, Stripe, PayPal, Square, Monopay, LiqPay, GCash і Mercado Pago плюс готівка та борги, щоденний планувальник білінгу, зберігання облікових даних з AES-256-GCM
- Контракт RabbitMQ, спільний із Fitofan: 29 ключів маршрутизації, типізований конверт із кореляційними ідентифікаторами, задокументована топологія
- Вхід за QR через WebSockets, шлюз сесій Socket.IO, S3-сумісне сховище медіа
- Аналітика доходів, відвідуваності та тренерів з експортом у CSV і PDF
- Той самий конвеєр доставки, що й у Fitofan: гейт перевірки типів і Jest, Docker-образ, деплой через SSH
Інженерні акценти
- Межі тенанта забезпечуються на сервері, а не довіряються клієнту
- Вебхуки ідемпотентні за провайдером та id події; платіжні наміри несуть ключі ідемпотентності
- Власне правило ESLint із власними тестами тримає шари Feature-Sliced чесними
- Сценарії реєстрації та створення клубу походять із пакетів, спільних для обох продуктів
Що це дає
Кожен клуб отримує продукт, що відчувається зробленим саме для нього, а інженерія лишається однією кодовою базою та одним деплоєм.