aboutsummaryrefslogtreecommitdiff
path: root/web/rides.go
Commit message (Collapse)AuthorAge
* Match official climbs against their recorded sampleMartin Kagamino Lehoux2026-09-24
| | | | | | | | | | | | | | | | | | | | | | An official climb matched on endpoint coordinates alone. On a loop ridden the other way the route meets the climb's top before its bottom, so pairing each start with the first end inside its lap window credited a 5.9 km passage as the 850 m Chemin de la Tour Pey Blanc, and a 49 km one on another ride. Climbs now keep the sample of the segment they were created from: the recorded length and elevation gain of the selected route points, captured by the ride detail and preview handlers and stored NOT NULL. Matching takes the whole route and drops any candidate outside ±50% of that sample on either axis, and attempts are refreshed by upsert and prune so re-analyzing a ride keeps the recorded-at stamp of the passages that survive. The backfill leaves the web package: backfill.Run recomputes ride values then official climb attempts as a single `go run . backfill` command (climbs-backfill is gone), rideanalysis owns the attempt snapshot, and the mountain-pass loading margin is shared. Applied to the stored rides it stamps 78 samples, drops the four bogus attempts and leaves ride 800 with its three Pont Rout passages.
* Persist official climb attempts with climbs pagesMartin Kagamino Lehoux2026-09-13
| | | | | | | | | | | | | Record one attempt row per (ride, climb, occurrence) when a ride detail loads, snapshotting distance, elevation gain, slope, cotacol and attempt timestamps; a climbs-backfill CLI command seeds all existing rides. New /climbs list page aggregates attempts (medians computed in Go, best time as min duration) with sortable columns, and /climbs/{id} shows the median scalar stats, a median normalized elevation profile (50 steps over each attempt's own length), the full-precision recorded route of the median-distance attempt on an OSM map, and every attempt with time at second precision.
* Preview: analyze a raw GPX or FIT file without persisting itMartin Kagamino Lehoux2026-09-06
|
* Add Strava external link to ride detailMartin Kagamino Lehoux2026-08-27
|
* Swap ride read path from GPX to FIT for performanceMartin Kagamino Lehoux2026-08-27
| | | | | | Always use FIT for detail, official climb creation and backtest; keep GPX fallback for legacy rides pending backfill. FIT is 10-20x smaller and parses without XML.
* 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.
* 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.
* Add type filtering, drop hard-coded filters and route filter, tune backtestMartin Kagamino Lehoux2026-08-24
|
* 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