get default hr and power zones from config file
This commit is contained in:
@@ -67,7 +67,7 @@ site/ Astro project
|
||||
ActivityFeed.svelte Card grid, sport filter, pagination
|
||||
ActivityDetail.svelte Map + stats + charts wrapper
|
||||
ActivityMap.svelte MapLibre GL (gradient track, linked hover dot)
|
||||
ActivityCharts.svelte Observable Plot (elevation/speed/HR/cadence tabs)
|
||||
ActivityCharts.svelte Observable Plot (elevation/speed/HR/cadence/power tabs)
|
||||
StatsView.svelte Yearly heatmap + totals
|
||||
lib/
|
||||
types.ts BAS TypeScript types
|
||||
@@ -199,6 +199,46 @@ const intensity = 0.12 + pctRank(total, sortedDaily) * 0.88;
|
||||
detects the dependency change when the sport filter or scale method changes
|
||||
(plain function calls with static args don't trigger Svelte re-renders).
|
||||
|
||||
## ActivityCharts — controls and athlete zones
|
||||
|
||||
`ActivityCharts.svelte` renders Observable Plot charts for the activity detail page.
|
||||
|
||||
### Chart controls
|
||||
|
||||
- **Metric tabs**: Elevation · Speed · Heart Rate · Cadence · Power
|
||||
- **Chart type toggle** (right-aligned): `↗ Line` | `▭ Hist`
|
||||
- **X-axis toggle** (line mode only, shown when speed data present): `Time` | `Dist`
|
||||
- Distance is integrated from `speed_kmh` at 1 Hz — no extra data needed.
|
||||
- **Histogram controls** (visible only in histogram mode):
|
||||
- **Dual range slider** — trims the x domain; two overlapping `<input type="range">` with CSS track highlight.
|
||||
- **Bins slider** — exact bin count using explicit evenly-spaced thresholds (not d3's "nice" count, which ignores narrow ranges).
|
||||
|
||||
### Athlete zones
|
||||
|
||||
Zones are configured in `extract_config.yaml` under `athlete:` and written into
|
||||
`index.json` at extract time (`owner.athlete`). The Astro activity page reads them
|
||||
from the index and passes them down: `[id].astro` → `ActivityDetail` → `ActivityCharts`.
|
||||
|
||||
When viewing HR or Power in histogram mode, zone boundaries are drawn as dashed
|
||||
vertical rules with Z1–Z5/Z7 labels at the top of the chart.
|
||||
Labels and rules are clipped to the current trim range automatically.
|
||||
|
||||
Zone color palettes:
|
||||
- HR (5 zones): `#60a5fa #4ade80 #facc15 #fb923c #f87171`
|
||||
- Power (7 zones): `#60a5fa #34d399 #facc15 #fb923c #f87171 #c084fc #f43f5e`
|
||||
|
||||
### Zone calculation reference (Coggan)
|
||||
|
||||
| Zone | HR (% max HR) | Power (% FTP) |
|
||||
|------|--------------|---------------|
|
||||
| Z1 | < 55% | < 55% |
|
||||
| Z2 | 55–75% | 55–75% |
|
||||
| Z3 | 75–87% | 75–90% |
|
||||
| Z4 | 87–93% | 90–105% |
|
||||
| Z5 | > 93% | 105–120% |
|
||||
| Z6 | — | 120–150% |
|
||||
| Z7 | — | > 150% |
|
||||
|
||||
## Activity sidecar edits — design spec
|
||||
|
||||
Users edit activities via **sidecar markdown files** that live alongside BAS JSON in the data dir.
|
||||
@@ -348,6 +388,13 @@ are served at `data/activities/images/{id}/{filename}` by the Astro dev server.
|
||||
- [x] `PUBLIC_EDIT_URL` feature flag — unset = no edit UI, set = drawer enabled
|
||||
- [x] Markdown rendering in activity description with image path rewriting
|
||||
- [x] `hide_stats` support in activity detail stats panel
|
||||
- [x] ActivityCharts power tab (elevation/speed/HR/cadence/power)
|
||||
- [x] Chart type toggle: line ↔ histogram
|
||||
- [x] X-axis toggle: time ↔ distance (integrated from speed)
|
||||
- [x] Histogram dual range slider + bins slider (exact thresholds)
|
||||
- [x] Athlete zones in `extract_config.yaml` → `index.json` → chart overlays
|
||||
- [x] StatsView heatmap click-to-pin tooltip (Esc / click-outside to dismiss)
|
||||
- [ ] `bincio render --watch` incremental rebuild on sidecar/data changes
|
||||
- [ ] Highlight badge in activity feed cards
|
||||
- [ ] Image format warning (HEIC → JPEG conversion hint in the upload UI)
|
||||
- [ ] HR / power zone defaults from `max_hr` / `ftp_w` when explicit zones not set
|
||||
|
||||
Reference in New Issue
Block a user