| Commit message (Collapse) | Author | Age | |
|---|---|---|---|
| * | Make mountain pass and web consumers take ride components instead of a whole ↵ | Martin Kagamino Lehoux | 2026-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 display | Martin Kagamino Lehoux | 2026-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 analytics | Martin Kagamino Lehoux | 2026-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 structure | Martin Kagamino Lehoux | 2026-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 gate | Martin Kagamino Lehoux | 2026-08-21 |
| | | |||
| * | Add global analytics page shell and split server.go by concern | Martin Kagamino Lehoux | 2026-08-21 |
| | | |||
| * | feat(web): add sortable average speed column to ride library | Martin Kagamino Lehoux | 2026-08-21 |
| | | |||
| * | feat(ride): persist canonical moving time, preserve Strava reference | Martin Kagamino Lehoux | 2026-08-21 |
| | | |||
| * | feat(web): add ride library filters | Martin Kagamino Lehoux | 2026-08-18 |
| | | |||
| * | feat(web): display nearby passes on ride maps | Martin Kagamino Lehoux | 2026-08-17 |
| | | |||
| * | fix(web): use Cotacol for climb difficulty | Martin Kagamino Lehoux | 2026-08-16 |
| | | |||
| * | refactor(web): derive climb display groups | Martin Kagamino Lehoux | 2026-08-16 |
| | | |||
| * | feat(web): improve ride detail climb profiles | Martin Kagamino Lehoux | 2026-08-16 |
| | | |||
| * | refactor: extract ride analysis | Martin Kagamino Lehoux | 2026-08-14 |
| | | |||
| * | feat: add official climb workflow | Martin Kagamino Lehoux | 2026-08-14 |
| | | |||
| * | feat: add interactive ride profile | Martin Kagamino Lehoux | 2026-08-11 |
| | | |||
| * | feat: Add Strava import progress | Martin Kagamino Lehoux | 2026-08-11 |
| | | |||
| * | feat: Add ride detail map | Martin Kagamino Lehoux | 2026-08-11 |
| | | |||
| * | perf: Load ride values from SQLite | Martin Kagamino Lehoux | 2026-08-08 |
| | | |||
| * | feat: Add ride table sorting | Martin Kagamino Lehoux | 2026-08-07 |
| | | |||
| * | feat: Add web ride library with Strava sync | Martin Kagamino Lehoux | 2026-08-05 |
