aboutsummaryrefslogtreecommitdiff
path: root/web/views.go
Commit message (Collapse)AuthorAge
* Preview: analyze a raw GPX or FIT file without persisting itMartin Kagamino Lehoux2026-09-06
|
* feat: Analyse and fix elevation issuesMartin Kagamino Lehoux2026-09-01
|
* Add Strava external link to ride detailMartin Kagamino Lehoux2026-08-27
|
* Categorise OSM passes by highway and colour them on the ride detail mapMartin Kagamino Lehoux2026-08-27
| | | | | | | | Passes are extracted from OSM PBF nodes (mountain_pass=yes) and linked to containing ways; highway road values map to road, track to track, path/footway to path, plus hiking for rock/climbing. All passes are kept, coloured distinctly (road/track/path/hiking/unknown) for road-bike validation on ride 397. Single squashed migration adds category column, cheap to re-extract.
* Resync Strava title from list payload via SaveMartin Kagamino Lehoux2026-08-27
| | | | | | | | Context / Problem: Strava titles can be corrected after import. The sync path only handled new rides; existing rides were marked skipped without checking the cheap list metadata, so corrections like ride #789 stayed stale. What: In syncRides reuse the existing Save write path for rare title resyncs (pay GPX parse cost) when existing.Name != list.Name; track progress.Updated and surface it in SSE/TS UI; add tests for resync without stream fetch. Remove the now-obsolete TODO. QA: go test/ vet, tsc, biome/stylelint pass.
* Extract climb detection into a dedicated climb packageMartin Kagamino Lehoux2026-08-27
| | | | | | | | | | | | | | | | | | | Move climb detection, slope, and Cotacol scoring out of ride into a new climb package that operates on a geometry-only Route (distances, elevations, coords). Ride embeds climb.Route and keeps its timing and telemetry columns. - climb.Detect returns []DetectedClimb (Climb + ride-absolute Start). - Climb owns its sliced geometry; indices are local, with Start reported at the detection boundary for absolute position. - Detected bounds use core.Interval; freeRegions claim suppression fixed. - ride no longer builds slices: ClimbFromDist/ClimbFromIndexes/climbFrom and ride.Climb/Interval/Range are removed; rideanalysis, mountain_pass MatchClimb, and web views are rewired to climb types. - New internal/routetest builds climb.Route from the ride DSL; ridetest reuses it and adds timestamps and telemetry. - Tests moved to climb (synthetic detection and difficulty) and kept in ride for GPX-example integration; ride.comparison detection coverage retained. - mountain_pass.nearestCrossing now reuses geo.Nearest.
* analytics groupingMartin Kagamino Lehoux2026-08-25
|
* Make mountain pass and web consumers take ride components instead of a whole ↵Martin Kagamino Lehoux2026-08-25
| | | | | | | | | | Ride rideBounds, nearestCrossing and DetectCrossings now accept the coordinate, distance and elevation component slices they read. LoadMountainPassesAroundRide takes the coords slice only. Web ride view builders and the official climb creation path iterate ride components (Coords, Distances, Elevations) rather than per-index accessors on Ride.
* Handle Strava rate limiting with abort, retry time and daily usage displayMartin Kagamino Lehoux2026-08-23
| | | | | | | | | | | | | Strava sync for 167 rides exceeds the 100/15-min read limit (2 calls per ride). Previously a 429 was treated as a skipped ride, so every remaining ride also failed silently. Now GetJSON returns a typed RateLimitError with RetryAfter computed from Retry-After/Date and X-RateLimit headers (15-min window resets at :00/:15/:30/:45, daily at midnight UTC) and tracks Read/Overall usage. syncRides aborts on 429 with partial progress instead of skipping, and handleSync emits an SSE error with retry time, daily usage vs limit and structured rateLimit snapshot; progress and complete events also carry the snapshot for the UI to display. Frontend shows Read daily/15-min usage in progress details and on completion.
* Add normalized difficulty versus moving duration to analyticsMartin Kagamino Lehoux2026-08-23
| | | | | | | Extend analytics with a second scatter plotting Cotacol per 100 km against moving hours, keep speed versus Cotacol as first chart, render both canvases from shared points, open ride detail in a new tab on dot click, and keep all website copy in English.
* Merge ride and rides packages into ride/store following mountain_pass structureMartin Kagamino Lehoux2026-08-23
| | | | | | | | Consolidate persistence (Save, List, Backfill) into ride/store.go alongside ride.go/climb.go/moving_time.go, rename rides.Ride to ride.StoredRide to avoid collision with parsed ride.Ride, update all web/cli consumers and RideView to use named Ride field, adjust templates and regenerate templ files, and remove rides directory.
* Add distance filter to analytics and go fix to the check gateMartin Kagamino Lehoux2026-08-21
|
* Add global analytics page shell and split server.go by concernMartin Kagamino Lehoux2026-08-21
|
* feat(web): add sortable average speed column to ride libraryMartin Kagamino Lehoux2026-08-21
|
* feat(ride): persist canonical moving time, preserve Strava referenceMartin Kagamino Lehoux2026-08-21
|
* feat(web): add ride library filtersMartin Kagamino Lehoux2026-08-18
|
* feat(web): display nearby passes on ride mapsMartin Kagamino Lehoux2026-08-17
|
* fix(web): use Cotacol for climb difficultyMartin Kagamino Lehoux2026-08-16
|
* refactor(web): derive climb display groupsMartin Kagamino Lehoux2026-08-16
|
* feat(web): improve ride detail climb profilesMartin Kagamino Lehoux2026-08-16
|
* refactor: extract ride analysisMartin Kagamino Lehoux2026-08-14
|
* feat: add official climb workflowMartin Kagamino Lehoux2026-08-14
|
* feat: add interactive ride profileMartin Kagamino Lehoux2026-08-11
|
* feat: Add Strava import progressMartin Kagamino Lehoux2026-08-11
|
* feat: Add ride detail mapMartin Kagamino Lehoux2026-08-11
|
* perf: Load ride values from SQLiteMartin Kagamino Lehoux2026-08-08
|
* feat: Add ride table sortingMartin Kagamino Lehoux2026-08-07
|
* feat: Add web ride library with Strava syncMartin Kagamino Lehoux2026-08-05