A fitness balance app with calories calculator (consumed+burnt), extensive mapping/routing capabilities route for your walks and bike rides
Find a file
4aiman 19282ded78 Sensors, walk limits, GPS fixes, water UI, manual routes, Gridnev products, OTA router
GPS altitude: accel-based glitch filter (accel=0 + speed = GPS drift), altitude
  jump >100m filter, timestamp sanity (>24h = remove). Per-point Crr from accel
  vibration (smooth/mixed/gravel). Gap interpolation on map with dashed lines
  when accel confirms movement. Walk/run separate speed limits (configurable).
  Adaptive GPS accuracy (auto x2 when signal bad). Dead reckoning points when
  GPS silent but accel shows movement. Locale.US fix for sensor JSON.

Sensors: accelerometer + gyroscope in GpsRecorderService (RMS, max, pitch, yaw).
  Columns in gps_points. Dynamic addGpsPoint INSERT (safe if columns missing).

Manual routes: draw on map by tapping points, elevation from past tracks +
  open-meteo API, realistic timestamps by activity speed. Manual sessions
  skip glitch filtering on recalculate. Speed from GPS.config not hardcoded.

Water tracking: water_pct field in product add/edit forms, searchProducts
  returns water_pct, "ml" label for liquids, recipe water from ingredients.

BMR: moving average weight (7 days), fixed charts using dailyBase not raw bmr.

BLE: ble_clear_hr on stop, recovery toast, serde alias for ts/timestamp.

Products: 217 Gridnev products (bakery, desserts, bread, ready meals).
  Magnit scraper fix (NUXT_DATA name/value pairs, not indices). Supplements
  addSupplement with all 41 columns. Nutrient fallback RDI includes omega/EPA/DHA.

Export/import: custom products + recipes + supplements in single JSON bundle.
  Export all or single product. Dedup on import by name_lower + source.

OTA: router upload (LAN, always), VPS upload (-u flag). Kotlin checks router
  first (2s timeout), then VPS. Update URL from update_info.json.

Session detail: renderToken prevents stale setTimeout callbacks after recalculate.
WAL disabled (PRAGMA journal_mode=DELETE).
2026-06-18 22:54:45 +03:00
frontend Sensors, walk limits, GPS fixes, water UI, manual routes, Gridnev products, OTA router 2026-06-18 22:54:45 +03:00
src GPS point ordering + GPX export + chart zoom fixes 2026-05-16 21:21:13 +03:00
src-tauri Sensors, walk limits, GPS fixes, water UI, manual routes, Gridnev products, OTA router 2026-06-18 22:54:45 +03:00
.gitignore Initial commit: BalDav health tracker 2026-05-13 10:21:24 +03:00
data.js GPS point ordering + GPX export + chart zoom fixes 2026-05-16 21:21:13 +03:00
index.html GPS point ordering + GPX export + chart zoom fixes 2026-05-16 21:21:13 +03:00
package-lock.json GPS point ordering + GPX export + chart zoom fixes 2026-05-16 21:21:13 +03:00
package.json Initial commit: BalDav health tracker 2026-05-13 10:21:24 +03:00
PROJECT_MAP.md Update README and PROJECT_MAP with BLE HR, water tracking, OTA, nutrients, altitude filter 2026-06-07 01:41:33 +03:00
README.md Update README and PROJECT_MAP with BLE HR, water tracking, OTA, nutrients, altitude filter 2026-06-07 01:41:33 +03:00

BalDav

Персональный трекер здоровья и физической активности.

Возможности

  • Дневник питания — 13480 продуктов из магазинов (Магнит, 5ка, KDV) + база ИОН с микронутриентами. Рецепты с учётом термообработки (потери витаминов при варке/жарке). Единицы измерения (штуки, ложки, стаканы). Ввод количества формулами (4*30, 300+50).
  • GPS трекинг — запись маршрутов на велосипеде/пешком в фоне. Оффлайн карты (Leaflet + IndexedDB кэш). Импорт GPX/FTB (FitoTrack). Экспорт GPX. Фильтр altitude outlier'ов и GPS-залипаний.
  • BLE пульсометр — подключение к FitPro браслетам и стандартным HR датчикам (0x180D). ЧСС, SpO2, давление в реальном времени при записи трека.
  • Расчёт ккал — физическая модель для велосипеда (мощность из gradient + Crr + CdA). MET-таблица для ходьбы/бега. Профили велосипедов. BMR по Mifflin-St Jeor с коэффициентом активности.
  • Нутриенты — 37 микронутриентов (витамины, минералы, жирные кислоты, женьшень, ресвератрол, CoQ10). Нормы РСП/АУП (РФ/ЕС/США). Фармакокинетика — запасы в организме по полураспаду.
  • Трекинг жидкости — water_pct в продуктах, прогресс-бар, настраиваемая норма.
  • Графики — скорость, высота, ЧСС тренировки с зумом и pan. Тренд веса. Донат макронутриентов. Баланс ккал (приход/расход).
  • OTA обновления — проверка BUILD_NUMBER на VPS, скачивание через браузер.
  • Вес, сон, добавки — логирование с историей.

Стек

  • Frontend: чистый JavaScript, HTML, CSS. Без React/Vue/bundler.
  • Backend: Rust (Tauri 2) — SQLite, IPC, seed import, BLE (btleplug на десктопе).
  • Android: Kotlin — foreground GPS service, BLE HR service, WakeLock, SAF.
  • Библиотеки: Leaflet (карты), Chart.js (графики), Hammer.js (жесты), JSZip.

Сборка

# Зависимости: Rust, Node.js, Android SDK + NDK
./build.sh -d android       # debug APK
./build.sh android          # release APK
./build.sh -i android -d    # debug + установка на устройство
./build.sh -u android       # release + upload на VPS (OTA)
./build.sh -d -i -u android # debug + install + upload

Структура

Подробно: PROJECT_MAP.md

frontend/
  js/main.js          — UI, навигация, модалки (~5000 строк)
  js/db.js            — БД, миграции, CRUD (~1400)
  js/gps.js           — GPS, физика ккал, BLE HR polling (~1100)
  js/bmr.js           — BMR формула, РСП, полураспад нутриентов
  js/tilecache.js     — оффлайн тайлы (IndexedDB)
  css/styles.css      — стили, тёмная тема
  data/products_seed.db — 13480 продуктов
src-tauri/
  src/lib.rs          — Rust бэкенд, seed import
  src/ble.rs          — BLE HR (btleplug десктоп, file IPC Android)
  gen/android/        — Kotlin: MainActivity, GpsRecorderService, BleHrService
tools/
  5ka_scraper.user.js — Tampermonkey скрейпер 5ка
  magnit_scraper.user.js — Tampermonkey скрейпер Магнит
  ion_scraper.user.js — Tampermonkey скрейпер ИОН
smart/
  protocol.js         — FitPro BLE протокол (reverse-engineered)
  hr-reader.js        — Node.js прототип чтения ЧСС

Данные продуктов

Источник Продуктов Витамины/минералы
Магнит (SSR парсинг) 8627 нет
5ка (API скрейпер) 3103 нет
ИОН (web.ion.ru) 1078 да
KDV (SSR парсинг) 672 нет
Обогащено из ИОН 1398 да (nutrients_guessed)