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

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, раздел «Инфраструктура».