diff --git a/src/lib/data/exercises.ts b/src/lib/data/exercises.ts index 5cd81f63..bd418c62 100644 --- a/src/lib/data/exercises.ts +++ b/src/lib/data/exercises.ts @@ -256,6 +256,20 @@ export const exercises: Exercise[] = [ 'Lower with control.' ] }, + { + id: 'incline-row-dumbbell', + name: 'Incline Row (Dumbbell)', + bodyPart: 'back', + equipment: 'dumbbell', + target: 'lats', + secondaryMuscles: ['rhomboids', 'biceps', 'rear deltoids'], + instructions: [ + 'Lie face down on an incline bench set to about 30-45 degrees.', + 'Hold a dumbbell in each hand with arms hanging straight down.', + 'Row the dumbbells up to your sides, squeezing your shoulder blades together.', + 'Lower with control.' + ] + }, { id: 'face-pull-cable', name: 'Face Pull (Cable)', @@ -713,6 +727,20 @@ export const exercises: Exercise[] = [ 'Lower with control.' ] }, + { + id: 'nordic-hamstring-curl', + name: 'Nordic Hamstring Curl', + bodyPart: 'legs', + equipment: 'body weight', + target: 'hamstrings', + secondaryMuscles: ['glutes', 'calves'], + instructions: [ + 'Kneel on a pad with your ankles secured under a sturdy object or by a partner.', + 'Keep your body straight from knees to head.', + 'Slowly lower yourself forward by extending at the knees, resisting with your hamstrings.', + 'Lower as far as you can control, then push off the ground lightly to return to the start.' + ] + }, { id: 'goblet-squat-dumbbell', name: 'Goblet Squat (Dumbbell)', @@ -754,6 +782,34 @@ export const exercises: Exercise[] = [ 'Hold the position for the desired duration.' ] }, + { + id: 'decline-crunch', + name: 'Decline Crunch', + bodyPart: 'core', + equipment: 'body weight', + target: 'abdominals', + secondaryMuscles: ['hip flexors'], + instructions: [ + 'Lie on a decline bench with your feet secured under the pads.', + 'Place hands behind your head or across your chest.', + 'Curl your upper body up towards your knees.', + 'Lower with control.' + ] + }, + { + id: 'flat-leg-raise', + name: 'Flat Leg Raise', + bodyPart: 'core', + equipment: 'body weight', + target: 'abdominals', + secondaryMuscles: ['hip flexors'], + instructions: [ + 'Lie flat on a bench or the floor with legs extended.', + 'Place hands at your sides or under your hips for support.', + 'Raise your legs until they are perpendicular to the floor.', + 'Lower with control without letting your feet touch the floor.' + ] + }, { id: 'crunch', name: 'Crunch', diff --git a/src/models/WorkoutTemplate.ts b/src/models/WorkoutTemplate.ts index 36063c7c..5af9c474 100644 --- a/src/models/WorkoutTemplate.ts +++ b/src/models/WorkoutTemplate.ts @@ -7,7 +7,8 @@ export interface ISet { } export interface IExercise { - name: string; + exerciseId: string; + name?: string; sets: ISet[]; restTime?: number; // Rest time in seconds, defaults to 120 (2 minutes) } @@ -43,11 +44,15 @@ const SetSchema = new mongoose.Schema({ }); const ExerciseSchema = new mongoose.Schema({ - name: { + exerciseId: { type: String, required: true, trim: true }, + name: { + type: String, + trim: true + }, sets: { type: [SetSchema], required: true, diff --git a/src/routes/api/fitness/templates/+server.ts b/src/routes/api/fitness/templates/+server.ts index 1d9cabcd..10d0e323 100644 --- a/src/routes/api/fitness/templates/+server.ts +++ b/src/routes/api/fitness/templates/+server.ts @@ -53,8 +53,8 @@ export const POST: RequestHandler = async ({ request, locals }) => { // Validate exercises structure for (const exercise of exercises) { - if (!exercise.name || !exercise.sets || !Array.isArray(exercise.sets) || exercise.sets.length === 0) { - return json({ error: 'Each exercise must have a name and at least one set' }, { status: 400 }); + if (!exercise.exerciseId || !exercise.sets || !Array.isArray(exercise.sets) || exercise.sets.length === 0) { + return json({ error: 'Each exercise must have an exerciseId and at least one set' }, { status: 400 }); } for (const set of exercise.sets) { diff --git a/src/routes/api/fitness/templates/seed/+server.ts b/src/routes/api/fitness/templates/seed/+server.ts index abd32ac3..f5047e88 100644 --- a/src/routes/api/fitness/templates/seed/+server.ts +++ b/src/routes/api/fitness/templates/seed/+server.ts @@ -7,7 +7,7 @@ import { WorkoutTemplate } from '$models/WorkoutTemplate'; const defaultTemplates = [ { name: 'Day 1 - Pull', - description: 'Back and biceps focused pull day', + description: 'Back, biceps, and shoulders pull day', exercises: [ { exerciseId: 'bent-over-row-barbell', @@ -27,6 +27,30 @@ const defaultTemplates = [ ], restTime: 120 }, + { + exerciseId: 'incline-row-dumbbell', + sets: [ + { reps: 12, weight: 16, rpe: 7 }, + { reps: 12, weight: 16, rpe: 8 } + ], + restTime: 90 + }, + { + exerciseId: 'upright-row-barbell', + sets: [ + { reps: 12, weight: 30, rpe: 7 }, + { reps: 12, weight: 30, rpe: 8 } + ], + restTime: 90 + }, + { + exerciseId: 'decline-crunch', + sets: [ + { reps: 15, rpe: 7 }, + { reps: 15, rpe: 8 } + ], + restTime: 60 + }, { exerciseId: 'lateral-raise-dumbbell', sets: [ @@ -47,7 +71,7 @@ const defaultTemplates = [ }, { name: 'Day 2 - Push', - description: 'Chest, shoulders, and triceps push day', + description: 'Chest, triceps, and biceps push day', exercises: [ { exerciseId: 'bench-press-barbell', @@ -74,6 +98,14 @@ const defaultTemplates = [ ], restTime: 90 }, + { + exerciseId: 'bench-press-close-grip-barbell', + sets: [ + { reps: 10, weight: 60, rpe: 7 }, + { reps: 10, weight: 60, rpe: 8 } + ], + restTime: 120 + }, { exerciseId: 'hammer-curl-dumbbell', sets: [ @@ -94,7 +126,7 @@ const defaultTemplates = [ }, { name: 'Day 3 - Legs', - description: 'Lower body leg day', + description: 'Quad, hamstring, and calf focused leg day', exercises: [ { exerciseId: 'squat-barbell', @@ -109,31 +141,126 @@ const defaultTemplates = [ exerciseId: 'romanian-deadlift-barbell', sets: [ { reps: 10, weight: 70, rpe: 7 }, - { reps: 10, weight: 70, rpe: 8 } + { reps: 10, weight: 70, rpe: 8 }, + { reps: 10, weight: 70, rpe: 9 } ], restTime: 120 }, { - exerciseId: 'leg-press-machine', + exerciseId: 'bulgarian-split-squat-dumbbell', sets: [ - { reps: 12, weight: 100, rpe: 7 }, - { reps: 12, weight: 100, rpe: 8 } + { reps: 10, weight: 16, rpe: 7 }, + { reps: 10, weight: 16, rpe: 8 } ], restTime: 120 }, { - exerciseId: 'leg-curl-machine', + exerciseId: 'calf-raise-standing', sets: [ - { reps: 12, weight: 40, rpe: 7 }, - { reps: 12, weight: 40, rpe: 8 } + { reps: 15, rpe: 7 }, + { reps: 15, rpe: 8 }, + { reps: 15, rpe: 9 } + ], + restTime: 60 + } + ] + }, + { + name: 'Day 4 - Upper', + description: 'Full upper body day — shoulders, chest, back, and core', + exercises: [ + { + exerciseId: 'overhead-press-barbell', + sets: [ + { reps: 8, weight: 40, rpe: 7 }, + { reps: 8, weight: 40, rpe: 8 } + ], + restTime: 120 + }, + { + exerciseId: 'bench-press-dumbbell', + sets: [ + { reps: 10, weight: 28, rpe: 7 }, + { reps: 10, weight: 28, rpe: 8 } + ], + restTime: 120 + }, + { + exerciseId: 'chin-up', + sets: [ + { reps: 6, rpe: 8 }, + { reps: 6, rpe: 9 } + ], + restTime: 120 + }, + { + exerciseId: 'bench-press-close-grip-barbell', + sets: [ + { reps: 10, weight: 60, rpe: 7 }, + { reps: 10, weight: 60, rpe: 8 } + ], + restTime: 120 + }, + { + exerciseId: 'decline-crunch', + sets: [ + { reps: 15, rpe: 7 }, + { reps: 15, rpe: 8 } + ], + restTime: 60 + }, + { + exerciseId: 'flat-leg-raise', + sets: [ + { reps: 15, rpe: 7 }, + { reps: 15, rpe: 8 } + ], + restTime: 60 + } + ] + }, + { + name: 'Day 5 - Lower', + description: 'Glute, quad, and hamstring focused lower day', + exercises: [ + { + exerciseId: 'front-squat-barbell', + sets: [ + { reps: 8, weight: 60, rpe: 7 }, + { reps: 8, weight: 60, rpe: 8 }, + { reps: 8, weight: 60, rpe: 9 } + ], + restTime: 150 + }, + { + exerciseId: 'romanian-deadlift-dumbbell', + sets: [ + { reps: 10, weight: 24, rpe: 7 }, + { reps: 10, weight: 24, rpe: 8 } + ], + restTime: 120 + }, + { + exerciseId: 'hip-thrust-barbell', + sets: [ + { reps: 10, weight: 60, rpe: 7 }, + { reps: 10, weight: 60, rpe: 8 } + ], + restTime: 120 + }, + { + exerciseId: 'goblet-squat-dumbbell', + sets: [ + { reps: 12, weight: 20, rpe: 7 }, + { reps: 12, weight: 20, rpe: 8 } ], restTime: 90 }, { - exerciseId: 'calf-raise-machine', + exerciseId: 'calf-raise-standing', sets: [ - { reps: 15, weight: 60, rpe: 7 }, - { reps: 15, weight: 60, rpe: 8 } + { reps: 15, rpe: 7 }, + { reps: 15, rpe: 8 } ], restTime: 60 }