Add 17 warm-up, stretch, and mobility exercises with new starter splits
The library grows to 64 exercises: arm circles, torso twist, leg swings, hip and neck mobility, marching, calf raises, and a full stretching set (forward fold, quad, calf, chest, triceps, hip flexor, butterfly, cobra, child's pose), each with an authored motion rig and reference page. Eight new starter splits join the catalog — Upper and Lower Body Warm-Up, Morning Wake-Up, Morning Mobility, Full Body Stretch, Evening Stretch, Free Weight Basics, and Full Body Machines — regenerated deterministically at split schema v3 with fixed ULIDs. Claude-Session: https://claude.ai/code/session_01HJDQQDA9QdP8zByg43H5v3
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user