К содержанию
Работа

FitPlay (Instinct Fitness) — персонализированные тренировки и питание

FitPlay — цифровой fitness-сервис, который сам собирал пользователю персональную программу тренировок и вёл её вместе с ежедневным планом питания. Человек проходил анкету — пол, рост, вес, цель, ограничения — и получал не каталог видео, а последовательность занятий с календарём, рационом и отметками выполнения. Продукт начинался под брендом Instinct Fitness и позже выходил как FitPlay: это последовательные версии одного сервиса с общим backend-контуром и мобильным сценарием. Персонализация здесь была не работой тренера в личной переписке, а воспроизводимым применением экспертных правил к анкете.

Главный экран проекта Нажмите, чтобы рассмотреть
FitPlay (Instinct Fitness) — персонализированные тренировки и питание 01 / 03
FitPlay (Instinct Fitness) — персонализированные тренировки и питание — Главный экран проекта
Клиент
OneCore Media
Индустрия
Wellness и персональное здоровье
Срок
8 месяцев
Команда
6 человек

Задача

Каталог видеотренировок перекладывает на пользователя самое трудное: решить, какой курс подходит, с чего начать, в каком порядке заниматься и как связать нагрузку с целью. Человек с лишним весом, человек после родов и человек с ограничением по суставам открывают одно и то же меню из десятков направлений — и часть из них конкретному пользователю не подходит, но узнать об этом ему неоткуда.

Ручной подбор проблему снимает, но не масштабируется: каждый новый пользователь — это время специалиста. Требовалось развести две вещи: методику, которую пишут эксперты, и её применение к конкретной анкете, которое должна выполнять программа. При этом сервис не медицинский. Заболевания и ограничения в анкете — признаки для фильтрации контента и предупреждений, а не диагноз, и ситуация, не покрытая правилами, не должна «дорешиваться» автоматом.

Решение

Подбор в шесть шагов. Анкета проверялась на полноту и допустимость значений; применялись жёсткие ограничения и исключались несовместимые программы; цель сопоставлялась с направлением курса; выбирались уровень нагрузки и стартовая точка; формировалась последовательность занятий и связанный с ней план питания. Шестым шагом сохранялась версия выданной рекомендации.

Версия рекомендации — отдельная сущность. Это ключевая развилка продукта. Пользователь меняет цель или вес посреди курса — наивная система пересчитала бы всё и стёрла историю. Здесь пересчёт затрагивал только будущий план: выполненные занятия и показатели прогресса оставались на месте. Тот же принцип действовал для питания — замена блюда или обновление методики не переписывали задним числом рацион, уже выданный пользователю на конкретный день.

Правила живут отдельно от приложения. Упражнения, курсы, уровни нагрузки, совместимость и противопоказания хранились в контентном контуре, а мобильные клиенты получали готовую персональную выдачу через API на Golang-backend. Специалист обновлял методику централизованно, без релиза iOS и Android. Обратная сторона того же решения — объяснимость: пользователь видел, какое направление ему предложено, а администратор мог восстановить, какие именно ответы анкеты привели к выбору или исключению курса.

Экран занятия как рабочий инструмент. Не описание курса, а сценарий: номер занятия, состав и порядок упражнений, время работы и отдыха, круги и повторы, ожидаемая продолжительность, постановка в календарь, старт и фиксация завершения. Выполнение записывалось в профиль, поэтому приложение показывало следующий шаг, не теряло прогресс между устройствами и не предлагало пройденное занятие как новое.

Сурдоперевод внутри общей системы. Курсы Home Workout и TRX имели версии с сурдопереводом. Технически это не «специальный раздел», а признак доступности у курса, связь обычной и адаптированной версии, контроль наличия видео и участие адаптированного варианта в автоматической рекомендации наравне с основным. Пользователь выбирал подходящий формат, а не отдельный продукт.

Питание, привязанное к профилю. Пять приёмов пищи в день: блюдо, рекомендуемая порция, вес ингредиентов, способ приготовления. Рацион учитывал ограничения анкеты и был частью программы, а не отдельным сборником рецептов.

Два платёжных канала — одна модель доступа. На сайте платежи шли через Robokassa, в приложениях — через App Store и Google Play. Backend сводил статусы разных каналов к единому доступу, чтобы человек не купил один и тот же курс дважды при переходе с сайта в приложение. Фоновые задачи обрабатывали окончание подписки, повторную проверку платежа и восстановление покупки, а идемпотентная обработка событий защищала от двойной активации при повторной доставке платёжного уведомления.

Граничные случаи и чувствительные данные. Неполная анкета, несовместимые ограничения, отсутствие подходящего курса, недоступное видео, рассинхронизация покупки между web и mobile, истёкшая подписка, изменение анкеты во время активного курса — в каждом из них система сохраняла историю и объяснимое состояние вместо молчаливого сброса программы. Профиль содержал сведения о теле, целях и ограничениях, поэтому пользователь видел и менял только свою анкету, специалистам открывался минимально необходимый набор данных, а в аналитику уходили обезличенные категории — без открытых ответов о заболеваниях.

Результат

Разрозненный видеоконтент превратился в управляемую программу. Пользователь получал маршрут занятий, дневной рацион, календарь и напоминания, видел прогресс и мог менять параметры, не теряя пройденного. Эксперты работали с методикой, а не с индивидуальными подборками: правила совместимости, курсы, рецепты и вопросы анкеты настраивались в контентном контуре, и один и тот же аппарат применялся ко всем новым пользователям. Служба поддержки видела статус аккаунта и оплаты, не имея прав менять экспертные правила. Аудитория с нарушением слуха получила не урезанную отдельную версию, а те же курсы в адаптированном формате.

8 месяцев длительность проекта
6 человек команда
6 шагов этапов автоматического подбора программы
5 приёмов пищи в дневном плане питания
Первый разговор — бесплатно

Расскажите, что хотите изменить

За одну встречу уточним задачу и предложим следующий шаг, даже если вам нужен другой подрядчик.

Что будет на встрече
  1. 01 Опишите задачу своими словами
  2. 02 Уточним цель и ограничения
  3. 03 Предложим решение и следующий шаг
длительность 45–60 мин