Under the hood · 07

Weekly volume and sub-muscles

How Logex counts fractional sets per muscle (1 for the muscles that move the load, 0.5 for synergists), which sets count, the volume landmarks (MV, MEV, MAV, MRV) and zones, and how sub-muscles such as triceps heads and upper chest are tracked.

11 min read

  • weekly volume
  • fractional sets
  • MEV
  • MRV
  • sub-muscles

“How much chest did I train this week?” sounds simple until you ask whether a bench press also counts for triceps and front delts, and how much. Logex answers with fractional sets, the counting method that fitted the research best in a 2025 meta-analysis (Pelland et al.): every working set counts as a full set for the muscles that move the load and as half a set for the muscles that help.

In plain terms. A set of bench press counts as one set for chest and half a set for triceps, front delts and upper chest. Warm-ups count for nothing, and a very easy set counts for less. Add those up across the week, per muscle, and compare with research-based target ranges.

Step 1: who does the work

Every exercise in the catalogue lists its muscles from one shared list of about 37 canonical muscles (docs/catalog/muscles.json), and gives each a role. The role decides the credit one set earns:

Role Credit per set Meaning
Direct 1 A prime mover of the joint action that limits the load
Indirect 0.5 A moving synergist at a joint action that does not limit the load
Stabilizer 0 Holds still or helps a little. Shown on the exercise page, never counted

For the barbell bench press:

Muscle Role Credit
Chest (sternocostal pec) direct 1
Upper chest (clavicular pec) indirect 0.5
Front deltoid indirect 0.5
Triceps, each of the three heads indirect 0.5
Serratus anterior, rotator cuff stabilizer 0

A muscle tag (chest, triceps, a triceps head) takes the largest credit among the muscles that carry it, and a muscle group takes the largest credit among its muscles. So one set never counts more than once for any muscle: a bench set is 1 chest set, not upper chest plus lower chest, and 0.5 triceps, not three heads added up. Where each role comes from is explained in The exercise catalogue, bodyweight and assisted loads.

Step 2: which sets count, and how much

counts       = not deleted, reps ≥ 1, and not a Warmup, Warmdown or Cooldown
               external load: weight above 0 · bodyweight and assisted lifts: 0 or blank is fine
RIR          = 10 − RPE
effort       = clamp(1 − 0.5 × max(0, RIR − 4), 0.25, 1)          no RPE → 1
set credit   = role credit × effort

Every other set type counts: Working, Volume, AMRAP, 1RM, Backoff, Dropset and PR Attempt. The effort taper follows Robinson et al. (2024) on proximity to failure. Any set at RPE 6 or harder counts in full, and only sets you rated as clearly easy count less:

RPE 6 or more 5.5 5 4.5 or less none
Effort multiplier 1 0.75 0.5 0.25 1

Worked example

A week of barbell bench 4 × 8 at RPE 8 (after 2 warm-up sets), barbell rows 4 × 10 and dumbbell curls 3 × 12:

Tag Calculation Weekly sets
Chest 4 bench × 1 4
Upper chest, front delts, each triceps head 4 bench × 0.5 2
Back, lats, rhomboids, traps 4 rows × 1 4
Rear delts 4 rows × 0.5 2
Biceps 4 rows × 0.5 + 3 curls × 1 5
The two bench warm-ups warm-ups never count 0

These are the numbers the app’s own validation scenario checks on the real catalogue.

Step 3: the week

The week runs Monday to Sunday in your local time, computed from calendar dates so a workout logged near midnight does not slip into the wrong week. Sessions dated after now are ignored. For each workout in the week the app runs the same per-session maths the in-workout rings use, then adds the sessions up, so the weekly numbers reconcile with what the rings showed during the week. daysLeftInWeek is 7 − (weekday, Monday = 0), so it is 7 on Monday and 1 on Sunday.

For each trackable muscle the week records the fractional sets, the direct part of them, the number of distinct sessions that hit it, its zone, its deficit to MEV and whether it met its frequency minimum.

Step 4: landmarks and zones

Targets use the volume-landmark model popularised by Renaissance Periodization:

  • MV (maintenance volume): enough to keep the muscle you have.
  • MEV (minimum effective volume): the least that drives growth.
  • MAV (maximum adaptive volume), a band: the productive range.
  • MRV (maximum recoverable volume): the ceiling before recovery fails.

The published guides count direct sets and quietly assume pressing feeds the triceps and rowing feeds the biceps. Logex re-expresses them in the same fractional units it counts in, so every number traces back to the guide:

  1. Directly trained large muscles (chest, back, quads, hamstrings, calves, side delts) keep their published numbers.
  2. Biceps, triceps, front delts and rear delts add half their “feeder” muscle’s MEV to every landmark: biceps and rear delts +5 from back (MEV 10), triceps and front delts +3 from chest (MEV 6).
  3. Muscles whose published MEV is 0 because compounds cover them get half the feeder’s MEV: traps 5 (from back), glutes and adductors 4 (from quads). Abs, obliques and hip flexors have no feeder and stay at 0.
  4. Regions and heads inherit their parent’s landmarks.

The numbers are starting estimates for an intermediate lifter. Selected values:

Muscle MV MEV MAV MRV Sessions per week
Chest 4 6 12 to 20 22 2 to 3
Back 8 10 14 to 22 25 2 to 4
Biceps 10 13 19 to 25 31 2 to 6
Triceps 7 9 13 to 17 21 2 to 4
Quads 6 8 12 to 18 20 1 to 3
Hamstrings 4 6 10 to 16 20 2 to 3
Calves 6 8 12 to 16 20 2 to 4
Side delts 6 8 12 to 18 22 2 to 6
Rear delts 5 11 13 to 19 23 2 to 5
Front delts 3 3 9 to 11 15 1 to 2
Glutes 0 4 4 to 12 16 2 to 3
Abs 0 0 16 to 20 25 3 to 5

A week’s fractional sets map to a zone:

Zone Fractional sets
Untrained 0, or below MV
Maintenance MV up to, but not including, MEV
Growing MEV up to, but not including, the low end of MAV
Optimal within the MAV band
Overreaching above the top of MAV

Zero sets is always Untrained, even for a muscle whose MEV is 0. The deficit to MEV is max(0, MEV − sets). The frequency check passes when the muscle was trained in at least the minimum number of sessions.

Shoulders, legs and core are aggregates with no landmarks of their own. When the app needs one zone for them it takes the worst zone among their children, so quads in the optimal zone with hamstrings untrained reads as untrained rather than being averaged away. An optional muscle (MEV 0) that nobody trained, such as hip flexors, does not drag the group down. Their set count shows direct work only, with indirect credit beside it (“4 sets + 2 indirect”), so a week of only bench and rows reads as “4 indirect” for shoulders, not as 4 shoulder sets.

Worked example

Chest at 14 sets is Optimal (12 to 20). At 3 sets it is Untrained (below MV of 4), with a deficit of 3 to reach MEV (6). At 23 sets it is above MRV (22), which is the point the app starts saying the muscle is past its weekly recoverable volume.

Step 5: the nudges

The pre-workout and “focus” pages rank three kinds of insight, in this order:

  1. Overreach: sets above MRV (“consider backing off or redistributing to a lagging muscle instead of adding more”).
  2. Deficits: muscles below MEV, ordered by urgency.
    urgency = deficitToMEV ÷ max(1, daysLeftInWeek)      × 1.5 if it is one of your focus muscles
    When a parent muscle is itself short, its regions’ deficits are dropped, so the same gap is not said twice.
  3. Sub-region gaps: the parent muscle is fine (zone above Maintenance) but a region got nothing this week.

The pre-workout panel shows up to 3 insights and the session-focus page up to 6. Rows whose landmark is not taken straight from the published guides say “(estimated)”. A suggested exercise for a gap respects your equipment.

Example on a Thursday (4 days left): biceps has 7 sets against an MEV of 13, a deficit of 6, so urgency 6 ÷ 4 = 1.5. Side delts have 3 sets against 8, a deficit of 5, so urgency 1.25 and they rank second. If side delts are one of your focus muscles the multiplier makes it 1.875, which moves them ahead.

Sub-muscles

Sub-muscles are tracked separately so a muscle cannot look “fine” while one part is neglected.

Parent Regions tracked
Chest upper chest, lower chest
Back lats, traps, rhomboids, rear delts, lower back
Shoulders front delts, side delts, rear delts
Biceps long head, short head, brachialis
Triceps long head, lateral head, medial head
Legs quads, hamstrings, glutes, adductors, calves, hip flexors
Core abs, obliques, lower back

A region counts toward its parent total, not on top of it, and inherits the parent’s landmarks: upper chest has the chest’s MV 4, MEV 6, MAV 12 to 20 and MRV 22, and every triceps head has the triceps’ MEV 9, MAV 13 to 17 and MRV 21. Every set of a muscle credits each of its heads fully, so a head is short only when its own exercises are missing.

How matching works matters for fairness:

  • Exact names, never fragments. Old catalogue lines and custom exercises name muscles in free text. Each string resolves to canonical muscles through an exact alias table. “Triceps brachii” means all three heads, “Biceps brachii” both biceps heads, and “hamstrings (biceps femoris)” never touches the arm. Substring matching, which once credited curls to the triceps and every press to both chest regions, is gone. Strings the table does not know earn nothing and are listed in Data hygiene.
  • Regions come from roles. The incline press trains the upper chest directly. The flat bench credits it 0.5 (cited to Chaves et al. 2020), so four flat sets give 2 upper-chest sets, not “about 3”.
  • The dominant region of an exercise (squat gives quads, leg curl gives hamstrings) is the catalogue’s own target muscle, not a guess from its label.
  • Untracked muscles. Forearms, neck, tibialis, serratus and rotator cuff are tracked on the exercise page but have no weekly target. Wrist, neck and tibialis exercises say “Not counted in weekly muscle volume” and are never offered to fill a gap.
  • Custom exercises start from a movement (the same templates the catalogue is built from). You keep, drop or switch each muscle between direct and indirect, and they count like any other exercise.

Session rings

In the workout, each muscle ring fills as 1 − e^(−sets ÷ τ). Broad (macro) muscles use τ = 4 and the detail rings for regions use τ = 5. The coverage level is “good” at 6 or more sets, “low” at 3 or more, otherwise “none”. Four bench sets give chest 4 sets, a ring at 63%, level “low”. Muscles you worked without choosing them (triceps and front delts on a chest day) show as muted “Also worked” bars.

Personal calibration

The landmarks above are for an intermediate lifter. Your profile scales MEV, MAV and MRV by experience and goal (MV never scales), described in Personalization. A beginner on a muscle-building goal has factor 0.75, so chest becomes MV 4, MEV 5, MAV 9 to 15 and MRV 17.

Limits and edge cases

  • Roles are coarse on purpose. Three roles (1, 0.5, 0) are what the evidence supports. The app does not claim that an incline press is 0.7 of a chest set.
  • The effort taper only bites on easy sets. A set without an RPE counts in full, and anything at RPE 6 or harder counts in full.
  • Missing weekly read means “unknown”, not zero. Planning never reads a failed weekly query as an empty week.
  • Frequency-cramming nudges (no more than about 10 to 11 productive sets per muscle per session) are described in the targets file but are not part of the weekly nudges yet.
  • It does not claim recovery or readiness. Weekly insights compare against absolute targets for the current week, not against an incomplete week versus a full previous one.

Source

Written from these files in the Logex app (release head). Constants and formulas above are copied from them.

  • utils/stimulusModel.js
  • services/WeeklyStimulusService.js
  • services/SmartRecommendationService.js
  • constants/muscleVolumeTargets.js
  • constants/muscles.js
  • docs/catalog/muscles.json
  • constants/workoutTags.js
  • services/customExerciseStimulus.js
  • utils/muscleRegions.js
  • docs/Exercises.json
  • docs/EXERCISE_SCIENCE.md