PROJECT — цели, рамки, глоссарий¶
Цель¶
Собрать личную (pet-project, на одного пользователя) платформу, которая сводит данные о здоровье и тренировках из разных источников в единую базу и позволяет выгружать всё это для анализа ИИ.
Ключевое требование, которого нет ни в одном готовом продукте: точное время каждого подхода в тренажёрном зале (начало/конец подхода и отдыха).
Что именно мы измеряем (важно, это не то же самое, что «пульс во время подхода»)¶
Единица анализа — не подход, а эпизод усилия: [начало подхода, конец подхода
+ ~60 секунд восстановления], где фаза нагрузки и фаза восстановления хранятся
раздельно.
Почему не «пульс во время подхода», как формулировалось раньше (см. ADR-0019):
- Пульс после тяжёлого подхода достигает пика в первые 5–20 секунд отдыха, а не
во время самого подхода. Запрос «максимум пульса внутри
[T1, T2]» промахивается мимо пика по построению. - Оптический датчик на запястье пишет точку раз в ~5 секунд и отбрасывает точки при низком качестве сигнала — а низкое качество наступает ровно при хвате штанги. На подход в 40 секунд приходится 0–8 точек, и уцелевшие смещены в сторону спокойных моментов. Это не разреженные данные, а смещённая выборка.
Отсюда обязательное следствие: рядом с каждой агрегацией хранится число точек и покрытие окна. Среднее по одной точке не должно выглядеть как среднее по восьми.
Ценность, которая не зависит от датчика¶
Точные границы подхода сами по себе дают то, чего нет в готовых приложениях: фактический отдых между подходами, время под нагрузкой, плотность сессии, динамику усталости внутри тренировки. Это первичные данные, измеряемые точно и без носимого устройства. Даже если гипотеза про пульс не подтвердится, эта часть остаётся в силе.
Источники данных¶
| Источник | Что даёт | Способ получения |
|---|---|---|
| Тренировки в зале | упражнение/тренажёр, вес, повторы, время каждого подхода и отдыха | свой мини-апп поверх wger |
| Fitbit Air (Google Health) | пульс, шаги, SpO₂, сон, вес — по точкам во времени (intraday) | Google Health API v4 (OAuth) |
| InBody | состав тела: % жира, мышцы, висцеральный жир, вода, посегментный анализ | парсинг PDF-отчётов |
| Apple Health | приём таблеток и прочие записи | парсинг export.xml |
Рамки (scope)¶
В пределах проекта:
- логирование тренировок с точными таймстампами подходов;
- периодический сбор данных из перечисленных источников в единую БД;
- выгрузка всех данных одной командой (/export) в CSV/JSON для ИИ-анализа;
- (позже) простой интерфейс для просмотра показателей InBody и Fitbit.
Не-цели (non-goals)¶
- Не мультипользовательский продукт, не «гимнастический SaaS». Один пользователь.
- Не заменяем сам ИИ-анализ кодом: платформа готовит и отдаёт данные, разбор делает ИИ по выгрузке. Не строим свой ML внутри.
- Не диетология/калории — nutrition-функции wger отключаются.
- Не мобильное нативное приложение. Точка входа — Telegram (Mini App) + веб.
- Не highload: объёмы личные, экзотическая оптимизация не нужна.
Критерии готовности (по этапам — детали в ROADMAP.md)¶
- MVP: в зале можно залогировать подход с реальным временем начала/конца; данные лежат в БД и выгружаются.
- Сбор источников: Fitbit/InBody/Apple Health автоматически/полуавтоматически попадают в единую базу.
- Анализ:
/exportотдаёт согласованный по времени датасет со всех источников. - Проверка гипотезы: по первым реальным сессиям посчитано, сколько точек пульса попало в каждый эпизод усилия, и проверено, есть ли у пульса остаточная дисперсия сверх того, что уже объясняют упражнение, вес, повторы и предыдущий отдых. Если остаточной дисперсии нет — число может быть точным и при этом не нести новой информации; тогда гипотезу закрываем, а первичные тайминги остаются.
Глоссарий¶
- Подход (set) — одно выполнение упражнения (N повторов с весом W). В модели
wger одному подходу соответствует один
WorkoutLog. - Сессия (session) — одна тренировка (дата + впечатления). В wger —
WorkoutSession. - Intraday — данные с привязкой к моменту времени (а не суточный агрегат); именно они нужны для сопоставления с подходами.
- InBody — анализатор состава тела по биоимпедансу; выдаёт PDF-отчёт.
- Mini App — веб-приложение, открываемое внутри Telegram (требует HTTPS и
проверки подписи
initData). - core-service — центральный сервис-«склад правды» (Go + gRPC + своя Postgres).
- wger — внешний open-source движок тренировок (Django), используемый как основа.
Среда исполнения¶
- Вся система крутится на локальном мини-ПК (Postgres, wger, core, воркеры).
- VPS держит только Caddy (TLS) и конец обратного SSH-туннеля — он лёгкий, на слабую память сервера ничего тяжёлого не кладём.
- Есть купленный домен; белого IP на мини-ПК нет — наружу выходим через туннель.
Детали —
ARCHITECTURE.md, раздел «Инфраструктура».