Перейти к содержанию

05 — Решения и открытые вопросы

Реестр продуктовых и технических решений, которые не выводятся из остальных документов, и вопросов, которые предстоит закрыть. У каждого пункта стабильный ID (OQ-N) — для ссылок из задач и обсуждений.

Принятые решения

OQ-1. Название продукта

Выбрано название «Тренерграм». Отобрано из шести рабочих вариантов (Тренерграм, MFIT, MeetFit, МитФит, Trener Project, Trenix) — остальные отклонены.

Визуальное решение: белый тяжёлый wordmark со срезом 45° на оранжевом #FC5200, знак — «Т» тем же приёмом. Логотип, знак и токены — на странице бренда в прототипе (prototype/design.html).

Открытым остаётся регистрация: домен, имена в App Store / Google Play и товарный знак — задача пре-лонч-чеклиста. Репозиторий переименован в trenergram (сентябрь 2026), адреса документации и прототипа — serjnsk.github.io/trenergram/…; короткий знак для иконок и мобильного вида — «ТМ».

OQ-2. Платформы тренера

Веб-версия конструктора входит в MVP: работа тренера по составлению программ почти всегда идёт с компьютера. Мобильные приложения — для всех ролей; телефон тренер использует в зале.

OQ-3. Технологический стек

React Native + Expo (мобильные), React + Vite (веб-конструктор и админка), TypeScript-монорепо; оффлайн — PowerSync (self-hosted), SQLite ↔ PostgreSQL; backend — Node.js/NestJS, Redis, S3-совместимое хранилище; хостинг в РФ. Обоснование, альтернативы и обязательные спайки — в 06 — Технологический стек.

OQ-4. Платёжный провайдер

Т-Банк: уже используется в других продуктах, есть опыт интеграции и действующие отношения с банком. Интеграция — этап 2 (модуль PAY).

OQ-5. Комиссия App Store / Google Play

Подписка тренера на сервис (PAY-8) оплачивается только в веб-версии — платёж не попадает под комиссию сторов (15–30 %). Платежи клиентов тренеру (PAY-1…PAY-7) в MVP не входят; схема для них проектируется на этапе 2.

OQ-6. Хранение и обработка видео

Видео храним у себя: удобного публичного видеохостинга нет — YouTube в РФ частично заблокирован (нужен VPN), Rutube — реклама и неудобный плеер. Схема — по 06 — Технологический стек: S3-совместимое хранилище в РФ + транскодинг (ffmpeg) + HLS.

OQ-7. Персональные и медицинские данные

Юридическая схема работы с персональными и медицинскими данными согласована. Требования 152-ФЗ (локализация данных, согласия на обработку) учитываются при реализации профиля (PRO-3).

OQ-9. Стартовая база упражнений

Контент базы приобретается разовым выкупом датасета с самостоятельным хостингом. Живой внешний API несовместим с оффлайн-архитектурой: упражнения должны лежать в нашем Postgres и синхронизироваться на устройства (NFR-3), поэтому «сервис с API» на практике означает импорт датасета к нам.

Требования к базе:

  • покрытие: тренажёрный зал и кроссфит (EX-1);
  • тренер привязывает к упражнениям свои видео, видимые только ему и его клиентам (EX-2);
  • публичные видео для всех упражнений не обязательны — стартовая база может быть без видео.

Рынок поставщиков:

Сервис Что даёт Модель Вердикт
EDB Exercise Intelligence (exercisedb.io) 1 394 упражнения, GIF в 4 разрешениях, 17 полей метаданных, связи «похожие / замены / прогрессии / регрессии», self-hosted Разовая коммерческая лицензия: Mobile $299, Web $399, Cross-Platform $599 Основной кандидат. Self-hosted — идеально под наш контур; связи «замены/прогрессии» напрямую питают CON-11 (альтернативные упражнения)
WorkoutX 1 400+ упражнений, GIF, 6 языков (RU нет) Только REST API по подписке ($9.99–24.99/мес), датасет не выкупается ❌ Противоречит оффлайну — данные нельзя захостить у себя
wger Open source, self-hosted, частичная мультиязычность Бесплатно (CC-лицензии) Запасной вариант: слабее по полноте и качеству медиа
free-exercise-db (GitHub) ~870 упражнений, JSON + фото Public domain, бесплатно Бесплатный fallback, если экономим на старте
API Ninjas Текст без медиа API по подписке ❌ Без медиа и без датасета

План внедрения:

  1. Перед покупкой — проверить бесплатный сэмпл EDB (30 упражнений): качество GIF, структура метаданных, покрытие кроссфит-движений.
  2. Покупка Cross-Platform ($599, разовая лицензия) — у нас мобильные + веб. Импорт в наш Postgres, GIF — в наше S3-хранилище.
  3. Русская локализация — своими силами: перевод названий и инструкций (AI-1 + вычитка); русского нет ни у одного поставщика.
  4. Кроссфит-дополнение: ~80–120 специфических движений (ТА-вариации, гимнастика, double-unders, wall ball, эргометры) добавляются вручную — generic-базы покрывают их лишь частично.

OQ-10. Текст ↔ структура в конструкторе

Канонический формат программы — структурированные данные (упражнения и показатели), а не текст; текстовый ввод — интерфейс поверх структуры с распознаванием на лету. Полная формулировка принципа — в 02 — Функциональные требования (раздел «Конструктор»); реализация — спайк №3 в 06 — Технологический стек.

Дополнение (сентябрь 2026): структура не обязана вмещать всё — сложная запись упражнения хранится текстом при узнанном упражнении, см. OQ-16; тип блока стал явным полем, см. OQ-15.

OQ-11. Выплаты тренерам

Без внутреннего баланса и вывода средств: тренер привязывает свою карту, деньги клиентов приходят ему напрямую (PAY-7). Детали интеграции с Т-Банком прорабатываются на этапе 2 вместе с моделью монетизации (OQ-8).

OQ-13. Неделя — представление, а не сущность

Семидневная единица убрана из модели. Программа — упорядоченная последовательность дней, каждый день либо тренировка, либо отдых; длина составленной части и есть «докуда составлено». Ритм задаёт тренер и он не обязан быть недельным.

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

Что осталось. Неделя остаётся удобным представлением — календарь клиента и дорожка плана по-прежнему читаются понедельно. Не хранится, не копируется целиком, не шаблонизируется.

Следствия: CON-4 и CON-14 переформулированы с недели на произвольный набор тренировок; из CON-12 убраны недели; TPL-2 лишился уровня «неделя»; раздел «Сущности» — строки «Неделя». CAL-1 приведён к трём уровням календаря (OQ-14).

OQ-15. Тип блока — поле, а не часть названия

Формат блока (AMRAP, EMOM, на время, табата, интервалы, death by, не на время) — явное поле с параметрами; по умолчанию типа нет, и блок — обычный список подходов.

Почему. Раньше формат был тем, что парсер нашёл в названии: «EMOM 12 · сила + кардио». Это держало один источник истины, но тренер не видел, что именно распозналось, не мог задать параметры (интервал, лимит, работа/отдых) и получал типы только для формулировок, которые парсер знает. Явное поле снимает всё три ограничения, а распознавание остаётся входом: набранное в названии «AMRAP 15» переезжает в тип, название очищается.

Следствия: CON-18 добавлен; TMR-1 переписан — таймер строится из типа блока, а не из текста названия.

OQ-16. Запись упражнения: структура плюс текст

У упражнения два способа записи, взаимоисключающие: структурный (подходы × повторы или лесенка, нагрузка в единице упражнения) и текстовый — для того, что в структуру не ложится.

Почему. Реальные записи тренеров сложнее модели «подходы × повторы × нагрузка»: разный вес по подходам, дроп-сеты, «до отказа». Дорисовывать модель под каждый случай — путь в бесконечность; терять запись или ронять её в «нераспознанную строку» — хуже. Текст при узнанном упражнении сохраняет и связь с базой (видео, история, ПМ), и точную формулировку тренера. Расчёт веса от ПМ для текста не работает — это осознанная цена.

Из выбора нагрузки убран RPE: тренерам целевой аудитории шкала незнакома; как показатель выполнения (EX-3) он остаётся.

Следствия: CON-19 добавлен; CON-5 и принцип раздела дополнены — парсер уходит в текст, когда не разобрал остаток строки; CON-16 — «% от ПМ» для любого упражнения с весом, максимум вводится на месте.

OQ-14. Календарь — месяц одного клиента

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

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

Что осталось от первой редакции. Принцип, что сетка «все клиенты × период» не масштабируется на полсотни индивидуальных программ, — верен и никуда не делся; из него и следует «всегда один человек».

Следствия: CAL-1 переписан; карточки дней и переключатель «подробно / компактно» общие с лентой конструктора — одна настройка аккаунта.

Открытые вопросы

OQ-8. Модель монетизации платформы

Не зафиксирована; будет оформлена отдельным документом (08-monetization.md), после чего следствия разносятся в модуль PAY и тарифы. Контекст: TRNR берёт от 1000 ₽/мес в зависимости от числа клиентов; варианты — подписка тренера по числу клиентов, комиссия с платежей, гибрид.

OQ-12. Экономика видеохранилища

Расчёт стоимости хранения и трафика на одного тренера, лимиты в тарифах (модуль VID, этап 2). Связано с OQ-8.