A fitness balance app with calories calculator (consumed+burnt), extensive mapping/routing capabilities route for your walks and bike rides
Activity types:
- New types: squats, jump rope, stretching, swimming pool
- MET-based kcal auto-calculation (6.0/12.3/2.3/8.0)
- Dynamic modal fields per type (sets/reps, distance, minutes)
- Fix: state.latestWeight is object {weight_kg}, not number
Road map:
- road_points table with 2m dedup, activity type (bike/walk)
- Rust rebuild_roads + get_road_points (bypass SQL plugin 28K limit)
- Segment detection by 100m gap, bike=blue walk=brown
Tile system:
- CSP fix: a.tile.openstreetmap.org matches *.tile pattern
- pack_tiles.js tool, import from file/router, ureq body limit bypass
- Tile errors: done(null,tile) prevents crash cascade
Other fixes:
- Manual routes: skip gap segmentation (synthetic timestamps)
- Draw route: own CSS class, not affected by landscape rotation
- Orientation lock button (A/L), hysteresis 65/35 degrees
- GPS placeholder only when state=waiting_gps
- Food amount inputmode=text for formula support (4*30)
- showModal onMount callback
|
||
|---|---|---|
| frontend | ||
| src | ||
| src-tauri | ||
| .gitignore | ||
| data.js | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| PROJECT_MAP.md | ||
| README.md | ||
BalDav
Персональный трекер здоровья и физической активности.
Возможности
- Дневник питания — 13480 продуктов из магазинов (Магнит, 5ка, KDV) + база ИОН с микронутриентами. Рецепты с учётом термообработки (потери витаминов при варке/жарке). Единицы измерения (штуки, ложки, стаканы). Ввод количества формулами (4*30, 300+50).
- GPS трекинг — запись маршрутов на велосипеде/пешком в фоне. Оффлайн карты (Leaflet + IndexedDB кэш). Импорт GPX/FTB (FitoTrack). Экспорт GPX. Фильтр altitude outlier'ов и GPS-залипаний. Вращение карты по компасу (leaflet-rotate). Ландшафтный режим (CSS rotation + панель справа). Dead reckoning при потере GPS (гироскоп + акселерометр). Placeholder до GPS (пиксельарт). Карта проезженных дорог (дедупликация 2м, вело/пешие). Импорт тайлов по регионам (SQLite, роутер LAN).
- BLE пульсометр — подключение к FitPro браслетам и стандартным HR датчикам (0x180D). ЧСС, SpO2, давление в реальном времени при записи трека.
- Расчёт ккал — физическая модель для велосипеда (мощность из gradient + Crr + CdA). MET-таблица для ходьбы/бега. Профили велосипедов. BMR по Mifflin-St Jeor с коэффициентом активности.
- Нутриенты — 37 микронутриентов (витамины, минералы, жирные кислоты, женьшень, ресвератрол, CoQ10). Нормы РСП/АУП (РФ/ЕС/США). Фармакокинетика — запасы в организме по полураспаду.
- Трекинг жидкости — water_pct в продуктах, прогресс-бар, настраиваемая норма.
- Графики — скорость, высота, ЧСС тренировки с зумом и pan. Тренд веса. Донат макронутриентов. Баланс ккал (приход/расход).
- OTA обновления — проверка BUILD_NUMBER на роутере (LAN) или VPS, скачивание через браузер.
- Ручные маршруты — рисование трека на карте тапами, elevation из прошлых треков или open-meteo API.
- Экспорт/импорт — свои продукты, рецепты и добавки одним файлом (JSON).
- Вес, сон, добавки — логирование с историей.
Стек
- 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 1.9.4 (карты), leaflet-rotate (компас), 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, навигация, модалки, компас, ландшафт (~5500 строк)
js/db.js — БД, миграции, CRUD (~1500)
js/gps.js — GPS, физика ккал, BLE HR polling (~1200)
js/bmr.js — BMR формула, РСП, полураспад нутриентов
js/sync.js — синхронизация между устройствами (LAN)
js/tilecache.js — оффлайн тайлы (IndexedDB)
css/styles.css — стили, тёмная тема, ландшафтный режим
img/gps-placeholder.png — пиксельарт заглушка до GPS
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) |