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. 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
Core Sets: 1 (1h ) , 1d
Push Sets: 16 (8s , 8h ) , 4d
Pull Sets: 10 (4s , 6h ) , 4d
Legs Sets: 15 (4s , 11h ) , 4d
Shoulders: 15↓ (6s , 9h ) , 4d
Triceps: 8↑ (4s , 4h ) , 4d
Back: 11 (2s , 9h ) , 3d
Abs: 1↑ (1h ) , 1d
Glutes: 13↓ (6s , 7h ) , 4d
Hamstrings: 10↑ (4s , 6h ) , 4d
Quadriceps: 13↓ (6s , 7h ) , 4d
Chest: 13↓ (6s , 7h ) , 4d
Biceps: 3↑ (3h ) , 3d
Calves: 7↑ (4s , 3h ) , 3d
Forearms: 3↑ (3h ) , 3d
{"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":[]}