aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* 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.
* Require a 3.5% minimum slope on detected climbs, re-segmenting gentler stretchesMartin Kagamino Lehoux2026-08-21
| | | | | | | | | | | | | | A detected climb must now average at least 3.5% slope with re-segmentation: gentle drags are split into their qualifying steeper parts instead of being reported wholesale or dropped. Qualifying climbs keep their previous boundaries exactly; only regions whose classic best climb averages below the threshold get re-segmented (full-scan for the best qualifying sub-segment, found=false when none exists). QA: A/B across data/rides (362 rides) went from 137 to 133 climbs, 23 rides changed; the 7 fully-dropped rides were audited to contain zero qualifying sub-segments. Example-ride tests updated for the new behavior; the resolved "minimum slope" TODO was removed.
* Add distance filter to analytics and go fix to the check gateMartin Kagamino Lehoux2026-08-21
|
* Componentize and isolate the ride range filterMartin Kagamino Lehoux2026-08-21
|
* Add global analytics scatter chartMartin Kagamino Lehoux2026-08-21
|
* Add global analytics page shell and split server.go by concernMartin Kagamino Lehoux2026-08-21
|
* fix: ride detail summary stats fit on one lineMartin Kagamino Lehoux2026-08-21
| | | | | | | The summary dl used a 3-column grid, so the 4th stat (elevation) wrapped to a second line. Switch to flex with space-around and a smaller gap so all four stats share one line while still wrapping gracefully on very narrow screens.
* Upgrade to Go 1.27 and apply go fix modernizationMartin Kagamino Lehoux2026-08-21
|
* docs: update TODO and ignore juggler local stateMartin Kagamino Lehoux2026-08-21
|
* feat: bound climb detection by matched official climbsMartin Kagamino Lehoux2026-08-21
| | | | | | | | | | | | | | | Detected climbs no longer absorb an official climb's range: official climbs matched to the route by coordinates claim their stored start/end range, and climb detection now runs only in the free regions around them. On ride 263 a single absorbed Cat 2 ascent is split so creating a first-half official climb lets the second half be detected on its own. - ride: add Range, freeRegions, and DetectClimbs(claimed); exclude claimed ranges so a climb never overlaps one - official_climb: MatchClimb now bounds-matches purely by coordinates without needing a detected climb; extract geo.Nearest shared helper - rideanalysis: Analyze builds claimed climbs from matched official climbs and detects only in free regions; render official vs unmatched climbs separately
* refactor(ride): express category thresholds as inclusive min scoresMartin Kagamino Lehoux2026-08-21
|
* refactor(ride,mountain_pass): remove dead code identified by deadcode analyzerMartin Kagamino Lehoux2026-08-21
|
* refactor(ride,rideanalysis): replace magic numbers with named constantsMartin Kagamino Lehoux2026-08-21
|
* Use OSM as the single source of mountain passesMartin Kagamino Lehoux2026-08-21
| | | | | | | Replace the centcols CSV download/enrichment pipeline with OSM PBF extraction as the primary (only) source: merge osmpass into mountain_pass, drop the centcols table and model fields, filter to named passes with elevation, and remove the centcols CLI flags.
* 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(ride): skip rides without track points in backtestMartin Kagamino Lehoux2026-08-20
|
* chore(bench): exclude rides with low moving time ratioMartin Kagamino Lehoux2026-08-20
|
* chore(bench): exclude rides under 10 kmMartin Kagamino Lehoux2026-08-20
|
* chore(bench): exclude short ridesMartin Kagamino Lehoux2026-08-20
|
* fix(ride): use effort metrics for moving timeMartin Kagamino Lehoux2026-08-20
|
* fix(ride): improve moving time against StravaMartin Kagamino Lehoux2026-08-20
|
* feat(ride): compute moving time from GPX with backtestMartin Kagamino Lehoux2026-08-20
| | | | | | | | Add ride.MovingTime, a speed-threshold algorithm over track timestamps. Add a -backtest CLI command comparing computed values against Strava's reference across all stored rides, with a percentile distribution summary. Baseline: mean err 3.9%, p50 1.6, p75 4.6, p90 8.4, p95 12.1, p99 44.9.
* feat(web): add ride library filtersMartin Kagamino Lehoux2026-08-18
|
* fix: match official climbs outside detected boundsMartin Kagamino Lehoux2026-08-18
|
* improved mise configMartin Kagamino Lehoux2026-08-18
|
* update readmeMartin Kagamino Lehoux2026-08-17
|
* feat(web): mark climb boundaries on ride mapsMartin Kagamino Lehoux2026-08-17
|
* feat(web): display nearby passes on ride mapsMartin Kagamino Lehoux2026-08-17
|
* feat(web): add official climb chart gridsMartin Kagamino Lehoux2026-08-17
|
* refactor(web): tidy climb matching controlsMartin Kagamino Lehoux2026-08-17
|
* doc: update readmeMartin Kagamino Lehoux2026-08-17
|
* refactor(web): split ride detail rendering concernsMartin Kagamino Lehoux2026-08-17
|
* feat(web): refine ride profile climb labelsMartin Kagamino Lehoux2026-08-17
|
* chore(web): add Stylelint CSS checksMartin Kagamino Lehoux2026-08-16
|
* feat(web): improve official climb profileMartin Kagamino Lehoux2026-08-16
|
* fix(web): use Cotacol for climb difficultyMartin Kagamino Lehoux2026-08-16
|
* refactor(web): migrate browser code to TypeScriptMartin Kagamino Lehoux2026-08-16
|
* refactor(web): split ride detail JavaScriptMartin Kagamino Lehoux2026-08-16
|
* refactor(web): establish JavaScript module toolingMartin Kagamino Lehoux2026-08-16
|
* refactor(web): extract testable profile logicMartin Kagamino Lehoux2026-08-16
|
* refactor(web): derive climb display groupsMartin Kagamino Lehoux2026-08-16
|
* refactor(web): split official climb profile scriptMartin Kagamino Lehoux2026-08-16
|
* feat(web): improve ride detail climb profilesMartin Kagamino Lehoux2026-08-16
|
* docs: clarify Cotacol step sizeMartin Kagamino Lehoux2026-08-15
|
* refactor: centralize test database setupMartin Kagamino Lehoux2026-08-14
|
* refactor: extract ride analysisMartin Kagamino Lehoux2026-08-14
|
* refactor: split official climb concernsMartin Kagamino Lehoux2026-08-14
|
* feat: add official climb workflowMartin Kagamino Lehoux2026-08-14
|