This tool allows you to quickly build your weightlifting programs, ensure you have proper weekly volume per muscle group , and balance it with the time you spend in a gym . You can build multi-week programs, plan your mesocycles, deload weeks, testing 1RM weeks, and see the weekly undulation of volume and intensity of each exercise on a graph.
Set the program name, create weeks and days, type the list of exercises for each day, putting each exercise on a new line, along with the number of sets and reps after slash (
/ ) character, like this:
Squat 3x3-5
Romanian Deadlift 3x8
Autocomplete will help you with the exercise names. You can also create custom exercises if they're missing in the library.
On the right you'll see Weekly Stats , where you can see the number of sets per week per muscle group, whether you're in the recommended range (indicated by color), strength/hypertrophy split, and if you hover a mouse over the numbers - you'll see what exercises contribute to that number, and how much.
The exercise syntax supports RPEs , percentage of 1RM , rest timers, various progressive overload types, etc. Read more about the features in the docs !
When you're done, you can convert this program to Liftosaur program, and run what you planned in the gym, using the Liftosaur app !
To use this program:
Install Liftosaur app Copy the link to this program by clicking on below Import the link in the app, on the Choose Program screen. Add New Week Duplicate Week Add Week Description
Add Day Description
Delete Day
Add Day Description
Delete Day
Add Day Description
Delete Day
Add Day Description
Delete Day
Add Day
Week Stats Total Sets: 42
Strength Sets: 16, 38%
Hypertrophy Sets: 26, 62%
Upper Sets: 22 (8s , 14h ), 4d Lower Sets: 19 (8s , 11h ), 4d Push Sets: 16 (8s , 8h ), 4d Pull Sets: 10 (4s , 6h ), 4d Legs Sets: 15 (4s , 11h ), 4d Shoulders: 15↓ (6s , 9h ), 4d Hamstrings: 10↑ (4s , 6h ), 4d Quadriceps: 13↓ (6s , 7h ), 4d {"maxWidth":2400,"url":"/planner","isLoggedIn":false}
{"exportedProgram":{"customExercises":{"kreqrvwg":{"types":["core"],"isDeleted":false,"smallImageUrl":"/externalimages/exercises/single/small/situp_bodyweight_single_small.png","vtype":"custom_exercise","meta":{"synergistMuscles":["Obliques","Iliopsoas"],"targetMuscles":["Rectus Abdominis"],"bodyParts":[],"sortedEquipment":[]},"largeImageUrl":"/externalimages/exercises/full/large/situp_bodyweight_full_large.png","name":"Decline Sit-Up","id":"kreqrvwg"}},"program":{"deletedExercises":[],"planner":{"name":"P-Zero Modified","vtype":"planner","weeks":[{"name":"Week 1","days":[{"name":"Workout A1","exerciseText":"// **T1**. Set your 1RM before start.\n\n// ...T1\nT1: Deadlift / ...T1/ progress: custom(increase: 5kg) { ...T1 }\n\n// ...T2\nT2: Bench Press / ...T2 / progress: custom(increase: 2.5kg) { ...T2 }\n\n// ...T3\nT3: Leg Press / ...T3 / progress: custom(increase: 10kg) { ...T3 }\n\n// ...T3\nT3: Decline Sit-Up / ...T3 / progress: custom(increase: 5kg) { ...T3 }"},{"name":"Workout B1","exerciseText":"// ...T1\nT1: Overhead Press / ...T1 / progress: custom(increase: 2.5kg) { ...T1 }\n\n// ...T2\nT2: Squat / ...T2 / progress: custom(increase: 5kg) { ...T2 }\n\n// **T3** Do 3 sets of AMRAP\nT3: Pull Up, Bodyweight / ...T3BW\n\n// ...T3\nT3: Seated Leg Curl / ...T3 / progress: custom(increase: 2.5kg) { ...T3 }"},{"name":"Workout A2","exerciseText":"// ...T1\nT1: Bench Press / ...T1 / progress: custom(increase: 2.5kg) { ...T1 }\n\n// ...T2\nT2: Romanian Deadlift, Barbell / ...T2 / progress: custom(increase: 5kg) { ...T2 }\n\n// ...T3\nT3: Seated Row, Cable / ...T3 / progress: custom(increase: 10kg) { ...T3 }\n\n// ...T3\nT3: Leg Extension / ...T3 / progress: custom(increase: 2.5kg) { ...T3 }"},{"name":"Workout B2","exerciseText":"// ...T1\nT1: Squat / ...T1 / progress: custom(increase: 5kg) { ...T1 }\n\n// ...T2\nT2: Overhead Press / ...T2 / progress: custom(increase: 2.5kg) { ...T2 }\n\n// ...T3\nT3: Reverse Fly, Band / ...T3 / progress: custom(increase: 1.25kg) { ...T3 }\n\n// ...T3\nT3: Bicep Curl, Dumbbell / ...T3 / progress: custom(increase: 2.5kg) { ...T3 }\n\n\n// **T1**: 4x4+ → 4x3+ → 4x2+\n// Last set is AMRAP. If you fail to reach the target reps on the AMRAP set, drop stage.\n// Weight increases after successful completion\nT1 / used: none / 3x4, 1x4+ / 3x3, 1x3+ / 3x2, 1x2+ / 72% 180s / progress: custom(increase: 2.5kg, stage1weight: 0kg) {~\n if (descriptionIndex == 1) { descriptionIndex = 2 }\n\n // Update Stage-1 anchor only on successful Stage-1 completion (use logged weight if present)\n if (setVariationIndex == 1 && completedReps[ns] >= reps[ns]) {\n if (completedWeights[ns] > 0kg) { state.stage1weight = completedWeights[ns] }\n else { state.stage1weight = weights[ns] }\n }\n\n // Progress from the weight you actually lifted (fallback to planned)\n if (completedReps[ns] >= reps[ns]) {\n if (completedWeights[ns] > 0kg) { weights = completedWeights[ns] + state.increase }\n else { weights = weights[ns] + state.increase }\n } else {\n if (setVariationIndex == 3) {\n setVariationIndex = 1\n weights = state.stage1weight // reset to last successful Stage-1\n } else {\n setVariationIndex += 1\n }\n }\n~}\n\n// **T2**: 4x12 → 4x10 → 4x8.\n// Complete all reps → add weight. Fail to complete → drop stage.\n// After Stage 3 fail, reset to Stage 1 at the last successful Stage-1 weight.\nT2 / used: none / 4x12 / 4x10 / 4x8 / 52% 120s / progress: custom(increase: 2.5kg, stage1weight: 0kg) {~\n if (descriptionIndex == 1) { descriptionIndex = 2 }\n\n // Update Stage-1 anchor only on successful Stage-1 completion (use logged weight if present)\n if (setVariationIndex == 1 && completedReps >= reps) {\n if (completedWeights[ns] > 0kg) { state.stage1weight = completedWeights[ns] }\n else { state.stage1weight = weights[ns] }\n }\n\n // Progress from the weight you actually lifted (fallback to planned)\n if (completedReps >= reps) {\n if (completedWeights[ns] > 0kg) { weights = completedWeights[ns] + state.increase }\n else { weights = weights[ns] + state.increase }\n } else {\n if (setVariationIndex == 3) {\n setVariationIndex = 1\n weights = state.stage1weight // reset to last successful Stage-1\n } else {\n setVariationIndex += 1\n }\n }\n~}\n\n\n// **T3**: Rep targets 60→45→30 (total reps, fewest sets possible).\n// ≤3 sets = +weight; >3 sets = stall. After 3 stalls at the same target, drop a stage.\n// After 30, reset to 60 using the last successful 60-rep weight.\nT3 / used: none / 1x1-60+ / 50% 90s / progress: custom(increase: 2.5kg, initialReps: 60, diff: 15, minSetsForIncrease: 3, stallThreshold: 3, lastSuccessful60Weight: 0kg, stallCount: 0) {~\n if (sum(completedReps) >= reps[ns]) {\n\n // Success ≤3 sets → +weight, same target (use logged weight if present)\n if (completedNumberOfSets <= state.minSetsForIncrease) {\n if (reps[ns] == state.initialReps) {\n if (completedWeights[ns] > 0kg) { state.lastSuccessful60Weight = completedWeights[ns] }\n else { state.lastSuccessful60Weight = weights[ns] }\n }\n if (completedWeights[ns] > 0kg) { weights = completedWeights[ns] + state.increase }\n else { weights = weights[ns] + state.increase }\n state.stallCount = 0\n }\n\n // Stall handling\n if (completedNumberOfSets > state.minSetsForIncrease) {\n state.stallCount += 1\n }\n\n if (state.stallCount >= state.stallThreshold && (completedWeights[ns] > 0kg || weights[ns] > 0kg)) {\n if (reps[ns] == state.initialReps) {\n reps -= state.diff\n state.stallCount = 0\n } else if (reps[ns] == state.initialReps - state.diff) {\n reps -= state.diff\n state.stallCount = 0\n } else {\n // 30→60 reset to last successful 60 anchor\n reps = state.initialReps\n if (state.lastSuccessful60Weight > 0kg) {\n weights = state.lastSuccessful60Weight\n }\n state.stallCount = 0\n }\n }\n }\n~}\n\n// **T3 Bodyweight**\nT3BW / used: none / 3x10+ / 0kg 90s"}]}]},"exercises":[],"vtype":"program","days":[],"deletedDays":[],"url":"","isMultiweek":false,"name":"P-Zero Modified","weeks":[],"nextDay":1,"shortDescription":"","clonedAt":1759620477268,"description":"","tags":[],"deletedWeeks":[],"author":"","id":"rxwahfhw"},"version":"20260304084247","settings":{"timers":{"warmup":90,"workout":180,"reminder":900},"units":"kg"}},"shouldSyncProgram":false,"isMobile":false,"revisions":[]}