Skip to main content
2026.05.26.0139

Training Plans (Beta) — plans land on the schedule

For All Coaches

Last release we shipped the authoring side of Training Plans in beta — the click-to-fill week × day matrix, the multi-slot days, the colored periodization bands. The pieces a coach needs to build a plan.

This release lands the apply side: you can now drop a plan onto a team’s schedule and the athletes see it on their day view. The plan-management suite (unapply, manage scheduled plans) is still cooking, so Training Plans stays in beta for now — but the round-trip from plan to schedule to athlete is real.

Three ways to anchor a plan to the schedule

From any plan in your library, click Apply to open the wizard. Pick one of three anchor modes:

  • Race Date — anchors the plan’s last week to a goal race day. Smagpie back-counts Week 1 Day 1 from the race date so the plan’s day-of-week pattern lines up with race week.
  • End Date — anchors the plan’s final day to a chosen date. Useful when there’s no single goal race but you know when the block needs to end (end of camp, start of a tournament, holiday).
  • Start Date — the classic. Anchors Week 1 Day 1 to a chosen Monday (or any day you pick) and lets the plan run forward from there.

The wizard shows you a preview matrix of exactly what’s about to land: every week and day, with past-week stripes for any weeks that would land before today (skipped automatically — no past-dating), and the race-day or end-day cell highlighted so you can confirm at a glance. Confirm and the whole plan commits atomically — either every assignment lands or none of them do, no half-applied state to clean up.

Choose a target: whole team, or just a team group. The plan’s coaching notes ride along to every assignment that lands.

Plan-linked dots on every assignment

After you apply, every assignment that came from the plan grows a small purple dot in the top-right of its card. It’s there on both the coach’s TeamSchedule matrix and on the athlete’s day view, so the provenance of every workout is visible without opening anything.

Tap the dot to open a popover with:

  • The plan’s title (clickable — opens the plan editor in a new tab)
  • Week N of M for the workout you tapped
  • The target — “Whole Team” or the group name

On the athlete side the popover adds two more things: a race-days-away countdown when the plan is anchored to a race date or end date, and the current periodization phase if the workout falls inside one (“Currently in: Build phase”).

Drag-and-drop in the coach’s TeamSchedule preserves the plan link when you move an assignment to a different day. If you Ctrl-drag (or ⌘-drag on Mac) to copy, the copy explicitly drops the plan link — it becomes a regular ad-hoc duplicate, not a second plan-linked card.

Coaching notes — from plan template to athlete card

Per-workout notes from the plan now flow all the way through. When you apply, the Notes field on each plan-template workout copies into the assignment. The coach’s Edit Assignment dialog gains a 500-char Notes field — visible for every assignment, plan-linked or ad-hoc — so you can tweak notes after the apply or add notes to a one-off workout.

On the athlete’s workout card, any non-empty note renders as an info-blue callout with a COACH label and the note body in italic. It sits between the workout content and the action buttons so it’s visually grouped with the workout but not part of the tap-to-open-detail target. Empty notes render nothing — no empty box, no wasted space.

Athletes get a heads-up

When you apply a plan, every active athlete on the target — whole team or just the group — gets a TrainingPlanApplied notification: in-app via the bell, plus an email. Coaches don’t get notified about their own apply.

The notification is deduped on the apply itself, so a double-click on Confirm or a network-retry from the client can’t double-notify your team. If an individual athlete’s notification fails for any reason (email bounce, push token expired), the apply still succeeds and the other athletes still get theirs — failures don’t roll back the schedule.

Session Tracker reliability

A handful of fixes on the Session Tracker side, mostly aimed at the perpetual “Resume Session” annoyance:

  • Auto-Save abandoned sessions. If an athlete forgets to tap Finish at the end of a workout, the system now finalizes the session in the background — but carefully. A session has to be idle for at least 4 hours and the athlete’s local clock has to have crossed 02:00 before Smagpie touches it. The dual condition is deliberate: a flat 4-hour timeout would cut off long triathlon bricks; a midnight rollover would cut off the 23:00 lifter. Sessions with no logged sets get discarded; sessions with sets get flipped to Complete with totals calculated, and history shows a small Auto-saved chip on the card.
  • Phantom “Resume Session” gone. The dashboard no longer shows RESUME on workouts the athlete never started. (This was a mapping bug — assignments with no session row were being painted as in-progress on the wire.)
  • Rest timer keeps ticking in background tabs. The countdown was freezing when athletes switched to another tab during their rest, because browsers throttle hidden-tab timers. The timer now uses wall-clock time and re-syncs the moment you bring the tab back. And +30s no longer snaps back to the original value after a second — the bump persists like you’d expect.
  • Active Session grab bar tappable on iPhone. The “N exercises remaining” handle at the bottom of the workout screen got a bigger touch target and a slightly larger icon. Easier to hit with a thumb on iPhone, especially on the X-and-newer models with the home-indicator gesture zone right below it.

Plus — Garmin benchmark sync no longer duplicates

When you update an athlete’s threshold pace, FTP, or HR zones, the next sync used to leave a duplicate workout on the watch. The device kept its cached copy AND pulled the updated server-side definition — two workouts where you meant one. The fix replaces the “update in place” branch with a clean delete-then-recreate, which is what Garmin’s API actually wants. Coros and Intervals.icu were never affected.

Heads up — browser will refresh

This release includes a wire-format change for the new plan-link fields on schedule data and the new athlete plan-context lookup, so your Smagpie web app will reload itself the next time you open it. Session Tracker phone apps update on next open as usual.

How this helps your coaching

  • Apply Plan wizard — three anchor modes:

    Pick a plan, anchor it to a Race date, End date, or Start date, preview the matrix that will land on the schedule, then commit. Either the whole plan lands or none of it does — atomic apply, whole-team or one group.

  • Plan-linked dots on every assignment:

    A small purple dot now marks every workout that came from an applied plan — on the coach's TeamSchedule and the athlete's day view. Tap for plan title, week-of, target group, and (athlete-side) a race-day countdown and current phase.

  • Coaching notes flow from plan to athlete:

    Notes attached to a plan's workouts ride along to the assignment AND show up as an info-blue 'COACH' callout on the athlete's workout card. Editable per-assignment from the coach's edit dialog.

  • Athletes get a heads-up when a plan is applied:

    Every athlete on the target gets an in-app + email notification when you apply a plan. Deduped so a double-click doesn't double-notify.

  • Auto-save abandoned sessions:

    If an athlete forgets to tap Finish, the system wraps the session up after 4 hours of inactivity (and only after their local 02:00 has crossed). Subtle 'Auto-saved' chip in history.

  • Garmin benchmark sync no longer duplicates on the watch:

    Updating an athlete's thresholds, FTP, or HR zones now deletes and recreates the vendor-side workout cleanly instead of leaving a duplicate behind.