Added workout library picker to JustTrain page — browse and select from your IntervalCoach workout library instead of only generating AI workouts, with search filtering and one-tap selection
Added support for multi-day goal events (stage races, tours) — the app now recognizes events spanning multiple days from Intervals.icu, extends Race Week phase across the full event duration, shows date ranges in settings, and informs the AI planner about multi-day demands
Added manual phase planning option in Goal Setup Wizard — choose between automatic event-based planning or custom Base/Build/Peak/Taper durations with visual preview bars showing your periodization structure
Added trail running support — if your goal event is a trail race, ultra, or mountain run, workouts now use heart rate zones instead of pace (since pace varies with terrain), include hill repeats and elevation gain targets, and the AI coaching prompts account for trail-specific demands like technical terrain and high-impact descents
Added elevation data tracking — recent activities now capture total elevation gain from Intervals.icu, giving the AI better context for planning workouts that match your terrain
Improved training plan race markers — timeline now shows up to 3 race dots per week with "+N more" indicator for weeks with 4+ events, preventing visual clutter on busy training calendars
Improved goal setup wizard with clearer radio button selection — choose between Goal Event Mode (automatic periodization) or Manual Planning (custom phase control) with large, accessible cards
Added validation for manual phase planning — total phase duration is capped at 52 weeks with clear warning messages and disabled save buttons when limits are exceeded
Fixed training plan current week indicator appearing on wrong week — the timeline now correctly shows the "Current" marker on the actual current week instead of using array position, which caused misalignment when weeks don't start at 1
Fixed dashboard readiness ring turning gray after page load — the recovery indicator now maintains its color (emerald for peak readiness, green for ready, blue for moderate, orange for easy, amber for recovery-only, purple for rest) throughout the entire loading process instead of flickering from the correct color to gray when extended data loads
Fixed HRV4Training recovery scores always showing green — the 1-10 scale normalization now uses your personal baseline instead of hardcoded thresholds, so a bad day for you actually shows as yellow/red even if the absolute number looks high
Fixed multi-day event end date off by 1 day — multi-day events like "fietsweekend dag 1" (May 29-31) were showing end date as Saturday May 30 instead of Sunday May 31 because the code used the START date of the last sibling event instead of checking for actual enddatelocal fields
Fixed CTL ramp rate calculation showing wrong values — the historical ramp rate (used by AI to recommend target CTL) was broken when there were gaps in daily data, sometimes showing 0.1 CTL/week when actual growth was 1.4 CTL/week; now uses date-based lookup to find points exactly 7 days apart over a 90-day window
Fixed AI goal analysis showing low-intensity demands for race events — multi-day events with warm-up stages (like "dag 1: parcoursverkenning") were confusing the AI into listing "Aerobic base, Active recovery" as key demands instead of high-intensity racing; the AI now focuses on the hardest stages when analyzing A/B race events