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>Hip Circles</title>
<path d="M 115.1 151.3 L 180.7 162.7 L 210.4 157.5 L 144.8 146.1 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 166.4 96.4 L 178.0 126.4 L 164.2 149.3 L 170.4 153.6" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 166.2 37.1 L 176.9 48.3 L 182.9 45.2" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 156.5 96.6 L 167.2 127.0 L 155.8 150.5 L 161.8 154.5" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 166.2 37.1 L 157.8 37.1 L 152.4 38.1" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 166.4 96.4 L 160.0 96.0 L 156.5 96.6" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 160.0 96.0 Q 159.6 65.9 157.8 37.1" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 152.4 38.1 L 140.3 53.2 L 159.4 47.8" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="157.1" cy="23.2" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="164.1" y1="23.8" x2="167.6" y2="24.0" 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>Hip Circles</title>
<path d="M 112.0 152.5 L 177.7 163.9 L 207.4 158.7 L 141.7 147.3 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 155.9 92.9 L 152.2 124.7 L 164.2 149.2 L 157.5 152.8" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 146.0 93.1 L 145.3 125.0 L 155.8 150.4 L 148.8 153.5" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 149.0 34.8 L 140.8 36.8 L 135.6 39.8" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 155.9 92.9 L 149.5 92.5 L 146.0 93.1" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 149.5 92.5 Q 147.9 62.7 140.8 36.8" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 149.0 34.8 L 161.2 40.5 L 166.7 41.5" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 135.6 39.8 L 125.9 58.1 L 144.0 51.9" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="138.1" cy="24.0" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="145.0" y1="25.2" x2="148.4" y2="25.8" 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>Hip Circles</title>
<path d="M 115.1 151.2 L 180.7 162.6 L 210.4 157.4 L 144.8 146.0 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 166.4 90.1 L 167.7 121.9 L 164.2 149.2 L 171.3 150.6" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 156.5 90.3 L 156.5 122.1 L 155.8 149.7 L 162.5 150.5" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 170.6 31.6 L 180.0 42.3 L 186.5 41.7" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 170.6 31.6 L 162.2 31.6 L 156.7 32.5" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 166.4 90.1 L 160.0 89.7 L 156.5 90.3" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 160.0 89.7 Q 160.4 59.8 162.2 31.6" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 156.7 32.5 L 143.4 47.2 L 162.9 44.3" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="162.9" cy="17.9" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="169.6" y1="19.8" x2="173.1" y2="20.7" 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>Hip Circles</title>
<path d="M 118.2 149.9 L 183.8 161.3 L 213.5 156.2 L 147.9 144.8 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 176.9 92.9 L 176.9 124.8 L 164.2 149.2 L 171.0 152.8" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 187.4 36.0 L 194.4 51.3 L 201.9 46.9" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 167.0 93.1 L 166.4 125.0 L 155.8 150.4 L 162.9 153.4" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 187.4 36.0 L 179.2 33.8 L 174.0 32.6" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 176.9 92.9 L 170.5 92.5 L 167.0 93.1" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 170.5 92.5 Q 172.1 62.1 179.2 33.8" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 174.0 32.6 L 159.1 43.0 L 179.2 41.5" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="181.9" cy="20.1" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="188.8" y1="21.3" x2="192.3" y2="21.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

+37
View File
@@ -0,0 +1,37 @@
# Hip Circles
Hands on the hips, circle the pelvis slowly like a hula-hoop warm-up to loosen
the hips and low back and prime the whole midsection.
- **Category:** Mobility / warm-up
- **Type:** Hip mobility
- **Targets:** Hips, pelvis, lumbar spine
- **Prescription:** 8 slow circles in each direction
- **Defaults:** 2 × 8 bodyweight
## Setup
Stand with feet shoulder-width, hands resting on the hips, knees soft.
## Execution
1. Push the hips forward, then around to one side.
2. Carry them back, then to the other side, tracing one big smooth circle.
3. Keep the head and shoulders roughly still over the feet as the hips travel.
4. Complete the circles, then reverse the direction.
## Cues
- Draw the circle with the hips, not the whole body.
- Keep both feet flat and planted throughout.
- Let the upper body counter-lean gently so the head stays centered.
## Common Mistakes
- Circling the shoulders instead of the hips.
- Letting a foot lift as the hips swing across.
- Rushing — the circle should be slow and even.
## Progression
Small circles → bigger hula-hoop circles → slow tempo in both directions.
+52
View File
@@ -0,0 +1,52 @@
{
"name": "Hip Circles",
"primary": 2,
"camera": {"yaw": 45, "zoom": 0.7},
"working": ["spine"],
"frames": [
{
"hold": 0.12, "tween": 0.6,
"root": {"pos": [160, 72]},
"spine": [{"lateral": 0, "flexion": -2}, {"lateral": 0, "flexion": -2}],
"neck": 0, "head": 0,
"shoulder_r": {"flexion": -8, "abduction": 50}, "elbow_r": 125,
"shoulder_l": {"flexion": -8, "abduction": 50}, "elbow_l": 125,
"hip_r": 3, "knee_r": 5, "ankle_r": 0,
"hip_l": 3, "knee_l": 5, "ankle_l": 0,
"pins": {"foot_r": [154, 150], "foot_l": [166, 150]}
},
{
"hold": 0.12, "tween": 0.6,
"root": {"pos": [145, 67]},
"spine": [{"lateral": 8, "flexion": 0}, {"lateral": 8, "flexion": 0}],
"neck": 0, "head": 0,
"shoulder_r": {"flexion": -8, "abduction": 50}, "elbow_r": 125,
"shoulder_l": {"flexion": -8, "abduction": 50}, "elbow_l": 125,
"hip_r": 3, "knee_r": 5, "ankle_r": 0,
"hip_l": 3, "knee_l": 5, "ankle_l": 0,
"pins": {"foot_r": [154, 150], "foot_l": [166, 150]}
},
{
"hold": 0.12, "tween": 0.6,
"root": {"pos": [160, 63]},
"spine": [{"lateral": 0, "flexion": 2}, {"lateral": 0, "flexion": 2}],
"neck": 0, "head": 0,
"shoulder_r": {"flexion": -8, "abduction": 50}, "elbow_r": 125,
"shoulder_l": {"flexion": -8, "abduction": 50}, "elbow_l": 125,
"hip_r": 3, "knee_r": 5, "ankle_r": 0,
"hip_l": 3, "knee_l": 5, "ankle_l": 0,
"pins": {"foot_r": [154, 150], "foot_l": [166, 150]}
},
{
"hold": 0.12, "tween": 0.6,
"root": {"pos": [175, 67]},
"spine": [{"lateral": -8, "flexion": 0}, {"lateral": -8, "flexion": 0}],
"neck": 0, "head": 0,
"shoulder_r": {"flexion": -8, "abduction": 50}, "elbow_r": 125,
"shoulder_l": {"flexion": -8, "abduction": 50}, "elbow_l": 125,
"hip_r": 3, "knee_r": 5, "ankle_r": 0,
"hip_l": 3, "knee_l": 5, "ankle_l": 0,
"pins": {"foot_r": [154, 150], "foot_l": [166, 150]}
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

+19
View File
@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 180" fill="none">
<title>Hip Circles</title>
<path d="M 112.0 152.5 L 177.7 163.9 L 207.4 158.7 L 141.7 147.3 Z" fill="none" stroke="#b9bec9" stroke-width="2.1" stroke-linejoin="round"/>
<path id="leg_l" d="M 155.9 92.9 L 152.2 124.7 L 164.2 149.2 L 157.5 152.8" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="leg_r" d="M 146.0 93.1 L 145.3 125.0 L 155.8 150.4 L 148.8 153.5" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="girdle" d="M 149.0 34.8 L 140.8 36.8 L 135.6 39.8" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="pelvisBar" d="M 155.9 92.9 L 149.5 92.5 L 146.0 93.1" stroke="#0d9488" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="spine" d="M 149.5 92.5 Q 147.9 62.7 140.8 36.8" stroke="#0d9488" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_l" d="M 149.0 34.8 L 161.2 40.5 L 166.7 41.5" stroke="#a9afba" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
<path id="arm_r" d="M 135.6 39.8 L 125.9 58.1 L 144.0 51.9" stroke="#3a3f4b" stroke-width="4.2" stroke-linecap="round" stroke-linejoin="round"/>
<circle id="head" cx="138.1" cy="24.0" r="7.0" fill="white" stroke="#3a3f4b" stroke-width="4.2"/>
<line id="nose" x1="145.0" y1="25.2" x2="148.4" y2="25.8" 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