Changelog

What shipped each week.

Week of March 15, 2026

Restore reliable phone-watch workout clearing and sync and swipeable leaderboard card with volume + pr pages.

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
Week of March 8, 2026

Add mute, block, report backend endpoints and add feed engagement tracking — session duration, impressions, taps.

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
Week of March 1, 2026 v1.2.0

Model fallback chain with 12s per-model timeout and in-app ai ask — natural language training queries.

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
Week of February 22, 2026 v1.1.4

Streamline hosted workout sync onboarding and generate apple auth client secrets in service.

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
Week of February 15, 2026

Show current week phase pill (w4 · deload) in planview header and style deload progression pills amber with explanatory header in cyclesummaryview.

See all 114 changes
General
  • Suppress deload recommendation when already in a deload week
  • Show current week phase pill (W4 · Deload) in PlanView header
  • Style deload progression pills amber with explanatory header in CycleSummaryView
  • Intercept cycle boundary to apply deload instead of progression at week 4/8
  • Add applyDeloadTransition and applyPostDeloadTransition to ProgramStore
  • Add ProgressionKind and preDeloadWeights to support functional deload
  • Show contextual hint when no data in selected chart range
  • Add tap-to-callout selection to ExerciseProgressChart
  • Add time range picker pills to ExerciseProgressChart
  • Correct bodyweight exercise display in logger, live activity, and charts
  • Add selectedRange state and filtered data to ExerciseProgressChart
  • Smart defaults baseline and repFloor; fix chart showing wrong exercise
  • Add ChartTimeRange enum with cutoffDate logic
  • Show muscle group with colour in exercise header during logging
  • Filter goals by program in checkpoint, completion, and empty state
  • Show non-program goals with muted styling in detail view
  • Partition goals by program relevance
  • Add goal-program canonical matching helper
  • Correct time window for Strava heart rate data upload
  • Tappable exercise rows in SessionDetailView + media button in ExerciseDetailSheet
  • Display RIR badge in exercise history cards
  • Add RIR prompt UI to FullScreenExerciseView
  • Wire exercise RIR through to session persistence
  • Add rir field to Exercise and LoggedExercise models
  • Add background audio mode for rest timer cues
  • Add Rest Timer Audio toggle to Settings
  • Wire RestTimerAudioManager into AdhocLoggerView rest timer
  • Wire RestTimerAudioManager into LoggerView rest timer
  • Add nonisolated to CalendarSyncService.findOrCreateCalendar
  • Add RestTimerAudioManager with TDD tests
  • Clamp smart defaults reps to repLow for straight sets with fatigue
  • Ensure swap exercise filter pre-selects source muscle group
  • Use detailed targetReps for increaseReps with fatigue patterns
  • Resolve Swift 6 concurrency and misc compiler warnings
  • Add heart rate connection state tracking and watch app improvements
  • Move exercise action icons to workout header row
  • Default swap exercise filter to source muscle group with relevance sorting
  • Add Single-Leg Leg Extension to exercise catalog
  • Constrain live activity rest pill width on lock screen
  • Subtly shrink live activity rest pill without hard sizing
  • Launch watch workout from phone start and mirror HR path
  • Declare exempt encryption in app Info.plist
  • Manage mirrored watch HR stream lifecycle
  • Stream watch heart rate to iphone during mirrored workouts
  • Stream live heart rate in watch workout sync
  • Remove rest pill fixedSize regression in live activity
  • Stabilize live activity rest timer and compact lock-screen pill
  • Live activity goes glass during rest timer countdown
  • Reconcile completedDayIndices when deleting a workout
  • Auto-launch Watch app via HKWorkoutSession mirroring
  • Constrain Dynamic Island compact trailing width
  • Use applicationContext for Watch connectivity reliability
  • Use universal watchOS icon format to resolve TestFlight validation
  • Handle expired restEndDate in Live Activity staleDate calculation
  • Live Activity goes blank during rest timer due to stale date
  • Add complete watchOS icon set for all required altool sizes
  • Add Watch app device icons and NSHealthShareUsageDescription
  • Add auto-scaling property to Watch app icon asset catalog
  • Set ASSETCATALOG_COMPILER_APPICON_NAME for Watch target
  • Add Watch app icon and asset catalog for TestFlight submission
  • Add Apple Watch companion app with live workout sync
  • Prevent logger page overflow and restore rounded edges
  • Prevent dashboard header overlap on narrow widths
  • Stabilize plan day accent color selection
  • Add LSSupportsOpeningDocumentsInPlace and bump build to 6
  • Request HealthKit effort score authorization before saving
  • Save RPE effort score to Apple HealthKit correctly
  • Correct recovery normalization loop logic
  • Add recovery-first hard constraints to guided generation
  • Separate exercise video tap from selection in picker
  • Restore strength level color styling in builder
  • Restore PB gold and retune set completion colors
  • Stabilize dashboard workout accent color selection
  • Add HealthKit workout branding metadata
  • Normalize exercise detail sheet background
  • Isolate history edit logger from draft and progression state
  • Scroll to top when re-tapping Dashboard or Settings tab
  • Filter exercises by compound/isolation preference in TemplatePlan
  • Redesign session detail view and persist effort score
  • Stabilize calendar feed today button and planned-day visibility
  • Dedicated full-screen RPE effort rating before workout summary
  • Smoother Previous sets transition in logger
  • Compact rest timer pill in Live Activity
  • Redesign RPE card to match Apple Fitness style
  • Apple Fitness RPE effort rating on workout completion
  • Tappable week strip, week progress ring, week overview bar
  • Runna-style week strip on dashboard + Rest Day card
  • Monday week start, scroll to today, sticky Today bar
  • Add muscle breakdown to Strava workout description
  • Show all muscles in breakdown (remove +N more) and add to workout summary
  • Hide stale heart rate and improve live activity lifecycle
  • Add unlimited scrolling and floating Today button to calendar feed
  • Unify integration connect/disconnect buttons and add settings pop-to-root
  • Add Apple Calendar integration for workout sync
  • Default to feed view and use subtle mode toggle
  • Show upcoming scheduled workouts in calendar feed
  • Add trainingWeekdays to Program model
  • Make VolumeLevel affect sets per exercise in program generation
  • Use realistic progression rates for 8-week goal targets
  • Add TemplateValidator for detecting compound stacking and volume issues
  • Migrate Strength & Hypertrophy template to declarative TemplatePlan
  • Add declarative TemplatePlan type for composable, equipment-agnostic templates
  • Ensure all default templates include rear delt work for shoulder health
  • Increase calf volume to at least 6 sets/week across all default templates
  • Add direct hamstring exercise to 3-day classic full body template
  • Make Modified PPL the default 5-day program
  • Move Back Squat to position 1 in Push/Pull Push B day
  • Remove deadlift + RDL same-day stacking in strength and push/pull templates
  • Change makeExercise from private to internal for WorkoutTemplate access
  • Correct misleading 'Pull emphasis' label on Upper B day
  • Replace duplicate One-Arm DB Row in bodybuilder template with Rear Delt Fly
  • Remove Glutes from Walking Lunge secondary muscles to prevent double-counting
  • Update recommendation badge colors
  • Revert to original neon green design while keeping rainbow muscle colors
Week of February 8, 2026

Add justfile with local testflight upload commands and refactor historyview to split-view pattern with muscle-colored calendar dots.

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
Week of February 1, 2026

Enhance daydetailview exercise cards with metadata and media button and redesign goaldetailview with hero ring and compact goal rows.

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
Week of January 25, 2026

Enhance exercise type lookup and harden dateformatter usage and add onboarding goal selection screen.

Week of January 18, 2026

Show est. badge on start column when value is ratio-based and add last activity date indicator to programs.

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
Week of January 11, 2026

Add swipe actions for exercises in plan view and add permanent removal option for exercises in loggerview.

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
Week of January 4, 2026

Auto-open loggerview for pending day 1 workout and show onboardingview when user is new.

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