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.