Add 17 warm-up, stretch, and mobility exercises with new starter splits

The library grows to 64 exercises: arm circles, torso twist, leg
swings, hip and neck mobility, marching, calf raises, and a full
stretching set (forward fold, quad, calf, chest, triceps, hip flexor,
butterfly, cobra, child's pose), each with an authored motion rig and
reference page. Eight new starter splits join the catalog — Upper and
Lower Body Warm-Up, Morning Wake-Up, Morning Mobility, Full Body
Stretch, Evening Stretch, Free Weight Basics, and Full Body Machines —
regenerated deterministically at split schema v3 with fixed ULIDs.

Claude-Session: https://claude.ai/code/session_01HJDQQDA9QdP8zByg43H5v3
This commit is contained in:
2026-07-08 12:49:18 -04:00
parent 394ec0989e
commit 60927b5d1f
170 changed files with 4502 additions and 15 deletions
@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Leg Swings</title>
<path d="M 114.0 157.5 L 223.7 157.5 L 223.7 150.2 L 114.0 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 161.3 92.3 L 154.9 123.4 L 165.6 148.9 L 158.5 151.8" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 166.5 33.5 L 181.9 47.6 L 199.9 58.2" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 157.2 92.7 L 186.8 105.0 L 210.8 119.2 L 215.3 113.0" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 166.5 33.5 L 162.4 33.4 L 162.4 34.8" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 161.3 92.3 L 157.2 91.8 L 157.2 92.7" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 157.2 91.8 Q 159.9 61.9 162.4 33.4" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 162.4 34.8 L 162.8 55.4 L 166.8 75.7" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="164.1" cy="19.7" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="171.1" y1="19.9" x2="176.0" y2="19.9" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<text x="243" y="20">near</text>
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
<text x="292" y="20">far</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Leg Swings</title>
<path d="M 114.0 157.5 L 223.7 157.5 L 223.7 150.2 L 114.0 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 161.3 92.3 L 154.9 123.4 L 165.6 148.9 L 158.5 151.8" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 166.5 33.5 L 181.9 47.6 L 199.9 58.2" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 157.2 92.7 L 139.7 119.2 L 122.4 141.0 L 127.0 147.1" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 166.5 33.5 L 162.4 33.4 L 162.4 34.8" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 161.3 92.3 L 157.2 91.8 L 157.2 92.7" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 157.2 91.8 Q 159.9 61.9 162.4 33.4" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 162.4 34.8 L 162.8 55.4 L 166.8 75.7" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="164.1" cy="19.7" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="171.1" y1="19.9" x2="176.0" y2="19.9" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<text x="243" y="20">near</text>
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
<text x="292" y="20">far</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+42
View File
@@ -0,0 +1,42 @@
# Leg Swings
Stand on one leg and swing the other freely front to back, letting the hip
open and close through a growing range. A dynamic mobility drill that loosens
the hips, hamstrings, and hip flexors before squats, running, or lower-body
work.
- **Category:** Mobility / warm-up
- **Type:** Dynamic mobility
- **Targets:** Hip mobility, hamstrings, hip flexors
- **Prescription:** 1012 swings per leg, building range gradually
- **Defaults:** 2 × 10 bodyweight
## Setup
Balance on one leg, standing tall. Rest a hand on a wall or rail for support
if you need it, and let the working leg hang loose.
## Execution
1. Swing the free leg forward to a comfortable height, keeping it fairly
straight.
2. Let it swing back through under the hip and behind you.
3. Keep the torso upright and quiet — the motion is all at the hip.
4. Swing smoothly for the set, then switch legs.
## Cues
- Move from the hip; don't heave with the low back.
- Start with small swings and let the range grow rep by rep.
- Stay tall — resist the urge to fold forward as the leg swings back.
## Common Mistakes
- Arching and rounding the spine to fling the leg higher.
- Swinging so hard you lose balance and the motion turns jerky.
- Twisting the torso instead of keeping it square and still.
## Progression
Add side-to-side swings across the body once front-to-back feels smooth, and
gradually widen the arc as the hip warms up.
+30
View File
@@ -0,0 +1,30 @@
{
"name": "Leg Swings",
"primary": 1,
"camera": {"zoom": 0.7},
"working": ["leg_r"],
"frames": [
{
"hold": 0.16, "tween": 0.72,
"root": {"pos": [156, 66], "pitch": 5},
"spine": [0, 0],
"neck": 2, "head": -6,
"shoulder_r": 6, "elbow_r": 10,
"shoulder_l": 52, "elbow_l": 12,
"hip_r": 72, "knee_r": 8, "ankle_r": -4,
"hip_l": -2, "knee_l": 3, "ankle_l": 0,
"pins": {"foot_l": [168, 150]}
},
{
"hold": 0.16, "tween": 0.72,
"root": {"pos": [156, 66], "pitch": 5},
"spine": [0, 0],
"neck": 2, "head": -6,
"shoulder_r": 6, "elbow_r": 10,
"shoulder_l": 52, "elbow_l": 12,
"hip_r": -28, "knee_r": 5, "ankle_r": -16,
"hip_l": -2, "knee_l": 3, "ankle_l": 0,
"pins": {"foot_l": [168, 150]}
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

+19
View File
@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Leg Swings</title>
<path d="M 114.0 157.5 L 223.7 157.5 L 223.7 150.2 L 114.0 150.2 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 161.3 92.3 L 154.9 123.4 L 165.6 148.9 L 158.5 151.8" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 166.5 33.5 L 181.9 47.6 L 199.9 58.2" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 157.2 92.7 L 186.8 105.0 L 210.8 119.2 L 215.3 113.0" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 166.5 33.5 L 162.4 33.4 L 162.4 34.8" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 161.3 92.3 L 157.2 91.8 L 157.2 92.7" stroke="#3a3f4b" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 157.2 91.8 Q 159.9 61.9 162.4 33.4" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 162.4 34.8 L 162.8 55.4 L 166.8 75.7" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="164.1" cy="19.7" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="171.1" y1="19.9" x2="176.0" y2="19.9" stroke="#3a3f4b" stroke-width="2.8" stroke-linecap="round"/>
<g font-family="-apple-system, Helvetica, sans-serif" font-size="11" fill="#6b7180">
<line x1="224" y1="16" x2="238" y2="16" stroke="#3a3f4b" stroke-width="4" stroke-linecap="round"/>
<text x="243" y="20">near</text>
<line x1="273" y1="16" x2="287" y2="16" stroke="#a9afba" stroke-width="4" stroke-linecap="round"/>
<text x="292" y="20">far</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB