Commit Graph

  • 057eb9391a Fix passkey-disabled message obscured by null hash check main owain 2026-06-09 21:38:12 +01:00
  • 01a8fe135c Disable password login once a passkey is linked owain 2026-06-09 21:34:23 +01:00
  • d350e9caea Add per-route top-10 leaderboard to activity detail owain 2026-06-09 20:37:37 +01:00
  • bdd5f80c7e Harden auth/upload, fix PR-delete cascade and sync backfill owain 2026-06-09 20:24:24 +01:00
  • 04689a29bd Cut Garmin sync API volume; dashboard/health/records/UI improvements owain 2026-06-09 11:52:52 +01:00
  • 6a1726e0c3 Fix sleep score parsing, dashboard body battery, segment direction owain 2026-06-08 20:58:53 +01:00
  • 0aa27713ca Fix follow-ups: lap bests, segments, charts, dashboard health owain 2026-06-08 20:39:26 +01:00
  • bc437cce92 Batch 1: dashboard, maps, segments rewrite, health, sync UX owain 2026-06-08 19:59:06 +01:00
  • e5feeb1178 Add explicit "link passkey to my account" flow owain 2026-06-08 17:11:30 +01:00
  • e0ddc4cbf4 Fix PocketID config lookup when multiple admins exist owain 2026-06-08 13:37:19 +01:00
  • 0e18ef2291 Fix PocketID secret wiped on re-save; log token-exchange failures owain 2026-06-08 13:26:35 +01:00
  • 0dd6eba589 docs: refresh CLAUDE.md (beat service, TanStack Query, env vars, no tests) owain 2026-06-08 13:19:55 +01:00
  • 0e4bc7b444 Multi-user via PocketID: account linking, group gating, admin user management owain 2026-06-08 13:19:55 +01:00
  • bc4d68da07 Fix avg_hr_day: remove dead averageHeartRate lookup; add max_hr_day from UDS export owain 2026-06-08 12:25:11 +01:00
  • 2d94f99356 Fix activity dedup crash: MultipleResultsFound on same-day same-sport activities owain 2026-06-08 12:11:55 +01:00
  • f5d91cf8ae Fix Garmin full export import: UDSFile health data and nested zip FIT files owain 2026-06-08 10:17:51 +01:00
  • 2ea691085f Fix VO2 arrow: tip lands at exact value on arc centre-line, base points outward owain 2026-06-08 01:20:53 +01:00
  • bb9e8c59f4 VO2 max gauge: Garmin/Cooper Institute thresholds, add Superior category owain 2026-06-08 01:15:26 +01:00
  • b6f185d5e8 Fix VO2 gauge: large-arc-flag must always be 0 for a 180° gauge owain 2026-06-08 00:56:46 +01:00
  • 5c5877c792 Rework VO2 max gauge: full-colour ACSM bands, white inward arrow, no fill arc owain 2026-06-08 00:49:17 +01:00
  • 5256bd448c Fix VO2 gauge arc direction: sweep=1 for upper (top) semicircle owain 2026-06-08 00:41:31 +01:00
  • 221b2cd333 Fix VO2 max gauge: correct semicircle geometry, fixed 30-70 range, arrow pointer owain 2026-06-08 00:38:53 +01:00
  • 45ff01f740 Fix health metrics API limit to support 5yr trend and snapshot navigation owain 2026-06-08 00:28:37 +01:00
  • 8d304545a3 Health page: VO2 max gauge, layout improvements, 3Y/5Y trends, biological sex profile owain 2026-06-07 23:49:01 +01:00
  • 70c7e5c0a8 Fix VO2 max extraction: values nested under entry['generic'] not top-level owain 2026-06-07 23:18:04 +01:00
  • 093aa67e58 Log maxmet first entry structure to identify vo2max field name owain 2026-06-07 23:13:43 +01:00
  • 546fdd96b5 Fix VO2 max sync: robust fallback when maxmet range returns non-list or valueless entries owain 2026-06-07 23:01:18 +01:00
  • 0bb1f9bc1e Fetch full VO2 max history via maxmet/daily range query owain 2026-06-07 22:35:38 +01:00
  • 854d4ed7cb Fix VO2 max extraction from training_status.mostRecentVO2Max.generic owain 2026-06-07 22:16:09 +01:00
  • 41a39ec3c7 Try training_status and stats_and_body for VO2 max (debug logging) owain 2026-06-07 21:59:05 +01:00
  • 367ae4e8f7 Switch VO2 max source to get_max_metrics (maxmet/daily endpoint) owain 2026-06-07 21:38:41 +01:00
  • e440fb35dd Add debug logging for fitnessage API response owain 2026-06-07 21:29:19 +01:00
  • 8fd7f984d9 Fix VO2 max extraction — use fitnessage API not daily stats owain 2026-06-07 20:53:55 +01:00
  • 13ed824f01 VO2 max carry-forward and sync lookback days fix owain 2026-06-07 20:12:51 +01:00
  • 45ff4c26aa Implemented all 9 UI fixes across health charts and activity detail pages. Changes are ready to push to git for the Docker build to pick them up. owain 2026-06-07 19:57:25 +01:00
  • 67fd4b3c96 Health hypnogram, routes tiles, BB bar chart, segment delta owain 2026-06-07 18:44:00 +01:00
  • 492418586a Fixed Garmin sync progress bar granularity, timeout issue, and lookback days input, plus redesigned the sleep timeline with taller bars and yellow Awake colour. owain 2026-06-07 18:15:07 +01:00
  • bf1920eb9d Segments and Av HR update owain 2026-06-07 17:12:27 +01:00
  • 4a4cbdcc92 Fix pace sentinel, route map thumbnails, tiled segments, health/dashboard layout owain 2026-06-07 16:36:54 +01:00
  • 5f5551db27 Fix wellness sync crash on None body battery levels owain 2026-06-07 16:04:38 +01:00
  • da9c1e04cb Body owain 2026-06-07 15:26:54 +01:00
  • 568dc31e97 Round 2: body battery redesign, profile cleanup, segment integration, route/segment records owain 2026-06-07 13:14:00 +01:00
  • 02eccad578 Add segments, YTD stats, route matching fixes, body battery layout, pace fix owain 2026-06-07 12:01:25 +01:00
  • f0bbe92b2c Fix sync window: respect lookback_days even after first sync owain 2026-06-07 11:16:08 +01:00
  • 616099402b Add body battery: sync, storage, and health UI chart owain 2026-06-07 11:13:38 +01:00
  • 37ffd4c9e0 Fix wellness sync crash: serialize intraday_hr as JSON string for psycopg2 owain 2026-06-07 11:00:22 +01:00
  • d57054509c Fix HealthPage crash: move intradayData query below selectedDay declaration owain 2026-06-07 10:51:14 +01:00
  • f927e32853 Fix missing avg_hr_day/weight data; add 24hr HR chart to daily snapshot owain 2026-06-07 10:47:53 +01:00
  • a28ce0e009 Add sync progress bar; change auto-sync to every 30 minutes owain 2026-06-07 10:36:15 +01:00
  • a9b3da858d Fix five code-review findings: token auth, sync rate-limiting, model drift, FK cascade owain 2026-06-07 10:30:20 +01:00
  • 211f77a574 Fix sync_lookback_days actually controlling the sync window owain 2026-06-07 01:34:18 +01:00
  • 22b41109f5 Fix Garmin stats sync, add route merge/map/links, fix PR constraint owain 2026-06-07 01:25:01 +01:00
  • edeb3ccece Fix: commit missing init_db migration for sync_lookback_days column owain 2026-06-07 01:11:55 +01:00
  • 17ec83bfc2 Fix: add sync_lookback_days column to GarminConnectConfig model owain 2026-06-07 01:06:38 +01:00
  • a3c039b3ea Fix Garmin Connect save — make password optional for settings updates owain 2026-06-07 00:58:00 +01:00
  • f8c126fbda Add configurable sync_lookback_days for Garmin Connect owain 2026-06-07 00:40:55 +01:00
  • 335bd0a053 Fix Garmin Connect sync to import full history and prevent re-downloads owain 2026-06-07 00:33:49 +01:00
  • 7d6d34f61f Fix health trends range selector; add day navigation and chart click owain 2026-06-07 00:27:35 +01:00
  • 6d224d51c5 Add Garmin Connect auto-sync via python-garminconnect owain 2026-06-07 00:08:12 +01:00
  • 0cdc653664 Add daily health snapshot to Health page owain 2026-06-06 23:46:08 +01:00
  • c3637fa3fa Fix wellness parser: field names, sleep epoch durations, HRV, sleep score owain 2026-06-06 23:33:50 +01:00
  • 95f704cb54 Fix upload auto-refresh, health data refresh, and HR zone recalculation owain 2026-06-06 23:13:44 +01:00
  • b5fd17a597 Fix PocketID login redirect owain 2026-06-06 19:56:18 +01:00
  • df6c993709 Fix PocketID OIDC endpoints for auth.jarrett.eu owain 2026-06-06 19:51:08 +01:00
  • 34284f3d9d Fix PocketID callback URL to use full base URL owain 2026-06-06 19:43:26 +01:00
  • 16cf4a9313 Fix wellness_parser - had fit_parser content instead of wellness parser owain 2026-06-06 19:38:53 +01:00
  • ed4ab0eff8 Fix FIT parser - handle raw timestamps and semicircle auto-detection owain 2026-06-06 19:32:34 +01:00
  • 0fd3ff7414 Fix SDK field names - use camelCase throughout owain 2026-06-06 19:27:35 +01:00
  • f609931ebc Remove fitparse entirely - use Garmin SDK only with messages dict approach owain 2026-06-06 19:17:51 +01:00
  • e9811d8d83 Fix duplicate detection, add wellness suffixes, add reprocess endpoint owain 2026-06-06 19:02:42 +01:00
  • 93b8f00f94 Fix map route not rendering; fix health date filter timezone mismatch owain 2026-06-06 18:52:29 +01:00
  • 24f8417982 Fix package.json, Dockerfile, add CI validation to prevent recurrence owain 2026-06-06 18:27:29 +01:00
  • 070267eee5 Fix package.json trailing comma owain 2026-06-06 18:20:40 +01:00
  • 4b93cbf5e0 Remove non-existent polyline-codec package owain 2026-06-06 18:19:35 +01:00
  • b0248fb581 Fix frontend Dockerfile - use npm install not npm ci owain 2026-06-06 18:17:38 +01:00
  • ec5a01d12a All tweaks added owain 2026-06-06 18:10:35 +01:00
  • 043b3b7269 Switch to official Garmin FIT Python SDK for both activity and wellness parsing owain 2026-06-06 16:09:57 +01:00
  • 38632cfe4f Use ON CONFLICT upsert for health metrics - fixes concurrent worker race condition owain 2026-06-06 15:53:56 +01:00
  • 8104ca5ed0 Route wellness FIT files to health parser, parse HR/HRV/sleep/stress/SpO2 owain 2026-06-06 15:50:25 +01:00
  • c4e5eb91ed Use sync SQLAlchemy in Celery worker - fixes asyncpg connection issues owain 2026-06-06 15:29:36 +01:00
  • 29c39c3bbb Make admin_password optional so worker can start without it owain 2026-06-06 15:09:27 +01:00
  • bfb3daba05 Fix worker race condition - single uvicorn worker + tolerate duplicates owain 2026-06-06 15:09:22 +01:00
  • 5a57e84e80 Pin bcrypt to 4.0.1, add celery_app entry point owain 2026-06-06 15:05:16 +01:00
  • 264c27469b Fix DB init - composite PK for hypertable + separate transactions owain 2026-06-06 15:01:39 +01:00
  • ecc077f153 Fix package.json trailing comma owain 2026-06-06 14:48:50 +01:00
  • 9fd12676d1 Remove non-existent polyline-codec package owain 2026-06-06 14:45:26 +01:00
  • 8fdf3df013 Fix frontend build - use npm install instead of npm ci owain 2026-06-06 14:42:28 +01:00
  • e0b09d6d44 Hardcode registry URL to fix variable issue owain 2026-06-06 14:39:27 +01:00
  • 97e79fd020 Hardcode registry URL to fix variable issue owain 2026-06-06 14:39:01 +01:00
  • 5e2b220366 Rename fittracker to milevault throughout owain 2026-06-06 14:12:28 +01:00
  • 1a0d45dd67 Initial Commit owain 2026-06-06 13:23:33 +01:00