Back to Developer Logs

Build Log — February 7, 2026

Build Log — February 7, 2026

Context / Focus for Today

Onboarding and polish day. New users now get a guided product tour. Landing page got a mobile-first redesign. Fixed a batch of Intervals.icu export issues for distance-based running workouts. Continued the ESLint cleanup — now at zero warnings.


Things I Got Done Today

Product Tour for New Users

Built an interactive onboarding experience using Driver.js.

  • PR #301 feat: add driver.js product tour for new users — step-by-step walkthrough of key features for first-time visitors
  • Highlights the calendar, AI coach, workout builder, and sync menu

Landing Page Mobile Redesign

Major improvements to the mobile experience.

  • fix: redesign landing page mobile experience for iPhone-sized screens — completely reworked layout for small viewports
  • fix: make navbar logo background transparent
  • fix: use FSinfinity.png for loading spinner logo
  • fix: restore Discord icon to landing page footer

Intervals.icu Export Fixes

Resolved issues with distance-based running workout exports.

  • fix: flatten distance-based repeats for Intervals.icu Zwift sync — nested repeats were causing export failures
  • fix: use ZWO Distance attributes for distance-based running workouts — proper schema compliance
  • fix: pass durationMode to Intervals export + infer from steps — auto-detect distance vs time
  • fix: use description format for all running Intervals.icu exports — consistent output

AI Coach Improvements

Better error handling and usage tracking.

  • fix: show error when AI claims to create workouts but returns none — clearer feedback when something goes wrong
  • fix: add AI usage logging to streaming coach endpoint — track costs per conversation
  • fix: NaN% in AI costs when total is zero — handle edge case in analytics
  • refactor: consolidate AI coach system prompt (59% smaller) — faster, cheaper responses

Code Quality

Eliminated all remaining ESLint warnings.

  • fix: eliminate all 1,736 ESLint warnings (0 errors, 0 warnings) — complete cleanup from yesterday's 464 errors
  • fix: resolve build-blocking type errors in Strava and coach routes

Early Access & Admin

  • feat: add early access middleware and session hint cookie — gate beta features for specific users
  • feat: add per-user activity table to admin analytics dashboard — see who's using what
  • feat: add connected indicators to sync menu service headers — visual feedback for connected integrations

Bug Fixes

  • fix: Strava sync failures — wrong table names, hidden errors, stale error state
  • fix: remove non-existent strava_activity_id column from cron sync
  • fix: workout time estimates now update when step content changes
  • fix: anonymize competitor names to Platform A and Platform B in comparison chart
  • fix: revert Final Surge pricing to $6/mo in comparison chart — fact-checked and corrected

Documentation

  • docs: add detailed Excalidraw architecture diagram of codebase
  • docs: update FORGARRICK.md with Intervals.icu export debugging saga
  • docs: update FORGARRICK.md with invisible AI spend debugging story
  • docs: update FORGARRICK.md with comparison chart fact-checking lessons

Commits Today

  • 1 PR merged (#301 — product tour)
  • Major: Driver.js product tour for new user onboarding
  • Major: Landing page mobile redesign for iPhone-sized screens
  • Major: 1,736 ESLint warnings eliminated (following yesterday's 464 errors)
  • Intervals.icu: Fixed distance-based workout exports
  • AI coach: 59% smaller system prompt, better error handling

Notes / Observations

  • Onboarding matters. New users were dropping off before discovering key features. The Driver.js tour guides them through calendar → AI coach → workout builder in 60 seconds.
  • Mobile-first wasn't mobile-first. The landing page looked rough on iPhone. Fixed with a proper responsive redesign — sticky nav, readable text, no horizontal scroll.
  • Distance workouts are different. Running workouts measured in miles/km need different export attributes than time-based ones. Intervals.icu's ZWO format has specific Distance elements.
  • From 464 → 1,736 → 0. The ESLint cleanup snowballed — fixing errors uncovered warnings. Now CI will catch any new issues immediately.

Momentum Score: 8 / 10

Good progress on user experience and technical debt. The product tour is a real onboarding win — new users will actually discover features now. Mobile landing page is night and day better. Intervals.icu exports are solid for distance-based workouts. The 1,736 warning cleanup feels great — clean codebase, happy CI.