Розробка мобільної програми для фітнес-клубу
Фітнес-програма клубу тримається на трьох механіках: розписання занять, запис та управління членством. Якщо хоч одна працює нестабільно—користувачі повертаються до WhatsApp-групи та Excel-таблиць на ресепшені.
Розписання та запис на заняття
Головний екран—розписання на тиждень вперед з фільтрами за типом тренування (йога, силові, кардіо, басейн), тренером і площадкою. На кожному занятті—кількість вільних місць та кнопка запису.
Обмежені місця створюють ту ж race condition, що й в booking-додатках: двоє бачать «1 місце вільно» й натискають запис. На сервері вирішується оптимістичним блокуванням. Мобільний клієнт при 409 показує «Місць нема, ви додані в лист очікування?»
Лист очікування—важлива функція. Хтось скасував запис → перший в черзі отримує push «Місце освободилося» з кнопкою підтвердження (deep link). Час на підтвердження—15 хвилин, потім переходить до наступного.
Членство та абонементи
Типи абонементів: безліміт на місяць, пакет X відвідувань, одне відвідування. У кожного—термін дії та ліміт візитів. У профілі користувача: поточний абонемент, залишок відвідувань, дата закінчення.
Автоматичне продовження підписки—через In-App Purchases (App Store/Google Play) або зовнішню оплату. IAP зручні для користувача, але Apple бере 15–30% комісії. Зовнішня оплата (Stripe, PayPal)—повний контроль над ціноутворенням, але складніша реалізація та потрібно дотримуватись правил App Store (з iOS 17.4 в ЄС дозволені зовнішні платіжні посилання, в інших регіонах—обмеження).
QR-код для входу в клуб—у профілі користувача. Генеруємо підписаний JWT з userId, membershipId, iat, exp (термін 30 секунд). Турнікет/ресепшен сканує, верифікує підпис та термін—не потрібна онлайн-зв'язок з сервером на кожне сканування.
Трекінг прогресу
Журнал тренувань: список минулих занять з датою, тренером, типом. Ручний ввід: вага тіла, параметри (якщо клуб веде антропометрію). Графіки динаміки—Charts (iOS, Swift Package) / MPAndroidChart (Android) / fl_chart (Flutter).
Інтеграція з HealthKit (iOS) та Health Connect (Android)—синхронізація тренувань: заняття в програмі записується як HKWorkout / ExerciseSessionRecord. Кроки, пульс з Apple Watch—додаткові дані в профілі.
Тренер: профіль та спілкування
Карточка тренера: фото, спеціалізація, розписання, рейтинг, відгуки. Записатися до конкретного тренера—фільтр розписання за ім'ям тренера.
Чат з тренером—якщо клуб продає персональні тренування. Push на нове повідомлення. WebSocket для real-time. Важливо: не Firebase Realtime Database для збереження повідомлень у production—у нього проблеми з sharding'ом при великому обсязі історії. Власний chat API або спеціалізоване рішення (Stream Chat SDK, Sendbird).
Онлайн-заняття
Опція для гібридних клубів. Інтеграція Zoom SDK (zoom-video-sdk для iOS/Android) або Agora (Agora RTC SDK) для трансляції групових тренувань. Посилання на заняття—на карточці розписання, за годину до початку активується кнопка «Приєднатися».
Push-кампанії та retention
FCM/APNs для персоналізованих сповіщень: «Завтра ваш улюблений клас йоги о 10:00—залишилось 3 місця», «Абонемент закінчується через 5 днів». Сегментація за типом тренувань з історії відвідувань.
Стек
Flutter + Riverpod—оптимально для фітнес-програми клубу: одна кодова база, багата екосистема пакетів для Charts, HealthKit/Health Connect, push. Dio для HTTP, Hive для локального кешу розписання. Нативний SwiftUI/Compose—якщо інтеграція HealthKit/Health Connect критично важлива й потребує глибокого доступу до даних.
Процес
Дизайн розписання та UX → членство та абонементи → запис і лист очікування → QR-вхід → трекінг прогресу → push та retention → онлайн-заняття (якщо в scope) → тестування → публікація.
Орієнтири за часом
MVP (розписання, запис, базовий профіль, оплата абонемента): 4–6 тижнів. Повнофункціональна програма з QR-входом, трекингом, HealthKit, чатом з тренером та онлайн-заняттями: 2–4 місяці. Вартість розраховується після аналізу вимог.







