Changelog
What shipped each week.
Restore reliable phone-watch workout clearing and sync and swipeable leaderboard card with volume + pr pages.
- Restore reliable phone-watch workout clearing and sync Watch
- Swipeable leaderboard card with volume + PR pages General
- Weekly leaderboard card in social feed General
- Replace donut chart with muscle heatmap on feed cards General
- Social feed UX polish pass General
- Add profile header with avatar to stats and social report views App
- Add master toggle to disable all AI coach features App
- Improve stats deep-dive exercise picker App
See all 79 changes
App
- Seed social profile fields from cache to prevent privacy toggle flash
- Add profile header with avatar to stats and social report views
- Make profile picture tappable in activity detail view
- Apply textPrimary color to username in activity detail view
- Show skeleton instead of empty state during initial feed load
- Add explicit AI opt-in consent flow
- Restore AI coach master toggle
- Align set rows with monospaced digits in exercise cards
- Add divider between feed activity cards
- Use proportional right column in feed cards for smaller devices
- Suppress privacy picker animation on social profile load
- Increase dashboard greeting contrast under top chrome
- Normalize tab header typography and top spacing
- Add shared top safe-area chrome for status bar bleed
- Remove social settings section and centralize setup in feed
- Revert AI coach default back to enabled
- Default AI coach to disabled for new users
- Add master toggle to disable all AI coach features
- Simplify social management UI and remove invite code flow
- Reconcile follow conflict state in social UI
- Improve stats deep-dive exercise picker
- Keep social profile text readable on dark surfaces
- Resolve effort score HealthKit race condition
- Prevent vitals summary text from being clipped
Watch
- Restore reliable phone-watch workout clearing and sync
- Prevent rest timer flicker after logging set
- Prevent weight text truncation for decimal values
- Parse Watch's setCompleted message format in iPhone handler
CLI
- Clamp negative goal progress and filter swapped-out exercises
General
- Polish watch set entry layout and adaptive sizing
- Smooth animations when switching days on Dashboard and feed
- White checkmark on selected day pill for visibility
- Consistent full-width separators between leaderboard and activities
- Visible full-width separator between feed activities
- Clean gap between feed activities matching Strava style
- Load social profile at app startup for dashboard avatar
- Thicker feed divider matching Strava's section separator style
- Show day titles in plan selector, fix checkmark visibility
- Leaderboard profile tap navigation, full-width feed dividers
- Remove card background from leaderboard, move dots below content
- Swipeable leaderboard card with volume + PR pages
- Show social profile picture on dashboard header
- Remove uuid cast in leaderboard UNION query
- Weekly leaderboard card in social feed
- Add program week phase to ask-coach context
- Modernize ScrollView API and fix PR drought duplicate text
- Feed pop-to-root using onReceive, fix PR drought duplicate text
- Always pop to root when switching tabs
- Ensure feed tab tap pops navigation to root
- Align versus lift comparison values in fixed columns
- Replace donut chart with muscle heatmap on feed cards
- Social feed UX polish pass
- Respect haptics toggle for all sensory feedback
- Prevent privacy toggle flash on social profile settings load
- Align date range and period filter on remote profiles
- Set preferred color scheme to dark at app root
- Correct versus comparison levels, names, and bodyweight handling
- Add Versus comparison tab to social profiles
- Don't fall back to logged-in user's avatar on remote profiles
- Make feed activity divider visible
- Parse full ISO 8601 timestamps in social exercise history
- Social exercise history drill-down
- Restore social moderation views to app target
- Fully purge social reports on account deletion
- Use visible feed cursor for pagination
- Refresh social moderation PR
- Review fixes for social moderation PR
- Add feed diagnostics for social debugging
- Add pii-safe social diagnostics to server logs
- Restore gated social settings and improve follow-back flow
- Polish social follow UX and username rediscovery
- Gate feed notifications behind sync session
- Gate social settings behind incremnt sync sign-in
- Align feed empty state and gate ai vitals by coach setting
- Stabilize social profile privacy state and improve feed empty state
- Remove display-name gating from social follow flows
- Improve iPhone compact layouts and training load empty states
- Reconcile social follow state conflicts and upload diagnostics
- Dedupe comments and prevent double count increments
Add mute, block, report backend endpoints and add feed engagement tracking — session duration, impressions, taps.
- Add mute, block, report backend endpoints General
- Add feed engagement tracking — session duration, impressions, taps App
- Add user-specific social profile report from feed App
- Repurpose stats report as profile entry points App
- Unify history card styling with workout summary + show recommendations App
- AI coach settings — data toggles + tone config AI Coach
- Shared priority-signal ranking across AI summary surfaces CLI
- Enrich coach context with PR dates, progression, rep PRs AI Coach
See all 125 changes
App
- Add feed engagement tracking — session duration, impressions, taps
- Add user-specific social profile report from feed
- Repurpose stats report as profile entry points
- Use custom header for Feed tab and hide tab bar when keyboard is up
- Render markdown in AI summary text instead of showing raw ** markers
- Add missing return in WorkoutHeaderData.from(payload:) method
- Unwrap optional URL in fetchComments guard chain
- Show message when AI coach has no insight
- Make set row layout adaptive for smaller screens
- Hide Feed nav title on empty state
- Force dark toolbar color scheme on social feed views
- Improve contrast on social feed controls
- Apply dark theme to social feed views
- Add feed tab pop-to-root behavior
- Preserve ai summary clear control gating
- Suppress weight progression recommendations for time-based exercises
- Allow added weight on time-based bodyweight exercises (plank, dead hang)
- Correct history recommendation lookup and merge
- Unify history card styling with workout summary + show recommendations
- Harden watch live activity snapshot sync
- Prevent set weight/reps from snapping back during editing
- Sync Live Activity when sets are logged from Apple Watch
- Resolve broken DateFormatter references from centralization refactor
- Enhance activity heatmap with labels, streak, and legend
- Modernize deprecated SwiftUI APIs
- Replace hardcoded font sizes with semantic text styles
- Align privacy declarations with actual data usage
- Add scroll-to-top on tab re-tap for Vitals & Programs, fix tab toggle bug
- Stabilise dashboard day card heights to prevent heatmap shift
- Use Apple systemGray5 (#3A3A3C) for Watch icon background
- Use #2C2C2E background for Watch icon for clearer mask visibility
- Remove analytics opt-in toggle to resolve App Store guideline 5.1.2(i)
- Update Watch app icon background to dark grey for App Store guideline 4
- Gate vitals AI summary generation before 6am
- Calendar scrolls to end of plan with phase labels
- Vitals SwiftUI improvements and filter chip ordering
- Don't show scheduled workouts in past weeks on calendar
- Prevent readiness band label word-wrap on narrow screens
- Disable vitals pull-to-refresh regeneration
- Make readiness block dynamic-type friendly
- Add 15-char name limit and remove program builder progress bar
- Explain HealthKit read permissions and AI coaching value
- Prefill weight from Apple Health when authorized
- Add INCREMNT Sync info step and rename Cloud Sync
- Add HealthKit permission step and fix Settings deep link
- Slim down feature tour screenshot frame and remove redundant Done button
- Add feature tour carousel
- Ask coach UX polish and accessibility fixes
- Handle summary-only ask history endpoint
Watch
- Increase tap targets on set logging screen for Watch Ultra
CLI
- Upgrade retired claude-3.5-haiku to claude-haiku-4-5
- Treat bodyweight exercises correctly in AI summaries
- Shared priority-signal ranking across AI summary surfaces
AI Coach
- AI coach settings — data toggles + tone config
- Sharpen AI prompts — silence over filler, voice alignment
- Add plan-switch context to coach notes
- Avoid stuck loading state after ask reset
- Harden ask coach thread handling
- Enrich coach context with PR dates, progression, rep PRs
General
- Add mute, block, report backend endpoints
- Add mute/block/report UI to feed cards, detail, and profile views
- Add social moderation backend — mute, block, report
- Onboarding screenshots fill width with bottom fade
- Add account deletion backend endpoint
- Add account deletion UI and API endpoint
- Name OpenRouter as AI provider and add privacy/terms links
- Bigger onboarding screenshots and tighten subtitle copy
- Increase onboarding feature tour screenshot size
- Icon alignment in resources section of settings
- Social post font, empty post square, and caption design consistency
- Always show reset data section and fix icon alignment in settings
- Address App Review rejection for HealthKit and AI data disclosure
- Reuse Apple Sign-In key for APNs push and normalize private key
- Harden social v2 merge blockers and add automation coverage
- Address PR247 review — privacy, race conditions, force unwraps
- Address PR247 review feedback and media upload edge cases
- Ship social v2 identity profiles media and notifications
- Tighten username backfill guard and isolate social report scratch storage
- Harden social profiles — table scan, LIKE injection, UserDefaults leak, cursor duplication
- Ship identity-first social profiles and full report view
- Catch NO_INSIGHT prefix in AI coach responses
- Reuse session summary views in feed detail
- Sync profile name to display_name on snapshot upload, improve follower list
- Use 'Athlete' as final display name fallback instead of account ID
- Social feed Phase 2 — polish and resilience
- Skip startup dedupe when index exists, use fractional-second cursor
- Harden social activity consistency and like state
- Address Phase 1 review issues on social feed PR
- Harden social follow and feed behavior
- Add social feed — follow athletes, view workouts, like activities
- Increase OpenRouter timeouts and update DeepSeek model ID
- Restore vitals AI summary from persisted history before cache check
- Show BW label for bodyweight exercises on Apple Watch
- Default exercise progress chart to 3M view instead of All
- Finalize open PR follow-up fixes
- Preserve manual temperature history with wrist data
- Source wrist temperature from Apple Watch via HealthKit
- Harden persisted vitals summary contract
- Persist vitals AI summaries and expose via CLI
- Prevent onboarding text clipping on smaller screens
- Stop AI workout summary from questioning programme selection
- Hide AI vitals summary when user has no health data
- Default vitals training load filter to strength
- Use actual current 1RM from session history for goal baselines
- Use encouraging first-week prompt for AI cycle coach
- Prevent catch-up workout showing on freshly activated plans
- Refresh vitals dashboard polish
- Polish custom tab bar motion
- Correct training load baseline behavior
- Animate vitals gauges on appear and dim stale readings
- Use shimmer loading and accent background for vitals AI summary
- Vitals dashboard with health gauges and AI summary
- Align checkpoint ai context with visible goals
- Enhance week checkpoint with progress details and AI coaching
- Show cycle summary on week skip and add skip context for AI coach
- Defer tab navigation until week continuation prompt is resolved
- Prompt to continue week on program switch and clean up rationale
- Navigate to first workout after onboarding and program creation
- Suppress PRs for first-time exercises and add isFirstWorkout to AI summary
- Update audio tests for disabled feature and use vertical equipment cards
- Promote Weak Point Focus to core quick workout presets
- Remove rest timer audio feature and settings toggle
- Replace Apple Health deep link with inline permissions hint
- Clamp bodyweight input to 20–300kg and remove redundant strength level copy
- Add AI disclaimer text to coach features
Model fallback chain with 12s per-model timeout and in-app ai ask — natural language training queries.
- Model fallback chain with 12s per-model timeout AI Coach
- In-app AI Ask — natural language training queries App
- Add transitions across stats, history, detail, onboarding, and muscle views App
- Enhance muscle diagram with greyed-out empty state and unified toggle App
- Sync latest HealthKit bodyweight on app launch App
- Animate logo reveal line-by-line CLI
- Add branding, AI notes, and auth badge CLI
- Show active exercise immediately when workout starts Watch
See all 143 changes
App
- Show seconds for time-based exercises
- Show user message immediately in Ask Coach chat
- Use brain icon only for Ask Coach button
- Replace empty Ask Coach icon with labeled capsule button
- Tweak OtherWorkoutCard layout — icon right-aligned, italic title
- Render markdown in Ask Coach responses + animation polish
- Render markdown in Ask Coach responses
- Address healthkit review findings
- Clear deload sentinels when switching programs
- In-app AI Ask — natural language training queries
- Zoom iOS app icon to match updated watch icon
- Rename analytics toggle to avoid App Store tracking misinterpretation
- Add transitions across stats, history, detail, onboarding, and muscle views
- Enhance muscle diagram with greyed-out empty state and unified toggle
- Sync latest HealthKit bodyweight on app launch
- Write weight to HealthKit when saved in settings
- Add toggleable bodyweight overlay on E1RM chart
- Add HealthKit body mass history query
- Add App Store review prompt after workout completion
- Skip completed program days in calendar sync for current week
- Check completedDayIndices in hasRemainingScheduledDay
- Handle out-of-order workout completion in dashboard week strip
- Show all training days in future weeks of calendar feed
- Show past planned workouts in calendar feed view
- Resolve build warnings and version mismatch
- Allow starting past planned workouts from dashboard and grey out inactive plan button
- Remove custom analytics consent modal (App Store rejection 5.1.2(i))
- Contextual recommendation explanations and badge morph animation
- Ai summary invalidation, regen, and sparkle indicators
- SwiftUI animation polish pass
- Remove redundant 10-second warning notification
- Make Cable Crossover a synonym of Cable Fly
- Apply smart defaults for replacement exercise after swap
- Add missing compound exercises to restTypeByName
- 4-tier rest durations — heavy compound 240s, light isolation 90s
- Track original exercise name when user swaps during workout
- Use movement pattern for Recommended split in PlanSwapSheet
- Add MovementPattern enum and movementPattern(for:) to ExerciseCatalog
- Hide AI coach UI when not signed into sync
- Eliminate race in cycle AI summary persistence
- Sort program exercises by equipment station after generation
- Add EquipmentStation enum and lookup to ExerciseMetadata
- Use correct start time for completed workout events
- Prevent phantom recommendations for unperformed exercises
- Prevent duplicate events from concurrent sync tasks
- Replace feedback mailto with Plane issue creation form
- Don't show open workout card on rest days after rescheduling
- Reset workout timer when restoring stale drafts
- Gate fallback metrics task and fix workout builder race condition
- Share card export now matches in-app preview
- Redesign Instagram share card
- Add projected end-of-week toggle to body heatmap diagram
- Unified 20-segment bar with per-muscle zone ticks and target marker
- Bump existing exercises to 4 sets before adding new ones for volume targets
- Default to first program variation, hide carousel behind toggle
- Add volume floor augmentation and hide bodyweight equipment tier
- Per-muscle hypertrophy thresholds for weekly volume indicators
- Add lightIsolation rep range and program drift detection
Watch
- Break exercise index echo loop between phone and Watch
- Zoom watch app icon so it appears circular on Apple Watch
- Show active exercise immediately when workout starts
- Use per-exercise rest durations instead of single workout-level value
- Drop body copy from no-workout screen
- Update no-workout copy and fix app name in nav title
- Restore startWatchApp to bring Watch to foreground
CLI
- Use matching darkened color for logo shadow
- Animate logo reveal line-by-line
- Add branding, AI notes, and auth badge
- Redesign cycle summary AI with enriched context
- Add goals-list and goals-show endpoints
- Include writeSchema and proposalSchema in contract output
- Add programs show command and agent-friendly improvements
- Correct normalizeSessionState test expectation
- Validate server-supplied verificationUri before opening browser
- Add styled pretty-print output as default for TTY
- Make incremnt installable via npm and add --pretty flag
AI Coach
- Machine-readable error codes, summary error states, hallucination guard
- Improve Ask Coach reliability and thread UX
- Use correct OpenRouter model ID for Haiku fallback
- Model fallback chain with 12s per-model timeout
- Make Ask Coach casual responses conversational
- Reopen cycle summaries and refine notes UX
- Improve coaching UX with plan comparison and polish
- Rewrite coaching prompts to avoid LLM cheerleading, dim sparkle when done
Dashboard
- Remove remaining estimateE1RM reference causing runtime error
- Redesign dashboard UI with updated branding and styling
- Hide Google sign-in option not yet implemented
- Include exercises in session-show and fix field mappings
General
- Scale AI coach response length to question specificity
- Add bodyweight history to snapshot and AI coach context
- Update default OpenRouter model — llama-3.1-8b removed
- Surface HealthKit workouts in calendar and AI coach context
- Reclassify muscle groups — Delts and Lats
- Upgrade Ask Coach prompt and raise max_tokens to 500
- Multi-turn Ask Coach conversations with full chat history
- Rename Ask AI to Ask Coach, add tappable history rows and detail view
- Persist AI model name alongside generated summaries
- Add incremnt mcp install command and postinstall hint
- Parse fractional seconds in Ask AI history dates
- Scroll exercise filter chips to active muscle group on swap
- Persist Ask AI conversations and show chat history
- Add granular shoulder muscle groups (Lateral Delts, Rear Delts)
- Speed up workout finish by deferring HealthKit and skipping redundant cache rebuild
- Remove redundant integration toggles for Strava and Calendar
- Address review findings from March 5 parallel agent work
- Remove on-demand AI workout summary from web dashboard
- Correct watch rest timer state bugs and double save loop
- Commit review enhancements and quality of life fixes
- AI-powered weekly training summaries with on-demand workout coaching
- Use individual muscle groups in exercise swap picker
- Address post-merge review gaps from PRs #115-#122
- Sync Watch exercise navigation to iPhone for Live Activity
- Swap picker now filters on context muscle from the first tap
- Cascade weight/reps to next sets when logging from Watch
- Rename share button from Instagram-specific to generic "Share"
- Preserve set count and weights when swapping an exercise
- Add AI-powered weekly training summaries
- Expose strength plan goals via CLI and sync
- Use starter plan for Postgres database
- Replace file-based sync store with Postgres
- Sync status UI showing stale errors after re-auth
- Strip query params and account IDs from request logs
- Add request logging to sync service
- Parse ISO8601 dates with fractional seconds from sync server
- Recalculate strength goals after session deletion
- Show fallback icon for exercises without video to fix alignment
- Derive week session counter from history instead of completedDayIndices
- Break infinite recursion in expired session check
- Harden sync reliability and add sync status indicator
- Streamline CLI login to skip approval form
- Hosted-first sync UX and test coverage
- Migrate legacy sync credentials
- Harden cloud sync auth and store state
- Hide "-0kg · Deload" for bodyweight exercises in cycle summary
- Post-deload smart defaults use template weights, not deload session
- Calendar/dashboard sync and completed workout navigation
- Address critical security and correctness issues from cloud sync code review
- Persist hosted sync state for repeat uploads
- Correct dashboard plan-day display and currentDayIndex rollback on delete
- Use hosted session for initial sync backfill
- Persist hosted sync session fallback
- Allow workout sync sign-in before config preflight finishes
- Surface apple auth exchange failures
Streamline hosted workout sync onboarding and generate apple auth client secrets in service.
- Streamline hosted workout sync onboarding General
- Generate apple auth client secrets in service General
- Add apple provider support to hosted cli auth General
- Surface hosted google login in cli General
- Rename command to incremnt CLI
- Add program summary and explanation commands CLI
- Add snapshot insights query cli CLI
See all 100 changes
CLI
- Rename command to incremnt
- Add program summary and explanation commands
- Add snapshot insights query cli
General
- Add syncService analytics integration + swift 6 actor isolation fixes
- Streamline hosted workout sync onboarding
- Generate apple auth client secrets in service
- Add apple provider support to hosted cli auth
- Surface hosted google login in cli
- Resolve hosted google device logins
- Build hosted sync service from repo root
- Add hosted sync service preflight checks
- Streamline hosted sync setup links
- Hash sync service tokens at rest
- Add default hosted login resolution
- Open browser during device login
- Add browser approval flow for device login
- Add device login flow for hosted sync
- Issue remote sessions for cli auth
- Harden sync service for hosted deployment
- Add phone developer sync uploads
- Add incremnt dev email login
- Add incremnt sync dev launcher
- Add incremnt sync snapshot uploads
- Add incremnt per-user sync store
- Add incremnt sync service package
- Harden incremnt remote auth and base urls
- Extract incremnt sync service contract
- Verify incremnt remote contract handshake
- Add incremnt session persistence helpers
- Add incremnt cli auth shell commands
- Add incremnt cli logout
- Distinguish incremnt expired auth sessions
- Normalize incremnt cli session state
- Publish incremnt cli capability metadata
- Add incremnt cli transport selection
- Polish strava workout titles
- Expose incremnt cli contract metadata
- Harden incremnt cli read contract
- Persist adhoc drafts for watch sync
- Streamline developer snapshot sharing
- Improve workout finish feedback
- Sync watch exercise selection with iphone
- Rest timer animation, overlap with weekly sets panel, dead code
- Move rest timer inline below last set
- Chart time range filter applies to delta and single-point fallback
- Normalize alias matching in progression flows
- Harden deload and exercise alias matching
- Restore watch heart rate display fallback
- Unify bodyweight added-load display across workout surfaces
- Make workout finish action direct from header
- Tighten weighted bodyweight rules
- Clear xcode build warnings
- Add retention analytics backbone
- Reconcile logger draft sets with planned day counts
- Prompt to persist added exercises to program
- Fix rest timer bar Skip button squishing on small screens
- Use pre-deload program weight for deload explanation text
- Add WatchWidgetExtension bundle ID to match provisioning profiles
- Track pr_achieved event on personal record detection
- Track workout_started and workout_completed events
- Track onboarding_completed and onboarding_skipped events
- Add analytics opt-out toggle, settings_opened and feedback_tapped events
- Wire consent modal and app_opened event on launch
- Add analytics consent modal
- Remove watch connectivity logging, keep rest timer grace period fix
- Add structured e2e Watch connectivity logging + fix rest timer kill bug
- Stop cancelled rest timer task from flooding speech synthesizer queue
- Improve week strip — checkmarks for completed days, clearer selection, dashboard tap resets to today
- Bodyweight exercises default to BW with rep-based PRs
- Add WatchWidgetExtension complication for watch face
- Watch exercise navigation — per-exercise TabView pages, remove dead controls tab
- Include activeExerciseIndex in Watch workout payload
- Add activeExerciseIndex to CurrentWorkout model
- Reset 10s warning flag in addTime() and start() for correctness
- Add T-10s warning haptic to Watch rest timer
- Replace pulse-tone system sounds with speech so audio session bypasses silent switch
- Refresh notification authorization status on app foreground
- Add T-10s background warning notification and remove scheduling race
- Show BW/BW+X weight label for bodyweight exercises on Watch
- Extend BW label and added-weight support to all bodyweight exercises
- Stop ghost rest timer haptics after workout discard
- Watch rest timer survives sleep and restore HR streaming on iOS 26+
- End Watch workout session when iPhone workout finishes or is discarded
- Add workout-processing background mode to Watch app
- Show effort rating without HealthKit and hide HR spinner without Watch
- Recover active workout session so watch app auto-foregrounds
- Cancel rest timer notification when finishing ad-hoc workout
- Restore sets on launch for devices mid-deload on older build
- Deload only reduces weight, no longer removes sets
- Retroactively apply deload transition for devices already mid-deload
- Remove duplicate experience selection screen from onboarding
- Bidirectional watch-iOS sync with weight/reps editing
- Show deload badges on plan view and workout logger during deload weeks
- Detect deload week via preDeloadWeights for mid-deload app updates
- Rewrite watch UI with active set view, rest timer sync, and set logging
- Use program template weights during deload and post-deload weeks
- Resolve close-grip bench press missing media icon
- Resolve 5 deload week bugs — lost sets, skip week, units, phase pill, rounding
- Correct smartExerciseDefaults rep prediction and legacy startTime decoding
- Show deload recommendation badge on exercises during deload week
Show current week phase pill (w4 · deload) in planview header and style deload progression pills amber with explanatory header in cyclesummaryview.
- Show current week phase pill (W4 · Deload) in PlanView header General
- Style deload progression pills amber with explanatory header in CycleSummaryView General
- Intercept cycle boundary to apply deload instead of progression at week 4/8 General
- Add applyDeloadTransition and applyPostDeloadTransition to ProgramStore General
See all 114 changes
Add justfile with local testflight upload commands and refactor historyview to split-view pattern with muscle-colored calendar dots.
- Add Justfile with local TestFlight upload commands General
- Refactor HistoryView to split-view pattern with muscle-colored calendar dots General
- Add local TestFlight upload script General
- Replace exercise pills with muscle breakdown donut chart in feed cards General
- Redesign dashboard and program overview App
- Remove duplicate title from workout description App
See all 34 changes
App
- Redesign dashboard and program overview
- Remove duplicate title from workout description
General
- Add Justfile with local TestFlight upload commands
- Address code review feedback
- Refactor HistoryView to split-view pattern with muscle-colored calendar dots
- Add missing Match certificate step
- Add local TestFlight upload script
- Replace exercise pills with muscle breakdown donut chart in feed cards
- Enhance muscle breakdown visualization and refine colors
- Add privacy manifest for App Store compliance
- Resolve build issues and merge TCX generator
- Enhance Strava upload with HealthKit data & update app icons
- Simplify strava upload description format
- Use system timer for live activity countdown
- Refactor exercise search with color-coding, inline guided start, and restore goal donut chart
- Remove exercises without media from first-pass full gym list
- Avoid false media availability and infer equipment for new lifts
- Add first-pass media-backed full gym exercises
- Support sectioned JEFIT CSV exports
- End live activities reliably across workout flows
- Polish live activity and harden Strava + calorie handling
- Remove NSExtensionPrincipalClass from widget Info.plist
- Resolve 'components' scope error in Strava OAuth handler
- Remove bare 'rear delt fly' alias that conflates dumbbell and machine exercises
- Move tokens to Keychain, fix code style issues
- Extract bodyweightDisplay to shared formatter, fix categorization
- Add @MainActor to KeyboardDismissal for thread safety
- Broaden live heart-rate fallback sampling window
- Always render latest heart-rate value in adhoc workout header
- Always render latest heart-rate value in workout header
- Attach calories independently and improve live heart-rate fallback
- Stream watch heart rate via resilient healthkit fallback without watch app
- Improve heart-rate capture resilience during workouts
- Overhaul ProgramBuilder, modernize HealthKit, and polish UI
Enhance daydetailview exercise cards with metadata and media button and redesign goaldetailview with hero ring and compact goal rows.
- Enhance DayDetailView exercise cards with metadata and media button General
- Redesign GoalDetailView with hero ring and compact goal rows General
- Redesign dashboard for better visual hierarchy and density General
- Add guided start flow for adhoc workouts General
See all 17 changes
General
- Enhance DayDetailView exercise cards with metadata and media button
- Enforce 44pt touch targets and add accessibility labels across logger
- Redesign GoalDetailView with hero ring and compact goal rows
- Redesign dashboard for better visual hierarchy and density
- Add guided start flow for adhoc workouts
- Wire MuscleDetailView sheet from weekly progress panel bar tap
- Add MuscleDetailView for muscle set breakdown
- Add allTimeGrouped method to WeeklySetsCalculator
- Resolve Xcode build errors from incomplete PR #60 merge
- Apply P1 code review fixes to data import/export
- Harden and optimize data import pipeline
- Add workout data import/export runtime
- Apple Watch companion, Instagram export & workout templates
- Polish rest timer haptic feedback
- Complete rest timer haptics polish implementation
- DateFormatter locale/timezone bugs and remove unused inefficient logic
- PR celebration with confetti, haptics, and toast
Enhance exercise type lookup and harden dateformatter usage and add onboarding goal selection screen.
- Enhance exercise type lookup and harden DateFormatter usage General
- Add onboarding goal selection screen General
- Improve exercise name resolution for PRs and metadata lookups General
- Implement WorkoutKit integration General
- Add video icon button and fix bodyweight exercise display General
Show est. badge on start column when value is ratio-based and add last activity date indicator to programs.
- Show Est. badge on Start column when value is ratio-based General
- Add last activity date indicator to programs General
- Add match move animation and fix post-creation navigation General
- Add dynamic exercise context to rest timer notifications General
- Add GoalDetailView with full progress breakdown App
- Show checkpoint/completion modals on launch App
- Update goal progress when workouts complete App
- Integrate BaselineAssessment and GoalPreview into flow App
See all 125 changes
App
- Add GoalDetailView with full progress breakdown
- Show checkpoint/completion modals on launch
- Update goal progress when workouts complete
- Integrate BaselineAssessment and GoalPreview into flow
- Add PlanCompletionView for Week 8 celebration
- Add CheckpointView for Week 3/6 progress check-ins
- Add GoalPreviewView showing 8-week targets
- Add BaselineAssessmentView with equipment-aware input
- Add GoalProjectionCalculator with strength ratios and targets
- Add E1RMCalculator with Epley formula and rounding
- Rename View History to Exercise Details
- Wire chart button to ExerciseDetailSheet
- Add ExerciseDetailSheet container view
- Add MuscleVolumeBreakdown component
- Add ExerciseStatsRow component
- Improve keyboard accessibility in input forms
Dashboard
- Integrate GoalProgressCard
- Add GoalProgressCard widget
General
- Improve small screen layout compatibility for iPhone 12 mini
- Add write permissions for version bump commit
- Remove alpha channel from app icons for App Store
- Add CI keychain setup to prevent signing hangs
- Explicitly set match git branch to master
- Show Est. badge on Start column when value is ratio-based
- Add last activity date indicator to programs
- Use match profile env var for code signing
- Remove matchedGeometryEffect causing console warnings
- Improve program activation animation visibility
- Use actual user bodyweight for pull-up e1RM calculations
- Add match move animation and fix post-creation navigation
- Trigger glow animation consistently when activating programs
- Wrap reset data alert in DEBUG to match function
- Configure manual code signing for CI builds
- Decouple goals from plan start date - historical data now recognized
- Preserve rest timer context across app backgrounding
- Address code review feedback
- Add dynamic exercise context to rest timer notifications
- Add custom exercises management to Settings
- Add Straight Arm Pulldown to exercise catalog
- Update custom exercise UI to match app design system
- Custom exercises no longer default to bodyweight
- Add CI/CD pipeline for TestFlight deployment
- Remove watchOS-only HKWorkoutSession APIs from iOS app
- Wrap watchOS-only HKLiveWorkoutBuilder in #if os(watchOS)
- Use absolute strength standards for goal targets
- Add NameInputView.swift to Xcode project
- Resolve high-severity bugs in goals and recommendations
- Add user name collection and personalization throughout app
- Add program rename, duplicate, and QoL improvements
- Don't record duplicate misses on decreaseWeight recommendation
- Update plan strengthLevel when changing target levels
- Add automated performance test suite
- Address 3 bugs in Logger views and rest timer
- Address 3 bugs in Goal-related views
- Optimize PR checks and historical lookups to O(1)
- Improve rest timer notification reliability
- Update RecommendationExplanation tests for new API
- Add GoalLevelPickerSheet for individual goal editing
- Add goal section to ExerciseDetailSheet (WIP)
- Add Adjust Level button to GoalDetailView
- Add LevelAdjustmentSheet for bulk goal editing
- Add goal target level editing methods to store
- Set targetLevel when creating goals
- Add targetLevel property to LiftGoal model
- Resolve goal tracking bugs and add hasLoggedData support
- Add goal creation, program builder improvements, and plan factory
- Add finishDate computed property to StrengthPlan
- Integrate RecommendationBadge into all views
- Enhance GoalDetailView with live data and improved UX
- Wire MissTrackingStore into recommendation flow
- Add RecommendationBadge with explanation popover
- Add RecommendationExplanation for user-facing copy
- Format retry recommendations
- Implement retry logic in progression algorithm
- Add MissTrackingStore for retry logic
- Add retry case to ProgressionRecommendation enum
- Resolve goal update logic and UI staleness issues
- PR calculation history and dynamic progression increments
- Code review fixes for Stats Tab (DateFormatter, timezone, bounds)
- Drop reps to bottom of band when weight increases
- Stub WorkoutKitManager for iOS 26 API compatibility
- Show 1RM for all completed sets and add leg exercises
- Use calendar week (Mon-Sun) for weekly sets instead of rolling 7 days
- Store point-in-time recommendations with each workout session
- Pass exerciseRecommendationStore to AdhocLoggerView and migrate historical data
- Show smart defaults and recommendations in Plan View
- Smart defaults now correctly populate when starting fresh workout
- Address critical bugs found in deeper code review
- Code review improvements for Stats tab implementation
- Preserve set order in progression logic and optimize history lookup
- Standardize exercises and enhance strength reports
- Resolve StrengthReportView scope error by consolidating code into StatsView.swift
- Restore missing logic and add unit preference support to Strength Report cards
- Remove extraneous closing brace causing build error in StatsView
- Add Strength Report tab to StatsView showing classifications for all 12 exercises
- Correctly display rep-based standards (Push Ups) in SettingsView without unit conversion
- Add remaining requested strength standards and update UI lists
- Update strength standards with extrapolated data from StrengthLevel.com
- Restore navigation functionality in SettingsView by wrapping in NavigationStack
- Add missing semantic colors to AppColors
- Resolve models compilation errors by adding SwiftUI import and correct types
- Resolve StrengthLevel scope issues by moving models to Models.swift and fix closure inference
- Resolve compilation errors in ProgramBuilderFlow and view scoping
- Integrate strength standards into guided program builder for smart defaults
- Add strength standards reference in settings
- Sync exercise values across program days and initialize logger with history
- Compilation error in ExerciseDeepDiveSection
- Timer negative value bug and StatsView compilation error
- Audit haptics and remove history from plan view
- Add PR summary card to exercise deep dive
- Second-round redesign of StatsView with global filters and premium tabs
- Redesign StatsView, add Dashboard history button, and auto-start workouts
- Refactor exercise selection, fix chart alignment, and add day deletion
- Add test data mode with historical session generation
- Enhance stats and dashboard views with completion charts and heatmaps
- Add manual program creation flow and fix navigation
- Add empty state for Stats tab
- Add Records & PRs section with ATH badges
- Add Training Frequency section with heatmap and streaks
- Add Volume Breakdown section with muscle sets and balance
- Add Exercise Deep Dive section with E1RM and volume charts
- Add time period selector and data range header to Stats
- Add Stats tab to navigation
- Haptics respect settings toggle and exercise-specific animation
- Exercise view polish - navigation, animations, and UI improvements
Add swipe actions for exercises in plan view and add permanent removal option for exercises in loggerview.
- Add swipe actions for exercises in Plan view General
- Add permanent removal option for exercises in LoggerView General
- Show weight in Plan view and handle time-based exercises General
- Add custom exercise equipment lookup General
See all 89 changes
General
- Replace swipe actions with context menu in Plan view
- Add swipe actions for exercises in Plan view
- Add permanent removal option for exercises in LoggerView
- Show "bodyweight" for bodyweight exercises in Plan view
- Tapping Workout tab now pops to root when in History view
- Execute onConfirm before dismissing confirmation modal
- Show weight in Plan view and handle time-based exercises
- Add completionDate helper for sessions
- Address code review issues for custom exercises
- Add custom exercise equipment lookup
- Add swipe-to-delete for custom exercises
- Add custom exercise support to AdhocLoggerView
- Add custom exercise support to SwapExerciseSheet
- Sort history sessions by completion time
- Backfill completedAt for legacy sessions
- Add custom exercise button to AddExerciseSheet empty state
- Wire CustomExerciseStore into app environment
- Add AddCustomExerciseView for creating custom exercises
- Save history edits on exit
- Persist logged values to program and simplify rep recommendations
- Add CustomExerciseStore for persistence
- Add CustomExercise model
- Improve progression UI and ensure smart defaults propagate
- Add animation mappings for final 7 exercises
- Add animation mappings for 13 more exercises
- Add missing animation URLs for 11 more exercises
- Implement smart defaults for ad-hoc exercises
- Add missing animation for cable fly and expand media sheet
- Redesign history cards with editable session detail view
- Weekly sets panel counts all exercises for muscle group
- Implement refined progression algorithm from design feedback
- Cascade weight/reps to subsequent sets on completion
- Navigate to dashboard after workout summary dismiss
- Wire up enhanced progression algorithm in logger views
- Implement enhanced progression algorithm with 2-for-2 rule
- Add previousSets lookup to SessionStore
- Add weight increment configuration to ExerciseMetadata
- Add decreaseWeight recommendation type
- Persist exercise recommendations globally across workouts
- Resolve crash from duplicate exercise names in media catalog
- Expand exercise database with 75 new exercises
- Enable exercise media sheet in logger views and fix glassy appearance
- Improve workout logger ux
- Add keyboard Done button to IntegerTextField and remove ineffective toolbar
- Remove redundant pr text badge, trophy icon is sufficient
- Pr badge now moves to best set in workout
- Add UI parity between LoggerView and AdhocLoggerView
- Remove auto-completion from workout logging
- Integrate FAB into custom tab bar
- Resolve iOS 17 deprecation warnings
- Update banner to navigate to adhoc logger
- Make shared views internal and fix confirmationModal call
- Add center FAB for adhoc workout
- Add AdhocLoggerView for quick workouts
- Handle banner navigation when PlanView not alive
- Clear rest timer on workout end
- Resolve orphaned workout in-progress state
- Cancel rest timer notification when finishing workout
- Actually cancel notification when discarding workout
- Improve weight input fields and consolidate formatting
- Cancel rest timer when discarding workout
- Expand exercise catalog with ~40 new exercises
- Restore permanent swap prompt for exercise swapping
- Add decimal keyboard input for weight in logger view
- Resolve glassy empty state in SwapExerciseSheet
- Add optional rest timer notifications
- Simplify workout preview and add context-aware recommendation labels
- Address code review feedback
- Auto-show weekly sets panel when all sets complete
- Rename E1RM to 1RM in all UI labels
- Progress chart now shows useful info with single data point
- Resolve UI issues in full-screen logger
- Rewrite LoggerView with paged TabView for exercise navigation
- Add custom workout header component
- Add full-screen exercise view component
- Add full-screen set row component
- Add E1RM progress chart component
- Add adjustable rest timer bar component
- Add custom rest duration persistence
- Add E1RM history logic for progress charts
- Show Resume button for in-progress workouts regardless of program
- Improve history view and add Watch app foundation
- Swap complete/remove set button positions for better ergonomics
- Workout timers now continue during background/lock screen
- Add HealthKit integration for heart rate and calorie tracking
- Resolve white screen bug when creating program from Programs tab
- Add workout day completion tracking and cycle summary
- Add exercise count to day overview
- Navigate to Workout tab after onboarding
Auto-open loggerview for pending day 1 workout and show onboardingview when user is new.
- Auto-open LoggerView for pending Day 1 workout App
- Show OnboardingView when user is new App
- Pass user weight to program generation App
- Add OnboardingView to orchestrate onboarding flow App
- Show projected exercises in muscle breakdown view General
- Add user profile settings for weight, height, and age General
- Add smooth animation for program switching General
- Replace review step with rich summary card General
See all 91 changes
App
- Auto-open LoggerView for pending Day 1 workout
- Show OnboardingView when user is new
- Pass user weight to program generation
- Add OnboardingView to orchestrate onboarding flow
- Add ProfileInputView for user weight and height collection
- Integrate user weight into program generation defaults
- Add DefaultWeightCalculator for body-weight-based defaults
- Add pendingWorkoutDay for Day 1 handoff
- Add hasCompletedOnboarding flag to ProgramStore
General
- Only show PR badge on first set to beat historical record
- Show projected exercises in muscle breakdown view
- Add user profile settings for weight, height, and age
- Improve program generation logic
- UI improvements for program management
- Add smooth animation for program switching
- Replace review step with rich summary card
- Add ProgramSummaryCard with body heatmap and volume breakdown
- Add ExpandableMuscleRow component for summary
- Add volume configuration step to builder flow
- Add swipe-to-delete for programs
- Add delete method to ProgramStore
- Add exerciseContributions helper for summary card
- Replace 5-day hybrid with bro split
- Add dynamic volume targeting to ProgramBuilder
- Add VolumeLevel enum and volumeLevel to Program
- Add missing ExerciseMedia files to Xcode project
- Project weekly sets using calendar-week program completion
- Store program day metadata on sessions
- Show latest recommendation on program day
- Update program recommendations on workout finish
- Persist latest recommendations in program store
- Update LoggerView WeeklyProgressPanel to use shared components
- Update DashboardView with all new components
- Add DualBodyDiagramView with side-by-side layout and 3D-style rendering
- Add TrainingInsightsCard and RecommendationEngine
- Add MuscleSetBreakdownView with expandable exercise details
- Add ExerciseContribution model and computation methods
- Add MiniBodyIcon component for muscle identification
- Add SegmentedSetBar component with discrete countable segments
- Compute detailed progression recommendations
- Add structured recommendation model and formatter
- Resolve pbxproj id collision
- Add tall dashboard heatmap card with toggle
- Add front/back body diagram with improved anatomy
- Improve logger exercise actions menu
- Add rest timer bar formatter
- Add BodyDiagramView.swift to Xcode project
- Add expected duration calculator to plan view
- Correct legend colors and muscle key casing
- Add exercise metadata for rest and equipment
- Add body diagram visualization to Dashboard
- Add programs tab and workout builder
- Update dashboard body heatmap and weekly sets styling
- Stabilize history sheet navigation
- Add history calendar view
- Add history calendar logic
- Add stable workout session ids
- Add pr and progression to history
- Add PR badges in logger
- Add 1rm helpers
- Add workout history tab
- Add swap exercise sheet
- Add analytics charts
- Improve media matching and set controls
- Autoplay exercise image frames
- Expose exercise image frames
- Load exercise media from bundled json
- Add set controls and collapse
- Add exercise animation sheet
- Add logger options sheet
- Add keyboard dismissal
- Color weekly sets bars
- Live weekly sets in logger
- Add weekly range helper
- Add analytics weekly sets
- Add logger weekly progress and session save
- Add session store
- Add weekly sets calculator
- Add logged session models
- Add in-workout weekly sets progress
- Add weekly mode toggle and sets summary
- Add weekly sets computation
- Add secondary muscle metadata
- Add local session storage helpers
- Apply progression badge logic in logger
- Add inline editing for workout sets
- Add progression recommendation logic
- Add placeholder tabs for navigation
- Add logger flow with progression badges
- Add Plan tab with swipeable 4-day program
- Add mock models and progression logic