Is 5 minutes walk after having dinner helpful in muscle boosting

Searching PubMed

postprandial walking exercise muscle metabolism

Searching the Web

does walking after dinner help muscle growth benefits

Here is a thorough answer based on the research:

Does a 5-Minute Walk After Dinner Help with Muscle Building?

Short answer: Not directly for muscle growth, but it supports the metabolic environment that can help muscle function.

What a Post-Dinner Walk Actually Does

A 5-minute light walk after dinner is well-supported by science for these specific benefits:
1. Blood Sugar Control (Strong Evidence) Research consistently shows that even 2-5 minutes of walking after a meal reduces post-meal glucose spikes. This works because large muscle groups - the quadriceps, hamstrings, and glutes - absorb glucose from the bloodstream during movement. A 2022 study in Nutrients (PMID: 35268055) confirmed this across meals with different macronutrient profiles.
2. Better Nutrient Delivery to Muscles Walking increases circulation, meaning nutrients from the meal - including amino acids needed for muscle repair - are delivered more efficiently to muscle tissue. This is an indirect benefit for recovery and muscle protein synthesis.
3. Reduced Post-Meal Fat Storage A 2022 study in Metabolites (PMID: 36355121) found that walking after eating reduces postprandial lipemia (fat in the blood after a meal), which is linked to better metabolic health overall.
4. Improved Digestion Post-meal walking stimulates gastric motility, helping nutrients from your dinner (including protein) get absorbed more efficiently - which does support muscle protein synthesis indirectly.

What It Does NOT Do for Muscles

A 5-minute casual walk is not a muscle-building stimulus on its own because:
  • It does not create the mechanical tension or metabolic stress that triggers muscle hypertrophy (growth)
  • The intensity is far too low to stimulate muscle protein synthesis meaningfully
  • Muscle building requires progressive resistance training, adequate protein intake (1.6-2.2g/kg body weight), caloric sufficiency, and rest

The Practical Bottom Line

Benefit5-min Post-Dinner Walk?
Blood sugar controlYes - well supported
Better nutrient circulation to musclesYes - indirect benefit
Digestion and absorptionYes
Direct muscle growth stimulusNo
Calorie burn (meaningful)Minimal
Think of it this way: a post-dinner walk creates a better metabolic environment - stable blood sugar, better nutrient delivery, lower fat accumulation - that supports the muscle-building process if you are already doing resistance training. It is not a replacement for it.
For actual muscle building, pair the walk with a proper strength training program (3-4x per week) and sufficient dietary protein. The walk is a low-effort habit with solid health returns - just don't expect it to build muscle by itself.

What types of resistance training are best for muscle growth?

Searching PubMed

resistance training hypertrophy muscle growth

Searching the Web

best types of resistance training for muscle hypertrophy evidence 2024 2025

Here is a thorough, evidence-based breakdown:

Best Types of Resistance Training for Muscle Growth

Research is clear that multiple training styles can produce significant hypertrophy. What matters more than the type is how you apply the key training variables. Here's what the evidence says:

The Main Training Types - All Can Work

1. Free Weight Training (Barbells & Dumbbells)

Best for: Overall mass, compound movements, multi-joint stimulus
Free weights are the foundation of most hypertrophy programs. They require stabilizer muscle recruitment and allow a full range of motion. Key lifts include:
  • Barbell: Squat, deadlift, bench press, overhead press, rows
  • Dumbbells: Allow greater range of motion and unilateral work to fix imbalances
The 2023 BJSM network meta-analysis (PMID: 37414459) on resistance training prescription confirmed compound free weight training consistently produces strong hypertrophy responses.

2. Machine-Based Training

Best for: Isolating specific muscles, training to failure safely, beginners
Machines allow you to push closer to failure with lower injury risk, which is actually a significant advantage. A 2024 narrative review in JFMK by Schoenfeld et al. found that training at long muscle lengths (often better achieved on machines) maximizes mechanical tension - a primary driver of growth.

3. Bodyweight / Calisthenics

Best for: Beginners, travel, relative strength
Bodyweight training can absolutely build muscle - IF it follows the same principles (progressive overload, training near failure). Push-ups, dips, pull-ups, and pistol squats are well-supported. The limitation is that loading becomes harder to scale as you get stronger.

4. Blood Flow Restriction (BFR) Training

Best for: Injury rehab, adding volume with light loads
BFR uses cuffs to restrict venous blood flow while lifting light weights (20-30% of 1RM), creating significant metabolic stress. The 2023 meta-analysis (PMID: 36871095) and earlier research shows it produces comparable hypertrophy to traditional training, making it excellent for injury situations.

The Variables That Actually Drive Hypertrophy

Regardless of equipment type, these are the non-negotiables from the research:

Training to Near-Failure

A major 2023 meta-analysis in Sports Medicine (PMID: 36334240) found that proximity to failure is a key driver - you need to be within ~0-4 reps of muscular failure for significant hypertrophy. Leaving too many reps in the tank blunts the stimulus.

Load Range: Heavy AND Moderate Both Work

A network meta-analysis in Medicine & Science in Sports & Exercise (PMID: 33433148) confirmed that loads from 30% to 85% of 1RM all produce similar hypertrophy when taken to near-failure. The classic "8-12 rep range" is not magic - it just tends to naturally land near an efficient load.
LoadRep RangeHypertrophy?
Light (30-50% 1RM)15-30 repsYes, if near failure
Moderate (60-75% 1RM)8-15 repsYes (most common)
Heavy (80-90% 1RM)3-6 repsYes (also good for strength)

Volume: Sets Per Week Per Muscle

Research supports 10-20 working sets per muscle per week as an effective range for hypertrophy. More advanced lifters may benefit from the higher end. The dose-response relationship shows diminishing returns beyond ~20 sets per muscle group per week.

Progressive Overload

Gradually increasing weight, reps, or sets over time is mandatory. Without progression, adaptation plateaus. This is the single most important long-term variable.

Full Range of Motion

The 2024 Schoenfeld narrative review recommends using a range of motion that allows a muscle to reach a fully stretched position - this maximizes mechanical tension and is one of the biggest under-utilized techniques for growth.

Repetition Tempo

A rep duration of 2-8 seconds total (e.g., 2s up, 3s down) is supported by evidence. Extremely fast or extremely slow reps are less effective than controlled movement through full range.

Putting It Together: What Works Best in Practice

PriorityRecommendation
#1Compound free weight lifts (squat, deadlift, press, row, pull)
#2Isolation machines for lagging muscles and safe failure work
#3Train each muscle 2x per week (split routine or full body)
#410-20 sets/muscle/week, near failure each set
#5Progressive overload every 1-2 weeks
#61.6-2.2g of protein per kg bodyweight daily
The best program is one you execute consistently. Any combination of the above methods, applied with effort and progression, will produce meaningful muscle growth.

What's a sample beginner's resistance training program without machinery

Here's a complete beginner bodyweight resistance training program, built on the evidence-based principles from our previous discussion.

Beginner Bodyweight Resistance Training Program

Structure: 3 days per week (e.g. Monday / Wednesday / Friday) Format: Full-body each session (trains each muscle 3x/week - optimal for beginners) Goal: 2-4 reps short of failure each set | Rest 60-90 seconds between sets

The Program

Day A (Push + Legs)

ExerciseSetsRepsMuscles Targeted
Push-Ups38-15Chest, shoulders, triceps
Pike Push-Ups38-12Shoulders, upper chest
Diamond Push-Ups28-12Triceps, inner chest
Bodyweight Squat315-20Quads, glutes, hamstrings
Reverse Lunges310/legGlutes, quads, balance
Glute Bridges315-20Glutes, hamstrings
Calf Raises (single leg)315/legCalves

Day B (Pull + Core)

ExerciseSetsRepsMuscles Targeted
Pull-Ups or Inverted Rows*35-10Back, biceps
Bodyweight Rows (under table)310-15Mid-back, rear delts
Superman Hold310-12Lower back, glutes
Plank330-45 secCore stability
Dead Bug38/sideDeep core
Hollow Body Hold320-30 secFull core
Bicycle Crunches312/sideObliques, abs
*If pull-ups are too hard, use inverted rows under a table or a low bar

Day C (Full Body Compound)

ExerciseSetsRepsMuscles Targeted
Jump Squats (or deep squats)310-15Full lower body
Push-Up Variations (incline/decline)310-15Chest at different angles
Step-Ups (on chair/stair)310/legGlutes, quads
Dips (between two chairs)38-12Triceps, lower chest
Single-Leg Glute Bridge310-12/legGlutes, hamstrings
Mountain Climbers320/sideCore, shoulders, cardio
Inverted Rows310-15Back, biceps

Weekly Schedule Example

DaySession
MondayDay A
TuesdayRest or light walk
WednesdayDay B
ThursdayRest or light walk
FridayDay C
SaturdayOptional active recovery (stretching, walking)
SundayFull rest

Progressive Overload - How to Advance (Critical)

Since there are no weights to add, you progress by:
  1. More reps - hit the top of the rep range before moving on (e.g. 3x15 push-ups before progressing)
  2. Harder variation - progress to a harder version of the exercise
  3. More sets - add a 4th set once 3 sets feel manageable
  4. Slower tempo - add a 3-second lowering phase to increase time under tension
  5. Reduce rest - shorter rest periods increase difficulty

Exercise Progression Ladder

Push-Ups: Incline Push-Up → Standard Push-Up → Decline Push-Up → Archer Push-Up → One-Arm Assisted → One-Arm Push-Up
Squats: Squat → Pause Squat (3 sec hold) → Bulgarian Split Squat → Shrimp Squat → Pistol Squat
Pull-Ups: Bodyweight Row (table) → Assisted Pull-Up (band/foot) → Negative Pull-Up (jump up, lower slow) → Full Pull-Up → Weighted Pull-Up (backpack)
Dips: Bench Dip → Chair Dip → Parallel Bar Dip (between chairs) → Ring Dip

Key Rules for Beginners

RuleWhy It Matters
Stop 2-3 reps before complete failureReduces injury risk, still drives growth
Prioritize form over repsBad form = wasted effort + injury
Sleep 7-9 hoursMost muscle repair happens during sleep
Eat 1.6-2.2g protein/kg bodyweightProtein is the raw material for muscle
Be consistent for at least 8 weeksVisible results take time - trust the process

What to Expect

  • Weeks 1-3: Soreness, learning movement patterns, rapid neural strength gains
  • Weeks 4-6: Noticeable strength increases, rep counts climbing fast
  • Weeks 7-12: First visible muscle changes, movements becoming second nature
  • After 3 months: Transition to free weights or add resistance bands/weighted backpack for continued overload
This program covers all major muscle groups, requires zero equipment, and is built on the same hypertrophy principles backed by the systematic reviews we discussed. Consistency and progressive overload will do the rest.

Generate a downloadable PDF checklist of this workout routine

Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || echo "workspace empty or missing"

Running Command

mkdir -p /tmp/workspace/workout-pdf

Writing File

~/workout-pdf/generate_workout_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import PageBreak

OUTPUT = "/tmp/workspace/workout-pdf/Beginner_Bodyweight_Workout_Checklist.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.5*cm,
    leftMargin=1.5*cm,
    topMargin=1.5*cm,
    bottomMargin=1.5*cm,
)

# ── Colours ──────────────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1A3A5C")
MID_BLUE    = colors.HexColor("#2E6DA4")
LIGHT_BLUE  = colors.HexColor("#D6E8F7")
ACCENT      = colors.HexColor("#E8A020")
LIGHT_GREY  = colors.HexColor("#F4F6F9")
MID_GREY    = colors.HexColor("#C8CDD5")
WHITE       = colors.white
GREEN_CHECK = colors.HexColor("#2D7D46")

# ── Styles ────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

title_style = ParagraphStyle(
    "Title", fontName="Helvetica-Bold", fontSize=22,
    textColor=WHITE, alignment=TA_CENTER, spaceAfter=2
)
subtitle_style = ParagraphStyle(
    "Subtitle", fontName="Helvetica", fontSize=11,
    textColor=colors.HexColor("#BDD9F2"), alignment=TA_CENTER, spaceAfter=4
)
section_style = ParagraphStyle(
    "Section", fontName="Helvetica-Bold", fontSize=13,
    textColor=WHITE, alignment=TA_LEFT, spaceAfter=2, spaceBefore=2
)
body_style = ParagraphStyle(
    "Body", fontName="Helvetica", fontSize=9,
    textColor=DARK_BLUE, leading=13
)
small_style = ParagraphStyle(
    "Small", fontName="Helvetica", fontSize=8,
    textColor=colors.HexColor("#555555"), leading=11
)
note_style = ParagraphStyle(
    "Note", fontName="Helvetica-Oblique", fontSize=8,
    textColor=colors.HexColor("#444444"), leading=12
)
rule_label = ParagraphStyle(
    "RuleLabel", fontName="Helvetica-Bold", fontSize=9,
    textColor=DARK_BLUE
)
rule_body = ParagraphStyle(
    "RuleBody", fontName="Helvetica", fontSize=9,
    textColor=colors.HexColor("#333333"), leading=12
)

# ── Helpers ───────────────────────────────────────────────────────────────────
def header_table(text, bg=DARK_BLUE, fg=WHITE, size=13):
    """Full-width coloured header row."""
    s = ParagraphStyle("hdr", fontName="Helvetica-Bold",
                       fontSize=size, textColor=fg)
    t = Table([[Paragraph(text, s)]], colWidths=[178*mm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("LEFTPADDING",  (0,0), (-1,-1), 8),
        ("RIGHTPADDING", (0,0), (-1,-1), 8),
        ("TOPPADDING",   (0,0), (-1,-1), 6),
        ("BOTTOMPADDING",(0,0), (-1,-1), 6),
        ("ROUNDEDCORNERS", [4]),
    ]))
    return t

def exercise_table(rows, col_widths=None):
    """Zebra-striped exercise table with a checkbox column."""
    if col_widths is None:
        col_widths = [8*mm, 60*mm, 22*mm, 22*mm, 66*mm]

    # header row
    hdr = [
        Paragraph("<b>✓</b>",  ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE, alignment=TA_CENTER)),
        Paragraph("<b>Exercise</b>",   ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
        Paragraph("<b>Sets</b>",       ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE, alignment=TA_CENTER)),
        Paragraph("<b>Reps</b>",       ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE, alignment=TA_CENTER)),
        Paragraph("<b>Muscles</b>",    ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
    ]

    table_data = [hdr]
    for i, (ex, sets, reps, muscles) in enumerate(rows):
        bg = LIGHT_GREY if i % 2 == 0 else WHITE
        cell_s = ParagraphStyle("td", fontName="Helvetica", fontSize=8, textColor=DARK_BLUE, leading=11)
        cell_c = ParagraphStyle("tdc", fontName="Helvetica", fontSize=10, textColor=MID_GREY, alignment=TA_CENTER)
        table_data.append([
            Paragraph("☐", cell_c),
            Paragraph(ex,      cell_s),
            Paragraph(sets,    ParagraphStyle("tdc2", fontName="Helvetica", fontSize=8, textColor=DARK_BLUE, alignment=TA_CENTER)),
            Paragraph(reps,    ParagraphStyle("tdc2", fontName="Helvetica", fontSize=8, textColor=DARK_BLUE, alignment=TA_CENTER)),
            Paragraph(muscles, cell_s),
        ])

    t = Table(table_data, colWidths=col_widths)
    style_cmds = [
        ("BACKGROUND", (0,0), (-1,0), MID_BLUE),
        ("GRID",       (0,0), (-1,-1), 0.3, MID_GREY),
        ("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_GREY, WHITE]),
        ("LEFTPADDING",  (0,0), (-1,-1), 5),
        ("RIGHTPADDING", (0,0), (-1,-1), 5),
        ("TOPPADDING",   (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0), (-1,-1), 4),
        ("VALIGN",       (0,0), (-1,-1), "MIDDLE"),
    ]
    t.setStyle(TableStyle(style_cmds))
    return t

def progress_table(rows):
    """Simple two-column table for progression ladder."""
    col_widths = [40*mm, 138*mm]
    hdr = [
        Paragraph("<b>Exercise</b>", ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
        Paragraph("<b>Progression Ladder  →  Easy to Hard</b>", ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
    ]
    table_data = [hdr]
    for ex, ladder in rows:
        cell_s = ParagraphStyle("td", fontName="Helvetica", fontSize=8, textColor=DARK_BLUE, leading=11)
        table_data.append([Paragraph(f"<b>{ex}</b>", cell_s), Paragraph(ladder, cell_s)])

    t = Table(table_data, colWidths=col_widths)
    t.setStyle(TableStyle([
        ("BACKGROUND",   (0,0), (-1,0), MID_BLUE),
        ("GRID",         (0,0), (-1,-1), 0.3, MID_GREY),
        ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
        ("LEFTPADDING",  (0,0), (-1,-1), 5),
        ("RIGHTPADDING", (0,0), (-1,-1), 5),
        ("TOPPADDING",   (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0), (-1,-1), 4),
        ("VALIGN",       (0,0), (-1,-1), "MIDDLE"),
    ]))
    return t

# ── Content ───────────────────────────────────────────────────────────────────
story = []

# ── TITLE BANNER ──────────────────────────────────────────────────────────────
title_data = [[
    Paragraph("BEGINNER BODYWEIGHT WORKOUT", title_style),
    Paragraph("Resistance Training Checklist  •  No Equipment Required", subtitle_style),
]]
title_t = Table(title_data, colWidths=[178*mm])
title_t.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
    ("LEFTPADDING",  (0,0), (-1,-1), 12),
    ("RIGHTPADDING", (0,0), (-1,-1), 12),
    ("TOPPADDING",   (0,0), (-1,-1), 12),
    ("BOTTOMPADDING",(0,0), (-1,-1), 12),
    ("ROUNDEDCORNERS", [6]),
]))
story.append(title_t)
story.append(Spacer(1, 4*mm))

# ── OVERVIEW STRIP ────────────────────────────────────────────────────────────
overview_items = [
    ("📅", "3 Days / Week", "Mon · Wed · Fri"),
    ("🏋️", "Full Body", "Each Session"),
    ("🎯", "10-20 Sets", "Per Muscle / Week"),
    ("⏱️", "60-90 sec", "Rest Between Sets"),
    ("💪", "Stop 2-3 reps", "Before Failure"),
]
ov_cells = []
for icon, bold, sub in overview_items:
    s1 = ParagraphStyle("ov1", fontName="Helvetica-Bold", fontSize=9, textColor=DARK_BLUE, alignment=TA_CENTER, leading=12)
    s2 = ParagraphStyle("ov2", fontName="Helvetica", fontSize=7.5, textColor=MID_BLUE, alignment=TA_CENTER, leading=10)
    ov_cells.append([
        Paragraph(f"{icon}  <b>{bold}</b>", s1),
        Paragraph(sub, s2),
    ])

ov_col = [178*mm / 5] * 5
ov_t = Table([[[Paragraph(f"{icon}  <b>{bold}</b>", ParagraphStyle('x', fontName='Helvetica-Bold', fontSize=8.5, textColor=DARK_BLUE, alignment=TA_CENTER, leading=13)),
                Paragraph(sub, ParagraphStyle('y', fontName='Helvetica', fontSize=7.5, textColor=MID_BLUE, alignment=TA_CENTER, leading=10))]
               for icon, bold, sub in overview_items]],
             colWidths=ov_col)
# Flatten the overview into a proper single-row multi-col table
ov_row = []
for icon, bold, sub in overview_items:
    s1 = ParagraphStyle("ov1", fontName="Helvetica-Bold", fontSize=9, textColor=DARK_BLUE, alignment=TA_CENTER, leading=13)
    s2 = ParagraphStyle("ov2", fontName="Helvetica", fontSize=7.5, textColor=colors.HexColor("#4A7FAA"), alignment=TA_CENTER, leading=10)
    ov_row.append(Paragraph(f"{icon}<br/><b>{bold}</b><br/>{sub}", s1))

ov_t2 = Table([ov_row], colWidths=[178*mm/5]*5)
ov_t2.setStyle(TableStyle([
    ("BACKGROUND",   (0,0), (-1,-1), LIGHT_BLUE),
    ("BOX",          (0,0), (-1,-1), 0.5, MID_BLUE),
    ("INNERGRID",    (0,0), (-1,-1), 0.3, MID_BLUE),
    ("TOPPADDING",   (0,0), (-1,-1), 6),
    ("BOTTOMPADDING",(0,0), (-1,-1), 6),
    ("ALIGN",        (0,0), (-1,-1), "CENTER"),
    ("VALIGN",       (0,0), (-1,-1), "MIDDLE"),
]))
story.append(ov_t2)
story.append(Spacer(1, 5*mm))

# ── WEEKLY SCHEDULE ───────────────────────────────────────────────────────────
story.append(header_table("📆  WEEKLY SCHEDULE", bg=MID_BLUE))
story.append(Spacer(1, 2*mm))

week_days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
week_sess = ["Day A  (Push + Legs)","Rest / Light Walk","Day B  (Pull + Core)","Rest / Light Walk","Day C  (Full Body)","Active Recovery","Full Rest"]
week_bg   = [LIGHT_BLUE, WHITE, LIGHT_BLUE, WHITE, LIGHT_BLUE, colors.HexColor("#FFF8EC"), colors.HexColor("#F0F4F0")]
week_fc   = [DARK_BLUE]*7

ws_hdr = [
    Paragraph("<b>Day</b>",     ParagraphStyle("wh", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
    Paragraph("<b>Session</b>", ParagraphStyle("wh", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
    Paragraph("<b>✓ Done</b>",  ParagraphStyle("wh", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE, alignment=TA_CENTER)),
]
ws_rows = [ws_hdr]
for d, s, bg in zip(week_days, week_sess, week_bg):
    cs = ParagraphStyle("wc", fontName="Helvetica", fontSize=8, textColor=DARK_BLUE)
    cc = ParagraphStyle("wcc", fontName="Helvetica", fontSize=10, textColor=MID_GREY, alignment=TA_CENTER)
    ws_rows.append([Paragraph(f"<b>{d}</b>", cs), Paragraph(s, cs), Paragraph("☐", cc)])

ws_t = Table(ws_rows, colWidths=[35*mm, 120*mm, 23*mm])
ws_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), MID_BLUE),
    ("GRID",          (0,0), (-1,-1), 0.3, MID_GREY),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(ws_t)
story.append(Spacer(1, 5*mm))

# ── DAY A ────────────────────────────────────────────────────────────────────
story.append(header_table("DAY A  —  Push + Legs  (Monday)", bg=DARK_BLUE))
story.append(Spacer(1, 2*mm))
day_a = [
    ("Push-Ups",                    "3", "8-15",  "Chest, Shoulders, Triceps"),
    ("Pike Push-Ups",               "3", "8-12",  "Shoulders, Upper Chest"),
    ("Diamond Push-Ups",            "2", "8-12",  "Triceps, Inner Chest"),
    ("Bodyweight Squat",            "3", "15-20", "Quads, Glutes, Hamstrings"),
    ("Reverse Lunges",              "3", "10/leg","Glutes, Quads, Balance"),
    ("Glute Bridges",               "3", "15-20", "Glutes, Hamstrings"),
    ("Single-Leg Calf Raises",      "3", "15/leg","Calves"),
]
story.append(exercise_table(day_a))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("<i>Notes / Weight used / RPE:</i> _______________________________________________________", note_style))
story.append(Spacer(1, 5*mm))

# ── DAY B ────────────────────────────────────────────────────────────────────
story.append(header_table("DAY B  —  Pull + Core  (Wednesday)", bg=DARK_BLUE))
story.append(Spacer(1, 2*mm))
day_b = [
    ("Pull-Ups or Inverted Rows*",  "3", "5-10",     "Back, Biceps"),
    ("Bodyweight Rows (table)",     "3", "10-15",    "Mid-Back, Rear Delts"),
    ("Superman Hold",               "3", "10-12",    "Lower Back, Glutes"),
    ("Plank",                       "3", "30-45 sec","Core Stability"),
    ("Dead Bug",                    "3", "8/side",   "Deep Core"),
    ("Hollow Body Hold",            "3", "20-30 sec","Full Core"),
    ("Bicycle Crunches",            "3", "12/side",  "Obliques, Abs"),
]
story.append(exercise_table(day_b))
story.append(Spacer(1, 1*mm))
story.append(Paragraph("<i>* If pull-ups are too hard, use inverted rows under a sturdy table or low bar.</i>", note_style))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("<i>Notes / Weight used / RPE:</i> _______________________________________________________", note_style))
story.append(Spacer(1, 5*mm))

# ── DAY C ────────────────────────────────────────────────────────────────────
story.append(header_table("DAY C  —  Full Body Compound  (Friday)", bg=DARK_BLUE))
story.append(Spacer(1, 2*mm))
day_c = [
    ("Jump Squats (or Deep Squats)",    "3", "10-15",    "Full Lower Body"),
    ("Decline / Incline Push-Ups",      "3", "10-15",    "Chest (Different Angles)"),
    ("Step-Ups (chair or stair)",       "3", "10/leg",   "Glutes, Quads"),
    ("Chair Dips",                      "3", "8-12",     "Triceps, Lower Chest"),
    ("Single-Leg Glute Bridge",         "3", "10-12/leg","Glutes, Hamstrings"),
    ("Mountain Climbers",               "3", "20/side",  "Core, Shoulders"),
    ("Inverted Rows",                   "3", "10-15",    "Back, Biceps"),
]
story.append(exercise_table(day_c))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("<i>Notes / Weight used / RPE:</i> _______________________________________________________", note_style))

# ── PAGE 2 ────────────────────────────────────────────────────────────────────
story.append(PageBreak())

# ── PROGRESSIVE OVERLOAD ──────────────────────────────────────────────────────
story.append(header_table("📈  PROGRESSIVE OVERLOAD — How to Keep Growing", bg=MID_BLUE))
story.append(Spacer(1, 3*mm))

po_methods = [
    ("1. More Reps",       "Hit the top of the rep range before progressing  (e.g. 3×15 push-ups → next variation)"),
    ("2. Harder Variation","Move to a more challenging exercise version (see ladder below)"),
    ("3. More Sets",       "Add a 4th set once 3 sets feel manageable"),
    ("4. Slower Tempo",    "Add a 3-second lowering phase to increase time under tension"),
    ("5. Reduce Rest",     "Shorter rest periods (60 s → 45 s) increase difficulty"),
]
po_rows = [[Paragraph(f"<b>{m}</b>", rule_label), Paragraph(d, rule_body)] for m, d in po_methods]
po_t = Table(po_rows, colWidths=[48*mm, 130*mm])
po_t.setStyle(TableStyle([
    ("GRID",          (0,0), (-1,-1), 0.3, MID_GREY),
    ("ROWBACKGROUNDS",(0,0),(-1,-1),[LIGHT_GREY, WHITE]),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(po_t)
story.append(Spacer(1, 5*mm))

# ── PROGRESSION LADDER ────────────────────────────────────────────────────────
story.append(header_table("🪜  EXERCISE PROGRESSION LADDER", bg=DARK_BLUE))
story.append(Spacer(1, 2*mm))
ladder = [
    ("Push-Ups",    "Incline  →  Standard  →  Decline  →  Archer  →  One-Arm Assisted  →  One-Arm"),
    ("Squats",      "Bodyweight  →  Pause Squat (3 s)  →  Bulgarian Split Squat  →  Shrimp Squat  →  Pistol Squat"),
    ("Pull-Ups",    "Table Row  →  Assisted (band/foot)  →  Negative Pull-Up  →  Full Pull-Up  →  Weighted (backpack)"),
    ("Dips",        "Bench Dip  →  Chair Dip  →  Parallel Bar Dip  →  Ring Dip"),
]
story.append(progress_table(ladder))
story.append(Spacer(1, 5*mm))

# ── KEY RULES ─────────────────────────────────────────────────────────────────
story.append(header_table("✅  KEY RULES FOR BEGINNERS", bg=MID_BLUE))
story.append(Spacer(1, 2*mm))
rules = [
    ("Stop 2-3 reps before failure",    "Reduces injury risk while still driving muscle growth"),
    ("Prioritise form over reps",       "Bad form = wasted effort + injury risk"),
    ("Sleep 7-9 hours / night",         "Most muscle repair happens during deep sleep"),
    ("Eat 1.6-2.2 g protein/kg BW",    "Protein is the raw material for muscle synthesis"),
    ("Be consistent for 8+ weeks",      "Visible results take time — trust the process"),
]
rule_rows = [[Paragraph(f"<b>{r}</b>", rule_label), Paragraph(d, rule_body)] for r, d in rules]
rule_t = Table(rule_rows, colWidths=[72*mm, 106*mm])
rule_t.setStyle(TableStyle([
    ("GRID",          (0,0), (-1,-1), 0.3, MID_GREY),
    ("ROWBACKGROUNDS",(0,0),(-1,-1),[LIGHT_GREY, WHITE]),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(rule_t)
story.append(Spacer(1, 5*mm))

# ── WHAT TO EXPECT ────────────────────────────────────────────────────────────
story.append(header_table("🗓️  WHAT TO EXPECT — Timeline", bg=DARK_BLUE))
story.append(Spacer(1, 2*mm))
timeline = [
    ("Weeks 1-3",    "Soreness & adaptation",   "Learning movement patterns; rapid neural strength gains"),
    ("Weeks 4-6",    "Strength rising fast",     "Rep counts climbing; exercises feeling more natural"),
    ("Weeks 7-12",   "First visible changes",    "Muscle definition emerging; movements feel second nature"),
    ("Month 3+",     "Level up",                 "Add resistance bands or a weighted backpack for continued overload"),
]
tl_hdr = [
    Paragraph("<b>Phase</b>",   ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
    Paragraph("<b>Focus</b>",   ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
    Paragraph("<b>What Happens</b>", ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
]
tl_rows = [tl_hdr]
for phase, focus, detail in timeline:
    cs = ParagraphStyle("tc", fontName="Helvetica", fontSize=8, textColor=DARK_BLUE, leading=11)
    tl_rows.append([Paragraph(f"<b>{phase}</b>", cs), Paragraph(focus, cs), Paragraph(detail, cs)])

tl_t = Table(tl_rows, colWidths=[25*mm, 50*mm, 103*mm])
tl_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), MID_BLUE),
    ("GRID",          (0,0), (-1,-1), 0.3, MID_GREY),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(tl_t)
story.append(Spacer(1, 6*mm))

# ── FOOTER ────────────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=0.5, color=MID_GREY))
story.append(Spacer(1, 2*mm))
footer_s = ParagraphStyle("footer", fontName="Helvetica", fontSize=7.5,
                           textColor=colors.HexColor("#888888"), alignment=TA_CENTER)
story.append(Paragraph(
    "Based on evidence-based hypertrophy principles  •  "
    "Train hard, recover well, eat enough protein  •  "
    "Generated by Orris AI  •  August 2026",
    footer_s
))

# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
Running Command

python /tmp/workspace/workout-pdf/generate_workout_pdf.py

Your PDF is ready! Here's what's included across 2 pages:
Page 1:
  • Title banner with program overview strip (days/week, rest times, key rules at a glance)
  • Weekly schedule table with checkboxes
  • Day A (Push + Legs) - 7 exercises with checkbox, sets, reps, muscles
  • Day B (Pull + Core) - 7 exercises
  • Day C (Full Body) - 7 exercises
  • Notes line after each day for personal logging
Page 2:
  • Progressive overload methods (5 strategies)
  • Exercise progression ladders (push-ups → one-arm, squat → pistol, etc.)
  • Key beginner rules
  • Timeline: what to expect week by week

Beginner Bodyweight Workout Checklist

PDF Document · PDF

Print it out and tick the checkboxes as you complete each exercise and each week's sessions!
This is a shared conversation. Sign in to Orris to start your own chat.