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 по подписке | ❌ Без медиа и без датасета |
План внедрения:
- Перед покупкой — проверить бесплатный сэмпл EDB (30 упражнений): качество GIF, структура метаданных, покрытие кроссфит-движений.
- Покупка Cross-Platform ($599, разовая лицензия) — у нас мобильные + веб. Импорт в наш Postgres, GIF — в наше S3-хранилище.
- Русская локализация — своими силами: перевод названий и инструкций (AI-1 + вычитка); русского нет ни у одного поставщика.
- Кроссфит-дополнение: ~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.