Фитнес-клуб теряет клиентов, когда запись на занятия превращается в хаос: два человека одновременно видят одно свободное место, нажимают запись, и оба получают подтверждение, а реально приходит только один. Оставшиеся — в WhatsApp-группе с администратором. Мы решаем эту проблему на уровне архитектуры: серверная оптимистичная блокировка с мгновенным уведомлением через push и лист ожидания. Результат — пользователи не уходят, клуб загружен на 100%. Свяжитесь с нами — оценим ваш проект за один день.
Как решить проблему race condition при записи на занятие?
Главный экран — расписание на неделю с фильтрами по типу тренировки (йога, силовые, кардио, бассейн), тренеру и площадке. Каждое занятие показывает количество свободных мест и кнопку записи. Когда двое нажимают одновременно, сервер возвращает 409 Conflict для второго. Мобильный клиент перехватывает ошибку и предлагает добавиться в лист ожидания. Это стандартный паттерн оптимистичной блокировки: клиент верит, что успеет, а сервер разруливает.
Лист ожидания строится на очередях. При отмене записи первый в очереди получает push-уведомление с кнопкой подтверждения (deep link) и 15 минут на ответ. Не ответил — место передаётся следующему. Для доставки используем FCM/APNs с приоритетом high.
Что выбрать: Flutter или нативный стек для фитнес-приложения?
| Критерий | Flutter | Нативный (SwiftUI + Compose) |
|---|---|---|
| Кодовая база | Одна на iOS и Android | Две отдельные |
| Скорость разработки MVP | 4–6 недель | 6–10 недель |
| Интеграция HealthKit/Health Connect | Через пакеты (health) | Глубокая, без ограничений |
| Производительность анимаций | 60 FPS, но возможны лаги на сложных UI | 120 FPS |
| Команда | Меньше порог входа | Требуются iOS + Android разработчики |
Flutter сокращает время разработки в 2 раза по сравнению с нативом — одна кодовая база на обе платформы. Riverpod для управления состоянием, Dio для HTTP, Hive для локального кэша расписания. Если нужна глубокая интеграция с HealthKit и Apple Watch, выбираем нативный SwiftUI/Compose — это даёт полный доступ к датчикам без ограничений пакетов. Стоимость разработки MVP на Flutter — от 1,5 до 2,5 млн рублей, что на 40% дешевле нативного подхода.
Членство и абонементы
Типы абонементов: безлимитный на месяц, пакет посещений, разовое. В профиле — текущий абонемент, остаток, дата окончания. Автоматическое продление через In-App Purchases (StoreKit 2 / Billing 6) или внешний платёж (Stripe). IAP удобнее для пользователя, но комиссия 15–30%. Внешний платёж даёт полный контроль, но требует соблюдения правил App Store (с iOS 17.4 в ЕС разрешены внешние ссылки).
| Способ оплаты | Комиссия | Сложность реализации |
|---|---|---|
| In-App Purchase | 15–30% | Низкая |
| Внешний платёж (Stripe) | 2–3% | Высокая |
QR-код для входа генерируется как подписанный JWT с userId, membershipId, временем выпуска и сроком действия 30 секунд. Турникет верифицирует подпись офлайн – онлайн-связь не нужна.
Пример верификации JWT на стороне турникета (псевдокод)
function verifyQr(token): try: payload = jwt.verify(token, publicKey) if payload.exp < now(): return false return checkMembership(payload.userId, payload.membershipId) except: return false Трекинг прогресса и HealthKit
Журнал тренировок — список прошедших занятий с ручным вводом веса и параметров. Графики через fl_chart (Flutter) или Charts (натив). Интеграция с HealthKit: каждая тренировка записывается как HKWorkout, а данные Apple Watch (пульс, шаги) подтягиваются в профиль. По нашей статистике, 40% пользователей фитнес-приложений используют Apple Watch.
Тренер и онлайн-занятия
Карточка тренера с фото, специализацией, расписанием и рейтингом. Чат — через Stream Chat SDK или Sendbird (не Firebase RTDB для production). Онлайн-трансляции через Zoom SDK или Agora RTC — ссылка появляется за час до занятия.
Push-кампании
FCM/APNs для сегментированных уведомлений: «Завтра ваш любимый класс — осталось 3 места», «Абонемент заканчивается через 5 дней». Сегментация по истории посещений.
Процесс работы
- Анализ требований и прототипирование — 1–2 недели
- Дизайн и UX расписания — 1–2 недели
- Членство и абонементы — 1 неделя
- Запись и лист ожидания — 1–2 недели
- QR-вход — 1 неделя
- Трекинг и HealthKit — 2–3 недели
- Push и retention — 1 неделя
- Онлайн-занятия (опционально) — 2–3 недели
- Тестирование и публикация — 1–2 недели
Что входит в работу
- Исходный код приложения на выбранном стеке
- Доступ к репозиторию и CI/CD
- Документация по настройке и деплою
- Конфигурация In-App Purchases и push-уведомлений
- Обучение администраторов работе с панелью
- Поддержка 30 дней после публикации
Ориентиры по срокам: MVP (расписание, запись, профиль, оплата) — 4–6 недель. Полноценное приложение с QR-входом, трекингом, HealthKit, чатом и онлайн-занятиями — 2–4 месяца. Стоимость рассчитывается индивидуально. Получите консультацию — свяжитесь с нами, чтобы заказать разработку под ключ.







