im born in 1996 october my height 150cm and my weight 80kg i want to loose weight and build muscle and i have poly metabolic ovarian syndrome and im diagnosed with l4-s1 disc bulge last flare up is one month before now i have very mild pain and it tend to increase with heavy works or cold weather but not severe. Give me detailed gym workout plan with warm and cool down and i can go to gym only for three days. i need to loose fat and build muscle. give nutritional requirements for the day and total calorie intake. first give me overview of gym workout plan and then give me detailed explanation of how to do it. make everything into a pdf which should be easy view

Reading File
Finding Sources
Finding Sources
Reading File
Finding Sources
Finding Sources
Searching PubMed

PCOS exercise resistance training weight loss

Running Command

ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"

Running Command

mkdir -p /tmp/workspace/fitness-plan && python3 << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import inch, cm from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak, KeepTogether) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate from reportlab.lib.colors import HexColor import datetime # ── Color palette ────────────────────────────────────────────────────────────── PURPLE = HexColor("#6C3483") LIGHT_PURP = HexColor("#D7BDE2") TEAL = HexColor("#1A7A7A") LIGHT_TEAL = HexColor("#A2D9CE") ORANGE = HexColor("#E67E22") LIGHT_ORANG = HexColor("#FAD7A0") DARK = HexColor("#1C1C1C") LIGHT_GREY = HexColor("#F5F5F5") MID_GREY = HexColor("#CCCCCC") RED_WARN = HexColor("#C0392B") GREEN = HexColor("#1E8449") # ── Document setup ───────────────────────────────────────────────────────────── OUTPUT = "/tmp/workspace/fitness-plan/PCOS_Fitness_Nutrition_Plan.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, leftMargin=1.8*cm, rightMargin=1.8*cm, topMargin=2*cm, bottomMargin=2*cm, title="PCOS Fitness & Nutrition Plan", author="Orris AI Health Assistant" ) W, H = A4 styles = getSampleStyleSheet() # ── Custom styles ────────────────────────────────────────────────────────────── def S(name, **kw): return ParagraphStyle(name, **kw) cover_title = S("CoverTitle", fontSize=28, leading=34, textColor=colors.white, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=6) cover_sub = S("CoverSub", fontSize=14, leading=18, textColor=LIGHT_PURP, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=4) cover_date = S("CoverDate", fontSize=10, leading=12, textColor=colors.white, alignment=TA_CENTER, fontName="Helvetica") h1 = S("H1", fontSize=16, leading=20, textColor=PURPLE, fontName="Helvetica-Bold", spaceBefore=12, spaceAfter=4) h2 = S("H2", fontSize=13, leading=17, textColor=TEAL, fontName="Helvetica-Bold", spaceBefore=10, spaceAfter=3) h3 = S("H3", fontSize=11, leading=14, textColor=ORANGE, fontName="Helvetica-Bold", spaceBefore=8, spaceAfter=2) body= S("Body", fontSize=9.5, leading=14, textColor=DARK, fontName="Helvetica", spaceAfter=4, alignment=TA_JUSTIFY) bullet= S("Bullet", fontSize=9.5, leading=14, textColor=DARK, fontName="Helvetica", leftIndent=14, spaceAfter=2, bulletIndent=4) warn = S("Warn", fontSize=9, leading=13, textColor=RED_WARN, fontName="Helvetica-Bold", spaceBefore=4, spaceAfter=4, leftIndent=6) note = S("Note", fontSize=9, leading=13, textColor=GREEN, fontName="Helvetica-Bold", spaceBefore=4, spaceAfter=4, leftIndent=6) small= S("Small",fontSize=8.5, leading=12, textColor=HexColor("#555555"), fontName="Helvetica", spaceAfter=2) centred= S("Centred", fontSize=9.5, leading=14, textColor=DARK, fontName="Helvetica", alignment=TA_CENTER) def hr(color=MID_GREY, thickness=0.5): return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=4, spaceBefore=4) def section_banner(text, bg=PURPLE): data = [[Paragraph(f"<font color='white'><b>{text}</b></font>", ParagraphStyle("BT", fontSize=12, leading=15, fontName="Helvetica-Bold", textColor=colors.white))]] t = Table(data, colWidths=["100%"]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0),(-1,-1), bg), ("TOPPADDING",(0,0),(-1,-1),6), ("BOTTOMPADDING",(0,0),(-1,-1),6), ("LEFTPADDING",(0,0),(-1,-1),8), ("RIGHTPADDING",(0,0),(-1,-1),8), ("ROWBACKGROUNDS",(0,0),(-1,-1),[bg]), ])) return t def box(content_list, bg=LIGHT_GREY, border=MID_GREY): """Wrap a list of flowables in a coloured box via a single-cell Table.""" inner = Table([[c] for c in content_list], colWidths=["100%"]) inner.setStyle(TableStyle([ ("LEFTPADDING",(0,0),(-1,-1),0), ("RIGHTPADDING",(0,0),(-1,-1),0), ("TOPPADDING",(0,0),(-1,-1),0), ("BOTTOMPADDING",(0,0),(-1,-1),0), ])) outer = Table([[inner]], colWidths=["100%"]) outer.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,-1), bg), ("BOX",(0,0),(-1,-1),0.8, border), ("TOPPADDING",(0,0),(-1,-1),8), ("BOTTOMPADDING",(0,0),(-1,-1),8), ("LEFTPADDING",(0,0),(-1,-1),10), ("RIGHTPADDING",(0,0),(-1,-1),10), ])) return outer def exercise_table(rows): """rows = list of (exercise, sets, reps, rest, notes)""" header = [Paragraph(f"<b>{h}</b>", centred) for h in ["Exercise", "Sets", "Reps / Duration", "Rest", "Key Notes"]] data = [header] for r in rows: data.append([Paragraph(str(c), body if i==0 or i==4 else centred) for i, c in enumerate(r)]) col_w = [5.8*cm, 1.5*cm, 3*cm, 1.8*cm, 5.5*cm] t = Table(data, colWidths=col_w, repeatRows=1) t.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), PURPLE), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_GREY]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),4), ("BOTTOMPADDING",(0,0),(-1,-1),4), ("LEFTPADDING",(0,0),(-1,-1),5), ("RIGHTPADDING",(0,0),(-1,-1),5), ("VALIGN",(0,0),(-1,-1),"MIDDLE"), ])) return t # ══════════════════════════════════════════════════════════════════════════════ # BUILD STORY # ══════════════════════════════════════════════════════════════════════════════ story = [] # ───────────────────────────────────── COVER PAGE ────────────────────────── cover_bg = Table( [[Paragraph("PCOS FITNESS &<br/>NUTRITION PLAN", cover_title)], [Paragraph("Personalised 3-Day Gym Programme", cover_sub)], [Paragraph("With Spine-Safe Adaptations for L4-S1 Disc Bulge", cover_sub)], [Spacer(1, 0.3*inch)], [Paragraph("● Age 29 ● Height 150 cm ● Weight 80 kg ● BMI 35.6", cover_date)], [Paragraph("Goals: Fat Loss + Muscle Building | PCOS + L4-S1 Disc Bulge", cover_date)], [Spacer(1, 0.2*inch)], [Paragraph(f"Generated: {datetime.date.today().strftime('%d %B %Y')} · Orris AI Health Assistant", cover_date)], ], colWidths=["100%"] ) cover_bg.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,-1), PURPLE), ("TOPPADDING",(0,0),(-1,-1),10), ("BOTTOMPADDING",(0,0),(-1,-1),10), ("LEFTPADDING",(0,0),(-1,-1),20), ("RIGHTPADDING",(0,0),(-1,-1),20), ("ROWBACKGROUNDS",(0,0),(-1,-1),[PURPLE]), ])) story.append(cover_bg) story.append(Spacer(1, 0.4*inch)) # disclaimer disc_data = [[Paragraph( "<b>⚠ IMPORTANT DISCLAIMER:</b> This plan is for general guidance only. " "Always consult your doctor, gynaecologist, and physiotherapist before starting " "any new exercise programme, especially with PCOS and a diagnosed disc bulge. " "Stop any exercise that causes sharp, radiating, or worsening pain.", ParagraphStyle("Disc", fontSize=8.5, leading=12, textColor=RED_WARN, fontName="Helvetica-Bold", alignment=TA_JUSTIFY))]] disc_tbl = Table(disc_data, colWidths=["100%"]) disc_tbl.setStyle(TableStyle([ ("BOX",(0,0),(-1,-1),1.2, RED_WARN), ("TOPPADDING",(0,0),(-1,-1),7),("BOTTOMPADDING",(0,0),(-1,-1),7), ("LEFTPADDING",(0,0),(-1,-1),8),("RIGHTPADDING",(0,0),(-1,-1),8), ("BACKGROUND",(0,0),(-1,-1), HexColor("#FDEDEC")), ])) story.append(disc_tbl) story.append(PageBreak()) # ───────────────────────────────────── SECTION 1: YOUR PROFILE ───────────── story.append(section_banner("SECTION 1 — YOUR HEALTH PROFILE & CALCULATIONS")) story.append(Spacer(1, 8)) profile_data = [ [Paragraph("<b>Parameter</b>", centred), Paragraph("<b>Value</b>", centred), Paragraph("<b>Notes</b>", centred)], ["Date of Birth", "October 1996", "Age: 29 years"], ["Height", "150 cm", "—"], ["Weight", "80 kg", "—"], ["BMI", "35.6 kg/m²", "Obese Class II (WHO)"], ["Conditions", "PCOS + L4-S1 Disc Bulge", "Plan adapted for both"], ["Gym Days", "3 days/week", "Non-consecutive recommended"], ["Goal", "Fat Loss + Muscle Gain", "Body Recomposition"], ] pt = Table(profile_data, colWidths=[4.5*cm, 4.5*cm, 8.6*cm]) pt.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), TEAL), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9.5), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_GREY]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6), ("VALIGN",(0,0),(-1,-1),"MIDDLE"), ])) story.append(pt) story.append(Spacer(1, 10)) story.append(Paragraph("Calorie & Macronutrient Calculations", h2)) story.append(Paragraph( "Using the <b>Mifflin-St Jeor equation</b> (most accurate for overweight individuals):", body)) story.append(Paragraph( "BMR = (10 × 80) + (6.25 × 150) − (5 × 29) − 161 = 800 + 937.5 − 145 − 161 = <b>1,431.5 kcal</b>", body)) story.append(Paragraph( "With light-to-moderate activity (3 gym days/week) → TDEE = BMR × 1.375 = <b>~1,968 kcal/day</b>", body)) story.append(Spacer(1,4)) calorie_data = [ [Paragraph("<b>Goal</b>", centred), Paragraph("<b>Daily Calories</b>", centred), Paragraph("<b>Deficit/Surplus</b>", centred)], ["Fat Loss (Phase 1 — Months 1-3)", "1,500–1,600 kcal", "~400–470 kcal deficit"], ["Maintenance / Recomp (Phase 2)", "1,750–1,800 kcal", "~170–220 kcal deficit"], ["Active gym days", "1,600 kcal", "Slightly higher protein"], ["Rest days", "1,500 kcal", "Lower carbs"], ] ct = Table(calorie_data, colWidths=[6.5*cm, 4*cm, 7.1*cm]) ct.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), ORANGE), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9.5), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_ORANG]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6), ])) story.append(ct) story.append(Spacer(1, 8)) story.append(Paragraph("Daily Macronutrient Targets (Gym Days / 1,600 kcal)", h2)) macro_data = [ [Paragraph("<b>Macro</b>", centred), Paragraph("<b>Amount</b>", centred), Paragraph("<b>Calories</b>", centred), Paragraph("<b>Why?</b>", centred)], ["Protein", "120–130 g", "480–520 kcal (30–33%)", "Muscle preservation, satiety, PCOS insulin sensitivity"], ["Carbohydrates", "130–150 g", "520–600 kcal (33–37%)", "Low-GI only; manages insulin resistance in PCOS"], ["Fats", "45–55 g", "405–495 kcal (27–31%)", "Hormone production, omega-3 for inflammation"], ["Fibre", "≥ 25 g", "—", "Gut health, blood sugar control"], ["Water", "2.5–3 L/day", "—", "Reduces PCOS bloating, metabolism support"], ] mt = Table(macro_data, colWidths=[3*cm, 2.5*cm, 3.5*cm, 8.6*cm]) mt.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), TEAL), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_TEAL]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4), ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5), ("VALIGN",(0,0),(-1,-1),"TOP"), ])) story.append(mt) story.append(PageBreak()) # ───────────────────────────────────── SECTION 2: OVERVIEW ───────────────── story.append(section_banner("SECTION 2 — WORKOUT OVERVIEW & WEEKLY SCHEDULE")) story.append(Spacer(1, 8)) story.append(Paragraph("Programme Philosophy", h2)) story.append(Paragraph( "This is a <b>3-day full-body resistance training programme</b> designed specifically for you. " "Every exercise is selected to be <b>spine-neutral and low-impact</b> to protect the L4-S1 disc bulge, " "while providing enough mechanical load to build muscle and burn fat. " "Research (including a 2024 network meta-analysis in <i>BMC Women's Health</i>) confirms that " "<b>combined resistance + aerobic training is the most effective exercise approach for PCOS</b> — " "improving insulin sensitivity, reducing androgens, and promoting fat loss simultaneously.", body)) story.append(Spacer(1, 4)) # Key principles boxes principles = [ ("🟣 PCOS-Specific", [ "• Resistance training lowers insulin resistance more than cardio alone", "• Higher-protein diet stabilises blood sugar and reduces androgen effects", "• Avoid extreme calorie restriction (worsens hormone disruption in PCOS)", "• Consistent sleep (7–9 hrs) and stress management are part of the plan", ], LIGHT_PURP), ("🟢 Spine-Safe (L4-S1 Disc Bulge)", [ "• NO heavy deadlifts, barbell squats, or bent-over rows during flare-ups", "• NO high-impact jumping or running on hard surfaces", "• Avoid forward spinal flexion under load (e.g. sit-ups with weight)", "• Core strengthening focuses on bracing, not crunching", "• If pain increases beyond mild, skip that exercise and move on", ], LIGHT_TEAL), ] for title, pts, bg in principles: inner = [Paragraph(f"<b>{title}</b>", h3)] for p in pts: inner.append(Paragraph(p, bullet)) story.append(box(inner, bg=bg)) story.append(Spacer(1,6)) story.append(Paragraph("Recommended Weekly Schedule", h2)) story.append(Paragraph( "Train on non-consecutive days to allow muscle recovery. Suggested pattern:", body)) sched_data = [ [Paragraph("<b>Day</b>", centred), Paragraph("<b>Workout</b>", centred), Paragraph("<b>Focus</b>", centred), Paragraph("<b>Duration</b>", centred)], ["Monday", "Day A — Upper Body + Core", "Push/Pull, shoulder & back, core stability", "55–65 min"], ["Tuesday", "REST / Walk", "Light 20-min walk, stretching", "Optional"], ["Wednesday", "Day B — Lower Body + Core", "Glutes, legs, hip stability, spine safety", "55–65 min"], ["Thursday", "REST / Yoga/Stretching", "Mobility & recovery", "Optional"], ["Friday/Saturday", "Day C — Full Body Circuit", "Metabolic, combine upper + lower, cardio", "55–65 min"], ["Sunday", "REST", "Full recovery, meal prep", "—"], ] st2 = Table(sched_data, colWidths=[3.2*cm, 4.8*cm, 6.5*cm, 3.1*cm]) st2.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), PURPLE), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9.5), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_PURP]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6), ("VALIGN",(0,0),(-1,-1),"MIDDLE"), ])) story.append(st2) story.append(Spacer(1, 10)) story.append(Paragraph("Progression Plan (4-Week Phases)", h2)) prog_data = [ [Paragraph("<b>Phase</b>", centred), Paragraph("<b>Weeks</b>", centred), Paragraph("<b>Sets</b>", centred), Paragraph("<b>Reps</b>", centred), Paragraph("<b>Focus</b>", centred)], ["Phase 1 — Foundation", "1–4", "2–3", "12–15", "Learn form, spine safety, build aerobic base"], ["Phase 2 — Build", "5–8", "3", "10–12", "Increase weight, reduce rest, improve strength"], ["Phase 3 — Strength", "9–12", "3–4", "8–10", "Progressive overload, visible body changes"], ["Deload", "Every 4th week", "2", "12–15", "Lighter weights, full recovery, prevent injury"], ] prog_t = Table(prog_data, colWidths=[4*cm, 2.5*cm, 1.8*cm, 1.8*cm, 7.5*cm]) prog_t.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), TEAL), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_TEAL]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5), ("VALIGN",(0,0),(-1,-1),"MIDDLE"), ])) story.append(prog_t) story.append(PageBreak()) # ───────────────────────────────────── SECTION 3: DETAILED WORKOUTS ──────── story.append(section_banner("SECTION 3 — DETAILED WORKOUT PLANS")) story.append(Spacer(1, 8)) # ── WARM-UP (universal) ────────────────────────────────────────────────────── story.append(Paragraph("Universal Warm-Up (10 minutes — Do Before Every Session)", h2)) story.append(Paragraph( "A thorough warm-up is especially important with a disc bulge — cold muscles increase spine stress. " "Never skip this. If the gym is cold, extend to 12–15 minutes.", body)) warmup_rows = [ ("March in Place", "1", "2 min", "—", "Swing arms gently, get blood moving"), ("Hip Circles", "1", "10 each side", "—", "Hands on hips, draw large circles"), ("Cat-Cow Stretch", "1", "10 reps slow", "—", "On all fours; arch then round spine gently"), ("Glute Bridge (bodyweight)", "1", "12 reps", "—", "Activates glutes, warms lumbar spine"), ("Bird-Dog Hold", "1", "8 each side", "—", "Opposite arm+leg; core activation"), ("Shoulder Rolls + Arm Circles", "1", "15 each direction", "—", "Loosen upper back and rotator cuff"), ("Bodyweight Squat (shallow)", "1", "10 reps", "—", "Only go to comfort depth — not below parallel"), ("Side-Lying Clamshell", "1", "12 each side", "—", "Hip abductor activation, key for disc protection"), ] story.append(exercise_table(warmup_rows)) story.append(Spacer(1, 6)) # ── COOL-DOWN (universal) ──────────────────────────────────────────────────── story.append(Paragraph("Universal Cool-Down (8–10 minutes — Do After Every Session)", h2)) cooldown_rows = [ ("Supine Knee-to-Chest", "1", "30 sec each side", "—", "Gently decompresses lower back"), ("Piriformis Stretch (Figure-4)", "1", "30 sec each side", "—", "Relieves sciatic area tension"), ("Child's Pose", "1", "45 sec", "—", "Full spine lengthening; spine decompression"), ("Cat-Cow (slow)", "1", "8 reps", "—", "Restore neutral spine after workout"), ("Standing Quad Stretch", "1", "30 sec each leg", "—", "Use wall for balance support"), ("Standing Calf Stretch", "1", "30 sec each side", "—", "Against wall; flex foot"), ("Chest Opener Stretch", "1", "45 sec", "—", "Clasp hands behind back, open chest"), ("Deep Diaphragmatic Breathing", "1", "5 breaths", "—", "Inhale 4s through nose, exhale 6s through mouth"), ] story.append(exercise_table(cooldown_rows)) story.append(PageBreak()) # ── DAY A ──────────────────────────────────────────────────────────────────── story.append(section_banner("DAY A — Upper Body + Core (Monday)", bg=TEAL)) story.append(Spacer(1, 6)) story.append(Paragraph( "<b>Focus:</b> Back, chest, shoulders, biceps, triceps, and core stability. " "All exercises performed seated or with spine supported where possible. " "No overhead pressing with heavy loads during early phases.", body)) story.append(Paragraph("Main Workout — Day A", h2)) dayA_rows = [ ("Seated Cable Row", "3", "12–15", "60 s", "Sit tall, squeeze shoulder blades; no forward lean"), ("Incline Dumbbell Press (30°)", "3", "12–15", "60 s", "30° incline reduces spine compression vs. flat bench"), ("Lat Pulldown (wide grip)", "3", "12–15", "60 s", "Pull to upper chest; do not lean back aggressively"), ("Seated Dumbbell Shoulder Press", "3", "10–12", "60 s", "Use back-supported seat; elbows at 90° at bottom"), ("Dumbbell Bicep Curl (seated)", "3", "12–15", "45 s", "Both arms together or alternating; wrist neutral"), ("Tricep Pushdown (cable)", "3", "12–15", "45 s", "Elbows pinned to sides; controlled return"), ("Dead Bug (core)", "3", "8 each side", "45 s", "Lower back flat on floor; move opposite arm+leg slowly"), ("Pallof Press (cable anti-rotation)", "3", "10 each side", "45 s", "Anti-rotation; do NOT twist; great for disc protection"), ("Low-Impact Cardio Finisher", "1", "10–12 min", "—", "Stationary bike or elliptical at moderate pace (RPE 5–6/10)"), ] story.append(exercise_table(dayA_rows)) story.append(Spacer(1, 6)) story.append(Paragraph( "⚠ Spine Alert: If any exercise causes tingling, shooting pain, or numbness down the leg, " "stop immediately and tell your physiotherapist.", warn)) story.append(PageBreak()) # ── DAY B ──────────────────────────────────────────────────────────────────── story.append(section_banner("DAY B — Lower Body + Core (Wednesday)", bg=TEAL)) story.append(Spacer(1, 6)) story.append(Paragraph( "<b>Focus:</b> Glutes, quadriceps, hamstrings, calves, and deep core. " "Lower body training is the most important for PCOS — large muscle groups improve insulin sensitivity dramatically. " "All exercises are selected to be safe for the L4-S1 level (no heavy barbell squats or deadlifts).", body)) story.append(Paragraph("Main Workout — Day B", h2)) dayB_rows = [ ("Leg Press (moderate weight)", "3", "12–15", "75 s", "Feet shoulder-width, mid-platform; do NOT lock knees; stop at 90°"), ("Goblet Squat (light dumbbell)", "3", "12–15", "60 s", "Hold DB at chest; squat to comfortable depth; spine neutral"), ("Romanian Deadlift (light DBs)", "3", "12", "75 s", "Hinge at hips only; no rounding spine; feel hamstring stretch"), ("Seated Leg Curl", "3", "12–15", "60 s", "Machine; controlled return phase important"), ("Leg Extension (moderate)", "3", "12–15", "60 s", "Quad isolation; avoid maximum extension if knee discomfort"), ("Standing Calf Raise", "3", "15–20", "45 s", "Hold dumbbell for resistance; full range of motion"), ("Glute Bridge on Floor", "3", "15", "45 s", "Drive through heels; squeeze glutes at top; 2s hold"), ("Side-Lying Hip Abduction", "2", "15 each side", "30 s", "With ankle weight or resistance band; slow and controlled"), ("Plank Hold (forearm)", "3", "20–40 sec", "45 s", "Back flat; do not let hips sag; breathe normally"), ("Low-Impact Cardio Finisher", "1", "10–12 min", "—", "Stationary bike or elliptical (RPE 5–6/10)"), ] story.append(exercise_table(dayB_rows)) story.append(Spacer(1, 6)) story.append(Paragraph( "✅ PCOS Bonus: Lower body resistance training activates GLUT-4 transporters — " "these improve glucose uptake into muscle cells independent of insulin, directly helping insulin resistance.", note)) story.append(PageBreak()) # ── DAY C ──────────────────────────────────────────────────────────────────── story.append(section_banner("DAY C — Full Body Circuit + Cardio (Friday/Saturday)", bg=ORANGE)) story.append(Spacer(1, 6)) story.append(Paragraph( "<b>Focus:</b> Metabolic full-body circuit combining compound movements with low-intensity cardio intervals. " "This is your 'fat-burning' day — the circuit format keeps heart rate elevated, maximising calorie burn " "while the resistance component builds muscle. " "Rest 45–60 seconds between exercises in each round, 90 seconds between rounds.", body)) story.append(Paragraph("Circuit (3 Rounds) — Day C", h2)) dayC_rows = [ ("Dumbbell Goblet Squat", "3 rounds", "12 reps", "45 s", "Light-moderate; spine tall throughout"), ("Seated Cable Row", "3 rounds", "12 reps", "45 s", "Full shoulder blade squeeze"), ("Dumbbell Step-Up (low box)", "3 rounds", "10 each leg", "45 s", "Use stable bench; step up one foot at a time; no jumping"), ("Dumbbell Shoulder Press (seated)", "3 rounds", "12 reps", "45 s", "Back supported; controlled tempo"), ("Resistance Band Hip Thrust", "3 rounds", "15 reps", "45 s", "Shoulders on bench; drive hips up; hold 1 sec at top"), ("Dumbbell Bent-Over Row (one-arm)", "3 rounds", "12 each side", "45 s", "Brace on bench with one hand; spine parallel to floor"), ("Pallof Press or Dead Bug", "3 rounds", "10 each side", "45 s", "Alternate between sessions for variety"), ("Low-Impact Cardio Burst", "3 rounds", "2 min each", "90 s between rounds", "Stationary bike sprint at RPE 7/10, then rest 90 sec"), ] story.append(exercise_table(dayC_rows)) story.append(Spacer(1, 6)) story.append(Paragraph( "💡 How to execute the circuit: Complete ONE round (all 8 exercises) before resting 90 seconds. " "Then repeat for Round 2 and Round 3. Total circuit time: ~30–35 min. " "Add warm-up and cool-down for full 55–65 min session.", note)) story.append(PageBreak()) # ───────────────────────────────────── SECTION 4: EXERCISE DESCRIPTIONS ──── story.append(section_banner("SECTION 4 — HOW TO DO EACH EXERCISE (DETAILED INSTRUCTIONS)")) story.append(Spacer(1, 8)) exercises_detail = [ ("Seated Cable Row", TEAL, "Target: Mid-back (rhomboids, lats), rear deltoids, biceps.", [ "1. Sit upright at the cable machine with feet on the foot pads, knees slightly bent.", "2. Hold the V-bar or wide handle with both hands, arms fully extended.", "3. Sit TALL — do not lean forward past vertical. This protects your lower back.", "4. Pull the handle towards your lower sternum (not neck), squeezing your shoulder blades together.", "5. Hold the squeeze for 1 second at the end position.", "6. Slowly return to start — resist the weight; do not let it jerk you forward.", "⚠ Spine note: No aggressive forward lean. Keep lumbar spine neutral throughout.", ]), ("Incline Dumbbell Press (30°)", TEAL, "Target: Upper chest (pectoralis major), anterior deltoids, triceps.", [ "1. Set bench to 30° angle (not 45° — reduces shoulder impingement risk).", "2. Hold dumbbells at shoulder level, elbows at ~75° from torso.", "3. Press upward until arms are nearly straight (don't lock elbows fully).", "4. Lower slowly back to start — 3-second descent builds more muscle.", "5. Feet flat on floor at all times for spinal stability.", "⚠ Spine note: Do not arch the lower back excessively to press more weight.", ]), ("Lat Pulldown (Wide Grip)", TEAL, "Target: Latissimus dorsi (back width), biceps, rear deltoids.", [ "1. Sit with thighs tucked under the knee pad. Grip the bar just wider than shoulder-width.", "2. Lean back SLIGHTLY (10–15°) — not dramatically. Keep chest tall.", "3. Pull the bar down to your upper chest (clavicle level), leading with your elbows.", "4. Squeeze lats at the bottom, pause 1 second.", "5. Slowly return bar upward — full extension at top.", "⚠ Spine note: No extreme backward lean. Controlled, smooth movement.", ]), ("Romanian Deadlift (DBs)", ORANGE, "Target: Hamstrings, glutes, lower back stabilisers.", [ "1. Stand with feet hip-width apart, hold light dumbbells in front of thighs.", "2. Hinge at the hips — push your hips BACKWARD (not downward). Think 'closing a car door with your hips'.", "3. Lower DBs along your legs, keeping them close to the body.", "4. Lower until you feel a STRONG stretch in your hamstrings (typically mid-shin level).", "5. Drive hips forward to return to standing — squeeze glutes at the top.", "⚠ CRITICAL spine note: Keep lower back completely flat (neutral). NO rounding of the spine. If you feel pain in the lower back at any point, reduce range of motion or stop entirely.", ]), ("Glute Bridge on Floor", ORANGE, "Target: Glutes (maximus, medius), hamstrings, spinal erectors (stabilisation).", [ "1. Lie on your back, knees bent at 90°, feet flat on the floor hip-width apart.", "2. Arms by your sides, palms facing down for stability.", "3. Press through your HEELS and squeeze your glutes to lift your hips off the floor.", "4. Drive hips up until your body forms a straight line from shoulders to knees.", "5. Hold at the top for 2 seconds, squeezing glutes hard.", "6. Lower slowly to the floor — do not let hips crash down.", "✅ Spine benefit: This exercise is recommended by physiotherapists for disc bulge recovery — it strengthens glutes without loading the spine in compression.", ]), ("Dead Bug", PURPLE, "Target: Deep core stabilisers (transverse abdominis), coordination.", [ "1. Lie on your back. Raise arms straight up toward ceiling. Bend knees 90°, raise legs so shins are parallel to floor ('tabletop' position).", "2. Press your ENTIRE lower back into the floor — maintain this throughout.", "3. Slowly lower your RIGHT arm overhead and simultaneously extend your LEFT leg toward the floor.", "4. Do NOT let either touch the floor. Lower only as far as you can maintain the flat-back position.", "5. Return to start, then repeat on the opposite side.", "⚠ Spine note: The moment your back lifts off the floor, you have gone too far. This is the single most important core exercise for disc protection.", ]), ("Pallof Press", PURPLE, "Target: Obliques, transverse abdominis (anti-rotation core stability).", [ "1. Set a cable at chest height. Stand sideways to the machine, feet shoulder-width apart.", "2. Hold the handle at your chest with both hands, elbows bent.", "3. Press the handle straight out in front of your chest — RESIST the cable trying to pull you sideways.", "4. Hold extended position for 2 seconds. Return to chest.", "5. Complete all reps, then turn around and repeat on the other side.", "✅ Why this exercise: It trains your core to RESIST rotation — exactly what protects the disc from rotational shear forces during daily activities.", ]), ("Leg Press", ORANGE, "Target: Quadriceps, glutes, hamstrings.", [ "1. Adjust the seat so when feet are on the platform, knees are at approximately 90°.", "2. Place feet shoulder-width apart, middle of the platform (not too high, not too low).", "3. Release safety handles, lower the platform by bending knees toward chest.", "4. Stop when knees reach ~90° — do NOT bring knees to your chest (this increases disc pressure).", "5. Press through the WHOLE foot back to near-full extension. Do not lock knees.", "⚠ CRITICAL disc note: Do not let your hips or lower back lift off the seat during the movement. If they do, you are going too deep or using too much weight.", ]), ("Hip Thrust (Resistance Band)", ORANGE, "Target: Glutes (maximus), hamstrings.", [ "1. Sit with your upper back against a stable bench, knees bent, feet flat on floor.", "2. Place a resistance band across your hips (or use a padded barbell with light weight).", "3. Drive through your heels, thrusting hips up until body is parallel to the floor.", "4. At the top, squeeze glutes HARD for 1–2 seconds.", "5. Lower hips slowly back to just above the floor — do not rest between reps.", "✅ This is the most effective glute exercise and is spine-safe when performed correctly.", ]), ("Dumbbell Step-Up (Low Box)", ORANGE, "Target: Glutes, quadriceps, core stability.", [ "1. Use a stable low box or bench (20–30 cm height to start).", "2. Step one foot fully onto the box. Press through the heel of the elevated foot to stand up.", "3. Bring the other foot up to the box. Then lower that same foot down. Alternate legs OR complete all reps on one side.", "4. Hold light dumbbells by your sides for added resistance.", "⚠ Spine note: Stand tall throughout. No hunching forward. The low box height reduces hip flexion beyond what is comfortable for the disc.", ]), ("Plank (Forearm)", PURPLE, "Target: Entire core (transverse abdominis, rectus abdominis, obliques), shoulders.", [ "1. Place forearms on the floor, elbows directly under shoulders. Toes on floor.", "2. Lift entire body off the floor — body should be straight from head to heels.", "3. Engage your core by 'pulling your belly button to your spine' and squeezing your glutes.", "4. Breathe normally — do not hold your breath.", "5. Hold for 20–40 seconds. Build up gradually over weeks.", "⚠ If hips sag or rise during the hold, stop. Quality over duration.", ]), ] for ex_name, color, target, steps in exercises_detail: inner_items = [ Paragraph(f"<b>{ex_name}</b>", ParagraphStyle("ExH", fontSize=11, fontName="Helvetica-Bold", textColor=color, spaceBefore=0, spaceAfter=2)), Paragraph(f"<i>{target}</i>", small), ] for step in steps: inner_items.append(Paragraph(step, bullet)) story.append(KeepTogether(box(inner_items, bg=LIGHT_GREY, border=color))) story.append(Spacer(1, 4)) story.append(PageBreak()) # ───────────────────────────────────── SECTION 5: NUTRITION ──────────────── story.append(section_banner("SECTION 5 — NUTRITION PLAN")) story.append(Spacer(1, 8)) story.append(Paragraph("PCOS-Specific Nutrition Principles", h2)) pcos_nut = [ "• <b>Low-GI carbohydrates only:</b> brown rice, oats, sweet potato, lentils, chickpeas, quinoa. Avoid white bread, white rice, sugary drinks.", "• <b>High protein at every meal:</b> keeps blood sugar stable and reduces androgen-driven hunger.", "• <b>Anti-inflammatory fats:</b> fatty fish (salmon, sardines), walnuts, flaxseed, avocado, olive oil. These reduce PCOS-related systemic inflammation.", "• <b>Inositol-rich foods:</b> buckwheat, beans, oranges — myo-inositol improves insulin signalling in PCOS.", "• <b>Limit processed sugar and refined carbs</b> — they spike insulin, worsen testosterone levels, and promote fat storage.", "• <b>Do NOT skip meals</b> — irregular eating patterns worsen cortisol and insulin dysregulation in PCOS.", "• <b>Caffeine in moderation</b> (1–2 cups/day max) — excess caffeine raises cortisol which worsens PCOS symptoms.", ] for item in pcos_nut: story.append(Paragraph(item, bullet)) story.append(Spacer(1,6)) story.append(Paragraph("Sample Daily Meal Plan (Gym Day — 1,600 kcal)", h2)) meal_data = [ [Paragraph("<b>Meal</b>", centred), Paragraph("<b>Food & Portions</b>", centred), Paragraph("<b>Approx. Kcal</b>", centred), Paragraph("<b>Protein</b>", centred)], ["Breakfast (8 AM)", "3 scrambled eggs + 1 slice multigrain toast + 1 cup spinach sautéed\n+ 1 tsp olive oil + green tea", "~380 kcal", "~25g"], ["Mid-Morning (11 AM)", "1 small bowl Greek yoghurt (unsweetened, full-fat)\n+ 1 tbsp flaxseed + handful of mixed berries", "~200 kcal", "~15g"], ["Lunch (1:30 PM)", "1 cup brown rice + 120g grilled chicken breast\n+ large salad (cucumber, tomato, greens)\n+ 1 tbsp olive oil + lemon dressing", "~450 kcal", "~40g"], ["Pre-Workout Snack (3:30 PM — if gym at 5 PM)", "1 banana + 1 tbsp peanut butter\nOR 30g mixed nuts", "~180 kcal", "~5g"], ["Post-Workout Dinner (7 PM)", "150g baked salmon OR 150g paneer (cottage cheese)\n+ 1 cup lentil dal OR roasted vegetables\n+ 1 small sweet potato", "~420 kcal", "~38g"], ["Evening Snack (optional, if hungry)", "1 cup warm turmeric milk (low-fat)\nOR 1 small apple + 5 almonds", "~120 kcal", "~4–6g"], [Paragraph("<b>TOTAL</b>", centred), "", Paragraph("<b>~1,550–1,600 kcal</b>", centred), Paragraph("<b>~122–130g</b>", centred)], ] meal_t = Table(meal_data, colWidths=[3.5*cm, 8.5*cm, 2.5*cm, 2.7*cm]) meal_t.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), TEAL), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-2),[colors.white, LIGHT_TEAL]), ("BACKGROUND",(0,-1),(-1,-1), LIGHT_ORANG), ("FONTNAME",(0,-1),(-1,-1),"Helvetica-Bold"), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6), ("VALIGN",(0,0),(-1,-1),"MIDDLE"), ])) story.append(meal_t) story.append(Spacer(1, 8)) story.append(Paragraph("Rest Day Meal Adjustments (1,500 kcal)", h2)) story.append(Paragraph( "On rest days, slightly reduce carbohydrates and increase vegetables/fibre. " "Remove the pre-workout snack. Reduce rice portion by 1/3. " "Keep protein the same (≥120g) to support muscle protein synthesis which continues 24–48 hrs post-training.", body)) story.append(Paragraph("Key Supplements to Discuss With Your Doctor", h2)) supp_data = [ [Paragraph("<b>Supplement</b>", centred), Paragraph("<b>Dose (typical)</b>", centred), Paragraph("<b>Evidence for PCOS</b>", centred)], ["Myo-Inositol + D-Chiro-Inositol (40:1 ratio)", "2–4g/day", "Strong — improves insulin sensitivity, ovulation, reduces androgens"], ["Vitamin D3", "1,000–2,000 IU/day", "Moderate — most PCOS patients are deficient; improves insulin sensitivity"], ["Omega-3 Fish Oil", "2–3g EPA+DHA/day", "Strong — reduces inflammation, triglycerides, testosterone in PCOS"], ["Magnesium", "200–300mg/day", "Moderate — improves insulin resistance and reduces cortisol"], ["Protein Powder (whey or plant)", "1 scoop/day", "Practical — helps reach 120–130g protein target"], ] supp_t = Table(supp_data, colWidths=[5*cm, 3*cm, 9.6*cm]) supp_t.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), PURPLE), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_PURP]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5), ("VALIGN",(0,0),(-1,-1),"TOP"), ])) story.append(supp_t) story.append(Spacer(1,5)) story.append(Paragraph("⚠ Always consult your gynaecologist or endocrinologist before adding supplements, " "especially if you are on Metformin or other medications.", warn)) story.append(PageBreak()) # ───────────────────────────────────── SECTION 6: LIFESTYLE ──────────────── story.append(section_banner("SECTION 6 — LIFESTYLE, RECOVERY & DISC CARE")) story.append(Spacer(1, 8)) story.append(Paragraph("Managing the L4-S1 Disc Bulge", h2)) disc_points = [ "• <b>Cold weather flare-ups:</b> Always wear a warm lower-back support belt when exercising in cold weather. " "Warm up for an extra 5 minutes. Apply a heat pack to the lower back for 10–15 min before your session.", "• <b>During a flare-up:</b> Skip Day B (lower body) and switch to an upper-body-only or swimming session. " "Never train through sharp or radiating pain.", "• <b>Between sessions:</b> Sleep on your side with a pillow between your knees — this maintains spinal alignment.", "• <b>Daily habit:</b> Avoid sitting for more than 45 minutes at a stretch. Stand, walk briefly, then sit again.", "• <b>Physio exercises (daily, 5 min):</b> Cat-cow + knee-to-chest stretch + bird-dog. These can be done at home.", "• <b>Avoid:</b> Heavy lifting with spinal flexion (bending forward to pick up heavy objects). Always squat down to pick things up instead.", ] for item in disc_points: story.append(Paragraph(item, bullet)) story.append(Spacer(1, 8)) story.append(Paragraph("Recovery & Lifestyle Targets", h2)) life_data = [ [Paragraph("<b>Factor</b>", centred), Paragraph("<b>Target</b>", centred), Paragraph("<b>Why It Matters for PCOS + Body Composition</b>", centred)], ["Sleep", "7–9 hours/night", "Poor sleep increases ghrelin (hunger hormone) and cortisol, worsening PCOS symptoms and fat storage"], ["Stress Management", "Daily — 10 min breathing/yoga/meditation", "Cortisol directly worsens insulin resistance and disrupts menstrual cycles in PCOS"], ["Daily Steps", "7,000–10,000 steps on rest days", "Non-exercise activity (NEAT) contributes significantly to calorie burn"], ["Hydration", "2.5–3 L water/day", "Reduces PCOS-associated bloating; aids detoxification; supports protein synthesis"], ["Alcohol", "Avoid or limit to ≤1 unit/week", "Alcohol disrupts liver function which impairs hormone clearance in PCOS"], ["Menstrual Tracking", "Use an app (e.g. Clue, Flo)", "Track energy levels vs. cycle phases — adjust workout intensity accordingly"], ] life_t = Table(life_data, colWidths=[3.5*cm, 4.5*cm, 9.6*cm]) life_t.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), ORANGE), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_ORANG]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5), ("VALIGN",(0,0),(-1,-1),"TOP"), ])) story.append(life_t) story.append(Spacer(1, 8)) story.append(Paragraph("12-Week Progress Milestones to Expect", h2)) mile_data = [ [Paragraph("<b>Weeks</b>", centred), Paragraph("<b>Body Changes</b>", centred), Paragraph("<b>Performance Changes</b>", centred)], ["1–3", "2–3 kg weight loss (mostly water/glycogen), less bloating", "Getting familiar with form; mild soreness normal"], ["4–6", "0.5–1 kg fat loss/week begins; clothes feel looser", "Stronger on all exercises; reps feel easier"], ["7–9", "Visible muscle tone in arms and legs; skin may improve (PCOS)", "Can increase weight by 10–15%; better energy levels"], ["10–12", "5–8 kg total fat loss expected; significant muscle definition", "Full 3×12 at challenging weights; improved insulin markers"], ] mile_t = Table(mile_data, colWidths=[2.5*cm, 7.5*cm, 7.6*cm]) mile_t.setStyle(TableStyle([ ("BACKGROUND",(0,0),(-1,0), TEAL), ("TEXTCOLOR",(0,0),(-1,0), colors.white), ("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"), ("FONTSIZE",(0,0),(-1,-1),9), ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.white, LIGHT_TEAL]), ("GRID",(0,0),(-1,-1),0.3, MID_GREY), ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5), ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5), ("VALIGN",(0,0),(-1,-1),"MIDDLE"), ])) story.append(mile_t) # ── Final note ──────────────────────────────────────────────────────────────── story.append(Spacer(1, 14)) final_box_data = [[Paragraph( "<b>Final Note from Orris:</b> You have two conditions that require patience — PCOS and a disc bulge. " "Neither is a barrier to transformation. In fact, exercise is one of the most powerful treatments for both. " "Start lighter than you think you need to, focus relentlessly on form, and be consistent over perfect. " "The goal at 12 weeks is not just a number on the scale — it is improved hormones, better pain management, " "stronger muscles, and a sustainable habit. You have got this.", ParagraphStyle("Final", fontSize=10, leading=15, fontName="Helvetica", textColor=DARK, alignment=TA_JUSTIFY))]] final_tbl = Table(final_box_data, colWidths=["100%"]) final_tbl.setStyle(TableStyle([ ("BOX",(0,0),(-1,-1),1.5, PURPLE), ("BACKGROUND",(0,0),(-1,-1), LIGHT_PURP), ("TOPPADDING",(0,0),(-1,-1),12),("BOTTOMPADDING",(0,0),(-1,-1),12), ("LEFTPADDING",(0,0),(-1,-1),14),("RIGHTPADDING",(0,0),(-1,-1),14), ])) story.append(final_tbl) # ── Build ───────────────────────────────────────────────────────────────────── doc.build(story) print(f"PDF created: {OUTPUT}") PYEOF

Running Command

ls -lh /tmp/workspace/fitness-plan/

Your full personalised plan is ready. Download it here:

PCOS Fitness Nutrition Plan

PDF Document · PDF


Here is a full summary of everything in the PDF:

Your Profile at a Glance

ItemValue
Age29 years
Height / Weight150 cm / 80 kg
BMI35.6 (Obese Class II)
ConditionsPCOS + L4-S1 Disc Bulge
GoalFat Loss + Muscle Building

Calorie & Macros

  • BMR (Mifflin-St Jeor): ~1,432 kcal
  • TDEE (3x/week activity): ~1,968 kcal
  • Target intake (Phase 1): 1,500–1,600 kcal/day (~400-470 kcal deficit)
MacroAmountReason
Protein120–130 g/dayMuscle protection, blood sugar stability, PCOS
Carbs (low-GI only)130–150 g/dayManages insulin resistance
Fat45–55 g/dayHormone synthesis, anti-inflammation
Water2.5–3 L/dayReduces PCOS bloating

Workout Overview (3-Day Plan)

DaySessionDuration
MondayDay A - Upper Body + Core55–65 min
WednesdayDay B - Lower Body + Core55–65 min
Friday/SaturdayDay C - Full Body Circuit55–65 min
Every session includes:
  • 10-min warm-up (cat-cow, glute bridge, bird-dog, hip circles - all spine-safe)
  • Main workout (detailed below)
  • 8-10 min cool-down (knee-to-chest, child's pose, piriformis stretch, figure-4)

Workout Details

Day A - Upper Body: Seated Cable Row, Incline DB Press (30°), Lat Pulldown, Seated Shoulder Press, Bicep Curl, Tricep Pushdown, Dead Bug, Pallof Press + 10-min bike/elliptical
Day B - Lower Body (PCOS-critical for insulin sensitivity): Leg Press, Goblet Squat, Romanian Deadlift (light), Seated Leg Curl, Leg Extension, Calf Raise, Glute Bridge, Side-Lying Abduction, Plank + 10-min bike
Day C - Full Body Circuit (3 rounds): Goblet Squat → Cable Row → Step-Up → Shoulder Press → Hip Thrust → One-Arm Row → Dead Bug/Pallof → Cardio Burst (2 min)

Key Rules for Your Conditions

L4-S1 Disc Bulge:
  • No heavy barbell squats, deadlifts, or bent-over rows
  • No high-impact jumping or running
  • Warm up EXTRA long in cold weather (apply heat pack before training)
  • Stop any exercise causing leg tingling or radiating pain immediately
PCOS:
  • Resistance training is the best exercise for PCOS - it improves insulin sensitivity better than cardio alone (per a 2024 network meta-analysis in BMC Women's Health)
  • Do not go below 1,400 kcal - extreme restriction worsens hormonal disruption
  • Low-GI carbs only; avoid sugar spikes
  • Supplements to discuss with your doctor: Myo-Inositol (4g/day), Omega-3, Vitamin D3, Magnesium

Always get clearance from your doctor, gynaecologist, and physiotherapist before starting. Stop any exercise that causes sharp, worsening, or radiating pain in the leg.
This is a shared conversation. Sign in to Orris to start your own chat.