baldav/PROJECT_MAP.md

8.7 KiB
Raw Blame History

PROJECT MAP — BalDav

Трекер здоровья и активности. Pure JS + Tauri 2 + SQLite. Без фреймворков и бандлеров.

Статистика

Метрика Значение
Строк кода ~18000
Файлов исходников 44
Язык JS 71%, Rust 4%, Kotlin 10%, CSS 15%
Таблиц в БД 17
Экранов 7 основных + 12 модалок
IPC команд (Tauri) 6
Библиотеки Leaflet, Chart.js, Hammer.js, JSZip
Платформы Android (Kotlin), Desktop (Tauri)

Структура файлов

Frontend (frontend/)

Файл Строк Назначение
js/main.js 4214 Экраны, навигация (winStack), модалки, графики, нутриенты
js/db.js 1167 SQLite через Tauri IPC. Миграции, CRUD, 36 полей добавок
js/gps.js 1048 GPS запись, физика ккал (power model), haversine, импорт/экспорт
js/tilecache.js 178 Оффлайн кэш тайлов карты (IndexedDB)
js/bmr.js 61 BMR (Mifflin-St Jeor + реальный из истории веса), таблица РСП (27 нутриентов)
css/styles.css 1893 Темная тема, мобильный дизайн
index.html 26 Точка входа, порядок загрузки скриптов
data/products_seed.db 8.2MB 13481 продукт (magnit 8627, 5ka 3103, ION 1078, kdv 672, manual 1)

Библиотеки (lib/): leaflet.js, chart.min.js, chartjs-plugin-zoom.min.js, hammer.min.js, jszip.min.js

Бэкенд Rust (src-tauri/)

Файл Строк Назначение
src/lib.rs 512 Миграции v1, IPC команды, seed import
src/main.rs 5 Точка входа
Cargo.toml 18 tauri, tauri-plugin-sql, rusqlite, serde
tauri.conf.json — Конфиг приложения, плагины, ресурсы

Android Kotlin (src-tauri/gen/android/.../dev/baldav/app/)

Файл Строк Назначение
MainActivity.kt 153 FileObserver для IPC, seed DB копирование, safe insets, SAF
GpsRecorderService.kt 205 Foreground service GPS, WakeLock, JSONL батчевая запись
generated/*.kt ~1100 Tauri-сгенерированные: WebView, IPC, permissions

Инструменты (tools/)

Скрипт Назначение
5ka_scraper.user.js Tampermonkey скрейпер 5ka.ru (рекурсивный BFS категорий)
ion_scraper.user.js Tampermonkey скрейпер web.ion.ru (fetch, без перезагрузок)
import_ion.js Импорт ION продуктов в seed DB
import_with_dedup.js Импорт с дедупликацией по имени
enrich_nutrients.js Обогащение микронутриентами из ION
parse_magnit.js Парсер HTML каталога Магнит
parse_kdv.js Парсер HTML каталога KDV
scrape_5ka.js, scrape_5ka_api.js CLI скрейперы 5ka
download_tiles.js Скачивание тайлов карт для оффлайна
fetch_openfoodfacts.js OpenFoodFacts API
fuzzy_dedup.js Нечёткая дедупликация

Корень

Файл Назначение
build.sh Сборка: android/debug/release, sync frontend, версионирование
BUILD_NUMBER Автоинкремент номера сборки
ion_products.json 1111 продуктов ION (сырые данные скрейпера)
5ka_products_fresh.json 3103 продукта 5ka (сырые данные)

База данных

Таблицы (Rust v1 миграция + JS миграции)

Таблица Назначение Ключевые поля
profile Key-value настройки key, value
products Продукты (13480) name, kcal/protein/fat/carbs per 100g, витамины, минералы, nutrients_guessed
food_log Дневник еды date, time, product_id/recipe_id, amount_g, unit_id, unit_amount, ккал/БЖУ
recipes Рецепты name, cooking_method_id, servings, notes
recipe_ingredients Ингредиенты рецептов recipe_id, product_id, custom_name, amount_g, cooking_method_id
cooking_methods Способы готовки (6 шт) name, потери витаминов/БЖУ в %
serving_units Единицы измерения (5 шт) name (шт/ст.л./ч.л./стакан/мл), grams_equivalent
product_units Привязка единиц к продуктам product_id, unit_id, grams_per_unit
weight_log Лог веса date, time, weight_kg
sleep_log Лог сна date, bed/asleep/wake time, nap_minutes
activity_log Лог активности date, type, minutes, kcal
supplements Добавки (БАД) name, daily_dose_g, витамины/минералы
supplement_log Приём добавок date, supplement_id, dose_g
gps_sessions GPS тренировки date, activity_type, distance, kcal, speed, elevation, bike_id
gps_points Точки трека session_id, ts, lat, lon, altitude, speed, seq
bikes Велосипеды name, weight_kg, wheel, звёзды, surface_type, is_active

Seed DB (products_seed.db)

Источник Продуктов Микронутриенты
magnit 8627 нет
5ka 3103 нет
ION 1078 витамины + минералы
kdv 672 нет
Всего 13480 1398 обогащены (nutrients_guessed)

Экраны и навигация

Нижний навбар (5 табов)

[Сегодня] [Продукты] [Трек] [Добавки] [Настройки]

Экраны

  • Сегодня — дневной баланс ккал, еда (продукты + блюда), активность, вес, сон, добавки, статистика (графики)
  • Продукты — подтабы [Продукты | Рецепты], поиск, карточки с КБЖУ, добавление в дневник
  • Трек — список GPS тренировок, запись, импорт GPX/FTB, скачивание карт
  • Добавки — список БАД, логирование приёма
  • Настройки — профиль (вес, рост, BMR), велосипеды, GPS конфиг, оффлайн режим

Модалки

  • Еда: showFoodModal, showEditFoodModal, showFoodFromRecipeModal
  • Рецепты: showRecipeDetailModal, showRecipeEditorModal, showAddIngredientModal
  • Тренировки: showSessionDetail (карта, графики скорости/высоты, пересчёт)
  • Прочее: showWeightModal, showSleepModal, showActivityModal, showProfileModal, showBikeModal, showMapDownloadModal, showLogSupplementModal

IPC команды (Rust → JS)

Команда Назначение
import_seed_products Импорт продуктов из seed DB, прогресс-события
get_safe_insets Отступы Android status/nav bar
gps_service_command start/stop GPS сервиса
gps_service_read_points Чтение JSONL файла точек
save_file SAF диалог сохранения (GPX экспорт)
get_app_info Версия, git hash, дата сборки

Формула ккал (GPS)

Велосипед — физическая модель

Power = v * (m*g*sin(gradient) + Crr*m*g*cos(gradient) + 0.5*CdA*rho*v^2)
  m = rider_kg + bike_kg
  Crr = 0.004 (асфальт) / 0.006 (смешанный) / 0.008 (грунт)
  CdA = 0.6, rho = 1.225, efficiency = 0.25

Power > 0: педалирование → kcal = power*dt / (0.25 * 4184)
Power <= 0: каботаж → kcal = базальный метаболизм

Ходьба/бег — MET-таблица

<4 км/ч = 2.5 MET, 4-5.5 = 3.5, 5.5-7 = 5.0, 7-9 = 8.0, 9-12 = 10.0, 12-16 = 12.5, 16+ = 15.0
kcal = (dt/60) * (MET * 3.5 * weight_kg) / 200

Сборка

./build.sh -d android    # debug APK
./build.sh android       # release APK
./build.sh -i android -d # debug + install