Show expected vs actual pace/HR per lap in the Review Queue

Activities recorded from a structured Garmin workout carry a workoutId;
when its steps line up 1:1 with the recorded laps, the per-step target
pace/HR zone is resolved (via a Karvonen lookup for named zones) and stored
on each lap. The Review Queue plots it against the actual per-lap pace/HR
so the user can eyeball whether a run matches its plan while sorting it.
This commit is contained in:
2026-07-19 11:55:13 +02:00
parent 0610897541
commit af41aa0f7f
16 changed files with 666 additions and 47 deletions

View File

@@ -45,6 +45,13 @@ export interface Lap {
IntensityType: string;
HRDriftBpmPerMin: number | null;
HRRecoveryBpmPerMin: number | null;
// Expected band for this lap, resolved from the activity's structured
// Garmin workout when its steps line up 1:1 with the recorded laps. Null
// when there's no structured workout, or the step/lap counts don't match.
TargetPaceLowMps: number | null;
TargetPaceHighMps: number | null;
TargetHRLowBpm: number | null;
TargetHRHighBpm: number | null;
}
export interface ActivityListItem extends Activity {
@@ -111,6 +118,7 @@ export interface KindAssignment {
export interface ReviewQueueItem extends KindAssignment {
activity: Activity;
laps: Lap[];
}
export interface ProgressionPoint {