Back to Developer Logs

Build Log — March 4, 2026

Build Log — March 4, 2026

What We Shipped

Power Zones for Cycling

The activity stats modal was showing pace zones for cycling workouts, which is meaningless for bike rides. Fixed: cycling workouts now display power zones instead. The lap calculation also switched from splits to laps for zone breakdowns — more accurate for structured interval work.

Goal Impact on Share Cards

Workout share cards now include a Goal Impact section, showing how the effort connects to your training goals. The same data surfaces in the activity stats modal before you share — so you can see it in context, not just as a social caption. The modal gets a vertical indicator line on the selected chart point too, making it easier to inspect specific moments in the workout.

Nutrition Photo Upload in AI Coach

You can now drop a photo of your meal directly into the AI coach chat. It analyzes what you ate and factors it into the coaching context. Practical addition for athletes tracking fueling alongside training load.

Compliance Shading

Replaced the circular compliance badge icons with full-card background shading. The compliance state is now a lot more visually obvious at a glance — better for scanning a week of training at once.

Garmin Lap Enrichment on Sync

Garmin lap enrichment (which unlocks the detailed interval breakdown) now triggers automatically on both sync and OAuth connect. Previously you had to wait for a manual trigger. First sync now gives you full lap data immediately.

Share Card Polish

Spent time cleaning up how workout share cards render inside Strava's in-app browser — padding fixes, back link visibility, URL bar clearance. Small stuff that makes the difference between a card that looks good and one that looks janky.

Other Fixes

  • Prevented completed activities from syncing back to Garmin as scheduled workouts
  • Fixed iOS Safari fixed-positioning bug on the portal metrics guide sheet
  • Improved contrast on the expired trial banner in light mode
  • Tightened workout recap prompt — shorter, more direct, less coaching-speak filler
  • Bumped recap timeout 5s → 15s to reduce timeout failures
  • Preserved ai_recap, quality_score, and match_status through normalizeWorkout

Heavy day. The share card work alone touched padding, lap data, goal impact, and Strava compatibility. Power zones for cycling was overdue — showing pace to a cyclist was embarrassing. Claude hit its weekly cap by evening; finished the session on Codex.

What's Next

  • Swim recap pace formatting
  • 7-day week view for the planning board