This website requires JavaScript.
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