TEMPO

Changelog

What's new in TEMPO

2026-06-29v0.9.0planweb

Garmin-style grouped workout steps

  • Workout steps on the Plan tab now render in Garmin-style groups — warmup, main set, and cooldown visually separated with rep counts and targets.
  • Backend computes the canonical group structure once (planned_scheme.groups) and serves it as the single source of truth; the UI renders it directly without client-side fabrication.
  • Each step shows interval type, duration or distance target, and the zone/effort label sourced from the athlete's own per-sport zones.
  • The shared WorkoutDetailSheet opens from Gantt cells, giving full step detail in a side panel without leaving the calendar view.
2026-06-27v0.8.0airaces

Race predictor & forward forecast

  • A hybrid race predictor combines physics-based models (Critical Power/Speed, Riegel) with a bounded ML residual calibrated on the athlete's own race-effort history.
  • Own mean-maximal curves (dual-source from activity_mean_max) power the CP/CS estimates, so predictions tighten as more data accumulates.
  • Forward forecast endpoint (GET /forecast?weeks=N) projects fitness trajectory — predicted load, volume, and race readiness — up to 12 weeks ahead.
  • Evolution stats track parameter trend direction and auto-experience level, surfaced in the Readiness card alongside the race-time estimate.
2026-06-20v0.7.0nutrition

Calories & fueling targets

  • Per-activity calorie extraction now feeds an athlete-calibrated predictor (calorie_model.py) that produces a predicted_session_kcal for upcoming workouts.
  • The /nutrition/calories-series endpoint exposes a time-series of actual vs. predicted calories, rendered as a toggleable CaloriesChart on the nutrition tab.
  • A fueling_plan() generates sport-appropriate carbohydrate and fluid targets per hour, displayed as a FuelingBlock on the workout detail sheet, plan feed, and dashboard.
  • Fuel targets are sourced from the athlete's zone data and session intensity — no generic defaults.