diff --git a/Exercise Library/Arm Circles/frames/frame-1.svg b/Exercise Library/Arm Circles/frames/frame-1.svg new file mode 100644 index 0000000..f7bd91a --- /dev/null +++ b/Exercise Library/Arm Circles/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Arm Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Arm Circles/frames/frame-2.svg b/Exercise Library/Arm Circles/frames/frame-2.svg new file mode 100644 index 0000000..de88cc6 --- /dev/null +++ b/Exercise Library/Arm Circles/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Arm Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Arm Circles/frames/frame-3.svg b/Exercise Library/Arm Circles/frames/frame-3.svg new file mode 100644 index 0000000..3e6bb33 --- /dev/null +++ b/Exercise Library/Arm Circles/frames/frame-3.svg @@ -0,0 +1,19 @@ + + Arm Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Arm Circles/frames/frame-4.svg b/Exercise Library/Arm Circles/frames/frame-4.svg new file mode 100644 index 0000000..496715e --- /dev/null +++ b/Exercise Library/Arm Circles/frames/frame-4.svg @@ -0,0 +1,19 @@ + + Arm Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Arm Circles/info.md b/Exercise Library/Arm Circles/info.md new file mode 100644 index 0000000..0d395a5 --- /dev/null +++ b/Exercise Library/Arm Circles/info.md @@ -0,0 +1,38 @@ +# Arm Circles + +Big, slow circles of both arms together to warm the shoulders, wake up the +rotator cuff, and open the chest before pressing or pulling. + +- **Category:** Mobility / warm-up +- **Type:** Shoulder mobility +- **Targets:** Deltoids, rotator cuff, upper back +- **Prescription:** 10 slow backward circles, then 10 forward +- **Defaults:** 2 × 10 bodyweight + +## Setup + +Stand tall, feet shoulder-width, arms relaxed at your sides. + +## Execution + +1. Reach both arms forward and up until they pass overhead. +2. Carry them back and down behind you, tracing the biggest circle you can. +3. Sweep them low and forward again to begin the next circle. +4. Complete the set, then circle in the opposite direction. + +## Cues + +- Keep the arms long — draw the circle from the shoulder, not the elbow. +- Stand tall; don't let the low back arch as the arms pass overhead. +- Keep the tempo slow and even, breathing throughout. + +## Common Mistakes + +- Tiny, rushed circles instead of full, slow ones. +- Shrugging the shoulders toward the ears at the top. +- Arching the low back to force the arms higher. + +## Progression + +Small circles → full-range circles → slow both directions → pause briefly with +the arms overhead each rep. diff --git a/Exercise Library/Arm Circles/motion.json b/Exercise Library/Arm Circles/motion.json new file mode 100644 index 0000000..728948e --- /dev/null +++ b/Exercise Library/Arm Circles/motion.json @@ -0,0 +1,48 @@ +{ + "name": "Arm Circles", + "primary": 2, + "camera": {"yaw": 40, "zoom": 0.6}, + "working": ["arm_r", "arm_l"], + "frames": [ + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 90, "abduction": 12}, "elbow_r": 5, + "shoulder_l": {"flexion": 90, "abduction": 12}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 172, "abduction": 30}, "elbow_r": 5, + "shoulder_l": {"flexion": 172, "abduction": 30}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 90, "abduction": 92}, "elbow_r": 5, + "shoulder_l": {"flexion": 90, "abduction": 92}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 8, "abduction": 22}, "elbow_r": 5, + "shoulder_l": {"flexion": 8, "abduction": 22}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + } + ] +} diff --git a/Exercise Library/Arm Circles/orbit.gif b/Exercise Library/Arm Circles/orbit.gif new file mode 100644 index 0000000..5ce54b4 Binary files /dev/null and b/Exercise Library/Arm Circles/orbit.gif differ diff --git a/Exercise Library/Arm Circles/preview.gif b/Exercise Library/Arm Circles/preview.gif new file mode 100644 index 0000000..6efb6bc Binary files /dev/null and b/Exercise Library/Arm Circles/preview.gif differ diff --git a/Exercise Library/Arm Circles/visual.svg b/Exercise Library/Arm Circles/visual.svg new file mode 100644 index 0000000..de88cc6 --- /dev/null +++ b/Exercise Library/Arm Circles/visual.svg @@ -0,0 +1,19 @@ + + Arm Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Butterfly Stretch/frames/frame-1.svg b/Exercise Library/Butterfly Stretch/frames/frame-1.svg new file mode 100644 index 0000000..856dcdc --- /dev/null +++ b/Exercise Library/Butterfly Stretch/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Butterfly Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Butterfly Stretch/frames/frame-2.svg b/Exercise Library/Butterfly Stretch/frames/frame-2.svg new file mode 100644 index 0000000..b35730a --- /dev/null +++ b/Exercise Library/Butterfly Stretch/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Butterfly Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Butterfly Stretch/info.md b/Exercise Library/Butterfly Stretch/info.md new file mode 100644 index 0000000..6619d12 --- /dev/null +++ b/Exercise Library/Butterfly Stretch/info.md @@ -0,0 +1,40 @@ +# Butterfly Stretch + +Sit tall, press the soles of the feet together, and let the knees fall open to +release the inner thighs and hips. A gentle seated opener for tight groins +after squatting, running, or a long day in a chair. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Inner thighs (adductors, groin), hips +- **Prescription:** Hold 45 s, letting the knees settle a little lower with each breath +- **Defaults:** 1 × 45 s + +## Setup + +Sit on the floor with a tall spine. Bring the soles of the feet together and +draw the heels in toward the pelvis, letting the knees drop out to the sides. + +## Execution + +1. Hold the feet or ankles and lengthen up through the crown of the head. +2. Let the knees relax open and down toward the floor under their own weight. +3. Hinge gently forward from the hips to deepen the stretch. +4. Breathe slowly, easing a little lower on each exhale. + +## Cues + +- Lead the forward lean from the hips, keeping the chest open and the back long. +- Let gravity lower the knees — don't force them down with the hands. +- Draw the heels closer to the pelvis for more inner-thigh, further away for less. + +## Common Mistakes + +- Rounding the back to reach the feet instead of hinging at the hips. +- Bouncing the knees to push the range. +- Pulling hard on the feet and yanking the knees toward the floor. + +## Progression + +Heels further from the pelvis → heels drawn closer for a deeper groin stretch → +gentle forward fold over the legs, resting the forearms toward the floor. diff --git a/Exercise Library/Butterfly Stretch/motion.json b/Exercise Library/Butterfly Stretch/motion.json new file mode 100644 index 0000000..cd1bee3 --- /dev/null +++ b/Exercise Library/Butterfly Stretch/motion.json @@ -0,0 +1,30 @@ +{ + "name": "Butterfly Stretch", + "primary": 2, + "camera": {"yaw": 52}, + "working": ["leg_r", "leg_l"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 118], "pitch": 4}, + "spine": [20, 18], + "neck": 12, "head": -14, + "shoulder_r": {"flexion": 94, "abduction": 12}, "elbow_r": 40, + "shoulder_l": {"flexion": 94, "abduction": 12}, "elbow_l": 40, + "hip_r": {"flexion": 82, "abduction": 38, "rotation": 44}, "knee_r": 108, + "hip_l": {"flexion": 82, "abduction": 38, "rotation": 44}, "knee_l": 108, + "pins": {"hand_r": [178, 158], "hand_l": [198, 159]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 118], "pitch": 4}, + "spine": [26, 24], + "neck": 14, "head": -16, + "shoulder_r": {"flexion": 98, "abduction": 12}, "elbow_r": 34, + "shoulder_l": {"flexion": 98, "abduction": 12}, "elbow_l": 34, + "hip_r": {"flexion": 82, "abduction": 44, "rotation": 46}, "knee_r": 110, + "hip_l": {"flexion": 82, "abduction": 44, "rotation": 46}, "knee_l": 110, + "pins": {"hand_r": [176, 159], "hand_l": [200, 160]} + } + ] +} diff --git a/Exercise Library/Butterfly Stretch/preview.gif b/Exercise Library/Butterfly Stretch/preview.gif new file mode 100644 index 0000000..29291ec Binary files /dev/null and b/Exercise Library/Butterfly Stretch/preview.gif differ diff --git a/Exercise Library/Butterfly Stretch/visual.svg b/Exercise Library/Butterfly Stretch/visual.svg new file mode 100644 index 0000000..b35730a --- /dev/null +++ b/Exercise Library/Butterfly Stretch/visual.svg @@ -0,0 +1,19 @@ + + Butterfly Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/COVERAGE.md b/Exercise Library/COVERAGE.md index b5d115a..c80d1a7 100644 --- a/Exercise Library/COVERAGE.md +++ b/Exercise Library/COVERAGE.md @@ -33,12 +33,13 @@ it is a considered exclusion, not a gap. | Elbow extension | Tricep Press, Triceps Pushdown | — | Dip | | Shoulder raise (lateral/rear) | Rear Delt Fly | Lateral Raise | — | | Hip abduction / adduction | Abductor, Adductor | — | — | -| Calf | Calfs | — | — | +| Calf | Calfs | — | Standing Calf Raise | | Core anti-extension | — | — | Plank, Dead Bug, Hollow Body Hold | | Core rotation / anti-rotation | Rotary | — | Bird Dog | | Core lateral | — | — | Side Plank | | Core flexion | Abdominal | — | Crunch, Reverse Crunch, Leg Raises | -| Mobility / warm-up | — | — | Cat-Cow *(morning wake-up set: next phase)* | +| Mobility / warm-up | — | — | Cat-Cow, March in Place, Leg Swings, Neck Rolls, Arm Circles, Torso Twist, Standing Side Bend, Hip Circles | +| Static stretch | — | — | Standing Forward Fold, Standing Quad Stretch, Standing Calf Stretch, Chest Opener, Overhead Triceps Stretch, Kneeling Hip Flexor Stretch, Butterfly Stretch, Cobra Stretch, Child's Pose | ## Gym-floor census @@ -57,6 +58,8 @@ entries) a user logging by that station's name will find. | Pull-up / dip station (incl. assisted machine) | Pull-Up, Dip | | Dumbbell rack | Dumbbell Bench Press, Dumbbell Fly, Dumbbell Row, Dumbbell Shoulder Press, Dumbbell Curl, Lateral Raise, Goblet Squat, Lunge | | Floor / mat | Bodyweight Squat, Push-Up, Crunch, Glute Bridge, Plank, Side Plank, Bird Dog, Dead Bug, Hollow Body Hold, Leg Raises, Reverse Crunch, Cat-Cow | +| Open floor (warm-up / mobility) | March in Place, Leg Swings, Neck Rolls, Arm Circles, Torso Twist, Standing Side Bend, Hip Circles, Standing Calf Raise | +| Stretching mat (cool-down) | Standing Forward Fold, Standing Quad Stretch, Standing Calf Stretch, Chest Opener, Overhead Triceps Stretch, Kneeling Hip Flexor Stretch, Butterfly Stretch, Cobra Stretch, Child's Pose | ## Considered exclusions (the "most gyms" line) @@ -73,8 +76,13 @@ entries) a user logging by that station's name will find. ("barbell or dumbbells" in their pages), not separate entries. - **Kettlebells, T-bar row, pullover machine, cardio equipment** — out; not strength stations found in most gyms (cardio is out of the app's scope). -- **Morning wake-up mobility set** (neck rolls, arm circles, …) — deliberately - deferred to the next library phase; Cat-Cow holds the mobility row today. +- **Morning wake-up mobility & stretching set** — landed. Dynamic warm-up + drills (March in Place, Leg Swings, Neck Rolls, Arm Circles, Torso Twist, + Standing Side Bend, Hip Circles) now fill the mobility row alongside Cat-Cow, + and a static-stretch group (Standing Forward Fold, Standing Quad/Calf + Stretch, Chest Opener, Overhead Triceps Stretch, Kneeling Hip Flexor Stretch, + Butterfly Stretch, Cobra Stretch, Child's Pose) covers the cool-down mat. + Standing Calf Raise adds the bodyweight calf cell. ## Standing exercises and `camera.zoom` diff --git a/Exercise Library/Chest Opener/frames/frame-1.svg b/Exercise Library/Chest Opener/frames/frame-1.svg new file mode 100644 index 0000000..bfaca98 --- /dev/null +++ b/Exercise Library/Chest Opener/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Chest Opener + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Chest Opener/frames/frame-2.svg b/Exercise Library/Chest Opener/frames/frame-2.svg new file mode 100644 index 0000000..f4483bb --- /dev/null +++ b/Exercise Library/Chest Opener/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Chest Opener + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Chest Opener/info.md b/Exercise Library/Chest Opener/info.md new file mode 100644 index 0000000..bfa0cdd --- /dev/null +++ b/Exercise Library/Chest Opener/info.md @@ -0,0 +1,44 @@ +# Chest Opener + +Stand tall, clasp the hands behind the back, and lift the chest to peel open +the front of the shoulders and pecs — the antidote to a day rounded over a +desk or a phone. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Chest (pectorals), front of the shoulders, biceps +- **Prescription:** Hold 30 s, breathing wide into the chest, then release and repeat once +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall with the feet hip-width and the knees soft. Reach both arms behind +the low back and interlace the fingers, palms together. + +## Execution + +1. Draw the shoulder blades down and together and straighten the elbows as far + as is comfortable. +2. Lift the clasped hands gently away from the body until you feel the chest + open. +3. Raise the breastbone and let the gaze drift slightly upward. +4. Hold and breathe wide into the front of the chest, then release slowly. + +## Cues + +- Lead with the chest, not the chin — length before lift. +- Keep the shoulders drawing down away from the ears. +- Squeeze the shoulder blades together to deepen the stretch instead of + cranking the arms up. + +## Common Mistakes + +- Shrugging the shoulders up toward the ears. +- Arching hard through the low back instead of opening the chest. +- Yanking the hands higher than the shoulders can comfortably allow. + +## Progression + +Hands lower on the back with straighter elbows → clasp a strap and walk the +hands closer → hinge forward with the arms rising overhead for a deeper pec and +shoulder stretch. diff --git a/Exercise Library/Chest Opener/motion.json b/Exercise Library/Chest Opener/motion.json new file mode 100644 index 0000000..2147024 --- /dev/null +++ b/Exercise Library/Chest Opener/motion.json @@ -0,0 +1,31 @@ +{ + "name": "Chest Opener", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["arm_r", "arm_l", "spine"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 66], "pitch": 2}, + "spine": [-1, -1], + "neck": -2, "head": -6, + "shoulder_r": -26, "elbow_r": 34, + "shoulder_l": -26, "elbow_l": 34, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 66], "pitch": -4}, + "spine": [-6, -6], + "neck": -11, "head": -15, + "shoulder_r": -55, "elbow_r": 20, + "shoulder_l": -55, "elbow_l": 20, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150], + "hand_r": [150, 41], "hand_l": [154, 42]} + } + ] +} diff --git a/Exercise Library/Chest Opener/preview.gif b/Exercise Library/Chest Opener/preview.gif new file mode 100644 index 0000000..fc8cff7 Binary files /dev/null and b/Exercise Library/Chest Opener/preview.gif differ diff --git a/Exercise Library/Chest Opener/visual.svg b/Exercise Library/Chest Opener/visual.svg new file mode 100644 index 0000000..f4483bb --- /dev/null +++ b/Exercise Library/Chest Opener/visual.svg @@ -0,0 +1,19 @@ + + Chest Opener + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Child's Pose/frames/frame-1.svg b/Exercise Library/Child's Pose/frames/frame-1.svg new file mode 100644 index 0000000..2570846 --- /dev/null +++ b/Exercise Library/Child's Pose/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Child's Pose + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Child's Pose/frames/frame-2.svg b/Exercise Library/Child's Pose/frames/frame-2.svg new file mode 100644 index 0000000..35c10e7 --- /dev/null +++ b/Exercise Library/Child's Pose/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Child's Pose + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Child's Pose/info.md b/Exercise Library/Child's Pose/info.md new file mode 100644 index 0000000..36e8d71 --- /dev/null +++ b/Exercise Library/Child's Pose/info.md @@ -0,0 +1,40 @@ +# Child's Pose + +A restful kneeling fold that decompresses the spine and settles the breath — +the reset between harder efforts, or the quiet close to a morning routine. + +- **Category:** Mobility / warm-up +- **Type:** Spinal decompression (timed hold) +- **Targets:** Lower back, hips, thighs, shoulders +- **Prescription:** Hold for 30 s, breathing slowly into the back of the ribs, then repeat once +- **Defaults:** 2 × 30 s + +## Setup + +Kneel with the knees about hip-width and the big toes together, then sit the +hips back toward the heels. + +## Execution + +1. Walk the hands forward and fold the chest down over the thighs. +2. Stretch the arms long on the floor overhead and rest the forehead on the mat. +3. Let the weight sink back toward the heels and the hips grow heavy. +4. Breathe slowly into the back of the ribs, lengthening a little with each + exhale. + +## Cues + +- Reach the fingertips forward and the hips back to grow long through the spine. +- Let the belly rest between the thighs so the breath can slow. +- Keep the forehead heavy and the neck completely relaxed. + +## Common Mistakes + +- Holding tension in the shoulders instead of letting them melt down. +- Lifting the hips away from the heels and losing the settle. +- Forcing the range and gripping the low back rather than releasing it. + +## Progression + +Knees together for a deeper fold, or wide knees to let the chest sink lower → +add a side-reach (walk the hands to each side) to open the lats diff --git a/Exercise Library/Child's Pose/motion.json b/Exercise Library/Child's Pose/motion.json new file mode 100644 index 0000000..f146115 --- /dev/null +++ b/Exercise Library/Child's Pose/motion.json @@ -0,0 +1,29 @@ +{ + "name": "Child's Pose", + "primary": 2, + "working": ["spine"], + "frames": [ + { + "hold": 2.4, "tween": 2.0, + "root": {"pos": [201, 108], "yaw": 180, "pitch": 89}, + "spine": [15, 20], + "neck": 15, "head": -13, + "shoulder_r": 168, "elbow_r": 8, + "shoulder_l": 168, "elbow_l": 8, + "hip_r": 86, "knee_r": 104, "ankle_r": -52, + "hip_l": 86, "knee_l": 104, "ankle_l": -52, + "pins": {"hand_r": [80, 150], "hand_l": [84, 151]} + }, + { + "hold": 2.6, "tween": 2.0, + "root": {"pos": [202, 110], "yaw": 180, "pitch": 92}, + "spine": [16, 22], + "neck": 17, "head": -15, + "shoulder_r": 172, "elbow_r": 6, + "shoulder_l": 172, "elbow_l": 6, + "hip_r": 90, "knee_r": 108, "ankle_r": -52, + "hip_l": 90, "knee_l": 108, "ankle_l": -52, + "pins": {"hand_r": [78, 150], "hand_l": [82, 151]} + } + ] +} diff --git a/Exercise Library/Child's Pose/preview.gif b/Exercise Library/Child's Pose/preview.gif new file mode 100644 index 0000000..9dc1f34 Binary files /dev/null and b/Exercise Library/Child's Pose/preview.gif differ diff --git a/Exercise Library/Child's Pose/visual.svg b/Exercise Library/Child's Pose/visual.svg new file mode 100644 index 0000000..35c10e7 --- /dev/null +++ b/Exercise Library/Child's Pose/visual.svg @@ -0,0 +1,19 @@ + + Child's Pose + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Cobra Stretch/frames/frame-1.svg b/Exercise Library/Cobra Stretch/frames/frame-1.svg new file mode 100644 index 0000000..870b8d3 --- /dev/null +++ b/Exercise Library/Cobra Stretch/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Cobra Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Cobra Stretch/frames/frame-2.svg b/Exercise Library/Cobra Stretch/frames/frame-2.svg new file mode 100644 index 0000000..9ff9b44 --- /dev/null +++ b/Exercise Library/Cobra Stretch/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Cobra Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Cobra Stretch/info.md b/Exercise Library/Cobra Stretch/info.md new file mode 100644 index 0000000..0b6cf1e --- /dev/null +++ b/Exercise Library/Cobra Stretch/info.md @@ -0,0 +1,42 @@ +# Cobra Stretch + +A gentle prone press-up that opens the front of the body and coaxes the spine +into extension after a night curled up. + +- **Category:** Mobility / warm-up +- **Type:** Spinal extension mobility +- **Targets:** Lumbar and thoracic spine, abdominals, chest and hip flexors +- **Prescription:** 2 sets of 8 slow press-ups, pausing a breath at the top of each +- **Defaults:** 2 × 8 bodyweight + +## Setup + +Lie face down with the legs long and the tops of the feet on the floor. Set the +hands flat under the shoulders, elbows tucked close to the ribs. + +## Execution + +1. Press the hands lightly into the floor and lengthen the chest forward. +2. Peel the breastbone off the mat, letting the spine extend one segment at a + time. +3. Keep the hips, pubic bone, and legs pinned to the floor throughout. +4. Rise only as far as the low back stays comfortable, then lower slowly back + to flat. + +## Cues + +- Lead with the chest, not the chin — length before height. +- Draw the shoulders down away from the ears. +- Let the hands share the load; don't hang the whole body weight on the low back. + +## Common Mistakes + +- Cranking the head back and crunching the neck. +- Pressing to straight arms and lifting the hips off the mat (that's up-dog, not + cobra). +- Shrugging the shoulders up around the ears. + +## Progression + +Sphinx (forearms down) → low cobra → full cobra with straighter arms → +upward-facing dog with the thighs lifted diff --git a/Exercise Library/Cobra Stretch/motion.json b/Exercise Library/Cobra Stretch/motion.json new file mode 100644 index 0000000..ab4c459 --- /dev/null +++ b/Exercise Library/Cobra Stretch/motion.json @@ -0,0 +1,31 @@ +{ + "name": "Cobra Stretch", + "primary": 2, + "working": ["spine"], + "frames": [ + { + "hold": 0.6, "tween": 1.1, + "root": {"pos": [188, 147], "yaw": 180, "pitch": 76}, + "spine": [0, 6], + "neck": 6, "head": -46, + "shoulder_r": 92, "elbow_r": 100, + "shoulder_l": 92, "elbow_l": 100, + "hip_r": 0, "knee_r": 0, "ankle_r": -50, + "hip_l": 0, "knee_l": 0, "ankle_l": -50, + "pins": {"hand_r": [104, 150], "hand_l": [108, 151], + "foot_r": [270, 150], "foot_l": [274, 151]} + }, + { + "hold": 1.3, "tween": 1.1, + "root": {"pos": [188, 147], "yaw": 180, "pitch": 68}, + "spine": [-13, -16], + "neck": -10, "head": -18, + "shoulder_r": 95, "elbow_r": 14, + "shoulder_l": 95, "elbow_l": 14, + "hip_r": 0, "knee_r": 0, "ankle_r": -50, + "hip_l": 0, "knee_l": 0, "ankle_l": -50, + "pins": {"hand_r": [104, 150], "hand_l": [108, 151], + "foot_r": [270, 150], "foot_l": [274, 151]} + } + ] +} diff --git a/Exercise Library/Cobra Stretch/preview.gif b/Exercise Library/Cobra Stretch/preview.gif new file mode 100644 index 0000000..4a4c392 Binary files /dev/null and b/Exercise Library/Cobra Stretch/preview.gif differ diff --git a/Exercise Library/Cobra Stretch/visual.svg b/Exercise Library/Cobra Stretch/visual.svg new file mode 100644 index 0000000..9ff9b44 --- /dev/null +++ b/Exercise Library/Cobra Stretch/visual.svg @@ -0,0 +1,19 @@ + + Cobra Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Hip Circles/frames/frame-1.svg b/Exercise Library/Hip Circles/frames/frame-1.svg new file mode 100644 index 0000000..37bd7c7 --- /dev/null +++ b/Exercise Library/Hip Circles/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Hip Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Hip Circles/frames/frame-2.svg b/Exercise Library/Hip Circles/frames/frame-2.svg new file mode 100644 index 0000000..ee85bfb --- /dev/null +++ b/Exercise Library/Hip Circles/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Hip Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Hip Circles/frames/frame-3.svg b/Exercise Library/Hip Circles/frames/frame-3.svg new file mode 100644 index 0000000..2a41979 --- /dev/null +++ b/Exercise Library/Hip Circles/frames/frame-3.svg @@ -0,0 +1,19 @@ + + Hip Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Hip Circles/frames/frame-4.svg b/Exercise Library/Hip Circles/frames/frame-4.svg new file mode 100644 index 0000000..933e46f --- /dev/null +++ b/Exercise Library/Hip Circles/frames/frame-4.svg @@ -0,0 +1,19 @@ + + Hip Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Hip Circles/info.md b/Exercise Library/Hip Circles/info.md new file mode 100644 index 0000000..d0ee98b --- /dev/null +++ b/Exercise Library/Hip Circles/info.md @@ -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. diff --git a/Exercise Library/Hip Circles/motion.json b/Exercise Library/Hip Circles/motion.json new file mode 100644 index 0000000..2098a41 --- /dev/null +++ b/Exercise Library/Hip Circles/motion.json @@ -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]} + } + ] +} diff --git a/Exercise Library/Hip Circles/orbit.gif b/Exercise Library/Hip Circles/orbit.gif new file mode 100644 index 0000000..c7f7f7d Binary files /dev/null and b/Exercise Library/Hip Circles/orbit.gif differ diff --git a/Exercise Library/Hip Circles/preview.gif b/Exercise Library/Hip Circles/preview.gif new file mode 100644 index 0000000..223bae0 Binary files /dev/null and b/Exercise Library/Hip Circles/preview.gif differ diff --git a/Exercise Library/Hip Circles/visual.svg b/Exercise Library/Hip Circles/visual.svg new file mode 100644 index 0000000..ee85bfb --- /dev/null +++ b/Exercise Library/Hip Circles/visual.svg @@ -0,0 +1,19 @@ + + Hip Circles + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Kneeling Hip Flexor Stretch/frames/frame-1.svg b/Exercise Library/Kneeling Hip Flexor Stretch/frames/frame-1.svg new file mode 100644 index 0000000..a12dcc7 --- /dev/null +++ b/Exercise Library/Kneeling Hip Flexor Stretch/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Kneeling Hip Flexor Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Kneeling Hip Flexor Stretch/frames/frame-2.svg b/Exercise Library/Kneeling Hip Flexor Stretch/frames/frame-2.svg new file mode 100644 index 0000000..a1674bd --- /dev/null +++ b/Exercise Library/Kneeling Hip Flexor Stretch/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Kneeling Hip Flexor Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Kneeling Hip Flexor Stretch/info.md b/Exercise Library/Kneeling Hip Flexor Stretch/info.md new file mode 100644 index 0000000..5f541d9 --- /dev/null +++ b/Exercise Library/Kneeling Hip Flexor Stretch/info.md @@ -0,0 +1,43 @@ +# Kneeling Hip Flexor Stretch + +Drop into a half-kneel and press the hips forward to open the front of the back +hip. The go-to release for tight hip flexors after long hours of sitting or +heavy squatting. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Hip flexors, quadriceps, front of the hip +- **Prescription:** Hold 30 s per side, pressing the hips gently forward +- **Defaults:** 2 × 30 s + +## Setup + +Kneel on one knee with the other foot planted flat in front, the front knee +stacked over the ankle at about ninety degrees. Rest the hands on the front +thigh. Pad the back knee if needed. + +## Execution + +1. Tuck the tailbone under to flatten the low back. +2. Ease the hips forward until you feel a stretch across the front of the back + hip and thigh. +3. Keep the trunk tall and the front shin vertical. +4. Hold and breathe, then switch sides. + +## Cues + +- Squeeze the glute of the kneeling leg to deepen the hip-flexor stretch. +- Tuck the tailbone first — don't just arch the low back forward. +- Keep the front knee tracking over the foot, not caving inward. + +## Common Mistakes + +- Letting the front knee drift far past the toes. +- Arching the low back instead of tucking the pelvis and pressing the hips. +- Leaning the whole torso forward rather than shifting the hips. + +## Progression + +Hands on the front thigh → reach the same-side arm overhead and lean away for +a deeper stretch → add a gentle back-foot lift toward the glute to bring in the +quad. diff --git a/Exercise Library/Kneeling Hip Flexor Stretch/motion.json b/Exercise Library/Kneeling Hip Flexor Stretch/motion.json new file mode 100644 index 0000000..fd570f7 --- /dev/null +++ b/Exercise Library/Kneeling Hip Flexor Stretch/motion.json @@ -0,0 +1,29 @@ +{ + "name": "Kneeling Hip Flexor Stretch", + "primary": 2, + "working": ["leg_l"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 108], "pitch": 4}, + "spine": [11, 11], + "neck": 8, "head": -12, + "shoulder_r": 54, "elbow_r": 36, + "shoulder_l": 54, "elbow_l": 36, + "hip_r": 86, "knee_r": 90, "ankle_r": 6, + "hip_l": -16, "knee_l": 74, "ankle_l": -55, + "pins": {"foot_r": [206, 150], "hand_r": [202, 112], "hand_l": [206, 114]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [162, 110], "pitch": 6}, + "spine": [15, 15], + "neck": 9, "head": -13, + "shoulder_r": 58, "elbow_r": 32, + "shoulder_l": 58, "elbow_l": 32, + "hip_r": 90, "knee_r": 90, "ankle_r": 6, + "hip_l": -28, "knee_l": 56, "ankle_l": -55, + "pins": {"foot_r": [210, 150], "hand_r": [206, 110], "hand_l": [210, 112]} + } + ] +} diff --git a/Exercise Library/Kneeling Hip Flexor Stretch/preview.gif b/Exercise Library/Kneeling Hip Flexor Stretch/preview.gif new file mode 100644 index 0000000..17199e1 Binary files /dev/null and b/Exercise Library/Kneeling Hip Flexor Stretch/preview.gif differ diff --git a/Exercise Library/Kneeling Hip Flexor Stretch/visual.svg b/Exercise Library/Kneeling Hip Flexor Stretch/visual.svg new file mode 100644 index 0000000..a1674bd --- /dev/null +++ b/Exercise Library/Kneeling Hip Flexor Stretch/visual.svg @@ -0,0 +1,19 @@ + + Kneeling Hip Flexor Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Leg Swings/frames/frame-1.svg b/Exercise Library/Leg Swings/frames/frame-1.svg new file mode 100644 index 0000000..21464ba --- /dev/null +++ b/Exercise Library/Leg Swings/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Leg Swings + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Leg Swings/frames/frame-2.svg b/Exercise Library/Leg Swings/frames/frame-2.svg new file mode 100644 index 0000000..20810b5 --- /dev/null +++ b/Exercise Library/Leg Swings/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Leg Swings + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Leg Swings/info.md b/Exercise Library/Leg Swings/info.md new file mode 100644 index 0000000..d199798 --- /dev/null +++ b/Exercise Library/Leg Swings/info.md @@ -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:** 10–12 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. diff --git a/Exercise Library/Leg Swings/motion.json b/Exercise Library/Leg Swings/motion.json new file mode 100644 index 0000000..691e0d0 --- /dev/null +++ b/Exercise Library/Leg Swings/motion.json @@ -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]} + } + ] +} diff --git a/Exercise Library/Leg Swings/orbit.gif b/Exercise Library/Leg Swings/orbit.gif new file mode 100644 index 0000000..febc6bc Binary files /dev/null and b/Exercise Library/Leg Swings/orbit.gif differ diff --git a/Exercise Library/Leg Swings/preview.gif b/Exercise Library/Leg Swings/preview.gif new file mode 100644 index 0000000..187019d Binary files /dev/null and b/Exercise Library/Leg Swings/preview.gif differ diff --git a/Exercise Library/Leg Swings/visual.svg b/Exercise Library/Leg Swings/visual.svg new file mode 100644 index 0000000..21464ba --- /dev/null +++ b/Exercise Library/Leg Swings/visual.svg @@ -0,0 +1,19 @@ + + Leg Swings + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/March in Place/frames/frame-1.svg b/Exercise Library/March in Place/frames/frame-1.svg new file mode 100644 index 0000000..640ae40 --- /dev/null +++ b/Exercise Library/March in Place/frames/frame-1.svg @@ -0,0 +1,19 @@ + + March in Place + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/March in Place/frames/frame-2.svg b/Exercise Library/March in Place/frames/frame-2.svg new file mode 100644 index 0000000..159f732 --- /dev/null +++ b/Exercise Library/March in Place/frames/frame-2.svg @@ -0,0 +1,19 @@ + + March in Place + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/March in Place/frames/frame-3.svg b/Exercise Library/March in Place/frames/frame-3.svg new file mode 100644 index 0000000..d0ef991 --- /dev/null +++ b/Exercise Library/March in Place/frames/frame-3.svg @@ -0,0 +1,19 @@ + + March in Place + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/March in Place/frames/frame-4.svg b/Exercise Library/March in Place/frames/frame-4.svg new file mode 100644 index 0000000..159f732 --- /dev/null +++ b/Exercise Library/March in Place/frames/frame-4.svg @@ -0,0 +1,19 @@ + + March in Place + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/March in Place/info.md b/Exercise Library/March in Place/info.md new file mode 100644 index 0000000..60da866 --- /dev/null +++ b/Exercise Library/March in Place/info.md @@ -0,0 +1,39 @@ +# March in Place + +A rhythmic warm-up staple — drive one knee up while the opposite arm swings +through, then switch, marching on the spot. It wakes the hip flexors, primes +the calves and ankles, and lifts the heart rate before the real work. + +- **Category:** Mobility / warm-up +- **Type:** Dynamic warm-up +- **Targets:** Hip flexors, calves, coordination +- **Prescription:** 30–60 seconds at a steady, controlled cadence +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall with feet hip-width, arms relaxed at your sides, eyes forward. + +## Execution + +1. Drive one knee up toward hip height, staying tall through the spine. +2. Swing the opposite arm forward as the knee rises — natural, like walking. +3. Plant that foot and lift the other knee, letting the arms switch. +4. Keep alternating in an even, unhurried rhythm. + +## Cues + +- Stand tall — no hunching or leaning back to swing the knee up. +- Opposite arm to opposite knee, the same coordination as walking. +- Land softly through the whole foot, not with a hard heel strike. + +## Common Mistakes + +- Shuffling low, barely lifting the knees. +- Rushing into a stiff, bouncy jog instead of a controlled march. +- Same-side arm and knee moving together, which kills the rhythm. + +## Progression + +Lift the knees higher, quicken the cadence, or add a light arm reach overhead +to turn it into a fuller-body warm-up. diff --git a/Exercise Library/March in Place/motion.json b/Exercise Library/March in Place/motion.json new file mode 100644 index 0000000..8e3f770 --- /dev/null +++ b/Exercise Library/March in Place/motion.json @@ -0,0 +1,52 @@ +{ + "name": "March in Place", + "primary": 1, + "camera": {"zoom": 0.7}, + "working": ["leg_r", "leg_l"], + "frames": [ + { + "hold": 0.18, "tween": 0.42, + "root": {"pos": [160, 62], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": -28, "elbow_r": 82, + "shoulder_l": 34, "elbow_l": 78, + "hip_r": 68, "knee_r": 88, "ankle_r": -8, + "hip_l": 2, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_l": [162, 150]} + }, + { + "hold": 0.14, "tween": 0.4, + "root": {"pos": [160, 64], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 3, "elbow_r": 64, + "shoulder_l": 3, "elbow_l": 64, + "hip_r": 4, "knee_r": 4, "ankle_r": 0, + "hip_l": 4, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + }, + { + "hold": 0.18, "tween": 0.42, + "root": {"pos": [160, 62], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 34, "elbow_r": 78, + "shoulder_l": -28, "elbow_l": 82, + "hip_r": 2, "knee_r": 4, "ankle_r": 0, + "hip_l": 68, "knee_l": 88, "ankle_l": -8, + "pins": {"foot_r": [158, 148]} + }, + { + "hold": 0.14, "tween": 0.4, + "root": {"pos": [160, 64], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 3, "elbow_r": 64, + "shoulder_l": 3, "elbow_l": 64, + "hip_r": 4, "knee_r": 4, "ankle_r": 0, + "hip_l": 4, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + } + ] +} diff --git a/Exercise Library/March in Place/orbit.gif b/Exercise Library/March in Place/orbit.gif new file mode 100644 index 0000000..5c9061a Binary files /dev/null and b/Exercise Library/March in Place/orbit.gif differ diff --git a/Exercise Library/March in Place/preview.gif b/Exercise Library/March in Place/preview.gif new file mode 100644 index 0000000..e7c0601 Binary files /dev/null and b/Exercise Library/March in Place/preview.gif differ diff --git a/Exercise Library/March in Place/visual.svg b/Exercise Library/March in Place/visual.svg new file mode 100644 index 0000000..640ae40 --- /dev/null +++ b/Exercise Library/March in Place/visual.svg @@ -0,0 +1,19 @@ + + March in Place + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Neck Rolls/frames/frame-1.svg b/Exercise Library/Neck Rolls/frames/frame-1.svg new file mode 100644 index 0000000..29ff1cd --- /dev/null +++ b/Exercise Library/Neck Rolls/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Neck Rolls + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Neck Rolls/frames/frame-2.svg b/Exercise Library/Neck Rolls/frames/frame-2.svg new file mode 100644 index 0000000..c965772 --- /dev/null +++ b/Exercise Library/Neck Rolls/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Neck Rolls + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Neck Rolls/frames/frame-3.svg b/Exercise Library/Neck Rolls/frames/frame-3.svg new file mode 100644 index 0000000..2373891 --- /dev/null +++ b/Exercise Library/Neck Rolls/frames/frame-3.svg @@ -0,0 +1,19 @@ + + Neck Rolls + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Neck Rolls/frames/frame-4.svg b/Exercise Library/Neck Rolls/frames/frame-4.svg new file mode 100644 index 0000000..6c4a834 --- /dev/null +++ b/Exercise Library/Neck Rolls/frames/frame-4.svg @@ -0,0 +1,19 @@ + + Neck Rolls + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Neck Rolls/info.md b/Exercise Library/Neck Rolls/info.md new file mode 100644 index 0000000..3215820 --- /dev/null +++ b/Exercise Library/Neck Rolls/info.md @@ -0,0 +1,41 @@ +# Neck Rolls + +Slow, gentle circles of the head to loosen the neck and upper spine before +training or after a long day at a desk. + +- **Category:** Mobility / warm-up +- **Type:** Neck mobility +- **Targets:** Cervical spine, upper trapezius, levator scapulae +- **Prescription:** 3–5 slow circles in each direction, stopping short of any pinch +- **Defaults:** 2 × 5 bodyweight + +## Setup + +Stand tall, feet hip-width, shoulders relaxed and down, arms hanging quietly at +your sides. + +## Execution + +1. Drop the chin toward the chest. +2. Roll one ear down toward that shoulder, then carry the head back into a + gentle look-up. +3. Bring the other ear toward the far shoulder and back down to the chest — one + smooth, continuous circle. +4. Finish the circles, then reverse the direction. + +## Cues + +- Move slowly — a single circle should take several seconds. +- Keep the shoulders down and still; only the head travels. +- Ease off the moment you feel a pinch, especially at the look-up. + +## Common Mistakes + +- Whipping the head around quickly. +- Shrugging a shoulder up to meet the ear. +- Forcing the range at the top of the circle. + +## Progression + +Small pain-free arcs → full slow circles → add a brief pause at each ear and at +the chin tuck. diff --git a/Exercise Library/Neck Rolls/motion.json b/Exercise Library/Neck Rolls/motion.json new file mode 100644 index 0000000..71fc19d --- /dev/null +++ b/Exercise Library/Neck Rolls/motion.json @@ -0,0 +1,52 @@ +{ + "name": "Neck Rolls", + "primary": 1, + "camera": {"yaw": 35, "zoom": 0.66}, + "working": ["spine"], + "frames": [ + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": 0}], + "neck": {"flexion": 44, "rotation": 0}, "head": 8, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": 14}], + "neck": {"flexion": 6, "rotation": 16}, "head": 0, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": 0}], + "neck": {"flexion": -24, "rotation": 0}, "head": -12, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": -14}], + "neck": {"flexion": 6, "rotation": -16}, "head": 0, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + } + ] +} diff --git a/Exercise Library/Neck Rolls/orbit.gif b/Exercise Library/Neck Rolls/orbit.gif new file mode 100644 index 0000000..712dbc7 Binary files /dev/null and b/Exercise Library/Neck Rolls/orbit.gif differ diff --git a/Exercise Library/Neck Rolls/preview.gif b/Exercise Library/Neck Rolls/preview.gif new file mode 100644 index 0000000..bb8cfe0 Binary files /dev/null and b/Exercise Library/Neck Rolls/preview.gif differ diff --git a/Exercise Library/Neck Rolls/visual.svg b/Exercise Library/Neck Rolls/visual.svg new file mode 100644 index 0000000..29ff1cd --- /dev/null +++ b/Exercise Library/Neck Rolls/visual.svg @@ -0,0 +1,19 @@ + + Neck Rolls + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Overhead Triceps Stretch/frames/frame-1.svg b/Exercise Library/Overhead Triceps Stretch/frames/frame-1.svg new file mode 100644 index 0000000..9cecc1f --- /dev/null +++ b/Exercise Library/Overhead Triceps Stretch/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Overhead Triceps Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Overhead Triceps Stretch/frames/frame-2.svg b/Exercise Library/Overhead Triceps Stretch/frames/frame-2.svg new file mode 100644 index 0000000..806dffa --- /dev/null +++ b/Exercise Library/Overhead Triceps Stretch/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Overhead Triceps Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Overhead Triceps Stretch/info.md b/Exercise Library/Overhead Triceps Stretch/info.md new file mode 100644 index 0000000..689f475 --- /dev/null +++ b/Exercise Library/Overhead Triceps Stretch/info.md @@ -0,0 +1,42 @@ +# Overhead Triceps Stretch + +Reach one arm overhead and let the hand drop behind the neck, then use the +other hand to ease the elbow back. A simple way to lengthen the triceps and +open the underside of the shoulder between pressing sets. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Triceps (back of the upper arm), lats, shoulder +- **Prescription:** Hold 30 s per side, easing the elbow back gently +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall with the feet hip-width. Raise one arm overhead and bend the elbow +so the hand drops down behind the neck. + +## Execution + +1. Reach the free hand up and rest it on the raised elbow. +2. Draw the elbow gently back and toward the midline until the triceps + lengthens. +3. Let the trunk lean a touch away from the raised arm to deepen the stretch. +4. Hold and breathe, then release and switch arms. + +## Cues + +- Ease the elbow back, not down — coax it, never wrench it. +- Keep the ribs from flaring by drawing them softly down. +- Lengthen tall through the spine before adding the side lean. + +## Common Mistakes + +- Cranking the head forward to meet the arm instead of dropping the hand behind. +- Flaring the ribs and arching the low back to fake more range. +- Shrugging the working shoulder up toward the ear. + +## Progression + +Walk the hand further down the spine → add a gentle side bend away from the +raised arm → hold a strap between the top and bottom hands to link both +shoulders. diff --git a/Exercise Library/Overhead Triceps Stretch/motion.json b/Exercise Library/Overhead Triceps Stretch/motion.json new file mode 100644 index 0000000..ed2e7e9 --- /dev/null +++ b/Exercise Library/Overhead Triceps Stretch/motion.json @@ -0,0 +1,31 @@ +{ + "name": "Overhead Triceps Stretch", + "primary": 2, + "camera": {"yaw": 40, "zoom": 0.73}, + "working": ["arm_r"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 8, "head": -6, + "shoulder_r": {"flexion": 143, "abduction": 10}, "elbow_r": 98, + "shoulder_l": {"flexion": 130, "abduction": 6}, "elbow_l": 44, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [{"lateral": -5}, {"lateral": -5}], + "neck": 14, "head": -6, + "shoulder_r": {"flexion": 172, "abduction": 10}, "elbow_r": 150, + "shoulder_l": {"flexion": 158, "abduction": -6}, "elbow_l": 70, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150], + "hand_l": [164, -51]} + } + ] +} diff --git a/Exercise Library/Overhead Triceps Stretch/preview.gif b/Exercise Library/Overhead Triceps Stretch/preview.gif new file mode 100644 index 0000000..a1d9a49 Binary files /dev/null and b/Exercise Library/Overhead Triceps Stretch/preview.gif differ diff --git a/Exercise Library/Overhead Triceps Stretch/visual.svg b/Exercise Library/Overhead Triceps Stretch/visual.svg new file mode 100644 index 0000000..806dffa --- /dev/null +++ b/Exercise Library/Overhead Triceps Stretch/visual.svg @@ -0,0 +1,19 @@ + + Overhead Triceps Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Calf Raise/frames/frame-1.svg b/Exercise Library/Standing Calf Raise/frames/frame-1.svg new file mode 100644 index 0000000..9f88684 --- /dev/null +++ b/Exercise Library/Standing Calf Raise/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Standing Calf Raise + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Calf Raise/frames/frame-2.svg b/Exercise Library/Standing Calf Raise/frames/frame-2.svg new file mode 100644 index 0000000..4b0455d --- /dev/null +++ b/Exercise Library/Standing Calf Raise/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Standing Calf Raise + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Calf Raise/info.md b/Exercise Library/Standing Calf Raise/info.md new file mode 100644 index 0000000..6871747 --- /dev/null +++ b/Exercise Library/Standing Calf Raise/info.md @@ -0,0 +1,40 @@ +# Standing Calf Raise + +Rise onto the balls of both feet, lifting the heels as high as they'll go, +then lower under control. The simplest way to train the calves and strengthen +the ankles — no equipment, just bodyweight and a slow tempo. + +- **Category:** Mobility / warm-up +- **Type:** Bodyweight calf raise +- **Targets:** Gastrocnemius, soleus, ankle stability +- **Prescription:** 2–3 × 15–20, slow up and down with a pause at the top +- **Defaults:** 3 × 15 bodyweight + +## Setup + +Stand tall with feet hip-width, weight even across both feet. Rest a hand on +a wall for balance if needed. + +## Execution + +1. Press through the balls of the feet and lift both heels as high as you can. +2. Pause for a beat at the top, standing tall on your toes. +3. Lower the heels slowly back to the floor under control. +4. Repeat for the set without bouncing off the bottom. + +## Cues + +- Push all the way up to a full stretch at the top of each rep. +- Keep the knees straight but soft, so the calves do the work. +- Lower slowly — the descent builds as much strength as the lift. + +## Common Mistakes + +- Short, bouncy reps that never reach a full heel lift. +- Rolling the weight to the outside of the feet. +- Bending the knees to bob up instead of driving through the ankles. + +## Progression + +Pause longer at the top, slow the lowering phase, then progress to single-leg +raises or add load with a dumbbell or a step for extra range. diff --git a/Exercise Library/Standing Calf Raise/motion.json b/Exercise Library/Standing Calf Raise/motion.json new file mode 100644 index 0000000..d54574c --- /dev/null +++ b/Exercise Library/Standing Calf Raise/motion.json @@ -0,0 +1,30 @@ +{ + "name": "Standing Calf Raise", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_r", "leg_l"], + "frames": [ + { + "hold": 0.3, "tween": 0.6, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -4, + "shoulder_r": 4, "elbow_r": 6, + "shoulder_l": 4, "elbow_l": 6, + "hip_r": 4, "knee_r": 4, "ankle_r": 0, + "hip_l": 4, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + }, + { + "hold": 0.4, "tween": 0.9, + "root": {"pos": [160, 55], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -4, + "shoulder_r": 4, "elbow_r": 6, + "shoulder_l": 4, "elbow_l": 6, + "hip_r": 4, "knee_r": 3, "ankle_r": -48, + "hip_l": 4, "knee_l": 3, "ankle_l": -48, + "pins": {"foot_r": [158, 139], "foot_l": [162, 141]} + } + ] +} diff --git a/Exercise Library/Standing Calf Raise/orbit.gif b/Exercise Library/Standing Calf Raise/orbit.gif new file mode 100644 index 0000000..4101a8e Binary files /dev/null and b/Exercise Library/Standing Calf Raise/orbit.gif differ diff --git a/Exercise Library/Standing Calf Raise/preview.gif b/Exercise Library/Standing Calf Raise/preview.gif new file mode 100644 index 0000000..c3f1b52 Binary files /dev/null and b/Exercise Library/Standing Calf Raise/preview.gif differ diff --git a/Exercise Library/Standing Calf Raise/visual.svg b/Exercise Library/Standing Calf Raise/visual.svg new file mode 100644 index 0000000..4b0455d --- /dev/null +++ b/Exercise Library/Standing Calf Raise/visual.svg @@ -0,0 +1,19 @@ + + Standing Calf Raise + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Calf Stretch/frames/frame-1.svg b/Exercise Library/Standing Calf Stretch/frames/frame-1.svg new file mode 100644 index 0000000..67f237a --- /dev/null +++ b/Exercise Library/Standing Calf Stretch/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Standing Calf Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Calf Stretch/frames/frame-2.svg b/Exercise Library/Standing Calf Stretch/frames/frame-2.svg new file mode 100644 index 0000000..d8b1001 --- /dev/null +++ b/Exercise Library/Standing Calf Stretch/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Standing Calf Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Calf Stretch/info.md b/Exercise Library/Standing Calf Stretch/info.md new file mode 100644 index 0000000..8292db5 --- /dev/null +++ b/Exercise Library/Standing Calf Stretch/info.md @@ -0,0 +1,41 @@ +# Standing Calf Stretch + +A staggered-stance lean that lengthens the back calf: press the rear heel into +the floor with the leg long while the front knee bends and the hips travel +forward. The classic wall or curb stretch, done anywhere. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Calf (gastrocnemius, soleus), Achilles tendon +- **Prescription:** Hold 30 s per side, keeping the back heel pinned down +- **Defaults:** 2 × 30 s + +## Setup + +Stand in a split stance, one foot a stride behind the other, both toes pointing +forward. Rest the hands on the front thigh. + +## Execution + +1. Straighten the back leg and press its heel flat into the floor. +2. Bend the front knee and ease the hips forward until the back calf lengthens. +3. Keep the back knee straight and the rear foot pointing straight ahead. +4. Hold, breathing easily, then switch sides. + +## Cues + +- Drive the back heel down — the stretch lives in keeping it planted. +- Point the back toes forward, not turned out, to load the calf evenly. +- Move the hips forward for more; don't collapse the back knee. + +## Common Mistakes + +- Letting the back heel lift, which cuts off the stretch. +- Turning the back foot out to cheat more range. +- Rounding the back instead of hinging the hips forward. + +## Progression + +Bend the back knee slightly to shift the stretch to the lower soleus → +drop the back heel off a step or curb for a deeper range → hold longer as the +ankle mobility improves. diff --git a/Exercise Library/Standing Calf Stretch/motion.json b/Exercise Library/Standing Calf Stretch/motion.json new file mode 100644 index 0000000..7cd97db --- /dev/null +++ b/Exercise Library/Standing Calf Stretch/motion.json @@ -0,0 +1,31 @@ +{ + "name": "Standing Calf Stretch", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_l"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 66], "pitch": 12}, + "spine": [4, 4], + "neck": 6, "head": -10, + "shoulder_r": 24, "elbow_r": 42, + "shoulder_l": 24, "elbow_l": 42, + "hip_r": 22, "knee_r": 22, "ankle_r": 6, + "knee_l": 2, "ankle_l": 10, + "pins": {"foot_r": [188, 150], "foot_l": [142, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 68], "pitch": 21}, + "spine": [6, 6], + "neck": 9, "head": -17, + "shoulder_r": 40, "elbow_r": 34, + "shoulder_l": 40, "elbow_l": 34, + "hip_r": 44, "knee_r": 46, "ankle_r": 8, + "knee_l": 2, "ankle_l": 12, + "pins": {"foot_r": [198, 150], "foot_l": [132, 150], + "hand_r": [186, 110], "hand_l": [190, 112]} + } + ] +} diff --git a/Exercise Library/Standing Calf Stretch/preview.gif b/Exercise Library/Standing Calf Stretch/preview.gif new file mode 100644 index 0000000..dd14bf4 Binary files /dev/null and b/Exercise Library/Standing Calf Stretch/preview.gif differ diff --git a/Exercise Library/Standing Calf Stretch/visual.svg b/Exercise Library/Standing Calf Stretch/visual.svg new file mode 100644 index 0000000..d8b1001 --- /dev/null +++ b/Exercise Library/Standing Calf Stretch/visual.svg @@ -0,0 +1,19 @@ + + Standing Calf Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Forward Fold/frames/frame-1.svg b/Exercise Library/Standing Forward Fold/frames/frame-1.svg new file mode 100644 index 0000000..fe27016 --- /dev/null +++ b/Exercise Library/Standing Forward Fold/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Standing Forward Fold + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Forward Fold/frames/frame-2.svg b/Exercise Library/Standing Forward Fold/frames/frame-2.svg new file mode 100644 index 0000000..d4634a9 --- /dev/null +++ b/Exercise Library/Standing Forward Fold/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Standing Forward Fold + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Forward Fold/info.md b/Exercise Library/Standing Forward Fold/info.md new file mode 100644 index 0000000..ca204cf --- /dev/null +++ b/Exercise Library/Standing Forward Fold/info.md @@ -0,0 +1,39 @@ +# Standing Forward Fold + +Hinge at the hips and round down toward the toes, letting the head and arms +hang heavy while the back of the legs lengthens. A calming mobility drill that +decompresses the spine and opens the hamstrings and posterior chain. + +- **Category:** Mobility / warm-up +- **Type:** Standing mobility +- **Targets:** Hamstrings, low back, posterior chain +- **Prescription:** 5–8 slow roll-downs, or hold the bottom 20–30 seconds +- **Defaults:** 2 × 8 bodyweight + +## Setup + +Stand tall with feet hip-width, knees soft, arms relaxed at your sides. + +## Execution + +1. Hinge at the hips and begin folding forward, chin tucking toward the chest. +2. Round down one segment at a time, letting the arms and head hang heavy. +3. Fold as far as the hamstrings allow — hands drifting toward the floor. +4. Reverse slowly, stacking the spine back up to standing. + +## Cues + +- Let gravity do the work; keep the neck and shoulders loose. +- Soften the knees if the hamstrings clamp down. +- Feel a stretch, never a sharp pull in the low back. + +## Common Mistakes + +- Bouncing at the bottom to force more range. +- Locking the knees hard and straining the low back. +- Snapping back up instead of rolling through the spine. + +## Progression + +Deepen the fold as the hamstrings loosen, pause and breathe at the bottom, or +walk the hands toward the shins for a gentle assisted stretch. diff --git a/Exercise Library/Standing Forward Fold/motion.json b/Exercise Library/Standing Forward Fold/motion.json new file mode 100644 index 0000000..cb9f8da --- /dev/null +++ b/Exercise Library/Standing Forward Fold/motion.json @@ -0,0 +1,31 @@ +{ + "name": "Standing Forward Fold", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_r", "leg_l", "spine"], + "frames": [ + { + "hold": 0.4, "tween": 1.2, + "root": {"pos": [160, 64], "pitch": 5}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 5, "elbow_r": 5, + "shoulder_l": 5, "elbow_l": 5, + "hip_r": 5, "knee_r": 6, "ankle_r": 0, + "hip_l": 5, "knee_l": 6, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + }, + { + "hold": 0.6, "tween": 1.2, + "root": {"pos": [147, 66], "pitch": 134}, + "spine": [11, 13], + "neck": 16, "head": -56, + "shoulder_r": 90, "elbow_r": 6, + "shoulder_l": 90, "elbow_l": 6, + "hip_r": 34, "knee_r": 14, "ankle_r": 10, + "hip_l": 34, "knee_l": 14, "ankle_l": 10, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150], + "hand_r": [159, 151], "hand_l": [163, 152]} + } + ] +} diff --git a/Exercise Library/Standing Forward Fold/orbit.gif b/Exercise Library/Standing Forward Fold/orbit.gif new file mode 100644 index 0000000..2857ece Binary files /dev/null and b/Exercise Library/Standing Forward Fold/orbit.gif differ diff --git a/Exercise Library/Standing Forward Fold/preview.gif b/Exercise Library/Standing Forward Fold/preview.gif new file mode 100644 index 0000000..ba4484b Binary files /dev/null and b/Exercise Library/Standing Forward Fold/preview.gif differ diff --git a/Exercise Library/Standing Forward Fold/visual.svg b/Exercise Library/Standing Forward Fold/visual.svg new file mode 100644 index 0000000..d4634a9 --- /dev/null +++ b/Exercise Library/Standing Forward Fold/visual.svg @@ -0,0 +1,19 @@ + + Standing Forward Fold + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Quad Stretch/frames/frame-1.svg b/Exercise Library/Standing Quad Stretch/frames/frame-1.svg new file mode 100644 index 0000000..11f83ae --- /dev/null +++ b/Exercise Library/Standing Quad Stretch/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Standing Quad Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Quad Stretch/frames/frame-2.svg b/Exercise Library/Standing Quad Stretch/frames/frame-2.svg new file mode 100644 index 0000000..5333973 --- /dev/null +++ b/Exercise Library/Standing Quad Stretch/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Standing Quad Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Quad Stretch/info.md b/Exercise Library/Standing Quad Stretch/info.md new file mode 100644 index 0000000..d7dc106 --- /dev/null +++ b/Exercise Library/Standing Quad Stretch/info.md @@ -0,0 +1,42 @@ +# Standing Quad Stretch + +Balance on one leg, catch the opposite foot, and draw the heel toward the seat +to lengthen the front of the thigh. A quick, equipment-free way to loosen the +quads after running or squatting. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Quadriceps (front of the thigh), hip flexors +- **Prescription:** Hold 30 s per side, keeping the knees together +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall next to a wall for balance if needed. Shift the weight onto one leg +and bend the other knee, reaching back with the same-side hand to hold the +foot or ankle. + +## Execution + +1. Draw the heel gently toward the glute until the front of the thigh + lengthens. +2. Keep the knees pressed together and the thigh pointing straight down. +3. Stand tall — tuck the tailbone so the low back doesn't arch. +4. Hold and breathe, then lower the foot and switch sides. + +## Cues + +- Keep the bent knee pointing at the floor, not flaring out to the side. +- Squeeze the glute of the stretching leg to add a hip-flexor stretch. +- Reach the free arm out or up for balance instead of gripping a wall hard. + +## Common Mistakes + +- Letting the knee drift forward and the back arch to reach further. +- Pulling the heel hard into the glute and cranking the knee. +- Hunching or leaning far forward to grab the foot. + +## Progression + +Hold a wall or chair lightly → free-standing for balance → add a slight +forward hinge of the trunk to deepen the hip-flexor component. diff --git a/Exercise Library/Standing Quad Stretch/motion.json b/Exercise Library/Standing Quad Stretch/motion.json new file mode 100644 index 0000000..a3a2227 --- /dev/null +++ b/Exercise Library/Standing Quad Stretch/motion.json @@ -0,0 +1,30 @@ +{ + "name": "Standing Quad Stretch", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_r"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": -30, "elbow_r": 40, + "shoulder_l": {"flexion": 118, "abduction": 12}, "elbow_l": 12, + "hip_r": -6, "knee_r": 120, "ankle_r": -30, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_l": [162, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": -46, "elbow_r": 72, + "shoulder_l": {"flexion": 122, "abduction": 14}, "elbow_l": 10, + "hip_r": -8, "knee_r": 145, "ankle_r": -48, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_l": [162, 150], "foot_r": [154, 38], "hand_r": [156, 36]} + } + ] +} diff --git a/Exercise Library/Standing Quad Stretch/preview.gif b/Exercise Library/Standing Quad Stretch/preview.gif new file mode 100644 index 0000000..29126b1 Binary files /dev/null and b/Exercise Library/Standing Quad Stretch/preview.gif differ diff --git a/Exercise Library/Standing Quad Stretch/visual.svg b/Exercise Library/Standing Quad Stretch/visual.svg new file mode 100644 index 0000000..5333973 --- /dev/null +++ b/Exercise Library/Standing Quad Stretch/visual.svg @@ -0,0 +1,19 @@ + + Standing Quad Stretch + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Side Bend/frames/frame-1.svg b/Exercise Library/Standing Side Bend/frames/frame-1.svg new file mode 100644 index 0000000..fab651d --- /dev/null +++ b/Exercise Library/Standing Side Bend/frames/frame-1.svg @@ -0,0 +1,18 @@ + + Standing Side Bend + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Side Bend/frames/frame-2.svg b/Exercise Library/Standing Side Bend/frames/frame-2.svg new file mode 100644 index 0000000..3fb0280 --- /dev/null +++ b/Exercise Library/Standing Side Bend/frames/frame-2.svg @@ -0,0 +1,18 @@ + + Standing Side Bend + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Side Bend/frames/frame-3.svg b/Exercise Library/Standing Side Bend/frames/frame-3.svg new file mode 100644 index 0000000..f85e7b9 --- /dev/null +++ b/Exercise Library/Standing Side Bend/frames/frame-3.svg @@ -0,0 +1,18 @@ + + Standing Side Bend + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Side Bend/frames/frame-4.svg b/Exercise Library/Standing Side Bend/frames/frame-4.svg new file mode 100644 index 0000000..3fb0280 --- /dev/null +++ b/Exercise Library/Standing Side Bend/frames/frame-4.svg @@ -0,0 +1,18 @@ + + Standing Side Bend + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Standing Side Bend/info.md b/Exercise Library/Standing Side Bend/info.md new file mode 100644 index 0000000..a63745e --- /dev/null +++ b/Exercise Library/Standing Side Bend/info.md @@ -0,0 +1,40 @@ +# Standing Side Bend + +Reach one arm overhead and lean to the opposite side, alternating, to lengthen +the side body and open the ribs and lats. + +- **Category:** Mobility / warm-up +- **Type:** Lateral flexion mobility +- **Targets:** Obliques, quadratus lumborum, lats +- **Prescription:** 8 slow bends to each side, reaching long +- **Defaults:** 2 × 8 bodyweight + +## Setup + +Stand tall, feet hip-width, one arm relaxed and the other ready to reach +overhead. + +## Execution + +1. Raise one arm overhead and reach it up and over as you bend to the opposite + side. +2. Feel a long stretch down the whole reaching side; keep both feet planted. +3. Return to tall through center, then reach the other arm over and bend the + other way. + +## Cues + +- Reach up and over — think length, not a sideways crunch. +- Keep the hips level and both feet flat on the floor. +- Bend straight to the side; don't twist or lean forward. + +## Common Mistakes + +- Collapsing down into the bend instead of reaching long. +- Shoving the hips out to the side to counterbalance. +- Rotating the trunk forward out of the pure side bend. + +## Progression + +Short range → full reach-and-over → add a brief hold at the end range on each +side. diff --git a/Exercise Library/Standing Side Bend/motion.json b/Exercise Library/Standing Side Bend/motion.json new file mode 100644 index 0000000..052b171 --- /dev/null +++ b/Exercise Library/Standing Side Bend/motion.json @@ -0,0 +1,52 @@ +{ + "name": "Standing Side Bend", + "primary": 1, + "camera": {"yaw": 90, "zoom": 0.66}, + "working": ["spine"], + "frames": [ + { + "hold": 0.5, "tween": 1.0, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": 16}, {"lateral": 15}], + "neck": 0, + "shoulder_l": {"flexion": 14, "abduction": 126}, "elbow_l": 50, + "shoulder_r": {"flexion": 4, "abduction": 8}, "elbow_r": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + }, + { + "hold": 0.3, "tween": 0.9, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": 0}, {"lateral": 0}], + "neck": 0, + "shoulder_l": {"flexion": 4, "abduction": 8}, "elbow_l": 14, + "shoulder_r": {"flexion": 4, "abduction": 8}, "elbow_r": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + }, + { + "hold": 0.5, "tween": 1.0, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": -16}, {"lateral": -15}], + "neck": 0, + "shoulder_r": {"flexion": 14, "abduction": 126}, "elbow_r": 50, + "shoulder_l": {"flexion": 4, "abduction": 8}, "elbow_l": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + }, + { + "hold": 0.3, "tween": 0.9, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": 0}, {"lateral": 0}], + "neck": 0, + "shoulder_l": {"flexion": 4, "abduction": 8}, "elbow_l": 14, + "shoulder_r": {"flexion": 4, "abduction": 8}, "elbow_r": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + } + ] +} diff --git a/Exercise Library/Standing Side Bend/orbit.gif b/Exercise Library/Standing Side Bend/orbit.gif new file mode 100644 index 0000000..1ca9ef8 Binary files /dev/null and b/Exercise Library/Standing Side Bend/orbit.gif differ diff --git a/Exercise Library/Standing Side Bend/preview.gif b/Exercise Library/Standing Side Bend/preview.gif new file mode 100644 index 0000000..e1ea39c Binary files /dev/null and b/Exercise Library/Standing Side Bend/preview.gif differ diff --git a/Exercise Library/Standing Side Bend/visual.svg b/Exercise Library/Standing Side Bend/visual.svg new file mode 100644 index 0000000..fab651d --- /dev/null +++ b/Exercise Library/Standing Side Bend/visual.svg @@ -0,0 +1,18 @@ + + Standing Side Bend + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Torso Twist/frames/frame-1.svg b/Exercise Library/Torso Twist/frames/frame-1.svg new file mode 100644 index 0000000..0f17f39 --- /dev/null +++ b/Exercise Library/Torso Twist/frames/frame-1.svg @@ -0,0 +1,19 @@ + + Torso Twist + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Torso Twist/frames/frame-2.svg b/Exercise Library/Torso Twist/frames/frame-2.svg new file mode 100644 index 0000000..50c5f6c --- /dev/null +++ b/Exercise Library/Torso Twist/frames/frame-2.svg @@ -0,0 +1,19 @@ + + Torso Twist + + + + + + + + + + + + + near + + far + + diff --git a/Exercise Library/Torso Twist/info.md b/Exercise Library/Torso Twist/info.md new file mode 100644 index 0000000..349ed59 --- /dev/null +++ b/Exercise Library/Torso Twist/info.md @@ -0,0 +1,37 @@ +# Torso Twist + +Relaxed standing rotation from side to side, letting the arms swing freely, to +warm the spine and obliques before lifting. + +- **Category:** Mobility / warm-up +- **Type:** Spinal rotation +- **Targets:** Obliques, thoracic spine, lower back +- **Prescription:** 10 easy twists to each side, arms loose +- **Defaults:** 2 × 10 bodyweight + +## Setup + +Stand with feet shoulder-width, knees soft, arms hanging loose. + +## Execution + +1. Turn the trunk gently to one side, letting the arms swing across the body. +2. Let that momentum carry you back through center to the other side. +3. Keep a smooth, relaxed rhythm turning side to side. + +## Cues + +- Let the arms be floppy — they trail the twist, they don't drive it. +- Rotate from the waist and mid-back while the hips stay mostly forward. +- Keep the neck loose and let the head follow the shoulders. + +## Common Mistakes + +- Yanking the arms to force more rotation. +- Letting the feet peel off the floor as you turn. +- Twisting so hard the low back pinches. + +## Progression + +Small easy twists → fuller rotation → slow, controlled turns with a brief pause +at each end. diff --git a/Exercise Library/Torso Twist/motion.json b/Exercise Library/Torso Twist/motion.json new file mode 100644 index 0000000..7e168bc --- /dev/null +++ b/Exercise Library/Torso Twist/motion.json @@ -0,0 +1,30 @@ +{ + "name": "Torso Twist", + "primary": 1, + "camera": {"yaw": 90, "zoom": 0.7}, + "working": ["spine"], + "frames": [ + { + "hold": 0.3, "tween": 1.1, + "root": {"pos": [160, 64]}, + "spine": [{"rotation": 18}, {"rotation": 14}], + "neck": {"rotation": -8}, + "shoulder_r": 40, "elbow_r": 22, + "shoulder_l": 40, "elbow_l": 22, + "hip_r": 2, "knee_r": 3, "ankle_r": 0, + "hip_l": 2, "knee_l": 3, "ankle_l": 0, + "pins": {"foot_r": [151, 150], "foot_l": [169, 150]} + }, + { + "hold": 0.3, "tween": 1.1, + "root": {"pos": [160, 64]}, + "spine": [{"rotation": -18}, {"rotation": -14}], + "neck": {"rotation": 8}, + "shoulder_r": 40, "elbow_r": 22, + "shoulder_l": 40, "elbow_l": 22, + "hip_r": 2, "knee_r": 3, "ankle_r": 0, + "hip_l": 2, "knee_l": 3, "ankle_l": 0, + "pins": {"foot_r": [151, 150], "foot_l": [169, 150]} + } + ] +} diff --git a/Exercise Library/Torso Twist/orbit.gif b/Exercise Library/Torso Twist/orbit.gif new file mode 100644 index 0000000..547e092 Binary files /dev/null and b/Exercise Library/Torso Twist/orbit.gif differ diff --git a/Exercise Library/Torso Twist/preview.gif b/Exercise Library/Torso Twist/preview.gif new file mode 100644 index 0000000..1eb7d25 Binary files /dev/null and b/Exercise Library/Torso Twist/preview.gif differ diff --git a/Exercise Library/Torso Twist/visual.svg b/Exercise Library/Torso Twist/visual.svg new file mode 100644 index 0000000..0f17f39 --- /dev/null +++ b/Exercise Library/Torso Twist/visual.svg @@ -0,0 +1,19 @@ + + Torso Twist + + + + + + + + + + + + + near + + far + + diff --git a/Scripts/generate_starter_splits.swift b/Scripts/generate_starter_splits.swift index 27198de..8b31802 100644 --- a/Scripts/generate_starter_splits.swift +++ b/Scripts/generate_starter_splits.swift @@ -49,7 +49,7 @@ struct ExerciseDocument: Codable { var order: Int var sets: Int var reps: Int - var weight: Int + var weight: Double var loadType: Int var durationSeconds: Int var machineSettings: [MachineSetting]? = nil @@ -73,7 +73,7 @@ struct SplitDocument: Codable { // `machine: true` emits `machineSettings: []` — marks the exercise machine-based // (empty = nothing recorded yet), which lights up the machine-settings UI without // the user having to flip the editor toggle first. -struct Ex { let name: String; var weight = 0; var sets = 4; var reps = 10; var load = 1; var dur = 0; var machine = false } +struct Ex { let name: String; var weight: Double = 0; var sets = 4; var reps = 10; var load = 1; var dur = 0; var machine = false } struct Sp { let name: String; let color: String; let icon: String; let activity: Int; let ex: [Ex] } let seeds: [Sp] = [ @@ -108,6 +108,73 @@ let seeds: [Sp] = [ Ex(name: "Crunch", sets: 3, reps: 12, load: 0), Ex(name: "Reverse Crunch", sets: 3, reps: 12, load: 0), ]), + Sp(name: "Full Body Machines", color: "purple", icon: "figure.strengthtraining.traditional", activity: 0, ex: [ + Ex(name: "Leg Press", weight: 100, machine: true), + Ex(name: "Chest Press", weight: 40, machine: true), + Ex(name: "Seated Row", weight: 70, machine: true), + Ex(name: "Shoulder Press", weight: 30, machine: true), + Ex(name: "Lat Pull Down", weight: 80, machine: true), + Ex(name: "Abdominal", weight: 40, machine: true), + ]), + Sp(name: "Free Weight Basics", color: "red", icon: "dumbbell.fill", activity: 0, ex: [ + Ex(name: "Goblet Squat", weight: 25, sets: 3, reps: 10), + Ex(name: "Dumbbell Bench Press", weight: 25, sets: 3, reps: 8), + Ex(name: "Dumbbell Row", weight: 30, sets: 3, reps: 8), + Ex(name: "Dumbbell Shoulder Press", weight: 20, sets: 3, reps: 8), + Ex(name: "Romanian Deadlift", weight: 65, sets: 3, reps: 8), + Ex(name: "Dumbbell Curl", weight: 20, sets: 3, reps: 10), + ]), + Sp(name: "Upper Body Warm-Up", color: "cyan", icon: "figure.arms.open", activity: 1, ex: [ + Ex(name: "Arm Circles", sets: 2, reps: 10, load: 0), + Ex(name: "Torso Twist", sets: 2, reps: 10, load: 0), + Ex(name: "Standing Side Bend", sets: 2, reps: 8, load: 0), + Ex(name: "Cat-Cow", sets: 1, reps: 8, load: 0), + Ex(name: "Push-Up", sets: 2, reps: 8, load: 0), + ]), + Sp(name: "Lower Body Warm-Up", color: "mint", icon: "figure.walk", activity: 1, ex: [ + Ex(name: "March in Place", sets: 1, reps: 0, load: 2, dur: 60), + Ex(name: "Leg Swings", sets: 2, reps: 10, load: 0), + Ex(name: "Hip Circles", sets: 2, reps: 8, load: 0), + Ex(name: "Bodyweight Squat", sets: 2, reps: 12, load: 0), + Ex(name: "Glute Bridge", sets: 2, reps: 10, load: 0), + Ex(name: "Standing Calf Raise", sets: 2, reps: 12, load: 0), + ]), + Sp(name: "Morning Wake-Up", color: "yellow", icon: "sun.max.fill", activity: 1, ex: [ + Ex(name: "March in Place", sets: 1, reps: 0, load: 2, dur: 45), + Ex(name: "Neck Rolls", sets: 1, reps: 5, load: 0), + Ex(name: "Arm Circles", sets: 1, reps: 10, load: 0), + Ex(name: "Torso Twist", sets: 1, reps: 10, load: 0), + Ex(name: "Standing Side Bend", sets: 1, reps: 8, load: 0), + Ex(name: "Hip Circles", sets: 1, reps: 8, load: 0), + Ex(name: "Leg Swings", sets: 1, reps: 10, load: 0), + Ex(name: "Standing Calf Raise", sets: 1, reps: 12, load: 0), + Ex(name: "Standing Forward Fold", sets: 1, reps: 0, load: 2, dur: 30), + ]), + Sp(name: "Morning Mobility", color: "pink", icon: "figure.yoga", activity: 1, ex: [ + Ex(name: "Cat-Cow", sets: 1, reps: 10, load: 0), + Ex(name: "Bird Dog", sets: 1, reps: 8, load: 0), + Ex(name: "Dead Bug", sets: 1, reps: 8, load: 0), + Ex(name: "Glute Bridge", sets: 1, reps: 12, load: 0), + Ex(name: "Cobra Stretch", sets: 1, reps: 8, load: 0), + Ex(name: "Child's Pose", sets: 1, reps: 0, load: 2, dur: 45), + Ex(name: "Standing Forward Fold", sets: 1, reps: 0, load: 2, dur: 30), + ]), + Sp(name: "Full Body Stretch", color: "brown", icon: "figure.flexibility", activity: 1, ex: [ + Ex(name: "Standing Forward Fold", sets: 1, reps: 0, load: 2, dur: 30), + Ex(name: "Standing Quad Stretch", sets: 2, reps: 0, load: 2, dur: 30), + Ex(name: "Standing Calf Stretch", sets: 2, reps: 0, load: 2, dur: 30), + Ex(name: "Chest Opener", sets: 1, reps: 0, load: 2, dur: 30), + Ex(name: "Overhead Triceps Stretch", sets: 2, reps: 0, load: 2, dur: 30), + Ex(name: "Kneeling Hip Flexor Stretch", sets: 2, reps: 0, load: 2, dur: 30), + Ex(name: "Child's Pose", sets: 1, reps: 0, load: 2, dur: 45), + ]), + Sp(name: "Evening Stretch", color: "indigo", icon: "figure.mind.and.body", activity: 1, ex: [ + Ex(name: "Cat-Cow", sets: 1, reps: 10, load: 0), + Ex(name: "Butterfly Stretch", sets: 1, reps: 0, load: 2, dur: 45), + Ex(name: "Kneeling Hip Flexor Stretch", sets: 2, reps: 0, load: 2, dur: 30), + Ex(name: "Cobra Stretch", sets: 1, reps: 8, load: 0), + Ex(name: "Child's Pose", sets: 1, reps: 0, load: 2, dur: 45), + ]), ] // MARK: - Emit @@ -123,7 +190,7 @@ try FileManager.default.createDirectory(at: outDir, withIntermediateDirectories: for (order, sp) in seeds.enumerated() { let slug = sp.name.lowercased().replacingOccurrences(of: " ", with: "-") let doc = SplitDocument( - schemaVersion: 2, + schemaVersion: 3, id: deterministicULID(label: "starter.\(slug)"), name: sp.name, color: sp.color, systemImage: sp.icon, order: order, createdAt: fixedDate, updatedAt: fixedDate, diff --git a/Workouts/Resources/ExerciseMotions/Arm Circles.info.md b/Workouts/Resources/ExerciseMotions/Arm Circles.info.md new file mode 100644 index 0000000..0d395a5 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Arm Circles.info.md @@ -0,0 +1,38 @@ +# Arm Circles + +Big, slow circles of both arms together to warm the shoulders, wake up the +rotator cuff, and open the chest before pressing or pulling. + +- **Category:** Mobility / warm-up +- **Type:** Shoulder mobility +- **Targets:** Deltoids, rotator cuff, upper back +- **Prescription:** 10 slow backward circles, then 10 forward +- **Defaults:** 2 × 10 bodyweight + +## Setup + +Stand tall, feet shoulder-width, arms relaxed at your sides. + +## Execution + +1. Reach both arms forward and up until they pass overhead. +2. Carry them back and down behind you, tracing the biggest circle you can. +3. Sweep them low and forward again to begin the next circle. +4. Complete the set, then circle in the opposite direction. + +## Cues + +- Keep the arms long — draw the circle from the shoulder, not the elbow. +- Stand tall; don't let the low back arch as the arms pass overhead. +- Keep the tempo slow and even, breathing throughout. + +## Common Mistakes + +- Tiny, rushed circles instead of full, slow ones. +- Shrugging the shoulders toward the ears at the top. +- Arching the low back to force the arms higher. + +## Progression + +Small circles → full-range circles → slow both directions → pause briefly with +the arms overhead each rep. diff --git a/Workouts/Resources/ExerciseMotions/Arm Circles.motion.json b/Workouts/Resources/ExerciseMotions/Arm Circles.motion.json new file mode 100644 index 0000000..728948e --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Arm Circles.motion.json @@ -0,0 +1,48 @@ +{ + "name": "Arm Circles", + "primary": 2, + "camera": {"yaw": 40, "zoom": 0.6}, + "working": ["arm_r", "arm_l"], + "frames": [ + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 90, "abduction": 12}, "elbow_r": 5, + "shoulder_l": {"flexion": 90, "abduction": 12}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 172, "abduction": 30}, "elbow_r": 5, + "shoulder_l": {"flexion": 172, "abduction": 30}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 90, "abduction": 92}, "elbow_r": 5, + "shoulder_l": {"flexion": 90, "abduction": 92}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.15, "tween": 0.8, + "root": {"pos": [160, 66]}, + "spine": [0, 0], "neck": 2, "head": -4, + "shoulder_r": {"flexion": 8, "abduction": 22}, "elbow_r": 5, + "shoulder_l": {"flexion": 8, "abduction": 22}, "elbow_l": 5, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Butterfly Stretch.info.md b/Workouts/Resources/ExerciseMotions/Butterfly Stretch.info.md new file mode 100644 index 0000000..6619d12 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Butterfly Stretch.info.md @@ -0,0 +1,40 @@ +# Butterfly Stretch + +Sit tall, press the soles of the feet together, and let the knees fall open to +release the inner thighs and hips. A gentle seated opener for tight groins +after squatting, running, or a long day in a chair. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Inner thighs (adductors, groin), hips +- **Prescription:** Hold 45 s, letting the knees settle a little lower with each breath +- **Defaults:** 1 × 45 s + +## Setup + +Sit on the floor with a tall spine. Bring the soles of the feet together and +draw the heels in toward the pelvis, letting the knees drop out to the sides. + +## Execution + +1. Hold the feet or ankles and lengthen up through the crown of the head. +2. Let the knees relax open and down toward the floor under their own weight. +3. Hinge gently forward from the hips to deepen the stretch. +4. Breathe slowly, easing a little lower on each exhale. + +## Cues + +- Lead the forward lean from the hips, keeping the chest open and the back long. +- Let gravity lower the knees — don't force them down with the hands. +- Draw the heels closer to the pelvis for more inner-thigh, further away for less. + +## Common Mistakes + +- Rounding the back to reach the feet instead of hinging at the hips. +- Bouncing the knees to push the range. +- Pulling hard on the feet and yanking the knees toward the floor. + +## Progression + +Heels further from the pelvis → heels drawn closer for a deeper groin stretch → +gentle forward fold over the legs, resting the forearms toward the floor. diff --git a/Workouts/Resources/ExerciseMotions/Butterfly Stretch.motion.json b/Workouts/Resources/ExerciseMotions/Butterfly Stretch.motion.json new file mode 100644 index 0000000..cd1bee3 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Butterfly Stretch.motion.json @@ -0,0 +1,30 @@ +{ + "name": "Butterfly Stretch", + "primary": 2, + "camera": {"yaw": 52}, + "working": ["leg_r", "leg_l"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 118], "pitch": 4}, + "spine": [20, 18], + "neck": 12, "head": -14, + "shoulder_r": {"flexion": 94, "abduction": 12}, "elbow_r": 40, + "shoulder_l": {"flexion": 94, "abduction": 12}, "elbow_l": 40, + "hip_r": {"flexion": 82, "abduction": 38, "rotation": 44}, "knee_r": 108, + "hip_l": {"flexion": 82, "abduction": 38, "rotation": 44}, "knee_l": 108, + "pins": {"hand_r": [178, 158], "hand_l": [198, 159]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 118], "pitch": 4}, + "spine": [26, 24], + "neck": 14, "head": -16, + "shoulder_r": {"flexion": 98, "abduction": 12}, "elbow_r": 34, + "shoulder_l": {"flexion": 98, "abduction": 12}, "elbow_l": 34, + "hip_r": {"flexion": 82, "abduction": 44, "rotation": 46}, "knee_r": 110, + "hip_l": {"flexion": 82, "abduction": 44, "rotation": 46}, "knee_l": 110, + "pins": {"hand_r": [176, 159], "hand_l": [200, 160]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Chest Opener.info.md b/Workouts/Resources/ExerciseMotions/Chest Opener.info.md new file mode 100644 index 0000000..bfa0cdd --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Chest Opener.info.md @@ -0,0 +1,44 @@ +# Chest Opener + +Stand tall, clasp the hands behind the back, and lift the chest to peel open +the front of the shoulders and pecs — the antidote to a day rounded over a +desk or a phone. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Chest (pectorals), front of the shoulders, biceps +- **Prescription:** Hold 30 s, breathing wide into the chest, then release and repeat once +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall with the feet hip-width and the knees soft. Reach both arms behind +the low back and interlace the fingers, palms together. + +## Execution + +1. Draw the shoulder blades down and together and straighten the elbows as far + as is comfortable. +2. Lift the clasped hands gently away from the body until you feel the chest + open. +3. Raise the breastbone and let the gaze drift slightly upward. +4. Hold and breathe wide into the front of the chest, then release slowly. + +## Cues + +- Lead with the chest, not the chin — length before lift. +- Keep the shoulders drawing down away from the ears. +- Squeeze the shoulder blades together to deepen the stretch instead of + cranking the arms up. + +## Common Mistakes + +- Shrugging the shoulders up toward the ears. +- Arching hard through the low back instead of opening the chest. +- Yanking the hands higher than the shoulders can comfortably allow. + +## Progression + +Hands lower on the back with straighter elbows → clasp a strap and walk the +hands closer → hinge forward with the arms rising overhead for a deeper pec and +shoulder stretch. diff --git a/Workouts/Resources/ExerciseMotions/Chest Opener.motion.json b/Workouts/Resources/ExerciseMotions/Chest Opener.motion.json new file mode 100644 index 0000000..2147024 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Chest Opener.motion.json @@ -0,0 +1,31 @@ +{ + "name": "Chest Opener", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["arm_r", "arm_l", "spine"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 66], "pitch": 2}, + "spine": [-1, -1], + "neck": -2, "head": -6, + "shoulder_r": -26, "elbow_r": 34, + "shoulder_l": -26, "elbow_l": 34, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 66], "pitch": -4}, + "spine": [-6, -6], + "neck": -11, "head": -15, + "shoulder_r": -55, "elbow_r": 20, + "shoulder_l": -55, "elbow_l": 20, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150], + "hand_r": [150, 41], "hand_l": [154, 42]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Child's Pose.info.md b/Workouts/Resources/ExerciseMotions/Child's Pose.info.md new file mode 100644 index 0000000..36e8d71 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Child's Pose.info.md @@ -0,0 +1,40 @@ +# Child's Pose + +A restful kneeling fold that decompresses the spine and settles the breath — +the reset between harder efforts, or the quiet close to a morning routine. + +- **Category:** Mobility / warm-up +- **Type:** Spinal decompression (timed hold) +- **Targets:** Lower back, hips, thighs, shoulders +- **Prescription:** Hold for 30 s, breathing slowly into the back of the ribs, then repeat once +- **Defaults:** 2 × 30 s + +## Setup + +Kneel with the knees about hip-width and the big toes together, then sit the +hips back toward the heels. + +## Execution + +1. Walk the hands forward and fold the chest down over the thighs. +2. Stretch the arms long on the floor overhead and rest the forehead on the mat. +3. Let the weight sink back toward the heels and the hips grow heavy. +4. Breathe slowly into the back of the ribs, lengthening a little with each + exhale. + +## Cues + +- Reach the fingertips forward and the hips back to grow long through the spine. +- Let the belly rest between the thighs so the breath can slow. +- Keep the forehead heavy and the neck completely relaxed. + +## Common Mistakes + +- Holding tension in the shoulders instead of letting them melt down. +- Lifting the hips away from the heels and losing the settle. +- Forcing the range and gripping the low back rather than releasing it. + +## Progression + +Knees together for a deeper fold, or wide knees to let the chest sink lower → +add a side-reach (walk the hands to each side) to open the lats diff --git a/Workouts/Resources/ExerciseMotions/Child's Pose.motion.json b/Workouts/Resources/ExerciseMotions/Child's Pose.motion.json new file mode 100644 index 0000000..f146115 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Child's Pose.motion.json @@ -0,0 +1,29 @@ +{ + "name": "Child's Pose", + "primary": 2, + "working": ["spine"], + "frames": [ + { + "hold": 2.4, "tween": 2.0, + "root": {"pos": [201, 108], "yaw": 180, "pitch": 89}, + "spine": [15, 20], + "neck": 15, "head": -13, + "shoulder_r": 168, "elbow_r": 8, + "shoulder_l": 168, "elbow_l": 8, + "hip_r": 86, "knee_r": 104, "ankle_r": -52, + "hip_l": 86, "knee_l": 104, "ankle_l": -52, + "pins": {"hand_r": [80, 150], "hand_l": [84, 151]} + }, + { + "hold": 2.6, "tween": 2.0, + "root": {"pos": [202, 110], "yaw": 180, "pitch": 92}, + "spine": [16, 22], + "neck": 17, "head": -15, + "shoulder_r": 172, "elbow_r": 6, + "shoulder_l": 172, "elbow_l": 6, + "hip_r": 90, "knee_r": 108, "ankle_r": -52, + "hip_l": 90, "knee_l": 108, "ankle_l": -52, + "pins": {"hand_r": [78, 150], "hand_l": [82, 151]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Cobra Stretch.info.md b/Workouts/Resources/ExerciseMotions/Cobra Stretch.info.md new file mode 100644 index 0000000..0b6cf1e --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Cobra Stretch.info.md @@ -0,0 +1,42 @@ +# Cobra Stretch + +A gentle prone press-up that opens the front of the body and coaxes the spine +into extension after a night curled up. + +- **Category:** Mobility / warm-up +- **Type:** Spinal extension mobility +- **Targets:** Lumbar and thoracic spine, abdominals, chest and hip flexors +- **Prescription:** 2 sets of 8 slow press-ups, pausing a breath at the top of each +- **Defaults:** 2 × 8 bodyweight + +## Setup + +Lie face down with the legs long and the tops of the feet on the floor. Set the +hands flat under the shoulders, elbows tucked close to the ribs. + +## Execution + +1. Press the hands lightly into the floor and lengthen the chest forward. +2. Peel the breastbone off the mat, letting the spine extend one segment at a + time. +3. Keep the hips, pubic bone, and legs pinned to the floor throughout. +4. Rise only as far as the low back stays comfortable, then lower slowly back + to flat. + +## Cues + +- Lead with the chest, not the chin — length before height. +- Draw the shoulders down away from the ears. +- Let the hands share the load; don't hang the whole body weight on the low back. + +## Common Mistakes + +- Cranking the head back and crunching the neck. +- Pressing to straight arms and lifting the hips off the mat (that's up-dog, not + cobra). +- Shrugging the shoulders up around the ears. + +## Progression + +Sphinx (forearms down) → low cobra → full cobra with straighter arms → +upward-facing dog with the thighs lifted diff --git a/Workouts/Resources/ExerciseMotions/Cobra Stretch.motion.json b/Workouts/Resources/ExerciseMotions/Cobra Stretch.motion.json new file mode 100644 index 0000000..ab4c459 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Cobra Stretch.motion.json @@ -0,0 +1,31 @@ +{ + "name": "Cobra Stretch", + "primary": 2, + "working": ["spine"], + "frames": [ + { + "hold": 0.6, "tween": 1.1, + "root": {"pos": [188, 147], "yaw": 180, "pitch": 76}, + "spine": [0, 6], + "neck": 6, "head": -46, + "shoulder_r": 92, "elbow_r": 100, + "shoulder_l": 92, "elbow_l": 100, + "hip_r": 0, "knee_r": 0, "ankle_r": -50, + "hip_l": 0, "knee_l": 0, "ankle_l": -50, + "pins": {"hand_r": [104, 150], "hand_l": [108, 151], + "foot_r": [270, 150], "foot_l": [274, 151]} + }, + { + "hold": 1.3, "tween": 1.1, + "root": {"pos": [188, 147], "yaw": 180, "pitch": 68}, + "spine": [-13, -16], + "neck": -10, "head": -18, + "shoulder_r": 95, "elbow_r": 14, + "shoulder_l": 95, "elbow_l": 14, + "hip_r": 0, "knee_r": 0, "ankle_r": -50, + "hip_l": 0, "knee_l": 0, "ankle_l": -50, + "pins": {"hand_r": [104, 150], "hand_l": [108, 151], + "foot_r": [270, 150], "foot_l": [274, 151]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Hip Circles.info.md b/Workouts/Resources/ExerciseMotions/Hip Circles.info.md new file mode 100644 index 0000000..d0ee98b --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Hip Circles.info.md @@ -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. diff --git a/Workouts/Resources/ExerciseMotions/Hip Circles.motion.json b/Workouts/Resources/ExerciseMotions/Hip Circles.motion.json new file mode 100644 index 0000000..2098a41 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Hip Circles.motion.json @@ -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]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Kneeling Hip Flexor Stretch.info.md b/Workouts/Resources/ExerciseMotions/Kneeling Hip Flexor Stretch.info.md new file mode 100644 index 0000000..5f541d9 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Kneeling Hip Flexor Stretch.info.md @@ -0,0 +1,43 @@ +# Kneeling Hip Flexor Stretch + +Drop into a half-kneel and press the hips forward to open the front of the back +hip. The go-to release for tight hip flexors after long hours of sitting or +heavy squatting. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Hip flexors, quadriceps, front of the hip +- **Prescription:** Hold 30 s per side, pressing the hips gently forward +- **Defaults:** 2 × 30 s + +## Setup + +Kneel on one knee with the other foot planted flat in front, the front knee +stacked over the ankle at about ninety degrees. Rest the hands on the front +thigh. Pad the back knee if needed. + +## Execution + +1. Tuck the tailbone under to flatten the low back. +2. Ease the hips forward until you feel a stretch across the front of the back + hip and thigh. +3. Keep the trunk tall and the front shin vertical. +4. Hold and breathe, then switch sides. + +## Cues + +- Squeeze the glute of the kneeling leg to deepen the hip-flexor stretch. +- Tuck the tailbone first — don't just arch the low back forward. +- Keep the front knee tracking over the foot, not caving inward. + +## Common Mistakes + +- Letting the front knee drift far past the toes. +- Arching the low back instead of tucking the pelvis and pressing the hips. +- Leaning the whole torso forward rather than shifting the hips. + +## Progression + +Hands on the front thigh → reach the same-side arm overhead and lean away for +a deeper stretch → add a gentle back-foot lift toward the glute to bring in the +quad. diff --git a/Workouts/Resources/ExerciseMotions/Kneeling Hip Flexor Stretch.motion.json b/Workouts/Resources/ExerciseMotions/Kneeling Hip Flexor Stretch.motion.json new file mode 100644 index 0000000..fd570f7 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Kneeling Hip Flexor Stretch.motion.json @@ -0,0 +1,29 @@ +{ + "name": "Kneeling Hip Flexor Stretch", + "primary": 2, + "working": ["leg_l"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 108], "pitch": 4}, + "spine": [11, 11], + "neck": 8, "head": -12, + "shoulder_r": 54, "elbow_r": 36, + "shoulder_l": 54, "elbow_l": 36, + "hip_r": 86, "knee_r": 90, "ankle_r": 6, + "hip_l": -16, "knee_l": 74, "ankle_l": -55, + "pins": {"foot_r": [206, 150], "hand_r": [202, 112], "hand_l": [206, 114]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [162, 110], "pitch": 6}, + "spine": [15, 15], + "neck": 9, "head": -13, + "shoulder_r": 58, "elbow_r": 32, + "shoulder_l": 58, "elbow_l": 32, + "hip_r": 90, "knee_r": 90, "ankle_r": 6, + "hip_l": -28, "knee_l": 56, "ankle_l": -55, + "pins": {"foot_r": [210, 150], "hand_r": [206, 110], "hand_l": [210, 112]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Leg Swings.info.md b/Workouts/Resources/ExerciseMotions/Leg Swings.info.md new file mode 100644 index 0000000..d199798 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Leg Swings.info.md @@ -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:** 10–12 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. diff --git a/Workouts/Resources/ExerciseMotions/Leg Swings.motion.json b/Workouts/Resources/ExerciseMotions/Leg Swings.motion.json new file mode 100644 index 0000000..691e0d0 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Leg Swings.motion.json @@ -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]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/March in Place.info.md b/Workouts/Resources/ExerciseMotions/March in Place.info.md new file mode 100644 index 0000000..60da866 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/March in Place.info.md @@ -0,0 +1,39 @@ +# March in Place + +A rhythmic warm-up staple — drive one knee up while the opposite arm swings +through, then switch, marching on the spot. It wakes the hip flexors, primes +the calves and ankles, and lifts the heart rate before the real work. + +- **Category:** Mobility / warm-up +- **Type:** Dynamic warm-up +- **Targets:** Hip flexors, calves, coordination +- **Prescription:** 30–60 seconds at a steady, controlled cadence +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall with feet hip-width, arms relaxed at your sides, eyes forward. + +## Execution + +1. Drive one knee up toward hip height, staying tall through the spine. +2. Swing the opposite arm forward as the knee rises — natural, like walking. +3. Plant that foot and lift the other knee, letting the arms switch. +4. Keep alternating in an even, unhurried rhythm. + +## Cues + +- Stand tall — no hunching or leaning back to swing the knee up. +- Opposite arm to opposite knee, the same coordination as walking. +- Land softly through the whole foot, not with a hard heel strike. + +## Common Mistakes + +- Shuffling low, barely lifting the knees. +- Rushing into a stiff, bouncy jog instead of a controlled march. +- Same-side arm and knee moving together, which kills the rhythm. + +## Progression + +Lift the knees higher, quicken the cadence, or add a light arm reach overhead +to turn it into a fuller-body warm-up. diff --git a/Workouts/Resources/ExerciseMotions/March in Place.motion.json b/Workouts/Resources/ExerciseMotions/March in Place.motion.json new file mode 100644 index 0000000..8e3f770 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/March in Place.motion.json @@ -0,0 +1,52 @@ +{ + "name": "March in Place", + "primary": 1, + "camera": {"zoom": 0.7}, + "working": ["leg_r", "leg_l"], + "frames": [ + { + "hold": 0.18, "tween": 0.42, + "root": {"pos": [160, 62], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": -28, "elbow_r": 82, + "shoulder_l": 34, "elbow_l": 78, + "hip_r": 68, "knee_r": 88, "ankle_r": -8, + "hip_l": 2, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_l": [162, 150]} + }, + { + "hold": 0.14, "tween": 0.4, + "root": {"pos": [160, 64], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 3, "elbow_r": 64, + "shoulder_l": 3, "elbow_l": 64, + "hip_r": 4, "knee_r": 4, "ankle_r": 0, + "hip_l": 4, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + }, + { + "hold": 0.18, "tween": 0.42, + "root": {"pos": [160, 62], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 34, "elbow_r": 78, + "shoulder_l": -28, "elbow_l": 82, + "hip_r": 2, "knee_r": 4, "ankle_r": 0, + "hip_l": 68, "knee_l": 88, "ankle_l": -8, + "pins": {"foot_r": [158, 148]} + }, + { + "hold": 0.14, "tween": 0.4, + "root": {"pos": [160, 64], "pitch": 4}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 3, "elbow_r": 64, + "shoulder_l": 3, "elbow_l": 64, + "hip_r": 4, "knee_r": 4, "ankle_r": 0, + "hip_l": 4, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Neck Rolls.info.md b/Workouts/Resources/ExerciseMotions/Neck Rolls.info.md new file mode 100644 index 0000000..3215820 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Neck Rolls.info.md @@ -0,0 +1,41 @@ +# Neck Rolls + +Slow, gentle circles of the head to loosen the neck and upper spine before +training or after a long day at a desk. + +- **Category:** Mobility / warm-up +- **Type:** Neck mobility +- **Targets:** Cervical spine, upper trapezius, levator scapulae +- **Prescription:** 3–5 slow circles in each direction, stopping short of any pinch +- **Defaults:** 2 × 5 bodyweight + +## Setup + +Stand tall, feet hip-width, shoulders relaxed and down, arms hanging quietly at +your sides. + +## Execution + +1. Drop the chin toward the chest. +2. Roll one ear down toward that shoulder, then carry the head back into a + gentle look-up. +3. Bring the other ear toward the far shoulder and back down to the chest — one + smooth, continuous circle. +4. Finish the circles, then reverse the direction. + +## Cues + +- Move slowly — a single circle should take several seconds. +- Keep the shoulders down and still; only the head travels. +- Ease off the moment you feel a pinch, especially at the look-up. + +## Common Mistakes + +- Whipping the head around quickly. +- Shrugging a shoulder up to meet the ear. +- Forcing the range at the top of the circle. + +## Progression + +Small pain-free arcs → full slow circles → add a brief pause at each ear and at +the chin tuck. diff --git a/Workouts/Resources/ExerciseMotions/Neck Rolls.motion.json b/Workouts/Resources/ExerciseMotions/Neck Rolls.motion.json new file mode 100644 index 0000000..71fc19d --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Neck Rolls.motion.json @@ -0,0 +1,52 @@ +{ + "name": "Neck Rolls", + "primary": 1, + "camera": {"yaw": 35, "zoom": 0.66}, + "working": ["spine"], + "frames": [ + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": 0}], + "neck": {"flexion": 44, "rotation": 0}, "head": 8, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": 14}], + "neck": {"flexion": 6, "rotation": 16}, "head": 0, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": 0}], + "neck": {"flexion": -24, "rotation": 0}, "head": -12, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + }, + { + "hold": 0.2, "tween": 0.9, + "root": {"pos": [160, 64]}, + "spine": [0, {"lateral": -14}], + "neck": {"flexion": 6, "rotation": -16}, "head": 0, + "shoulder_r": 5, "elbow_r": 6, + "shoulder_l": 5, "elbow_l": 6, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [156, 150], "foot_l": [164, 150]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Overhead Triceps Stretch.info.md b/Workouts/Resources/ExerciseMotions/Overhead Triceps Stretch.info.md new file mode 100644 index 0000000..689f475 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Overhead Triceps Stretch.info.md @@ -0,0 +1,42 @@ +# Overhead Triceps Stretch + +Reach one arm overhead and let the hand drop behind the neck, then use the +other hand to ease the elbow back. A simple way to lengthen the triceps and +open the underside of the shoulder between pressing sets. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Triceps (back of the upper arm), lats, shoulder +- **Prescription:** Hold 30 s per side, easing the elbow back gently +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall with the feet hip-width. Raise one arm overhead and bend the elbow +so the hand drops down behind the neck. + +## Execution + +1. Reach the free hand up and rest it on the raised elbow. +2. Draw the elbow gently back and toward the midline until the triceps + lengthens. +3. Let the trunk lean a touch away from the raised arm to deepen the stretch. +4. Hold and breathe, then release and switch arms. + +## Cues + +- Ease the elbow back, not down — coax it, never wrench it. +- Keep the ribs from flaring by drawing them softly down. +- Lengthen tall through the spine before adding the side lean. + +## Common Mistakes + +- Cranking the head forward to meet the arm instead of dropping the hand behind. +- Flaring the ribs and arching the low back to fake more range. +- Shrugging the working shoulder up toward the ear. + +## Progression + +Walk the hand further down the spine → add a gentle side bend away from the +raised arm → hold a strap between the top and bottom hands to link both +shoulders. diff --git a/Workouts/Resources/ExerciseMotions/Overhead Triceps Stretch.motion.json b/Workouts/Resources/ExerciseMotions/Overhead Triceps Stretch.motion.json new file mode 100644 index 0000000..ed2e7e9 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Overhead Triceps Stretch.motion.json @@ -0,0 +1,31 @@ +{ + "name": "Overhead Triceps Stretch", + "primary": 2, + "camera": {"yaw": 40, "zoom": 0.73}, + "working": ["arm_r"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 8, "head": -6, + "shoulder_r": {"flexion": 143, "abduction": 10}, "elbow_r": 98, + "shoulder_l": {"flexion": 130, "abduction": 6}, "elbow_l": 44, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [{"lateral": -5}, {"lateral": -5}], + "neck": 14, "head": -6, + "shoulder_r": {"flexion": 172, "abduction": 10}, "elbow_r": 150, + "shoulder_l": {"flexion": 158, "abduction": -6}, "elbow_l": 70, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [158, 150], "foot_l": [162, 150], + "hand_l": [164, -51]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Standing Calf Raise.info.md b/Workouts/Resources/ExerciseMotions/Standing Calf Raise.info.md new file mode 100644 index 0000000..6871747 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Calf Raise.info.md @@ -0,0 +1,40 @@ +# Standing Calf Raise + +Rise onto the balls of both feet, lifting the heels as high as they'll go, +then lower under control. The simplest way to train the calves and strengthen +the ankles — no equipment, just bodyweight and a slow tempo. + +- **Category:** Mobility / warm-up +- **Type:** Bodyweight calf raise +- **Targets:** Gastrocnemius, soleus, ankle stability +- **Prescription:** 2–3 × 15–20, slow up and down with a pause at the top +- **Defaults:** 3 × 15 bodyweight + +## Setup + +Stand tall with feet hip-width, weight even across both feet. Rest a hand on +a wall for balance if needed. + +## Execution + +1. Press through the balls of the feet and lift both heels as high as you can. +2. Pause for a beat at the top, standing tall on your toes. +3. Lower the heels slowly back to the floor under control. +4. Repeat for the set without bouncing off the bottom. + +## Cues + +- Push all the way up to a full stretch at the top of each rep. +- Keep the knees straight but soft, so the calves do the work. +- Lower slowly — the descent builds as much strength as the lift. + +## Common Mistakes + +- Short, bouncy reps that never reach a full heel lift. +- Rolling the weight to the outside of the feet. +- Bending the knees to bob up instead of driving through the ankles. + +## Progression + +Pause longer at the top, slow the lowering phase, then progress to single-leg +raises or add load with a dumbbell or a step for extra range. diff --git a/Workouts/Resources/ExerciseMotions/Standing Calf Raise.motion.json b/Workouts/Resources/ExerciseMotions/Standing Calf Raise.motion.json new file mode 100644 index 0000000..d54574c --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Calf Raise.motion.json @@ -0,0 +1,30 @@ +{ + "name": "Standing Calf Raise", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_r", "leg_l"], + "frames": [ + { + "hold": 0.3, "tween": 0.6, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -4, + "shoulder_r": 4, "elbow_r": 6, + "shoulder_l": 4, "elbow_l": 6, + "hip_r": 4, "knee_r": 4, "ankle_r": 0, + "hip_l": 4, "knee_l": 4, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + }, + { + "hold": 0.4, "tween": 0.9, + "root": {"pos": [160, 55], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -4, + "shoulder_r": 4, "elbow_r": 6, + "shoulder_l": 4, "elbow_l": 6, + "hip_r": 4, "knee_r": 3, "ankle_r": -48, + "hip_l": 4, "knee_l": 3, "ankle_l": -48, + "pins": {"foot_r": [158, 139], "foot_l": [162, 141]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Standing Calf Stretch.info.md b/Workouts/Resources/ExerciseMotions/Standing Calf Stretch.info.md new file mode 100644 index 0000000..8292db5 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Calf Stretch.info.md @@ -0,0 +1,41 @@ +# Standing Calf Stretch + +A staggered-stance lean that lengthens the back calf: press the rear heel into +the floor with the leg long while the front knee bends and the hips travel +forward. The classic wall or curb stretch, done anywhere. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Calf (gastrocnemius, soleus), Achilles tendon +- **Prescription:** Hold 30 s per side, keeping the back heel pinned down +- **Defaults:** 2 × 30 s + +## Setup + +Stand in a split stance, one foot a stride behind the other, both toes pointing +forward. Rest the hands on the front thigh. + +## Execution + +1. Straighten the back leg and press its heel flat into the floor. +2. Bend the front knee and ease the hips forward until the back calf lengthens. +3. Keep the back knee straight and the rear foot pointing straight ahead. +4. Hold, breathing easily, then switch sides. + +## Cues + +- Drive the back heel down — the stretch lives in keeping it planted. +- Point the back toes forward, not turned out, to load the calf evenly. +- Move the hips forward for more; don't collapse the back knee. + +## Common Mistakes + +- Letting the back heel lift, which cuts off the stretch. +- Turning the back foot out to cheat more range. +- Rounding the back instead of hinging the hips forward. + +## Progression + +Bend the back knee slightly to shift the stretch to the lower soleus → +drop the back heel off a step or curb for a deeper range → hold longer as the +ankle mobility improves. diff --git a/Workouts/Resources/ExerciseMotions/Standing Calf Stretch.motion.json b/Workouts/Resources/ExerciseMotions/Standing Calf Stretch.motion.json new file mode 100644 index 0000000..7cd97db --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Calf Stretch.motion.json @@ -0,0 +1,31 @@ +{ + "name": "Standing Calf Stretch", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_l"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 66], "pitch": 12}, + "spine": [4, 4], + "neck": 6, "head": -10, + "shoulder_r": 24, "elbow_r": 42, + "shoulder_l": 24, "elbow_l": 42, + "hip_r": 22, "knee_r": 22, "ankle_r": 6, + "knee_l": 2, "ankle_l": 10, + "pins": {"foot_r": [188, 150], "foot_l": [142, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 68], "pitch": 21}, + "spine": [6, 6], + "neck": 9, "head": -17, + "shoulder_r": 40, "elbow_r": 34, + "shoulder_l": 40, "elbow_l": 34, + "hip_r": 44, "knee_r": 46, "ankle_r": 8, + "knee_l": 2, "ankle_l": 12, + "pins": {"foot_r": [198, 150], "foot_l": [132, 150], + "hand_r": [186, 110], "hand_l": [190, 112]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Standing Forward Fold.info.md b/Workouts/Resources/ExerciseMotions/Standing Forward Fold.info.md new file mode 100644 index 0000000..ca204cf --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Forward Fold.info.md @@ -0,0 +1,39 @@ +# Standing Forward Fold + +Hinge at the hips and round down toward the toes, letting the head and arms +hang heavy while the back of the legs lengthens. A calming mobility drill that +decompresses the spine and opens the hamstrings and posterior chain. + +- **Category:** Mobility / warm-up +- **Type:** Standing mobility +- **Targets:** Hamstrings, low back, posterior chain +- **Prescription:** 5–8 slow roll-downs, or hold the bottom 20–30 seconds +- **Defaults:** 2 × 8 bodyweight + +## Setup + +Stand tall with feet hip-width, knees soft, arms relaxed at your sides. + +## Execution + +1. Hinge at the hips and begin folding forward, chin tucking toward the chest. +2. Round down one segment at a time, letting the arms and head hang heavy. +3. Fold as far as the hamstrings allow — hands drifting toward the floor. +4. Reverse slowly, stacking the spine back up to standing. + +## Cues + +- Let gravity do the work; keep the neck and shoulders loose. +- Soften the knees if the hamstrings clamp down. +- Feel a stretch, never a sharp pull in the low back. + +## Common Mistakes + +- Bouncing at the bottom to force more range. +- Locking the knees hard and straining the low back. +- Snapping back up instead of rolling through the spine. + +## Progression + +Deepen the fold as the hamstrings loosen, pause and breathe at the bottom, or +walk the hands toward the shins for a gentle assisted stretch. diff --git a/Workouts/Resources/ExerciseMotions/Standing Forward Fold.motion.json b/Workouts/Resources/ExerciseMotions/Standing Forward Fold.motion.json new file mode 100644 index 0000000..cb9f8da --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Forward Fold.motion.json @@ -0,0 +1,31 @@ +{ + "name": "Standing Forward Fold", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_r", "leg_l", "spine"], + "frames": [ + { + "hold": 0.4, "tween": 1.2, + "root": {"pos": [160, 64], "pitch": 5}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": 5, "elbow_r": 5, + "shoulder_l": 5, "elbow_l": 5, + "hip_r": 5, "knee_r": 6, "ankle_r": 0, + "hip_l": 5, "knee_l": 6, "ankle_l": 0, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150]} + }, + { + "hold": 0.6, "tween": 1.2, + "root": {"pos": [147, 66], "pitch": 134}, + "spine": [11, 13], + "neck": 16, "head": -56, + "shoulder_r": 90, "elbow_r": 6, + "shoulder_l": 90, "elbow_l": 6, + "hip_r": 34, "knee_r": 14, "ankle_r": 10, + "hip_l": 34, "knee_l": 14, "ankle_l": 10, + "pins": {"foot_r": [158, 148], "foot_l": [162, 150], + "hand_r": [159, 151], "hand_l": [163, 152]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Standing Quad Stretch.info.md b/Workouts/Resources/ExerciseMotions/Standing Quad Stretch.info.md new file mode 100644 index 0000000..d7dc106 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Quad Stretch.info.md @@ -0,0 +1,42 @@ +# Standing Quad Stretch + +Balance on one leg, catch the opposite foot, and draw the heel toward the seat +to lengthen the front of the thigh. A quick, equipment-free way to loosen the +quads after running or squatting. + +- **Category:** Stretching +- **Type:** Static stretch (isometric hold) +- **Targets:** Quadriceps (front of the thigh), hip flexors +- **Prescription:** Hold 30 s per side, keeping the knees together +- **Defaults:** 2 × 30 s + +## Setup + +Stand tall next to a wall for balance if needed. Shift the weight onto one leg +and bend the other knee, reaching back with the same-side hand to hold the +foot or ankle. + +## Execution + +1. Draw the heel gently toward the glute until the front of the thigh + lengthens. +2. Keep the knees pressed together and the thigh pointing straight down. +3. Stand tall — tuck the tailbone so the low back doesn't arch. +4. Hold and breathe, then lower the foot and switch sides. + +## Cues + +- Keep the bent knee pointing at the floor, not flaring out to the side. +- Squeeze the glute of the stretching leg to add a hip-flexor stretch. +- Reach the free arm out or up for balance instead of gripping a wall hard. + +## Common Mistakes + +- Letting the knee drift forward and the back arch to reach further. +- Pulling the heel hard into the glute and cranking the knee. +- Hunching or leaning far forward to grab the foot. + +## Progression + +Hold a wall or chair lightly → free-standing for balance → add a slight +forward hinge of the trunk to deepen the hip-flexor component. diff --git a/Workouts/Resources/ExerciseMotions/Standing Quad Stretch.motion.json b/Workouts/Resources/ExerciseMotions/Standing Quad Stretch.motion.json new file mode 100644 index 0000000..a3a2227 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Quad Stretch.motion.json @@ -0,0 +1,30 @@ +{ + "name": "Standing Quad Stretch", + "primary": 2, + "camera": {"zoom": 0.7}, + "working": ["leg_r"], + "frames": [ + { + "hold": 2.2, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": -30, "elbow_r": 40, + "shoulder_l": {"flexion": 118, "abduction": 12}, "elbow_l": 12, + "hip_r": -6, "knee_r": 120, "ankle_r": -30, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_l": [162, 150]} + }, + { + "hold": 2.4, "tween": 1.8, + "root": {"pos": [160, 64], "pitch": 2}, + "spine": [0, 0], + "neck": 2, "head": -6, + "shoulder_r": -46, "elbow_r": 72, + "shoulder_l": {"flexion": 122, "abduction": 14}, "elbow_l": 10, + "hip_r": -8, "knee_r": 145, "ankle_r": -48, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_l": [162, 150], "foot_r": [154, 38], "hand_r": [156, 36]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Standing Side Bend.info.md b/Workouts/Resources/ExerciseMotions/Standing Side Bend.info.md new file mode 100644 index 0000000..a63745e --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Side Bend.info.md @@ -0,0 +1,40 @@ +# Standing Side Bend + +Reach one arm overhead and lean to the opposite side, alternating, to lengthen +the side body and open the ribs and lats. + +- **Category:** Mobility / warm-up +- **Type:** Lateral flexion mobility +- **Targets:** Obliques, quadratus lumborum, lats +- **Prescription:** 8 slow bends to each side, reaching long +- **Defaults:** 2 × 8 bodyweight + +## Setup + +Stand tall, feet hip-width, one arm relaxed and the other ready to reach +overhead. + +## Execution + +1. Raise one arm overhead and reach it up and over as you bend to the opposite + side. +2. Feel a long stretch down the whole reaching side; keep both feet planted. +3. Return to tall through center, then reach the other arm over and bend the + other way. + +## Cues + +- Reach up and over — think length, not a sideways crunch. +- Keep the hips level and both feet flat on the floor. +- Bend straight to the side; don't twist or lean forward. + +## Common Mistakes + +- Collapsing down into the bend instead of reaching long. +- Shoving the hips out to the side to counterbalance. +- Rotating the trunk forward out of the pure side bend. + +## Progression + +Short range → full reach-and-over → add a brief hold at the end range on each +side. diff --git a/Workouts/Resources/ExerciseMotions/Standing Side Bend.motion.json b/Workouts/Resources/ExerciseMotions/Standing Side Bend.motion.json new file mode 100644 index 0000000..052b171 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Standing Side Bend.motion.json @@ -0,0 +1,52 @@ +{ + "name": "Standing Side Bend", + "primary": 1, + "camera": {"yaw": 90, "zoom": 0.66}, + "working": ["spine"], + "frames": [ + { + "hold": 0.5, "tween": 1.0, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": 16}, {"lateral": 15}], + "neck": 0, + "shoulder_l": {"flexion": 14, "abduction": 126}, "elbow_l": 50, + "shoulder_r": {"flexion": 4, "abduction": 8}, "elbow_r": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + }, + { + "hold": 0.3, "tween": 0.9, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": 0}, {"lateral": 0}], + "neck": 0, + "shoulder_l": {"flexion": 4, "abduction": 8}, "elbow_l": 14, + "shoulder_r": {"flexion": 4, "abduction": 8}, "elbow_r": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + }, + { + "hold": 0.5, "tween": 1.0, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": -16}, {"lateral": -15}], + "neck": 0, + "shoulder_r": {"flexion": 14, "abduction": 126}, "elbow_r": 50, + "shoulder_l": {"flexion": 4, "abduction": 8}, "elbow_l": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + }, + { + "hold": 0.3, "tween": 0.9, + "root": {"pos": [160, 72]}, + "spine": [{"lateral": 0}, {"lateral": 0}], + "neck": 0, + "shoulder_l": {"flexion": 4, "abduction": 8}, "elbow_l": 14, + "shoulder_r": {"flexion": 4, "abduction": 8}, "elbow_r": 14, + "hip_r": 2, "knee_r": 2, "ankle_r": 0, + "hip_l": 2, "knee_l": 2, "ankle_l": 0, + "pins": {"foot_r": [155, 150], "foot_l": [165, 150]} + } + ] +} diff --git a/Workouts/Resources/ExerciseMotions/Torso Twist.info.md b/Workouts/Resources/ExerciseMotions/Torso Twist.info.md new file mode 100644 index 0000000..349ed59 --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Torso Twist.info.md @@ -0,0 +1,37 @@ +# Torso Twist + +Relaxed standing rotation from side to side, letting the arms swing freely, to +warm the spine and obliques before lifting. + +- **Category:** Mobility / warm-up +- **Type:** Spinal rotation +- **Targets:** Obliques, thoracic spine, lower back +- **Prescription:** 10 easy twists to each side, arms loose +- **Defaults:** 2 × 10 bodyweight + +## Setup + +Stand with feet shoulder-width, knees soft, arms hanging loose. + +## Execution + +1. Turn the trunk gently to one side, letting the arms swing across the body. +2. Let that momentum carry you back through center to the other side. +3. Keep a smooth, relaxed rhythm turning side to side. + +## Cues + +- Let the arms be floppy — they trail the twist, they don't drive it. +- Rotate from the waist and mid-back while the hips stay mostly forward. +- Keep the neck loose and let the head follow the shoulders. + +## Common Mistakes + +- Yanking the arms to force more rotation. +- Letting the feet peel off the floor as you turn. +- Twisting so hard the low back pinches. + +## Progression + +Small easy twists → fuller rotation → slow, controlled turns with a brief pause +at each end. diff --git a/Workouts/Resources/ExerciseMotions/Torso Twist.motion.json b/Workouts/Resources/ExerciseMotions/Torso Twist.motion.json new file mode 100644 index 0000000..7e168bc --- /dev/null +++ b/Workouts/Resources/ExerciseMotions/Torso Twist.motion.json @@ -0,0 +1,30 @@ +{ + "name": "Torso Twist", + "primary": 1, + "camera": {"yaw": 90, "zoom": 0.7}, + "working": ["spine"], + "frames": [ + { + "hold": 0.3, "tween": 1.1, + "root": {"pos": [160, 64]}, + "spine": [{"rotation": 18}, {"rotation": 14}], + "neck": {"rotation": -8}, + "shoulder_r": 40, "elbow_r": 22, + "shoulder_l": 40, "elbow_l": 22, + "hip_r": 2, "knee_r": 3, "ankle_r": 0, + "hip_l": 2, "knee_l": 3, "ankle_l": 0, + "pins": {"foot_r": [151, 150], "foot_l": [169, 150]} + }, + { + "hold": 0.3, "tween": 1.1, + "root": {"pos": [160, 64]}, + "spine": [{"rotation": -18}, {"rotation": -14}], + "neck": {"rotation": 8}, + "shoulder_r": 40, "elbow_r": 22, + "shoulder_l": 40, "elbow_l": 22, + "hip_r": 2, "knee_r": 3, "ankle_r": 0, + "hip_l": 2, "knee_l": 3, "ankle_l": 0, + "pins": {"foot_r": [151, 150], "foot_l": [169, 150]} + } + ] +} diff --git a/Workouts/Resources/StarterSplits/Bodyweight Core.split.json b/Workouts/Resources/StarterSplits/Bodyweight Core.split.json index c878837..a39e06c 100644 --- a/Workouts/Resources/StarterSplits/Bodyweight Core.split.json +++ b/Workouts/Resources/StarterSplits/Bodyweight Core.split.json @@ -97,7 +97,7 @@ "id" : "01DXF6DT00RV99WG172YFW4NKA", "name" : "Bodyweight Core", "order" : 3, - "schemaVersion" : 2, + "schemaVersion" : 3, "systemImage" : "figure.core.training", "updatedAt" : "2020-01-01T00:00:00Z" } \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Core.split.json b/Workouts/Resources/StarterSplits/Core.split.json index ff69798..03c29c1 100644 --- a/Workouts/Resources/StarterSplits/Core.split.json +++ b/Workouts/Resources/StarterSplits/Core.split.json @@ -33,7 +33,7 @@ "id" : "01DXF6DT001MA0TM7FHJZT098Z", "name" : "Core", "order" : 1, - "schemaVersion" : 2, + "schemaVersion" : 3, "systemImage" : "figure.core.training", "updatedAt" : "2020-01-01T00:00:00Z" } \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Evening Stretch.split.json b/Workouts/Resources/StarterSplits/Evening Stretch.split.json new file mode 100644 index 0000000..cee4621 --- /dev/null +++ b/Workouts/Resources/StarterSplits/Evening Stretch.split.json @@ -0,0 +1,63 @@ +{ + "activityType" : 1, + "color" : "indigo", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 0, + "id" : "01DXF6DT00MGW05GT89PQ97NJP", + "loadType" : 0, + "name" : "Cat-Cow", + "order" : 0, + "reps" : 10, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 45, + "id" : "01DXF6DT00FKCS4829TCES5DAK", + "loadType" : 2, + "name" : "Butterfly Stretch", + "order" : 1, + "reps" : 0, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT00CZEX3S1EJZRRNGJ3", + "loadType" : 2, + "name" : "Kneeling Hip Flexor Stretch", + "order" : 2, + "reps" : 0, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00SZGMC6BNWYMBTE1X", + "loadType" : 0, + "name" : "Cobra Stretch", + "order" : 3, + "reps" : 8, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 45, + "id" : "01DXF6DT00GVMTRR094FEXQ9Z6", + "loadType" : 2, + "name" : "Child's Pose", + "order" : 4, + "reps" : 0, + "sets" : 1, + "weight" : 0 + } + ], + "id" : "01DXF6DT00M5YRFPHJQ2FS2B9P", + "name" : "Evening Stretch", + "order" : 11, + "schemaVersion" : 3, + "systemImage" : "figure.mind.and.body", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Free Weight Basics.split.json b/Workouts/Resources/StarterSplits/Free Weight Basics.split.json new file mode 100644 index 0000000..3075ef1 --- /dev/null +++ b/Workouts/Resources/StarterSplits/Free Weight Basics.split.json @@ -0,0 +1,73 @@ +{ + "activityType" : 0, + "color" : "red", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 0, + "id" : "01DXF6DT00TQF0XGY9G7RWGE1D", + "loadType" : 1, + "name" : "Goblet Squat", + "order" : 0, + "reps" : 10, + "sets" : 3, + "weight" : 25 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00QBT678ZGHNY68716", + "loadType" : 1, + "name" : "Dumbbell Bench Press", + "order" : 1, + "reps" : 8, + "sets" : 3, + "weight" : 25 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00F1E66BQWARPAKJXB", + "loadType" : 1, + "name" : "Dumbbell Row", + "order" : 2, + "reps" : 8, + "sets" : 3, + "weight" : 30 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00D660PT6QDDC6M27G", + "loadType" : 1, + "name" : "Dumbbell Shoulder Press", + "order" : 3, + "reps" : 8, + "sets" : 3, + "weight" : 20 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00DB4PGPWE1P4V9CGP", + "loadType" : 1, + "name" : "Romanian Deadlift", + "order" : 4, + "reps" : 8, + "sets" : 3, + "weight" : 65 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00AJBJT1ZS0ARHA5EV", + "loadType" : 1, + "name" : "Dumbbell Curl", + "order" : 5, + "reps" : 10, + "sets" : 3, + "weight" : 20 + } + ], + "id" : "01DXF6DT00WY3HMCH6E841YQE7", + "name" : "Free Weight Basics", + "order" : 5, + "schemaVersion" : 3, + "systemImage" : "dumbbell.fill", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Full Body Machines.split.json b/Workouts/Resources/StarterSplits/Full Body Machines.split.json new file mode 100644 index 0000000..740b058 --- /dev/null +++ b/Workouts/Resources/StarterSplits/Full Body Machines.split.json @@ -0,0 +1,91 @@ +{ + "activityType" : 0, + "color" : "purple", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 0, + "id" : "01DXF6DT007DWX30820RGZ0YNG", + "loadType" : 1, + "machineSettings" : [ + + ], + "name" : "Leg Press", + "order" : 0, + "reps" : 10, + "sets" : 4, + "weight" : 100 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT0087C1WEBX5GHM2XH0", + "loadType" : 1, + "machineSettings" : [ + + ], + "name" : "Chest Press", + "order" : 1, + "reps" : 10, + "sets" : 4, + "weight" : 40 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT0034YBRKF6HMSHN6GA", + "loadType" : 1, + "machineSettings" : [ + + ], + "name" : "Seated Row", + "order" : 2, + "reps" : 10, + "sets" : 4, + "weight" : 70 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00B438JN6AJ1HNACRD", + "loadType" : 1, + "machineSettings" : [ + + ], + "name" : "Shoulder Press", + "order" : 3, + "reps" : 10, + "sets" : 4, + "weight" : 30 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT006TFW38JP14XAT51B", + "loadType" : 1, + "machineSettings" : [ + + ], + "name" : "Lat Pull Down", + "order" : 4, + "reps" : 10, + "sets" : 4, + "weight" : 80 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00TPPH89QS23QS1E3Q", + "loadType" : 1, + "machineSettings" : [ + + ], + "name" : "Abdominal", + "order" : 5, + "reps" : 10, + "sets" : 4, + "weight" : 40 + } + ], + "id" : "01DXF6DT00SZ0NPXPN36415NKM", + "name" : "Full Body Machines", + "order" : 4, + "schemaVersion" : 3, + "systemImage" : "figure.strengthtraining.traditional", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Full Body Stretch.split.json b/Workouts/Resources/StarterSplits/Full Body Stretch.split.json new file mode 100644 index 0000000..dfea643 --- /dev/null +++ b/Workouts/Resources/StarterSplits/Full Body Stretch.split.json @@ -0,0 +1,83 @@ +{ + "activityType" : 1, + "color" : "brown", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 30, + "id" : "01DXF6DT00KXXVJGX9PZ6DFRNM", + "loadType" : 2, + "name" : "Standing Forward Fold", + "order" : 0, + "reps" : 0, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT00B403PC8WPH08BQ4S", + "loadType" : 2, + "name" : "Standing Quad Stretch", + "order" : 1, + "reps" : 0, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT00ECM7ZNGTWRX7X1AF", + "loadType" : 2, + "name" : "Standing Calf Stretch", + "order" : 2, + "reps" : 0, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT009XR6DQR5SF3QYWGD", + "loadType" : 2, + "name" : "Chest Opener", + "order" : 3, + "reps" : 0, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT00RVBENX9XMMZVNT3A", + "loadType" : 2, + "name" : "Overhead Triceps Stretch", + "order" : 4, + "reps" : 0, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT00VYKDXAEQZ9TC3D0X", + "loadType" : 2, + "name" : "Kneeling Hip Flexor Stretch", + "order" : 5, + "reps" : 0, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 45, + "id" : "01DXF6DT00HCQTTFPK7EWY28V0", + "loadType" : 2, + "name" : "Child's Pose", + "order" : 6, + "reps" : 0, + "sets" : 1, + "weight" : 0 + } + ], + "id" : "01DXF6DT003PRJB3FGYSSGTQ5X", + "name" : "Full Body Stretch", + "order" : 10, + "schemaVersion" : 3, + "systemImage" : "figure.flexibility", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Lower Body Warm-Up.split.json b/Workouts/Resources/StarterSplits/Lower Body Warm-Up.split.json new file mode 100644 index 0000000..bbeafd4 --- /dev/null +++ b/Workouts/Resources/StarterSplits/Lower Body Warm-Up.split.json @@ -0,0 +1,73 @@ +{ + "activityType" : 1, + "color" : "mint", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 60, + "id" : "01DXF6DT00M88Z7S2BA5GCNTCD", + "loadType" : 2, + "name" : "March in Place", + "order" : 0, + "reps" : 0, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00ZF915NN20AA4AN8C", + "loadType" : 0, + "name" : "Leg Swings", + "order" : 1, + "reps" : 10, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00CCGK00Q6N9RPZ3NJ", + "loadType" : 0, + "name" : "Hip Circles", + "order" : 2, + "reps" : 8, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00JRXXQJZ6ZZR521RZ", + "loadType" : 0, + "name" : "Bodyweight Squat", + "order" : 3, + "reps" : 12, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00NFVS0DQCCHK55X78", + "loadType" : 0, + "name" : "Glute Bridge", + "order" : 4, + "reps" : 10, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00WBG0EZ04W2A5EEMQ", + "loadType" : 0, + "name" : "Standing Calf Raise", + "order" : 5, + "reps" : 12, + "sets" : 2, + "weight" : 0 + } + ], + "id" : "01DXF6DT003QB4ASSR8JB1JT6A", + "name" : "Lower Body Warm-Up", + "order" : 7, + "schemaVersion" : 3, + "systemImage" : "figure.walk", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Lower Body.split.json b/Workouts/Resources/StarterSplits/Lower Body.split.json index a960c69..2d8b56e 100644 --- a/Workouts/Resources/StarterSplits/Lower Body.split.json +++ b/Workouts/Resources/StarterSplits/Lower Body.split.json @@ -85,7 +85,7 @@ "id" : "01DXF6DT006QRF1PMGK17FV505", "name" : "Lower Body", "order" : 2, - "schemaVersion" : 2, + "schemaVersion" : 3, "systemImage" : "figure.run", "updatedAt" : "2020-01-01T00:00:00Z" } \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Morning Mobility.split.json b/Workouts/Resources/StarterSplits/Morning Mobility.split.json new file mode 100644 index 0000000..f099a75 --- /dev/null +++ b/Workouts/Resources/StarterSplits/Morning Mobility.split.json @@ -0,0 +1,83 @@ +{ + "activityType" : 1, + "color" : "pink", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 0, + "id" : "01DXF6DT00WB2Q0YPMG9P2RYFP", + "loadType" : 0, + "name" : "Cat-Cow", + "order" : 0, + "reps" : 10, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00T7H39EJ84QNYFZA8", + "loadType" : 0, + "name" : "Bird Dog", + "order" : 1, + "reps" : 8, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT009NP8AESV5X4BC6MY", + "loadType" : 0, + "name" : "Dead Bug", + "order" : 2, + "reps" : 8, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT002TDXQS2KWZESM51W", + "loadType" : 0, + "name" : "Glute Bridge", + "order" : 3, + "reps" : 12, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT0093AEZ6DNWHA8JRFZ", + "loadType" : 0, + "name" : "Cobra Stretch", + "order" : 4, + "reps" : 8, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 45, + "id" : "01DXF6DT000J1DRJR6NEVZ514E", + "loadType" : 2, + "name" : "Child's Pose", + "order" : 5, + "reps" : 0, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT00SN3YMB4JZA184FKQ", + "loadType" : 2, + "name" : "Standing Forward Fold", + "order" : 6, + "reps" : 0, + "sets" : 1, + "weight" : 0 + } + ], + "id" : "01DXF6DT00QHJ9G4SDMEX64NZD", + "name" : "Morning Mobility", + "order" : 9, + "schemaVersion" : 3, + "systemImage" : "figure.yoga", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Morning Wake-Up.split.json b/Workouts/Resources/StarterSplits/Morning Wake-Up.split.json new file mode 100644 index 0000000..0b330cd --- /dev/null +++ b/Workouts/Resources/StarterSplits/Morning Wake-Up.split.json @@ -0,0 +1,103 @@ +{ + "activityType" : 1, + "color" : "yellow", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 45, + "id" : "01DXF6DT00CR91WJG3RAWSJC5F", + "loadType" : 2, + "name" : "March in Place", + "order" : 0, + "reps" : 0, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT0090FANSSPTBBYFG08", + "loadType" : 0, + "name" : "Neck Rolls", + "order" : 1, + "reps" : 5, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00GKZKMRKHQ7AARGWG", + "loadType" : 0, + "name" : "Arm Circles", + "order" : 2, + "reps" : 10, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00KG2640BBEXTTFNM3", + "loadType" : 0, + "name" : "Torso Twist", + "order" : 3, + "reps" : 10, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT005JW5BTSHWY54S6P3", + "loadType" : 0, + "name" : "Standing Side Bend", + "order" : 4, + "reps" : 8, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT004CYSBPP0KYDMJMMG", + "loadType" : 0, + "name" : "Hip Circles", + "order" : 5, + "reps" : 8, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00TSP140VH9JYVHS15", + "loadType" : 0, + "name" : "Leg Swings", + "order" : 6, + "reps" : 10, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00J0C4EADB3VRKEJB2", + "loadType" : 0, + "name" : "Standing Calf Raise", + "order" : 7, + "reps" : 12, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 30, + "id" : "01DXF6DT00BMMGNKB4B6TQ5E59", + "loadType" : 2, + "name" : "Standing Forward Fold", + "order" : 8, + "reps" : 0, + "sets" : 1, + "weight" : 0 + } + ], + "id" : "01DXF6DT00FJ5F1HRENQPC1DTG", + "name" : "Morning Wake-Up", + "order" : 8, + "schemaVersion" : 3, + "systemImage" : "sun.max.fill", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Upper Body Warm-Up.split.json b/Workouts/Resources/StarterSplits/Upper Body Warm-Up.split.json new file mode 100644 index 0000000..d4391a3 --- /dev/null +++ b/Workouts/Resources/StarterSplits/Upper Body Warm-Up.split.json @@ -0,0 +1,63 @@ +{ + "activityType" : 1, + "color" : "cyan", + "createdAt" : "2020-01-01T00:00:00Z", + "exercises" : [ + { + "durationSeconds" : 0, + "id" : "01DXF6DT00VZ0J13D3RV1583SN", + "loadType" : 0, + "name" : "Arm Circles", + "order" : 0, + "reps" : 10, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT008VVX81WZCXJYPV5G", + "loadType" : 0, + "name" : "Torso Twist", + "order" : 1, + "reps" : 10, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT005MTQJMDRFN8PPYYN", + "loadType" : 0, + "name" : "Standing Side Bend", + "order" : 2, + "reps" : 8, + "sets" : 2, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00JD3M6G2QKCF2PNBB", + "loadType" : 0, + "name" : "Cat-Cow", + "order" : 3, + "reps" : 8, + "sets" : 1, + "weight" : 0 + }, + { + "durationSeconds" : 0, + "id" : "01DXF6DT00PZ35SNJ861S3WQKT", + "loadType" : 0, + "name" : "Push-Up", + "order" : 4, + "reps" : 8, + "sets" : 2, + "weight" : 0 + } + ], + "id" : "01DXF6DT00G56WC0HS6RJWMFMD", + "name" : "Upper Body Warm-Up", + "order" : 6, + "schemaVersion" : 3, + "systemImage" : "figure.arms.open", + "updatedAt" : "2020-01-01T00:00:00Z" +} \ No newline at end of file diff --git a/Workouts/Resources/StarterSplits/Upper Body.split.json b/Workouts/Resources/StarterSplits/Upper Body.split.json index 37b38a7..5352db3 100644 --- a/Workouts/Resources/StarterSplits/Upper Body.split.json +++ b/Workouts/Resources/StarterSplits/Upper Body.split.json @@ -85,7 +85,7 @@ "id" : "01DXF6DT0038BDC2WC3EVX8ZJ5", "name" : "Upper Body", "order" : 0, - "schemaVersion" : 2, + "schemaVersion" : 3, "systemImage" : "figure.strengthtraining.traditional", "updatedAt" : "2020-01-01T00:00:00Z" } \ No newline at end of file diff --git a/WorkoutsTests/SeedLibraryTests.swift b/WorkoutsTests/SeedLibraryTests.swift index 094766b..08b0aaa 100644 --- a/WorkoutsTests/SeedLibraryTests.swift +++ b/WorkoutsTests/SeedLibraryTests.swift @@ -11,11 +11,17 @@ import IndieSync /// both the raw document and a SwiftData cache round-trip. struct SeedLibraryTests { - @Test func catalogLoadsFourSeedsInOrder() { + @Test func catalogLoadsTwelveSeedsInOrder() { let seeds = SeedLibrary.seeds - #expect(seeds.count == 4) - #expect(seeds.map(\.doc.order) == [0, 1, 2, 3]) - #expect(seeds.map(\.doc.name) == ["Upper Body", "Core", "Lower Body", "Bodyweight Core"]) + #expect(seeds.count == 12) + #expect(seeds.map(\.doc.order) == Array(0...11)) + #expect(seeds.map(\.doc.name) == [ + "Upper Body", "Core", "Lower Body", "Bodyweight Core", + "Full Body Machines", "Free Weight Basics", + "Upper Body Warm-Up", "Lower Body Warm-Up", + "Morning Wake-Up", "Morning Mobility", + "Full Body Stretch", "Evening Stretch", + ]) } /// These ids are minted from a frozen 2020 timestamp and are already shipped @@ -30,6 +36,14 @@ struct SeedLibraryTests { "01DXF6DT001MA0TM7FHJZT098Z", // Core "01DXF6DT006QRF1PMGK17FV505", // Lower Body "01DXF6DT00RV99WG172YFW4NKA", // Bodyweight Core + "01DXF6DT00SZ0NPXPN36415NKM", // Full Body Machines + "01DXF6DT00WY3HMCH6E841YQE7", // Free Weight Basics + "01DXF6DT00G56WC0HS6RJWMFMD", // Upper Body Warm-Up + "01DXF6DT003QB4ASSR8JB1JT6A", // Lower Body Warm-Up + "01DXF6DT00FJ5F1HRENQPC1DTG", // Morning Wake-Up + "01DXF6DT00QHJ9G4SDMEX64NZD", // Morning Mobility + "01DXF6DT003PRJB3FGYSSGTQ5X", // Full Body Stretch + "01DXF6DT00M5YRFPHJQ2FS2B9P", // Evening Stretch ]) }