For Coaches Training & analysis

Macrocycle plans: the basics

What a macrocycle is, how the team-template-to-roster model works, and where to manage plans.

What a macrocycle is

A macrocycle is the long-range training plan that spans 4 to 12 months and anchors to one or more A races. Inside the macrocycle sit mesocycles (3 to 6 week blocks) and microcycles (one week each).

The two kinds of macrocycle plan in Grepiac

The MacrocyclePlan model supports two ownership modes:

A plan can be in three states: draft, active, or archived.

Where the planner lives

Build and edit a plan in the Annual Training Plan page at /athlete/<public_id>/year/ — a visual ATP builder where you lay out the season's periodisation, anchor it to the athlete's A races, and set weekly load targets. It saves to the MacrocyclePlan model (the structure lives in config_json, so it can hold complex builder state without a fixed schema).

Opened for an athlete, the builder seeds Current CTL / ATL from their real training history — the same chronic/acute load numbers the dashboard's fitness chart shows — so the plan ramps from where the athlete actually is. Athletes with no uploaded activities yet fall back to an estimate; either way both fields stay editable.

Editing or removing an athlete's existing plan

If the athlete already has a saved plan, the builder now loads it automatically when you open it, and a banner at the top of the page"Editing saved plan: …" — confirms which plan is loaded and how to edit it (this is the edit flow; you no longer start from a blank form). Change the start date or any input, click Generate overview to rebuild the schedule, then Save and Push (tick replace overlapping dates) to swap the calendar over. That banner also carries two buttons: Reload saved version (discard your edits and pull the saved plan back) and Remove plan (delete the saved plan without leaving the page — already-pushed calendar workouts stay until you re-push or clear them on the calendar).

Shifting the start date later? The race date stays fixed, so a later start compresses the plan — fewer weeks for the same race. The builder still generates it and scrolls you straight to the overview, so watch the phase preview badge above Generate: if it warns the timeline is very tight (for example the endurance block collapses to zero), either start earlier or accept the trade-off. A compressed plan packs the same fitness into less time, so expect amber/red ACWR and CTL-ramp warnings on the chart — those are real injury-risk flags, not errors; ease the ramp or lengthen the lead-in if you can.

Saving and re-editing

Open the builder from an athlete's annual plan page (Athlete → Year → ATP Builder) or from the ATP Manager so it is linked to that athlete — unlinked, the save buttons are disabled with a note (JSON export still works). Save as ATP persists the plan to the athlete (it powers the annual view and calendar summary); when a saved ATP exists, the builder offers Load it into the form so you can re-edit and re-save. Save to Grepiac additionally logs the plan as a calculator result for the Load-from-Grepiac history.

Push to calendar

Save as ATP stores the load-target overlay (the bars and phases on the annual view); it does not create workouts. Push to calendar turns the generated weekly schedule into real planned sessions on the athlete's calendar — every session becomes a ScheduledWorkout with its sport, duration, planned load, phase and intensity, anchored on the Monday of the plan's first week.

Under the hood this builds a one-athlete static training plan and applies it, so the push rides the normal plan machinery: the whole block can be unapplied as a unit from the calendar (still-planned sessions are cleared; anything already completed stays as history). Pushing again replaces the previous push — its still-planned sessions are removed first so you never get duplicates. Generate the plan first; the button confirms how many sessions it will create.

Push to a dynamic plan (multi-season library)

Push to dynamic plan… lays the same dated sessions onto a dynamic plan — a boundless, date-keyed shared calendar — instead of one athlete. Because dynamic-plan entries are keyed by absolute date, you can run the macrocycle planner for several seasons and push each onto the same dynamic plan: the seasons accumulate into a multi-year planning library, and every active subscriber gets all of it on their calendar. Pick an existing plan or name a new one. Leave replace overlapping dates on so re-running one season replaces just that season's dates; other seasons are untouched. Each session spawns a real workout for every subscriber via the normal dynamic-plan sync, so unsubscribe / per-athlete edits behave as usual.

Per-day session caps

Each day card in the microcycle template has a max/day cap (∞/1/2/3, strength included). When the generated schedule would exceed a day's cap, the builder first moves the most movable session (strength, then easiest) to the nearest day with room, else merges it into a same-sport session, else drops it — every adjustment is listed under that week's schedule. Race-day overlays ignore caps on purpose.

For lower-level access the plan is also editable in the Django admin (/admin/core/macrocycleplan/) and readable via the JSON API (/api/macrocycle-plans/).

Mixing ready-made plans with the macrocycle builder

You do not have to run a whole season through one system. The calendar is the common, additive substrate — ready-made plans, an ATP push, and hand-placed library workouts all land as the same scheduled sessions — so you can mix them per discipline.

Example. Drop the Couch to 5K plan (or your own run sessions) on the run, and build swim and bike with the macrocycle builder: apply C25K from the calendar's Library / Plans panel, then generate and push the ATP for the other disciplines.

They coexist safely. A ready-made plan and an ATP push are independent applications on the calendar. Re-pushing the ATP with replace overlapping dates clears only the ATP's own previous sessions — a C25K run plan (or any separately-applied plan) is left untouched.

One gotcha — do not double up the shared discipline. If the ATP microcycle template still schedules run days, pushing it adds run sessions on top of C25K. So set the shared discipline to 0 sessions/day in the microcycle template (the per-day caps above), so the ATP fills only swim, bike and strength and the run stays owned by C25K.

This generalises: any combination of ready-made plans, ATP blocks and your own workouts, layered by discipline — a proven run plan plus custom bike work, a self-coached runner adding structured swim/bike, and so on. See Workout library and ready-made plans.

What a plan holds

Deploying a plan

Team templates are deployed to cascade their structure to every athlete on the team. See Deploying a macrocycle. Individual plans take effect when status is set to active and the configured dates fall within the current calendar window.

Re-planning

Re-plan when:

Re-planning is done by editing the active plan's JSON config (or re-deriving from an updated team template). Previous versions remain in history because the plan record itself is preserved; only the config evolves.

Last updated Jul 26, 2026

Still stuck? Ask us a question and we'll write up an answer.

Ask a question