Context / Focus for Today
Major feature day with 44 commits: Import AI Plans, Training Readiness Indicator, Mobile UX redesign, Intensity Metrics, Strava Webhooks, and Intervals.icu integration fixes.
Things I Got Done Today
Import AI Plans (Major Feature)
Paste External Training Plans
- New ImportPlanModal with wizard flow (Paste → Preview → Import)
- Users can paste training plans from ChatGPT, Claude, Gemini, etc.
- AI-powered parsing handles markdown tables, plain text, various formats
- Mini-calendar preview shows parsed workouts before importing
- Individual workout editing with accept/reject controls
- "Import" button added to header next to "Plans"
Training Readiness Indicator (Major Feature)
Daily Readiness Score
- Red/yellow/green indicator on each calendar day
- Garmin Training Readiness-inspired methodology
- Weighted calculation factors:
- Body Battery (25%)
- Sleep quality with 3-night weighted average (20%)
- HRV compared to baseline (20%)
- Stress levels with 3-day average (15%)
- Training load / TSB form (20%)
- Tooltip shows contributing factors with +/- indicators
- Click to open full metrics panel
- Only displays for past/current dates (not future)
Mobile UX Redesign (Major Feature)
Form Swim-Inspired Design
- Mobile-shell theme tokens (true black bg, yellow-green accent)
- New 4-tab structure: AI Coach, Calendar, Metrics, Settings
- Circular progress rings and Form Swim patterns
- MobileMetricsView, MobileSettingsView, MobileShell components
High Density Precision Design
- Glass morphism navigation bar with updated labels (Coach, Schedule, Metrics, Focus)
- TrainingStatusCard for PMC metrics display (CTL/ATL/TSB)
- WorkoutIntervalVisualization with visual interval blocks
- SVG readiness gauge, 7-day trend sparklines
- Gradient profile card in Focus page
- Theme updated: off-black (#0A0A0A), sky blue accent (#38bdf8)
- Embedded chat directly in Coach tab (not bottom sheet)
Intensity Metrics (Major Feature)
Expanded Target Options
- All intensity options now enabled in BuildWorkoutModal
- RpeTarget type for 1-10 perceived exertion scale
- percent_lthr unit for threshold HR percentage
- maxHeartRate and thresholdHeartRate in user settings
- HR input fields in ZonesSettings (Running tab)
- Database migration for threshold_heart_rate column
Supported Intensity Types
- Pace (absolute) - min/mi or min/km
- % Threshold Pace
- % Threshold Heart Rate
- % Max Heart Rate
- % Threshold Power (FTP)
- Rating of Perceived Exertion (RPE 1-10)
Intervals.icu Integration
OAuth and Export Fixes
- CALENDAR scope (corrected from CALENDAR:WRITE)
- Quick date range buttons in export modal
- INTERVALS_API_KEY env var fallback for server-side
- Fixed API endpoint parameter passing
- Fixed events array format for API
ZWO Export Bug
- Intervals.icu was parsing description as workout syntax
- Generated their own ZWO with NaN values, ignoring our file
- Fix: Send simple non-parseable description
- Force new event with timestamp in external_id
UX Improvements
Keyboard Navigation
- J/K shortcuts for month navigation (like Google Calendar)
- Ignored when typing in inputs or dialogs open
Bug Fixes
- Handle NaN power values in ZWO workout export
- Hide legacy header on mobile for non-calendar views
- ChatDock z-index fix (no longer overlaps TrialBanner)
- Garmin logo on Reconnect button
- Use lastNight instead of current for HRV display
CI/Infrastructure
Test and Lint Fixes
- ESLint directory error fix (--dir . flag)
- TypeScript errors in structured-workout-utils.test.ts
- createPaceZone and createUserSettings helper updates
- asSimpleStep helper for type narrowing
- WorkoutCard test fix with estimatedDuration fallback
Commits Today
- 44 commits covering major features, fixes, and improvements
- Major: Import AI Plans
- Major: Training Readiness Indicator
- Major: Mobile UX Redesign
- Major: Intensity Metrics
- Feature: J/K keyboard navigation
- Fixes: Intervals.icu OAuth and export
- CI: Lint/type/test fixes
In Progress
- Strava production API access (submitted)
- Intervals.icu integration testing
- Mobile UX design iteration
Targets for Tomorrow
- Mobile UX polish — Finalize High Density Precision design
- Intervals.icu — Verify ZWO exports working correctly
- Readiness indicator — Test with real health data
- Import AI Plans — Test various plan formats
Notes / Observations
- Import AI Plans unlocks plans from any AI assistant users already use
- Readiness indicator brings Garmin-level insights directly to the calendar
- Mobile redesign went through multiple iterations (Form Swim → Apple Fitness → High Density Precision)
- Intervals.icu was silently overriding our ZWO files by parsing descriptions as workout syntax
- J/K navigation is a nice power-user touch borrowed from Google Calendar
- 44 commits shows the power of AI-assisted development with focused iteration
Momentum Score: 10 / 10
Exceptional day with five major features shipped: Import AI Plans, Training Readiness Indicator, Mobile UX Redesign, Intensity Metrics, and Strava Webhooks. The Import AI Plans feature is particularly clever—leveraging the AI tools users already use. Readiness indicator brings professional-grade training insights. Mobile UX went through rapid iteration to find the right design. Intervals.icu integration required detective work to find the description parsing bug.