All articles
Personalization

How WodPilot Writes Your Workout — In 4 Steps

<em>The personalization engine behind every program: from your goals to your barbell.</em>

You walk into the gym and see a whiteboard WOD. It's well-written, probably tested, definitely challenging. But it wasn't written for you.

Maybe you're coming off a heavy squat cycle and need engine work. Maybe you've got a shoulder mobility gap that's been holding back your gymnastics. Maybe you're three weeks into a qualifier prep block and your weak point isn't what it was two weeks ago. A static WOD can't know that. It can't adjust.

This is where personalization stops being a nice-to-have and becomes the difference between training that moves you forward and training that just fills time.


Why Generic Programming Leaves Gaps

Every athlete has a different story: different goals, different weaknesses, different positions in their training block. A strength-focused athlete three weeks into a qualifier prep block needs different stimulus than a general fitness athlete in a maintenance phase. Someone with a history of shoulder issues needs different accessory selection than someone who's never had a problem.

Generic programming tries to be everything to everyone. It optimizes for the average. But you're not average — your training should reflect that.

WodPilot's prescription engine works in four steps to build workouts that fit your story, not a template. Each step uses the same currency: stress across four training domains. No parallel taxonomies, no competing systems. One language, one logic.


Step 1: Calculate Your Ideal Stress for Today

Before we can write a workout, we need to know what you actually need. That means computing the ideal stress levels across four training domains: strength, engine, gymnastics, and core.

This isn't guesswork. It's built from three inputs: your stated goals, your identified weaknesses, and where you are in your training block.

Different goals demand different stress profiles. A general fitness athlete and a qualifier-focused athlete need different things.

The Science

Ideal stress targets vary by training phase and goal:

  • General fitness goal: strength 7.5, engine 7.5, gymnastics 7.5, core 5.0
  • Qualifier prep goal: strength 9.0, engine 9.0, gymnastics 9.0, core 6.0
  • Return-to-training phase: strength 5.0, engine 5.0, gymnastics 5.0, core 3.0

These targets represent stress intensity in a unified system called LEVEL_1_BUCKETS, the atomic unit of training prescription.

But your goal is only one input. If your assessment shows that gymnastics is a weakness — maybe your muscle-ups are inconsistent, or your handstand hold needs work — the engine lifts that domain's target upward. If you're in week three of a four-week block, your targets shift again based on block position and periodization logic.

The result: an ideal stress profile for today that accounts for where you've been, where you want to go, and what needs the most attention right now.

How WodPilot Uses This

Every session starts with ideal_today_levels(), a function that ingests your goal, your weakness profile, and your block position, then returns your target stress across all four domains. This becomes the north star for everything that follows. It's the answer to: what should this workout contain?

Why This Matters For Your Training

Without this step, you're training blind. You don't know if today's workout is actually addressing your needs or just filling a slot on the calendar. With it, every session has a clear purpose tied to your specific story.


Step 2: Measure What the Class WOD Actually Delivers

Now we have your ideal stress profile. The next step is to know what the day's class WOD actually contains.

Every movement has a stress signature: how much strength demand it creates, how much engine demand, how much gymnastics and core. A heavy back squat for singles is high strength, low engine. A 12-minute AMRAP of light power cleans and box jumps is high engine, moderate strength. A skill block of handstand holds is high gymnastics.

We compute the total stress across all domains that the class WOD covers. This is session_stress_from_movements() — a function that reads the prescribed movements and returns their aggregate stress profile.

The Science

Every movement carries stress across the four domains. The class WOD is a collection of movements. By summing the stress contribution of each movement, we get a complete picture of what the session delivers:

  • Strength stress from barbell lifts, heavy singles, doubles, triples
  • Engine stress from high-rep work, short intervals, sustained efforts
  • Gymnastics stress from skill work, bodyweight movement, technical complexity
  • Core stress from loaded carries, planks, anti-rotation work

This aggregation uses the same LEVEL_1_BUCKETS currency, so it's directly comparable to your ideal profile.

This is where personalization becomes real. The class WOD might be excellent, but it might not match what you need today. Maybe it's heavy on engine and light on gymnastics, but your weakness is gymnastics. Maybe it's balanced for a general athlete, but you're in qualifier prep and need more intensity. Now we know exactly where the gap is.

How WodPilot Uses This

We parse the class WOD's movements and compute their aggregate stress across all domains. This becomes the baseline. It's not a judgment — the WOD might be perfect for someone else — but it's data. It tells us exactly what you're getting and what you're not.

Why This Matters For Your Training

You now have clarity on whether the class WOD aligns with your needs or whether you need to modify it. No guessing, no generic advice. Just facts about what the workout contains and what your training plan requires.


Step 3: Identify the Deficit

You have your ideal stress profile. You know what the class WOD delivers. Now comes the gap analysis.

Step three is deficit_levels() — a simple subtraction: ideal minus actual. What stress are you not getting from the class WOD?

Maybe the class WOD is perfect in strength and engine but undershoots gymnastics by 2.5 levels. Maybe it overshoots engine and undershoots core. Maybe it's balanced overall but misses a specific weakness you're trying to address.

The deficit is an opportunity, not a failure. It's the precise answer to: what should your accessories be?

The Science

The deficit is computed for each domain independently:

  • Strength deficit = ideal strength stress − actual strength stress from class WOD
  • Engine deficit = ideal engine stress − actual engine stress from class WOD
  • Gymnastics deficit = ideal gymnastics stress − actual gymnastics stress from class WOD
  • Core deficit = ideal core stress − actual core stress from class WOD

A positive deficit means you need more of that domain. A negative deficit means the class WOD already exceeds your target (which is fine — it means you're getting bonus stimulus in that area).

This is the moment where personalization becomes visible. Two athletes in the same class can have completely different deficits. One might need gymnastics work; the other might need core. The system now knows exactly what each person needs.

How WodPilot Uses This

The deficit becomes the specification for accessory selection. Instead of recommending generic "extra work," we know exactly which domains need attention and how much stress they need. This drives the next step.

Why This Matters For Your Training

Accessories stop being random. They're targeted, precise, and tied directly to your needs. You're not doing extra work because it's "good for you" — you're doing it because your training plan identified a specific gap and chose movements to fill it.


Step 4: Pick Movements That Fit Your Reality

Now we know exactly what stress you need. The final step is selecting movements that deliver that stress while respecting your constraints.

This is where theory meets reality. You might need gymnastics stress, but if you have a shoulder issue, certain movements are off the table. You might need core work, but if your gym doesn't have a sled, some options disappear. You might need strength stimulus, but if you're fatigued from the class WOD, high-complexity movements aren't ideal.

Step four is pick_movements() — a function that filters the universe of possible accessories by four constraints: equipment availability, skill level, injury history, and current readiness.

The Science

Movement selection is constrained by:

  • Equipment: Only movements available in your gym are candidates
  • Skill: Only movements within your current technical capacity
  • Injury history: Movements that aggravate known issues are excluded
  • Readiness: Movement complexity is scaled to your fatigue state after the main WOD

All candidates are ranked by their stress contribution in the domain(s) you need, ensuring the selected movements are efficient at filling your deficit.

Movement is the atom. There are no parallel taxonomies, no competing classification systems. A dumbbell row is one thing: a movement with a specific stress signature across all four domains. We select it because it delivers the stress you need in a form that fits your constraints.

The result: a personalized accessory prescription that's not just targeted but feasible. It works for your body, your gym, your skill level, and your state right now.

How WodPilot Uses This

After computing your deficit, we query the movement library with your constraints as filters. The system returns movements that fill your deficit while respecting your equipment, skill, injury history, and readiness. You get a custom accessory list that's both precise and practical.

Why This Matters For Your Training

Accessories that work for you are actually doable. You're not getting a prescription that requires equipment you don't have or skills you haven't built. You're getting movements that are right for your situation, right now.


One Language, One Logic

The four steps work because they use the same currency throughout: LEVEL_1_BUCKETS, a unified stress measurement system. Your ideal profile is in this language. The class WOD is measured in this language. The deficit is calculated in this language. And movement selection is filtered by this language.

There's no translation layer, no competing systems. Strength is strength, engine is engine, gymnastics is gymnastics, and core is core. Every step talks to every other step in the same terms.

This is why personalization works. It's not a feature bolted onto a generic system. It's the foundation. Every workout is built from your specific needs, your specific constraints, and your specific story.


Research & References


The Bottom Line

Personalization isn't magic. It's a four-step process: calculate your ideal stress, measure what the class WOD delivers, identify the gap, and pick movements that fill it while fitting your reality. WodPilot runs this process for every athlete, every session. The result is workouts that are specific to you — not because they feel personal, but because they're built from your actual needs.

Ready to train with real science?

WodPilot uses the models described in this article to personalize your training every day.

Get started