• Роботи
  • Компетенції
  • Інженерні рішення
  • Послуги
  • Вартість
  • Про мене
  • Контакти
Обговорити проєкт
  • Роботи
  • Компетенції
  • Інженерні рішення
  • Послуги
  • Вартість
  • Про мене
  • Контакти
Обговорити проєкт
Valerii Vvedenskyi

Кейси описують реальні продукти, над якими я працював; кожен факт на цьому сайті взято з них.

Розділи

  • Роботи
  • Компетенції
  • Інженерні рішення
  • Послуги
  • Вартість
  • Про мене
  • Контакти

Мови

  • English
  • Українська
  • Русский
  • Қазақша
  • Français
  • Deutsch
  • Español
  • Português

Контакт

valerii.vvedenskyi@gmail.com

Toronto, Canada

LinkedIn

© 2026 Valerii Vvedenskyi. Усі права захищено.

Політика конфіденційності

Спроєктовано й зібрано Валерієм Введенським на Next.js.

  • English
  • Українська
  • Русский
  • Қазақша
  • Français
  • Deutsch
  • Español
  • Português
  • English
  • Українська
  • Русский
  • Қазақша
  • Français
  • Deutsch
  • Español
  • Português
Усі роботи

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 чесними
  • Сценарії реєстрації та створення клубу походять із пакетів, спільних для обох продуктів

Що це дає

Кожен клуб отримує продукт, що відчувається зробленим саме для нього, а інженерія лишається однією кодовою базою та одним деплоєм.

Підтвердження

  • Вісім платіжних провайдерів плюс готівка за одним адаптером, із шифрованими обліковими даними та ідемпотентними вебхуками
  • Живий чекін через WebSockets і вхід за QR-кодом
  • Кожен маршрут клубу резолвиться й авторизується на сервері
  • Сайт

Стек

  • Next.js
  • NestJS
  • PostgreSQL
  • RabbitMQ
  • Socket.IO
  • Finix
  • Stripe
  • Docker

Наступний кейс

День змагань
Обговорити проєкт