92cea4dc99
fix: route leaderboards rank by moving time not elapsed — top-10 route times and route completions list now use COALESCE(moving_time_s, duration_s) so mid-activity pauses don't inflate times (consistent with moving-time avg pace)
main
owain2026-07-01 21:04:46 +01:00
acf553ff5c
docs: correct CLAUDE.md drift — beat also schedules sync_all_strava; three nginx configs (dev nginx/, deploy root, in-image SPA) with prod stack using Traefik labels; persist_activity lives in workers/tasks.py; add missing Celery tasks and ui components
owainandClaude Fable 52026-07-01 21:01:42 +01:00
64caaad4e7
fix: cleanup StravaConfig on user delete (FK violation); equalize login timing (user enum); scope upload task-status to owner; SQL-side data-point downsampling; drop unused clsx/react-leaflet deps
owain2026-06-25 12:21:25 +01:00
84eb1c46bd
fix: map settings no longer revert/lose in-flight edits when profile refetches (dirty-flag guards hydrate clobber)
owain2026-06-25 11:04:53 +01:00
3c97595093
feat: persist map tile settings (provider/style/API keys) server-side on user record; unbake Thunderforest default key into backend config (THUNDERFOREST_DEFAULT_KEY) served via profile
owain2026-06-23 12:37:27 +01:00
ffe285b7ba
feat: global map provider/tiles setting (Thunderforest, MapTiler, CARTO, OSM, Esri) selectable in Profile with style + API key + live preview; all maps use it via useMapSettings/resolveTile
owain2026-06-23 12:29:50 +01:00
0901ed0ef3
feat: route tiles use OpenStreetMap standard raster for denser place/street labels
owain2026-06-23 12:11:59 +01:00
62cea59ef8
feat: taller route tiles (h-46), labels overlay above route line for more place names, renamed auto routes become custom (rename clears auto_detected + startup backfill)
owain2026-06-23 12:08:33 +01:00
16dff88564
fix: route tiles fill with fractional zoom (zoomSnap 0) so the route isn't tiny with wide margins; taller tiles (h-36)
owain2026-06-23 12:02:49 +01:00
73bc986219
feat: routes page — deep-link to specific route, sport-colour tiles over real map, sort filter (distance/completions/last-completed), group custom vs auto-detected, taller map tiles
owain2026-06-23 11:57:39 +01:00
4272c5dc4c
feat: rename segments + create routes from an activity (detail page & dashboard recent activities)
owain2026-06-23 11:45:19 +01:00
156ce60aa0
fix: personal records only count watch-recorded FIT activities; exclude phone/Strava GPX/TCX imports (bad GPS teleporting in old activities)
owain2026-06-21 19:51:32 +01:00
e2870e86a8
feat: Activities filters (type/year/date-range/distance) + Summary page with all-time & per-year/per-sport totals and distance-per-year chart
owain2026-06-21 16:29:33 +01:00
69ecdaa4b2
feat: Strava export dry-run preview (new vs duplicate counts + confirm import) and prefer existing Garmin data over Strava on dedup
owain2026-06-21 10:41:54 +01:00
07139120df
feat: Strava support — bulk-export .gz/.tcx import fix + .tcx parser; full Strava API OAuth live sync (activities via streams) with Profile connect UI; colour gym/no-GPS sports red
owain2026-06-21 10:18:09 +01:00
e8615dd12d
frontend: week-filter totals (distance/time/count) on Activities; colour HIIT & gym/no-GPS workouts red
owain2026-06-21 09:40:50 +01:00
7d52b28f9d
frontend: share one BodyBatteryChart component across Health + Dashboard (Dashboard now shows mid-activity pause markers too)
owain2026-06-20 20:16:06 +01:00
e33946e270
feat: avg pace over moving time (fixes elapsed-based pace on paused activities); show mid-activity pauses on Body Battery band via active_spans
owain2026-06-20 20:04:53 +01:00
a0912fd09a
frontend: dashboard recent-activities widget no longer scrolls
owainandClaude Opus 4.82026-06-18 22:00:42 +01:00
c14f3d60fa
frontend: health trend graphs — taller widgets, top-right keys, tighter x-axis spacing, HRV line-only (no fill) with baseline-based Y range, weight/VO2 Y axes scaled to displayed data
owainandClaude Opus 4.82026-06-18 21:47:24 +01:00
227dadaca0
feat: rename activities; keep original Garmin title as a tag
owainandClaude Opus 4.82026-06-18 21:35:09 +01:00
cc43d0f726
frontend: fix health body-battery activity bands not rendering (inline ReferenceArea so recharts recognizes them)
owain2026-06-18 14:08:44 +01:00
471e43466c
frontend: body battery activity overlays on dashboard; redesign highlight as coloured band below the data
owain2026-06-18 13:56:16 +01:00
a50d13179c
frontend: global km/mi distance-unit toggle across dashboard, activities, routes, records
owain2026-06-18 13:01:25 +01:00
e61c77842f
api: send Cache-Control no-store on /api responses so browsers can't cache stale auth state (e.g. garmin connected)
owain2026-06-18 12:07:13 +01:00
385443522b
frontend nginx: no-cache on index.html so deploys aren't masked by stale SPA shell (Edge heuristic caching)
owain2026-06-18 12:00:58 +01:00
66076f2585
garmin sync: fix same-day second activity skipped by date-only dedup
owain2026-06-18 11:38:10 +01:00
3a07655e2e
dashboard sleep widget: fill empty space with hypnogram graph from Health tab
owainandClaude Opus 4.82026-06-16 18:54:49 +01:00
c172bbe393
lap awards: 🥇 PR rows highlighted, 🏆 route lap-best, no awards on partial laps
owain2026-06-16 12:38:29 +01:00
a168f594a7
fix lap-bests distance matching + show PRs on activity page
owain2026-06-16 11:38:12 +01:00
f69d34508d
Sleep hypnogram: hover tooltip with exact times + darker REM colour
owainandClaude Opus 4.82026-06-12 12:33:28 +01:00
e3964bbcdc
Populate sleep_stages hypnogram timeline from Garmin Connect sync
owainandClaude Opus 4.82026-06-12 12:21:21 +01:00
319b04e413
fix(sleep): store sleep timestamps from GMT not Local (displayed +1h in BST)
owain2026-06-12 12:03:16 +01:00
b5b838bddc
Fix treadmill/indoor distance over-measure and clean up polluted PRs
owainandClaude Opus 4.82026-06-11 23:55:21 +01:00
e9cb1ea4e4
Dashboard Running PRs: show fixed 1k, 1 mile, 5k, 10k distances
owainandClaude Opus 4.82026-06-11 23:42:12 +01:00
c05d27c115
Dashboard grid: 1-col min width for stats, vertical compaction for make-room dragging
owainandClaude Opus 4.82026-06-11 23:36:29 +01:00
bb09c37b3d
Dashboard polish: bounded drag push, equal-height stats, dark featured map, sport-coloured weekly bars
owainandClaude Opus 4.82026-06-11 23:31:04 +01:00
491660fc6b
Dashboard: per-widget add/delete, free placement, VO2/HRV stats, body battery graph, more widgets
owainandClaude Opus 4.82026-06-11 23:20:25 +01:00
8ed47d6042
HRV balanced dots, dashed gap lines, dashboard widgets + drag-to-edit layout
owainandClaude Opus 4.82026-06-11 23:04:43 +01:00
af32a0bb7f
Add medals, HRV status dots, smooth segment hover, side-by-side map/timeline, HR zone times
owainandClaude Opus 4.82026-06-11 22:44:20 +01:00
ec87f68729
Add trend-range gating, vehicle filter, sync cancel, moving time, and UI fixes
owainandClaude Opus 4.82026-06-11 19:41:56 +01:00
546fdd96b5
Fix VO2 max sync: robust fallback when maxmet range returns non-list or valueless entries
owainandClaude Sonnet 4.62026-06-07 23:01:18 +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.
owain2026-06-07 19:57:25 +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.
owain2026-06-07 18:15:07 +01:00
bf1920eb9d
Segments and Av HR update
owain2026-06-07 17:12:27 +01:00