Explore: personal GPS heatmap tab under Athlete page

- bincio/explore.py: bake_tracks() simplifies GPS coords (RDP ε=0.0001),
  strips to [lng,lat], groups by sport type, writes per-handle tracks.json
- bake-tracks CLI command; render CLI calls _bake_tracks() after each build;
  strava_zip runs it once at end of batch
- /api/me/tracks endpoint serves the baked file; wipe_user cleans it up
- Explore.svelte: MapLibre full-screen map with sidebar — type pills,
  year/month date filter, Lines / Heatmap (global or by-type) view modes
- AthleteView: Explore tab visible only to profile owner (checks __bincioMe)
- Base.astro: fullscreen prop + Planner nav link
This commit is contained in:
Davide Scaini
2026-05-14 14:31:21 +02:00
parent 2daa66d7b0
commit 5307ae287c
10 changed files with 607 additions and 10 deletions
+18
View File
@@ -22,6 +22,24 @@ from bincio.reextract_cmd import reextract_originals # noqa: E402
from bincio.sync_strava import sync_strava_cmd # noqa: E402
from bincio.segments.cli import segments_group # noqa: E402
@main.command("bake-tracks")
@click.option("--data-dir", required=True, help="BAS data store directory.")
@click.option("--handle", default=None, help="Bake one user only (default: all).")
def bake_tracks_cmd(data_dir: str, handle: str | None) -> None:
"""Pre-bake GPS tracks.json for the Explore heatmap page."""
from pathlib import Path
from bincio.explore import bake_tracks
from bincio.render.cli import _user_dirs
from rich.console import Console
console = Console()
data = Path(data_dir).expanduser().resolve()
targets = [data / handle] if handle else _user_dirs(data)
for user_dir in targets:
n = bake_tracks(user_dir.name, data)
console.print(f" [cyan]{user_dir.name}[/cyan]: {n} track(s) baked")
main.add_command(extract)
main.add_command(render)
main.add_command(edit)