Changelog

The latest bug fixes, improvements, and features shipped to IronCoaching. We continuously improve the platform based on coach feedback and real-world usage. Every update is tested, reviewed, and deployed to production automatically.

IronCoaching ships updates regularly — from small quality-of-life improvements to major feature releases. Each entry below includes a description and category so you can see what changed and why. Feature requests? Reach out through the support page.

3 June 2026

Feature

Coach Sessions tab: week-by-week view with Grouped/Flat toggle and a Last 7 days filter

The client Workout Sessions tab now groups completed sessions into calendar-week blocks, newest first, with a Grouped/Flat toggle and a "Last 7 days" filter — so you can answer "what did they do last week?" at a glance.

Bug Fix

Per-week program notes now save

Notes added to individual weeks in the program builder now persist correctly through save and reload.

Improvement

Upload longer check-in videos — limit raised to 300 MB

The video upload size limit in messaging has been raised from 200 MB to 300 MB so longer check-in videos go through.

Improvement

The portal auto-recovers after an app update

After a new version ships, the client portal now reloads itself once instead of showing a "Something went wrong" screen when a stale file fails to load.

2 June 2026

Bug Fix

Coach session view shows the real program name

Completed sessions logged against an assigned program now display under that program's name in the coach view instead of "Unprogrammed".

31 May 2026

Bug Fix

Recent workouts group under the right program in history

On the athlete's workout history, recently logged sessions now group under their program instead of falling into "Other".

29 May 2026

Bug Fix

Clear hint when signup is blocked by the captcha

If the captcha fails to load (for example, blocked by a browser extension), the signup form now explains why Complete Setup is disabled instead of doing nothing.

28 May 2026

Feature

Coach self-coaching

Coaches can now add themselves as a client to follow their own programs and log their own training.

Bug Fix

Removed program assignments stay visible in the client's history

Removing a program assignment no longer hides the athlete's logged history for it — past assignments remain visible.

25 May 2026

Improvement

Add up to 100 custom exercises

The custom exercise limit has been raised so coaches with large libraries can add up to 100 custom exercises.

21 May 2026

Improvement

Video uploads recover from stuck or interrupted states

Set and chat video uploads now self-heal from stalled or interrupted states and correctly replace a previous attempt, so a flaky connection no longer leaves a stuck upload.

18 May 2026

Improvement

Cleaner coach session list

The coach's session list now shows a clear "Skipped" badge, collapses duplicate same-day entries, and no longer repeats the program name on every row.

Improvement

CI now blocks new pages that ship over the 170KB performance budget

Internal infrastructure. Every Next.js route's first-load JS is measured (gzipped) on every PR. Two gates: existing routes can't grow by more than 10KB without explicit approval, and new routes can't ship over 170KB (PERF-007). All 78 current routes are grandfathered with their snapshot size — full baseline + cleanup plan documented in `docs/perf-bundle-baseline-2026-05.md`. The bundle-budget script is now also covered by 11 unit tests.

Improvement

Chat video uploads now survive network blips

Video uploads in coach + athlete chat now use chunked + resumable uploads via @mux/upchunk. A dropped Wi-Fi signal mid-upload retries the affected 5MB chunk instead of dropping the whole video. Up to 5 attempts per chunk. Online and offline events are recorded in Sentry breadcrumbs so we can measure where uploads fail. The recorder + per-set video paths already used upchunk; this brings chat to parity.

Improvement

Clear error if a program fails to save

If saving a program fails, the builder now shows an error message instead of failing silently.

Improvement

Foundation for tracking upload and error failures (observability)

Internal change. Added a shared error-mapping helper (`src/lib/error-surface.ts`) keyed by domain (auth, mux, stripe, supabase, nutrition) plus Sentry breadcrumb helpers for the Mux upload pipeline. Every set-video upload now emits stage breadcrumbs (`mux_direct_upload_created`, `db_row_inserted`, plus webhook-side `mux_asset_ready`/`mux_asset_errored`) so we can measure where uploads fail. Same shared helper now powers the auth error mapping shipped in #250 and unblocks the IronLedger mobile observability work.

Bug Fix

Signup errors now show actionable messages instead of "Something went wrong"

When Supabase Auth returns a specific failure code (weak password, rate-limit, captcha, signup disabled, etc.), the signup and login forms now show copy that tells you what to actually do next instead of the generic fallback. The error code is also attached to Sentry events as a structured tag so we can see which failures are happening without reproducing them. Diagnosed from a real customer report: a coach's client had been hitting HTTP 422 silently for days.

13 May 2026

Feature

Athlete nutrition logger v2 — sticky totals ring + Log/Plan/Wellness tabs

Athletes get a neon daily-totals ring (calories + protein/carbs/fat segments) pinned above a tabbed Log / Plan / Wellness body at /client/nutrition. Plan tab Eaten ticks now write directly into the food log (and the ring updates instantly). Wellness tab captures sleep, mood, energy, water, training-day flag, and notes for the coach's weekly review. Date scrubber lets athletes flip back through past days. Autosave indicator surfaces failures instead of swallowing them. Shipped behind PostHog flag nutrition-logger-v2 at 100% on 2026-05-13 (squash-merge 961a6a0, follow-ups a9ac998 + 639f5bf).

4 May 2026

Feature

Athletes can quick-add macros + see daily totals on the dashboard

New Quick Add Macros section on the daily nutrition check-in (carbs / fat / protein, optional name, kcal auto-derived). New Today's Nutrition card on the athlete home shows targets vs logged for kcal and macros, with a training-day badge when training-day targets apply.

Feature

Athletes fill out a self-assessment before their weekly review

The athlete app shows a short self-assessment form on the day a review is due — covering training, nutrition, recovery, and sleep. Coaches see those answers in the Reviews tab before writing their summary, and athletes get an in-app + email notification when the coach completes the review.

Feature

Athlete profile: DOB, timezone, pronouns

New optional fields on the athlete profile — date of birth (feeds future BMR calc), timezone (defaults from browser, used for scheduled content), and pronouns (display only). Edit them under Profile.

Feature

Program builder: grid view

New List/Grid toggle above weeks. Grid shows the entire program at a glance — week × day matrix with the first 3 exercises per cell. Editing stays in List view.

Feature

Athlete: mobile notification bell + grouped workout history

Mobile athletes now have a top header with the notification bell. Workout history defaults to a grouped view — bucketed by week then by program — with a Flat toggle for the original timeline.

Feature

Analytics: session duration + RPE tooltip + per-block volume

Three coach-facing analytics enhancements. New Session Duration chart shows weekly average minutes per workout. e1RM chart tooltip now displays set count and average actual RPE per data point. Volume chart has a per-week vs per-block toggle.

Feature

Athletes can upload a profile picture

Athletes can now set a profile picture from /client/profile — drag/click the avatar tile and pick a JPG, PNG, or WebP up to 5MB. The picture appears in the athlete sidebar in place of the cyan letter circle, and (next ship) anywhere a coach sees the athlete's name.

Behind the scenes, athlete avatars now live in a dedicated athlete-avatars Storage bucket with athlete-write-own / public-read RLS, separated from the coach profile bucket.

Feature

Pick RPE or RIR per program — and only see that one column

Coaches who prescribe in one consistent unit no longer have to look at the combined "RIR/RPE" field on every exercise row. New Intensity unit toggle in the program-builder metadata card lets you pick RPE or RIR for the program. The unchosen column disappears from every exercise row + column header.

Switching modes is non-destructive — any existing values on exercises stay on the data, just out of view. So you can flip mid-program without losing prior prescriptions.

Existing programs without an explicit choice keep showing both options (default RPE) so nothing changes for current work.

Feature

See where a volume change came from

When a coach sees "+41% volume vs the last block", the natural follow-up is "where did that come from?". The macrocycle page now answers it.

Each lift gets a Volume change card showing the headline Δ% vs the previous block. Click it to expand and see:

  • How much of the change came from more sets
  • How much from more reps per set
  • How much from heavier weight per rep
  • Side-by-side block stats (sets × avg reps × avg weight per rep)

The three components sum exactly to the headline (using logarithmic attribution so the cross-term doesn't leak).

Improvement

See at a glance whether an athlete completed, skipped, or hasn't logged each set

Coach-side workout views used to render every non-completed set the same — coaches couldn't tell whether the athlete tried it then bailed, or never touched the row at all. Now sets show three distinct states:

  • Completed — green background, check icon
  • Skipped — pink background, ✕ icon — athlete entered values (weight/reps/RPE/RIR/notes) but didn't tick the set
  • Not logged yet — muted background, minus icon, em-dash for values — athlete hasn't touched the row

Hover any row for a tooltip explaining the state.

Feature

Drag exercises to reorder them — without unintended supersets

After fixing the data-loss bug, coaches still hit a UX gap: dragging an exercise from one single-exercise block to another would merge them into a superset. Now drag-to-reorder works the way coaches think about it.

  • Drag a single-exercise block's exercise grip onto another block — the source block moves to the target's position. No merging.
  • Drag the new block grip on a multi-exercise (superset) block — the whole superset moves to a new position with all its exercises.
  • "+ Superset with…" button under each single-exercise block — the explicit way to convert a single exercise into a superset by adding another exercise to the same block.
  • Empty weeks now show a clear dashed drop zone reading "Drop a day here" instead of an invisible 2px target.

Existing "+ Add exercise to A" inside multi-exercise blocks still merges into the superset (unchanged).

Improvement

Program builder column headers now match what you're editing

Builder column headers used to read `Col 1 / Col 2 / Col 3 / Col 4` regardless of which metric preset the exercise was using. Now they reflect the actual fields:

  • Strength: Sets / Reps / Weight / RIR/RPE
  • AMRAP: Sets / Time Cap / — / RPE
  • Cardio: Duration / Distance / — / RPE
  • EMOM: Rounds / Reps / Weight / Interval

Plus headers now line up with the input cells underneath them.

Bug Fix

Compliance dashboard reflects last 7 days, not just this calendar week

Coach compliance now shows real client activity instead of resetting every Sunday. The compliance widget previously used a calendar-week-since-Sunday window — so a coach checking Monday morning saw `0/N (0%)` even when their athletes had trained 3-4 times the previous week.

The window is now a rolling 7 days, and skipped sessions are excluded from the count (a session marked skipped is the athlete saying "I didn't do this", so it shouldn't credit toward weekly compliance).

Same fix applied to the dashboard "PRs this week" stat for consistency.

Bug Fix

Drag-to-reorder exercises no longer wipes the week

Coaches can now safely reorder exercises and days in the program builder without losing data. Previously, dragging an exercise (or even just a day) would silently delete the entire enclosing week. The day-card was a draggable wrapper, so exercise drags bubbled into the day's drag-state machine; same-week day reorder also had a separate bug that filtered the day out without re-inserting it.

The day grip handle is now a tight wrapper around the icon (matches the week grip), and `moveDayToWeek` correctly handles same-week reorders.

Cross-block / cross-day / cross-week exercise drag is intentionally not part of this fix — the right UX is block-aware and tracked separately.

3 May 2026

Bug Fix

Rep numbers stick in the program builder

Coaches can now reliably set fixed rep numbers in the program builder. Previously, typing over the prefilled default (e.g. replacing `8` with `5`) could leave a transient empty value behind, and the auto-save would persist that empty — so athletes would open the program in IronLedger and see no rep target.

The Reps, Duration, and Distance fields now:

  • Select the prefilled value on focus so typing replaces it cleanly instead of appending (no more `85` when you meant `5`)
  • Buffer your typing locally so a parent re-render mid-edit can't clobber what you just typed

Same defensive pattern that already protects the Sets and RPE/RIR fields.

Improvement

Smarter coach emails for inactive clients

Coach emails for inactive clients are no longer spammy. Previously, once a client crossed 7 days without a workout, the system kept emailing the coach about it every single day. Now the cadence escalates — and never repeats:

  • 7 days — gentle nudge, 'a quick check-in can keep them on track'
  • 30 days — escalation, 'consider a 1:1, plan rework, or pause'
  • 90 days — candid, 'time to decide: re-onboard, archive, or remove'

Each email fires exactly once per client per milestone. Coaches who already had inactive clients at this change's rollout do not get a retroactive blast — the system silenced 65 already-crossed thresholds at deploy time.

2 May 2026

Feature

Strength Intelligence Suite — track Actual, Estimated and Projected 1RM

New 1RM tab on every client's page. Each lift you track shows three side-by-side cards:

  • Actual 1RM — log a tested max from the gym or comp platform.
  • Estimated 1RM — auto-calculated rolling-max e1RM from completed sessions, so deload weeks no longer drag the number down. You can manually override the estimate if the calc is off.
  • Projected 1RM — pulls from AI predictions for Expert-tier athletes, falls back to a 4-week linear trend for everyone else. Source label tells you which.

Every card carries a "↑ Xkg vs previous block" trend so block-over-block progress is visible at a glance. Add as many lifts as you want to the page; selection persists per athlete.

A new Macrocycle Overview page (linked from the client header) ties the whole training arc together: hero best-top-set per main lift with a delta vs the start of the macrocycle, weekly tonnage bars labelled `Block N - Week M`, and the same 1RM strip per lift. One click downloads it as a dark-themed PNG you can post.

Feature

Four new built-in muscle groups: hip extension, hip flexion, adductors, abductors

The exercise library and analytics now distinguish hip extension, hip flexion, adductors and abductors as separate muscle groups. Hip thrusts, glute kickbacks, abductor machines and adductor machines tag correctly out of the box and contribute to the right volume bucket.

Bug Fix

Numeric inputs no longer trap backspace or snap to zero

Hit on the RPE / RIR cells in the program builder, the per-set RPE field on the workout logger, and the macro target inputs in nutrition. Partial decimals (e.g. typing `7.`) and clearing a field with backspace now behave the way you'd expect — no more silent revert to `0`.

1 May 2026

Feature

Notification bell on the athlete sidebar

Athletes get a live notification bell on their sidebar that mirrors what coaches already had — new program assignments, weekly review responses, video feedback, and coach messages all surface here. Tap to deep-link to the source.

Feature

Athlete profile editor — display name and bio in settings

Athletes can now edit their display name and bio from the in-app Settings page. The profile is what coaches see in the marketplace coach-request flow and on every chat thread, so keeping it current matters.

Feature

Custom exercises now capture muscle groups

When a coach creates a custom exercise, the form now asks which muscle groups it trains. The selection feeds the analytics frequency-volume chart and the muscle-group toggle, so custom lifts are no longer invisible to your aggregate-volume view.

Bug Fix

Stability fixes for in-app video annotations and auto-captions

Annotation realtime channels are now scoped per-message UUID, so two simultaneously-open annotated videos no longer cross-broadcast events. Auto-caption track errors are scoped to caption tracks only, instead of triggering for every video element on the page.

Bug Fix

Wearable connection errors now actionable

Failed Oura / Withings / WHOOP connection attempts surface a friendly error and a one-click reconnect CTA on the connection card instead of a silent failure. Cron-side wearable sync failures also flush to Sentry now, so we catch them before athletes notice.

30 April 2026

Feature

Health Alerts — daily digest of at-risk athletes

New Health Alerts surface in the dashboard plus a daily digest email for Pro and Expert coaches. The digest flags athletes who hit thresholds you care about — readiness drops, sleep disruption, low HRV — so you can intervene before adherence slides.

The alert engine reads from the same wearable + workout data that powers the analytics dashboard. Threshold rules ship with sensible defaults and are tunable per coach.

Improvement

Tier resolution rewritten — fewer plan-gate flickers

Plan tier (Basic / Pro / Expert) now resolves from a dedicated `user_subscriptions` row via a single `getCoachTier` helper instead of being read off the auth store on every component. Plan gates are tighter, transient hiccups during webhook processing no longer flicker the UI between tiers, and the dashboard renders the correct gates faster on cold load (ADR 0006 Phase A–B).

27 April 2026

Feature

Dual-role onboarding — coach or athlete in one signup

`/signup` now has an explicit intent toggle (Coach or Athlete) and `/onboarding` adds a role chooser when the system can't infer which path you're on. Athletes who arrive via a coach-profile or marketplace link no longer get trapped in the coach onboarding flow on return visits — they land in the right place every time.

Feature

Non-destructive video trim editor for review and set videos

Trim form-check and weekly-review videos to the moment that matters without re-uploading. The trim is non-destructive — the original asset is preserved, only the playback range changes — so you can re-trim or revert any time.

Works on the per-set form-check videos athletes attach inside sessions and on weekly review uploads.

Improvement

Snappier conversation lists and exercise picker on long lists

The coach and athlete conversation lists, plus the exercise picker modal in the program builder, now virtualise their rows. Coaches with 100+ active conversations or athletes with a 200+-exercise custom library should feel an immediate scroll-and-search improvement (PERF-004).

Feature

Send Feedback moved to the sidebar

The in-app feedback widget is now a permanent Send feedback entry on the sidebar — easier to find, never overlaps the chart you're trying to look at. Submissions still fan out to Linear automatically; nothing else changed in the flow.

20 April 2026

Feature

Per-Set Form-Check Videos

Athletes can now attach a form-check video to any set inside a completed session. Videos travel with the set (exercise, set number, session, week), so coaches review them in-context in the Workout Sessions panel and the Weekly Review video linker — no more fuzzy-matching clips from chat. Videos default to a form-check pool that auto-deletes after 30 days and does not count against coach storage; coaches can promote any video to Kept (or pin it into a weekly review) to persist it permanently against their Pro/Expert video storage quota.

19 April 2026

Bug Fix

Analytics charts now show IronLedger-logged workouts

Fixed a bug where athlete progress charts (e1RM Progression, Training Volume) and coach-side analytics silently dropped workouts logged from the IronLedger mobile app. The two apps share a Supabase project but use different set field names — the aggregation code now handles both formats. Affects /client/progress, /dashboard/analytics, client detail pages, and AI insight prompts.

15 April 2026

Improvement

View Analytics Shortcut on Client Page

A "View Analytics" link now appears next to each client's name on the client detail page. Clicking it navigates directly to the Analytics dashboard pre-filtered to that specific client — no more manually selecting the client from the dropdown.

Improvement

Expandable Session Cards

The Workout Sessions tab on client detail pages now shows expandable cards. Click any session to see full exercise details — sets, reps, weights, e1RM calculations, client notes per exercise, session notes, and coach feedback. Replaces the previous flat list that only showed exercise names and set counts.

Feature

Client Soft-Delete with Grace Period

Coaches can now remove clients with a 30-day grace period. Removed clients appear in a collapsible "Removed Clients" section with a restore button and countdown. After 30 days, all data is permanently deleted including Mux video assets. Coaches can restore clients at any time during the grace period.

Feature

Video Storage Management

Duration-based video storage with tier limits (Pro: 60 min, Expert: 300 min). Storage meter and retention settings in Settings. $5/month add-on blocks for additional storage via Stripe. Auto-delete expired videos based on coach-configured retention policy (3, 6, 12 months, or never). Transcripts and text notes are preserved permanently.

Feature

Weekly Review System

Coaches can now create weekly reviews for each client with a template-driven workspace. Features include: customizable review templates (8 sections — session details, client notes, training videos, volume trends, block progress, AI summary, coach video, coach text notes), 3 starter templates (Quick Check, Weekly Review, Deep Dive), in-app video recorder (webcam, screen share, or both), AI-powered session summaries with block context via Claude, and a "Clients Ready for Review" dashboard widget. Athletes receive reviews in a dedicated Reviews page with coach video playback and transcript.

Bug Fix

RIR/RPE Auto-Detection in Program Builder

The program builder now automatically detects whether a value is RIR or RPE based on the number entered. Values 0-4 default to RIR, values above 4 or decimals default to RPE. Previously, coaches had to type the "RIR" suffix explicitly for it to be recognized.

Bug Fix

Connection Requests Page Fix

Fixed the Connection Requests page showing an infinite loading spinner. The page now handles database query errors gracefully with a fallback query and error banner, instead of leaving coaches stuck on a loading screen.

Improvement

Video Upload Limit Increased to 200MB

Increased the maximum video file size from 100MB to 200MB for chat video uploads. Added clear error messages when file type or size validation fails — previously the file was silently dropped with no feedback.

Improvement

Error Handling Overhaul

Eliminated 23 silent failures across the app. Added toast notification system for user-facing errors. Fixed: notification delivery failures now show warnings, clipboard actions show success/failure, data fetch errors show error states instead of misleading empty states, alert dismiss verifies server response before updating UI. Added Sentry tracking to all error paths.

Feature

Video Transcription & Chapters

Coach video feedback is now automatically transcribed with timestamped segments using Mux auto-captions. AI-generated chapters (via Claude Haiku) are added to videos, allowing coaches and athletes to jump to specific topics. Transcript panel with click-to-seek added to both coach and athlete video detail modals.

8 April 2026

Bug Fix

Nutrition Plan Autosave

Nutrition plans now auto-save after 3 seconds of inactivity with a save status indicator, matching the program builder behavior. No more lost work when navigating away.

Feature

Exercise Library Expansion

490+ built-in exercises across 13 categories including resistance bands, suspension/TRX, strongman, medicine ball, and mobility/rehab. Expanded kettlebell from 5 to 34 exercises. 5 new equipment categories, 7 new equipment types.

7 April 2026

Feature

Media Preview & Message Actions

Images and videos now show a preview before sending with option to cancel. Added message edit (15-min window) and delete with confirmation. Both features work for coaches and athletes.

Feature

Messaging Enhancements

Video button now opens a file picker before uploading. Added emoji picker to compose input. Added iMessage-style message reactions (❤️ 👍 👎 😂 😮 🔥) with realtime sync.

6 April 2026

Feature

Drip Sequences & Broadcast Campaigns

4 behavior-branching drip flows (17 emails) for onboarding, post-client, and post-upgrade. Admin broadcast campaign system with markdown compose, audience segments, scheduled sends, and email dashboard.

Feature

Lifecycle Email Automation

19 automated lifecycle emails: activation nudges, first success celebrations, engagement re-engagement, upgrade prompts, win-back sequences, and monthly newsletter. Category-based unsubscribe with 4 toggles.

Feature

Nutrition Intelligence (Phase 3)

Wearable re-sync & daily cron, nutrition consent for multi-coach sharing, training day auto-detection from workout data, AI nutrition insights with adherence pattern analysis

5 April 2026

Feature

RAG-Powered AI Support Chat

Support chat now answers from actual documentation using hybrid vector + full-text search. 176 doc chunks embedded. Model routing: Haiku for simple, Sonnet for complex queries.

Improvement

LLM SEO: Content Freshness, Schema, Long-Tail Page

dateModified on all marketing pages, CollectionPage schema on blog/guides/templates, new "coaching app for personal trainers" solution page, expanded llms.txt with testimonials and FAQ.

Improvement

LLM SEO: Trust Signals, Review Schema, Dynamic Ratings

About page: platform metrics, coach testimonials, FAQ section. Dynamic aggregateRating from real reviews. Review JSON-LD schema on coach profiles.

Improvement

Redesigned Workout Log Form

Log Workout page rebuilt as a clean post-workout manual entry form matching the program builder style. Removed real-time timer, added date picker, notes per set, streamlined layout.

Bug Fix

Fix program builder silent save errors

Program builder now shows "Unsaved changes" instead of false "Saved" status when a save fails (e.g., RLS violation).

Bug Fix

SEMrush April 2026 Audit Fixes

2 missing blog images generated, 7 broken external links fixed, 3 H1/title duplicates resolved, 21 journal 403 links replaced.

Feature

RPE/RIR Ranges & Per-Set Values

Coaches can now enter RPE ranges (e.g., @7.5-8) and per-set RPE/RIR values (e.g., 0, 1, 2 RIR) in the program builder.

Improvement

Program Weeks Enhancements

Drag-reorder days between weeks and reorder weeks. Week metadata with deload toggle and notes. Week section headers in PDF and XLSX exports.

4 April 2026

Improvement

Program Assignment Notifications

Athletes now receive in-app and email notifications when a coach assigns or updates their program. Uses existing notification infrastructure with immediate email delivery.

Feature

Program Weeks

Organize training days into weekly blocks for periodization. Add, duplicate, and remove weeks in the program builder. Collapsible week sections for easy navigation. Existing programs auto-migrate seamlessly.

22 March 2026

Bug Fix

Fix e1RM analytics data display

Fixed an issue where e1RM charts showed no data for coaches with IronLedger-connected athletes. The analytics hook now correctly handles both IronLedger and IronCoaching workout data formats.

Feature

Set ranges in program builder

The sets field now supports ranges like "3-4" in addition to single numbers. Useful for programs that prescribe a range of sets per exercise.

Improvement

Drag-and-drop visual feedback

Dragging exercises in the program builder now shows visual feedback: the dragged row dims and a cyan indicator shows where it will be placed.

Improvement

RPE/RIR input hints

The RPE/RIR field in the program builder now shows placeholder text ("@8 or 3 RIR") so coaches know the expected input format.

Bug Fix

Fix sets input snapping to zero

The sets field in the program builder no longer snaps to 0 when you clear it to type a new number. Uses a text input with numeric mode for smoother editing.

Bug Fix

Fix ExercisePicker crash on undefined value

Fixed a crash in the program builder exercise picker when the value prop was undefined, causing a TypeError on .trim().

Bug Fix

Fix blog date hydration mismatch

Blog post dates now render consistently between server and client by pinning the timezone to UTC, preventing hydration errors.

Bug Fix

Fix SEO dashboard crash on non-array data

The SEO dashboard no longer crashes when the API returns unexpected data formats. Added defensive guards in the data mapping layer.

Bug Fix

Fix setup guide button on dashboard

The "Open Setup Guide" button on the dashboard now correctly opens the guide panel in the layout.

Bug Fix

Fix service worker registration error

Service worker registration failures (e.g., in incognito mode or unsupported browsers) no longer produce unhandled promise rejections.

15 March 2026

Feature

Notification email system

Automated email notifications for key events: new messages, program assignments, and client invites. Daily digest option. Configurable in notification settings.

12 March 2026

Feature

Annual billing with 20% discount

Added annual billing option for Pro and Expert plans. 20% savings compared to monthly. Toggle on pricing page and settings.

9 March 2026

Feature

Documentation site launched

Full documentation site at docs.ironcoaching.app built with Mintlify. Covers getting started, programs, clients, features, and billing.

8 March 2026

Feature

AI support chatbot (Sparky)

AI-powered support widget on every page. Answers common questions about IronCoaching features, billing, and getting started. Escalates to email when needed.

Feature

Support form

Structured support request form on the /support page. Submits tickets with category, priority, and description.

4 March 2026

Feature

Business dashboard

Coaching business overview: total/active clients, pending requests, average rating. Retention metrics (Pro+) with churn rate, tenure, and 6-month trend chart. Revenue tracking (Expert) with per-client monthly rates and MRR.

3 March 2026

Feature

Client goals with auto-progress (Pro+)

Structured client goals: strength, weight, body composition, habit, and competition types. Progress bars with auto-updating current values from PR data.

Feature

Video feedback with Mux (Expert)

Upload and send video messages in coach-athlete chat. Mux processing for smooth playback. Timestamped annotations for form review.

2 March 2026

Feature

Athlete testimonial system

Athletes can leave reviews for coaches. Reviews display on public coach profiles with star ratings. Shareable review page for each coach.

Feature

Referral system

Coach referral codes with tracking. Referred coaches and signup attribution tracked in the database.

Feature

AI training insights (Expert)

Claude-powered AI analysis of client training data. Streaming SSE responses with per-client and analytics-wide insights. 20/day rate limit with 24h cache.

Feature

AI feedback loop

Coaches can rate AI insights (thumbs up/down) with optional text corrections. Top-rated insights are injected as few-shot examples to improve future responses. Opt-in via Settings.

Feature

AI PR predictions

AI generates structured personal record predictions per exercise. Predictions auto-resolve against actual PR data (within 5% = hit). Accuracy stats feed back into future prompts.