<feed xmlns='http://www.w3.org/2005/Atom'>
<title>biking_home/ride/store.go, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://git.kagamino.dev/biking_home/atom?h=main</id>
<link rel='self' href='https://git.kagamino.dev/biking_home/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/'/>
<updated>2026-08-28T20:38:57Z</updated>
<entry>
<title>Rename rides.type to external_sport_type, infer bike type from Strava sport type and display categories in UI</title>
<updated>2026-08-28T20:38:57Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-28T20:38:57Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=827b55f610119d553b965ceb4d3631f0481bbb3b'/>
<id>urn:sha1:827b55f610119d553b965ceb4d3631f0481bbb3b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Swap ride read path from GPX to FIT for performance</title>
<updated>2026-08-27T17:07:33Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-27T17:07:33Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=4a61f3eb3103aa512bef1b0d82295403bc4bc977'/>
<id>urn:sha1:4a61f3eb3103aa512bef1b0d82295403bc4bc977</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>Add dual GPX/FIT exporter and backfill for rides</title>
<updated>2026-08-27T17:03:34Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-27T17:03:34Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=d7b93325d4f70eeab369fa8a3c4cce9f0c4e0081'/>
<id>urn:sha1:d7b93325d4f70eeab369fa8a3c4cce9f0c4e0081</id>
<content type='text'>
Phase 1 writes both .gpx and .fit on Strava import, adds fit_path
column, renames storage.gpx_dir to storage.rides_dir, and backfills
missing FIT files from existing GPX without breaking CLI progress.
FIT files are gitignored.
</content>
</entry>
<entry>
<title>Extract climb detection into a dedicated climb package</title>
<updated>2026-08-27T09:21:17Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-27T09:21:17Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=825cf388b55a6c8441e02149749bb6e2968477c0'/>
<id>urn:sha1:825cf388b55a6c8441e02149749bb6e2968477c0</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>Lint &amp; fix</title>
<updated>2026-08-27T06:05:58Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-27T06:05:58Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=1e8efcdb7e7747072e83bda3d4a7f0b3810a439d'/>
<id>urn:sha1:1e8efcdb7e7747072e83bda3d4a7f0b3810a439d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add progress bars to the long-running CLI processes (backtest, backfill, extract-osm)</title>
<updated>2026-08-24T10:07:30Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-24T10:07:30Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=a9a384972649182c188396c5f996ae617d35188a'/>
<id>urn:sha1:a9a384972649182c188396c5f996ae617d35188a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add hardcore ride categorisation with bike and ride types</title>
<updated>2026-08-23T19:35:59Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-23T19:35:59Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=08fdd6964fd9ef29356420b035e2d186546f674a'/>
<id>urn:sha1:08fdd6964fd9ef29356420b035e2d186546f674a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge ride and rides packages into ride/store following mountain_pass structure</title>
<updated>2026-08-23T09:09:07Z</updated>
<author>
<name>Martin Kagamino Lehoux</name>
<email>martin@lehoux.net</email>
</author>
<published>2026-08-23T09:09:07Z</published>
<link rel='alternate' type='text/html' href='https://git.kagamino.dev/biking_home/commit/?id=53615a05708ff852af42905e2b5ced66ba70c43d'/>
<id>urn:sha1:53615a05708ff852af42905e2b5ced66ba70c43d</id>
<content type='text'>
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.
</content>
</entry>
</feed>
