Разработка мобильного приложения для фитнес-клуба
Фитнес-приложение клуба держится на трёх механиках: расписание занятий, запись и управление членством. Если хоть одна работает нестабильно — пользователи возвращаются к 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 — у него проблемы с шардированием при большом объёме истории. Собственный 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 месяца. Стоимость рассчитывается после анализа требований.







