Meditation benefits
meditation mindfulness health benefits
meditation health benefits 2025 research evidence
| Domain | Key Benefit | Evidence Level |
|---|---|---|
| Stress/Anxiety | Significant reduction | High (multiple meta-analyses) |
| Depression | Reduced symptoms, prevents relapse | High |
| Brain structure | Amygdala/hippocampus changes | Emerging (2025 RCT) |
| Blood pressure | Modest but consistent reduction | Moderate-High |
| Sleep | Improved quality and onset | Moderate |
| Chronic pain | Reduced perception and suffering | Moderate |
| Workplace well-being | Burnout reduction, empathy | Moderate |
| Immune function | Possible enhancement | Low-Moderate |
Scientific step of meditation
meditation neuroscience brainwave stages mechanism
scientific steps stages of meditation brain neuroscience EEG 2024 2025
meditation EEG alpha theta default mode network physiological stages
https://meditation.mgh.harvard.edu
| Step | State | Dominant Waves | Key Brain Regions |
|---|---|---|---|
| 1. Baseline | Normal waking | Beta (13-30 Hz) | DMN active |
| 2. Anchoring | Attention directed | Beta → Alpha | PFC, ACC |
| 3. Relaxation | Calm alert | Alpha (8-12 Hz) | Amygdala quiets |
| 4. Absorption | Deep focus | Theta (4-8 Hz) | Thalamus, PFC-amygdala |
| 5a. Expert (FA) | Jhana/Deep states | Infraslow + Delta + Gamma | Whole brain |
| 5b. Expert (OM) | Open awareness | Gamma bursts | Distributed cortex |
| 6. Return | Post-meditation | Normalized, carry-over effects | Hippocampus, prefrontal |
Create a visual infographic of meditation brain stages
Scientific infographic titled "Meditation Brain Stages" showing 6 progressive stages of meditation with brain diagrams and brainwave patterns. Stage 1 - Baseline/Default Mode: Brain with active Default Mode Network highlighted in red, beta waves (13-30 Hz) shown as rapid jagged waves, label "Mind Wandering / Rumination" Stage 2 - Attention Anchoring (0-5 min): Brain with prefrontal cortex and anterior cingulate cortex glowing blue, beta waves transitioning to alpha, label "Focus Begins / DMN Quiets" Stage 3 - Relaxation Response (5-10 min): Brain with amygdala dimming, insula lighting up, smooth alpha waves (8-12 Hz), label "Calm Alertness / Cortisol Drops" Stage 4 - Focused Absorption (10-20 min): Brain with thalamus highlighted, theta waves (4-8 Hz) in frontal midline, label "Deep Focus / Self-Talk Fades" Stage 5 - Deep Meditative State (Advanced): Brain with whole-brain gamma bursts shown as fast high-amplitude waves (30-100 Hz) plus delta, label "Expert State / Jhana / Neural Integration" Stage 6 - Return & Integration: Brain returning to calm state with glowing prefrontal-limbic connections, smooth normalized waves, label "Carry-Over Effects / Neuroplasticity" Include a brainwave legend at the bottom showing Beta, Alpha, Theta, Delta, Gamma wave shapes. Color scheme: dark navy blue background, glowing neon colors for brain regions (red=DMN, blue=PFC, green=amygdala, purple=thalamus, gold=gamma), clean modern scientific style, white text labels.

| Stage | Time | Brainwave | Key Event |
|---|---|---|---|
| 1. Baseline | Pre-meditation | Beta (13-30 Hz) | DMN active, mind wandering |
| 2. Anchoring | 0-5 min | Beta → Alpha | PFC takes control, focus begins |
| 3. Relaxation | 5-10 min | Alpha (8-12 Hz) | Cortisol drops, amygdala quiets |
| 4. Absorption | 10-20 min | Theta (4-8 Hz) | Deep focus, self-talk fades |
| 5. Deep State | Advanced practitioners | Gamma + Delta | Jhana, full neural integration |
| 6. Return | Post-session | Normalized | Carry-over neuroplasticity effects |
Make a PDF quick-reference guide for meditation beginners
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"
mkdir -p /home/daytona/workspace/meditation-guide
~/meditation-guide/build_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Flowable
import math
OUTPUT = "/home/daytona/workspace/meditation-guide/Meditation_Beginners_Guide.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1A2B4A")
TEAL = colors.HexColor("#2BBFBF")
SOFT_TEAL = colors.HexColor("#E8F8F8")
GOLD = colors.HexColor("#F5A623")
LAVENDER = colors.HexColor("#9B7FD4")
LIGHT_LAV = colors.HexColor("#F3EFFD")
GREEN = colors.HexColor("#4CAF82")
LIGHT_GRN = colors.HexColor("#EAF6F0")
ORANGE = colors.HexColor("#E87035")
LIGHT_ORG = colors.HexColor("#FDF0E8")
WHITE = colors.white
LIGHT_GRAY= colors.HexColor("#F7F7F7")
MID_GRAY = colors.HexColor("#CCCCCC")
DARK_GRAY = colors.HexColor("#444444")
# ── Custom Flowable: wave divider ────────────────────────────────────────────
class WaveDivider(Flowable):
def __init__(self, width, color=TEAL, height=8):
Flowable.__init__(self)
self.wave_width = width
self.wave_color = color
self.wave_height = height
def draw(self):
self.canv.setStrokeColor(self.wave_color)
self.canv.setLineWidth(2)
p = self.canv.beginPath()
segments = 12
seg_w = self.wave_width / segments
p.moveTo(0, self.wave_height / 2)
for i in range(segments):
x1 = i * seg_w + seg_w / 3
y1 = self.wave_height if i % 2 == 0 else 0
x2 = i * seg_w + 2 * seg_w / 3
y2 = self.wave_height if i % 2 == 0 else 0
x3 = (i + 1) * seg_w
y3 = self.wave_height / 2
p.curveTo(x1, y1, x2, y2, x3, y3)
self.canv.drawPath(p)
def wrap(self, *args):
return (self.wave_width, self.wave_height + 4)
# ── Custom Flowable: stage card row ─────────────────────────────────────────
class StageCard(Flowable):
"""A coloured numbered card with title, time, brainwave, and description."""
def __init__(self, number, title, time_label, brainwave, description,
bg_color, accent_color, width=None):
Flowable.__init__(self)
self.number = number
self.title = title
self.time_label = time_label
self.brainwave = brainwave
self.description = description
self.bg_color = bg_color
self.accent_color = accent_color
self._width = width or (A4[0] - 3.5*cm)
self._height = 2.4 * cm
def wrap(self, *args):
return (self._width, self._height)
def draw(self):
c = self.canv
w, h = self._width, self._height
r = 8 # corner radius
# Background
c.setFillColor(self.bg_color)
c.roundRect(0, 0, w, h, r, stroke=0, fill=1)
# Left accent strip
c.setFillColor(self.accent_color)
c.roundRect(0, 0, 0.55*cm, h, r, stroke=0, fill=1)
c.rect(0.3*cm, 0, 0.25*cm, h, stroke=0, fill=1)
# Stage number circle
c.setFillColor(self.accent_color)
cx, cy = 1.15*cm, h/2
c.circle(cx, cy, 0.38*cm, stroke=0, fill=1)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 13)
c.drawCentredString(cx, cy - 0.14*cm, str(self.number))
# Title
c.setFillColor(NAVY)
c.setFont("Helvetica-Bold", 10)
c.drawString(1.85*cm, h - 0.72*cm, self.title)
# Time badge
badge_x = 1.85*cm
badge_y = h - 1.28*cm
c.setFillColor(self.accent_color)
c.setFont("Helvetica", 7.5)
label = f" {self.time_label} "
badge_w = c.stringWidth(label, "Helvetica", 7.5) + 4
c.roundRect(badge_x, badge_y - 0.05*cm, badge_w, 0.38*cm, 3, stroke=0, fill=1)
c.setFillColor(WHITE)
c.drawString(badge_x + 2, badge_y, label.strip())
# Brainwave badge
bw_x = badge_x + badge_w + 0.2*cm
c.setFillColor(NAVY)
bw_label = f" {self.brainwave} "
bw_w = c.stringWidth(bw_label, "Helvetica", 7.5) + 4
c.roundRect(bw_x, badge_y - 0.05*cm, bw_w, 0.38*cm, 3, stroke=0, fill=1)
c.setFillColor(WHITE)
c.drawString(bw_x + 2, badge_y, bw_label.strip())
# Description
c.setFillColor(DARK_GRAY)
c.setFont("Helvetica", 8.5)
# Clip long descriptions
max_w = w - 2.0*cm
desc = self.description
while c.stringWidth(desc, "Helvetica", 8.5) > max_w and len(desc) > 10:
desc = desc[:-4] + "..."
c.drawString(1.85*cm, 0.35*cm, desc)
# ── Build styles ─────────────────────────────────────────────────────────────
def make_styles():
base = getSampleStyleSheet()
cover_title = ParagraphStyle(
"CoverTitle", parent=base["Title"],
fontSize=30, textColor=WHITE, alignment=TA_CENTER,
spaceAfter=6, leading=36
)
cover_sub = ParagraphStyle(
"CoverSub", parent=base["Normal"],
fontSize=13, textColor=colors.HexColor("#B0E0E0"),
alignment=TA_CENTER, spaceAfter=4
)
section_head = ParagraphStyle(
"SectionHead", parent=base["Heading1"],
fontSize=14, textColor=NAVY, fontName="Helvetica-Bold",
spaceBefore=14, spaceAfter=6, borderPad=0
)
sub_head = ParagraphStyle(
"SubHead", parent=base["Heading2"],
fontSize=11, textColor=TEAL, fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=4
)
body = ParagraphStyle(
"Body", parent=base["Normal"],
fontSize=9.5, textColor=DARK_GRAY, leading=15,
spaceAfter=4, alignment=TA_JUSTIFY
)
bullet = ParagraphStyle(
"Bullet", parent=base["Normal"],
fontSize=9.5, textColor=DARK_GRAY, leading=14,
leftIndent=14, bulletIndent=0, spaceAfter=2
)
tip_style = ParagraphStyle(
"Tip", parent=base["Normal"],
fontSize=9, textColor=NAVY, leading=14,
leftIndent=6, rightIndent=6
)
small = ParagraphStyle(
"Small", parent=base["Normal"],
fontSize=8, textColor=MID_GRAY, alignment=TA_CENTER
)
return dict(
cover_title=cover_title, cover_sub=cover_sub,
section_head=section_head, sub_head=sub_head,
body=body, bullet=bullet, tip_style=tip_style, small=small
)
# ── Cover page banner ────────────────────────────────────────────────────────
class CoverBanner(Flowable):
def __init__(self, width, height=5.5*cm):
Flowable.__init__(self)
self._width = width
self._height = height
def wrap(self, *args):
return (self._width, self._height)
def draw(self):
c = self.canv
w, h = self._width, self._height
# Gradient-like background using rectangles
steps = 30
for i in range(steps):
t = i / steps
r = int(26 + t * (43 - 26))
g = int(43 + t * (105 - 43))
b = int(74 + t * (74 - 74))
c.setFillColorRGB(r/255, g/255, b/255)
c.rect(0, h - (i+1)*h/steps, w, h/steps + 1, stroke=0, fill=1)
# Decorative concentric circles (top right)
c.setStrokeColor(colors.HexColor("#2BBFBF"))
c.setFillColor(colors.transparent)
c.setLineWidth(1.2)
for r_size in [1.2, 2.0, 2.8, 3.6]:
c.setStrokeAlpha(0.25)
c.circle(w - 1*cm, h, r_size*cm, stroke=1, fill=0)
c.setStrokeAlpha(1)
# "BEGINNER'S GUIDE" ribbon
c.setFillColor(GOLD)
c.roundRect(0.8*cm, 0.55*cm, 5.5*cm, 0.7*cm, 4, stroke=0, fill=1)
c.setFillColor(NAVY)
c.setFont("Helvetica-Bold", 9)
c.drawCentredString(3.55*cm, 0.82*cm, "BEGINNER'S QUICK-REFERENCE GUIDE")
# Emoji-style lotus symbol (text)
c.setFillColor(TEAL)
c.setFont("Helvetica-Bold", 28)
c.drawCentredString(w/2, h - 1.4*cm, "( )") # simplified lotus placeholder
# Title
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 30)
c.drawCentredString(w/2, h - 2.6*cm, "MEDITATION")
c.setFont("Helvetica", 16)
c.setFillColor(colors.HexColor("#B0E8E8"))
c.drawCentredString(w/2, h - 3.3*cm, "A Science-Based Starter Kit")
# Tagline
c.setFont("Helvetica-Oblique", 9.5)
c.setFillColor(colors.HexColor("#88CCCC"))
c.drawCentredString(w/2, h - 4.0*cm, "From beta brainwaves to inner calm - understand what happens")
c.drawCentredString(w/2, h - 4.5*cm, "inside your brain and body when you meditate.")
# ── Tip box ──────────────────────────────────────────────────────────────────
class TipBox(Flowable):
def __init__(self, text, icon="TIP", bg=SOFT_TEAL, accent=TEAL, width=None):
Flowable.__init__(self)
self.text = text
self.icon = icon
self.bg = bg
self.accent = accent
self._width = width or (A4[0] - 3.5*cm)
self._height = 1.6*cm
def wrap(self, *args):
return (self._width, self._height)
def draw(self):
c = self.canv
w, h = self._width, self._height
c.setFillColor(self.bg)
c.roundRect(0, 0, w, h, 6, stroke=0, fill=1)
c.setStrokeColor(self.accent)
c.setLineWidth(1.5)
c.roundRect(0, 0, w, h, 6, stroke=1, fill=0)
# Icon badge
c.setFillColor(self.accent)
c.roundRect(0.3*cm, h/2 - 0.28*cm, 1.0*cm, 0.56*cm, 4, stroke=0, fill=1)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 7)
c.drawCentredString(0.8*cm, h/2 - 0.1*cm, self.icon)
# Text
c.setFillColor(NAVY)
c.setFont("Helvetica", 8.8)
max_w = w - 1.8*cm
text = self.text
while c.stringWidth(text, "Helvetica", 8.8) > max_w and len(text) > 10:
text = text[:-4] + "..."
c.drawString(1.6*cm, h/2 - 0.13*cm, text)
# ── Main builder ─────────────────────────────────────────────────────────────
def build():
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.75*cm, rightMargin=1.75*cm,
topMargin=1.5*cm, bottomMargin=1.8*cm,
title="Meditation Beginner's Quick-Reference Guide",
author="Orris AI"
)
S = make_styles()
story = []
W = A4[0] - 3.5*cm # usable width
# ── COVER ────────────────────────────────────────────────────────────────
story.append(CoverBanner(W))
story.append(Spacer(1, 0.4*cm))
# Quick stats row
stats_data = [
[
Paragraph("<b>14%</b><br/>US adults meditate", ParagraphStyle("s", fontSize=8.5, alignment=TA_CENTER, textColor=NAVY)),
Paragraph("<b>8 weeks</b><br/>for measurable brain change", ParagraphStyle("s", fontSize=8.5, alignment=TA_CENTER, textColor=NAVY)),
Paragraph("<b>10-20 min</b><br/>ideal daily session", ParagraphStyle("s", fontSize=8.5, alignment=TA_CENTER, textColor=NAVY)),
Paragraph("<b>-23%</b><br/>cortisol reduction", ParagraphStyle("s", fontSize=8.5, alignment=TA_CENTER, textColor=NAVY)),
]
]
stats_table = Table(stats_data, colWidths=[W/4]*4)
stats_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, -1), SOFT_TEAL),
("BACKGROUND", (1, 0), (1, 0), LIGHT_LAV),
("BACKGROUND", (3, 0), (3, 0), LIGHT_GRN),
("BOX", (0, 0), (-1, -1), 1, TEAL),
("INNERGRID", (0, 0), (-1, -1), 0.5, MID_GRAY),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 8),
("BOTTOMPADDING", (0, 0), (-1, -1), 8),
("ROUNDEDCORNERS", [6]),
]))
story.append(stats_table)
story.append(Spacer(1, 0.5*cm))
# ── SECTION 1: What is Meditation? ───────────────────────────────────────
story.append(Paragraph("1. What Is Meditation?", S["section_head"]))
story.append(WaveDivider(W, TEAL))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
"Meditation is a <b>structured mental training practice</b> that involves directing attention "
"in a controlled way - to the breath, a sound, a body sensation, or open awareness. "
"It is not mystical; it produces measurable, repeatable changes in brain activity, "
"stress hormones, and nervous system function.",
S["body"]
))
story.append(Spacer(1, 0.15*cm))
story.append(TipBox(
"Science fact: Even a single 10-minute session lowers cortisol and shifts brainwaves toward calmer alpha frequencies.",
icon="FACT", bg=SOFT_TEAL, accent=TEAL, width=W
))
story.append(Spacer(1, 0.4*cm))
# ── SECTION 2: Brain Stages ───────────────────────────────────────────────
story.append(Paragraph("2. The 6 Scientific Stages of Meditation", S["section_head"]))
story.append(WaveDivider(W, LAVENDER))
story.append(Spacer(1, 0.25*cm))
story.append(Paragraph(
"Your brain moves through distinct, measurable states during meditation. "
"Here is what happens at each stage:",
S["body"]
))
story.append(Spacer(1, 0.2*cm))
stages = [
(1, "Baseline - Default Mode", "Pre-meditation", "Beta 13-30 Hz",
"Mind wandering, rumination, self-referential thinking. DMN fully active.",
SOFT_TEAL, TEAL),
(2, "Attention Anchoring", "0-5 min", "Beta to Alpha",
"Prefrontal cortex activates. You redirect attention. DMN begins to quiet.",
LIGHT_LAV, LAVENDER),
(3, "Relaxation Response", "5-10 min", "Alpha 8-12 Hz",
"Heart rate slows. Cortisol drops. Amygdala quiets. Parasympathetic takes over.",
LIGHT_GRN, GREEN),
(4, "Focused Absorption", "10-20 min", "Theta 4-8 Hz",
"Thalamus gates out noise. Deep focus. PFC-amygdala loop strengthens.",
LIGHT_ORG, ORANGE),
(5, "Deep State (Advanced)", "20+ min / expert","Delta + Gamma",
"Whole-brain gamma bursts. Expert state (jhana). Neural integration peaks.",
colors.HexColor("#EEE8FA"), LAVENDER),
(6, "Return & Integration", "Post-session", "Normalized",
"Carry-over calm. Serotonin & GABA elevated. Neuroplasticity window open.",
SOFT_TEAL, TEAL),
]
for args in stages:
story.append(StageCard(*args, width=W))
story.append(Spacer(1, 0.18*cm))
story.append(Spacer(1, 0.3*cm))
# ── SECTION 3: How to Start ───────────────────────────────────────────────
story.append(Paragraph("3. How to Start - Step by Step", S["section_head"]))
story.append(WaveDivider(W, GREEN))
story.append(Spacer(1, 0.2*cm))
steps_data = [
["Step", "Action", "Why It Helps"],
["1", "Choose a fixed time daily\n(morning recommended)", "Builds habit; cortisol is naturally higher in the morning"],
["2", "Sit comfortably upright\n(chair or floor, back straight)", "Prevents drowsiness; keeps airways open for diaphragmatic breathing"],
["3", "Set a timer for 10 min\n(build to 20 min over weeks)", "Removes clock-watching; reduces the urge to stop early"],
["4", "Close eyes, take 3 deep breaths", "Activates parasympathetic system immediately; signals brain to shift state"],
["5", "Focus on the breath sensation\nat the nostrils or belly", "Single anchor point trains prefrontal attention circuits"],
["6", "When distracted, gently return\n(no frustration needed)", "Each return is a 'mental rep' - this IS the practice, not a failure"],
["7", "End slowly - open eyes,\ntake 1 final breath", "Preserves the post-session carry-over effect; do not jump up immediately"],
]
steps_table = Table(steps_data, colWidths=[1.2*cm, 6.2*cm, W - 7.4*cm])
steps_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), NAVY),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [WHITE, LIGHT_GRAY]),
("FONTSIZE", (0, 1), (-1, -1), 8.5),
("FONTNAME", (0, 1), (0, -1), "Helvetica-Bold"),
("TEXTCOLOR", (0, 1), (0, -1), TEAL),
("ALIGN", (0, 0), (0, -1), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 6),
("BOTTOMPADDING", (0, 0), (-1, -1), 6),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("BOX", (0, 0), (-1, -1), 1, NAVY),
("INNERGRID", (0, 0), (-1, -1), 0.4, MID_GRAY),
]))
story.append(steps_table)
story.append(Spacer(1, 0.4*cm))
# ── SECTION 4: Types of Meditation ───────────────────────────────────────
story.append(Paragraph("4. Common Meditation Types for Beginners", S["section_head"]))
story.append(WaveDivider(W, ORANGE))
story.append(Spacer(1, 0.2*cm))
types_data = [
["Type", "Method", "Best For"],
["Focused Attention\n(FA)", "Single anchor - breath, sound, or mantra.", "Building concentration; first 0-100 hours"],
["Body Scan", "Slow attention sweep from toes to head.", "Stress relief; body awareness; sleep"],
["Loving-Kindness\n(Metta)", "Mentally wish well-being to self, then others.", "Anxiety; social stress; compassion building"],
["Open Monitoring\n(OM)", "Observe all thoughts/sensations without attachment.", "Experienced beginners (after 4+ weeks of FA)"],
["MBSR Program", "8-week structured mindfulness course (Kabat-Zinn).", "Chronic stress, pain, depression relapse prevention"],
]
types_table = Table(types_data, colWidths=[3.0*cm, 7.5*cm, W - 10.5*cm])
types_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), ORANGE),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [WHITE, LIGHT_ORG]),
("FONTSIZE", (0, 1), (-1, -1), 8.5),
("FONTNAME", (0, 1), (0, -1), "Helvetica-Bold"),
("TEXTCOLOR", (0, 1), (0, -1), ORANGE),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 6),
("BOTTOMPADDING", (0, 0), (-1, -1), 6),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("BOX", (0, 0), (-1, -1), 1, ORANGE),
("INNERGRID", (0, 0), (-1, -1), 0.4, MID_GRAY),
]))
story.append(types_table)
story.append(Spacer(1, 0.4*cm))
# ── SECTION 5: Common Obstacles ──────────────────────────────────────────
story.append(Paragraph("5. Common Obstacles & Solutions", S["section_head"]))
story.append(WaveDivider(W, GOLD))
story.append(Spacer(1, 0.2*cm))
obstacles = [
("My mind won't stop", "Normal - a busy mind is not a failed meditation. The practice IS noticing and returning."),
("I fall asleep", "Sit upright; meditate after movement; open eyes slightly; try morning sessions."),
("I don't have time", "10 minutes = 0.7% of your day. Start with 5 minutes right after waking."),
("I feel restless / anxious", "Try a body scan first, or very short 3-min sessions. Build duration gradually."),
("I don't know if I'm doing it right", "There is no 'perfect'. Any moment of noticing the breath is correct meditation."),
("Nothing seems to happen", "Effects are cumulative. Measurable brain changes appear after 8 weeks of daily practice."),
]
ob_rows = [[
Paragraph(f"<b>{ob[0]}</b>", ParagraphStyle("ob", fontSize=8.8, textColor=NAVY)),
Paragraph(ob[1], ParagraphStyle("obs", fontSize=8.5, textColor=DARK_GRAY, leading=13))
] for ob in obstacles]
ob_table = Table(ob_rows, colWidths=[4.5*cm, W - 4.5*cm])
ob_table.setStyle(TableStyle([
("ROWBACKGROUNDS", (0, 0), (-1, -1), [LIGHT_GRAY, WHITE]),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 7),
("BOTTOMPADDING", (0, 0), (-1, -1), 7),
("LEFTPADDING", (0, 0), (-1, -1), 8),
("BOX", (0, 0), (-1, -1), 1, GOLD),
("INNERGRID", (0, 0), (-1, -1), 0.4, MID_GRAY),
("LINEAFTER", (0, 0), (0, -1), 1.5, GOLD),
]))
story.append(ob_table)
story.append(Spacer(1, 0.4*cm))
# ── SECTION 6: Progress Timeline ─────────────────────────────────────────
story.append(Paragraph("6. What to Expect - Progress Timeline", S["section_head"]))
story.append(WaveDivider(W, LAVENDER))
story.append(Spacer(1, 0.2*cm))
timeline_data = [
["Week", "What You May Notice", "What Is Happening in the Brain"],
["1-2", "Restlessness; frequent distraction; occasional calm moments", "PFC begins strengthening; first alpha wave increases appear"],
["3-4", "Easier to settle; slightly reduced daily stress", "Amygdala reactivity decreasing; cortisol patterns shifting"],
["5-6", "Noticeably calmer between sessions; better sleep", "Prefrontal-limbic connections thickening; GABA levels rising"],
["7-8", "Mood stabilizes; improved focus at work or study", "Measurable gray matter change in insula and PFC (8-week mark)"],
["3-6 mo", "Meditation feels natural; easier emotional regulation", "Hippocampal volume increase; cortical thinning slows"],
["1+ yr", "Spontaneous mindful awareness throughout the day", "Structural neuroplasticity; trait-level change vs. just state"],
]
tl_table = Table(timeline_data, colWidths=[1.5*cm, 6.5*cm, W - 8.0*cm])
tl_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), LAVENDER),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [WHITE, LIGHT_LAV]),
("FONTSIZE", (0, 1), (-1, -1), 8.2),
("FONTNAME", (0, 1), (0, -1), "Helvetica-Bold"),
("TEXTCOLOR", (0, 1), (0, -1), LAVENDER),
("ALIGN", (0, 0), (0, -1), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("BOX", (0, 0), (-1, -1), 1, LAVENDER),
("INNERGRID", (0, 0), (-1, -1), 0.4, MID_GRAY),
]))
story.append(tl_table)
story.append(Spacer(1, 0.4*cm))
# ── SECTION 7: Brainwave Reference ───────────────────────────────────────
story.append(Paragraph("7. Quick Brainwave Reference", S["section_head"]))
story.append(WaveDivider(W, TEAL))
story.append(Spacer(1, 0.2*cm))
bw_data = [
["Wave", "Frequency", "State", "In Meditation"],
["Beta", "13-30 Hz", "Active thinking, stress, analysis", "Dominant at start; decreases as you settle"],
["Alpha", "8-12 Hz", "Calm alertness, relaxed wakefulness", "First sign of progress; peaks at Stage 3"],
["Theta", "4-8 Hz", "Deep relaxation, creativity, drowsy", "Stage 4 focused absorption; frontal midline"],
["Delta", "0.5-4 Hz", "Deep sleep; rare in waking states", "Advanced meditators in deep absorption"],
["Gamma", "30-100 Hz","High-level processing, insight, binding", "Surges in expert meditators; associated with clarity"],
]
bw_col_colors = [TEAL, GREEN, LAVENDER, ORANGE, NAVY]
bw_table = Table(bw_data, colWidths=[2.0*cm, 2.5*cm, 5.5*cm, W - 10.0*cm])
style_cmds = [
("BACKGROUND", (0, 0), (-1, 0), NAVY),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("FONTSIZE", (0, 1), (-1, -1), 8.5),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 6),
("BOTTOMPADDING", (0, 0), (-1, -1), 6),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("BOX", (0, 0), (-1, -1), 1, NAVY),
("INNERGRID", (0, 0), (-1, -1), 0.4, MID_GRAY),
]
for i, col in enumerate(bw_col_colors):
style_cmds.append(("BACKGROUND", (0, i+1), (0, i+1), col))
style_cmds.append(("TEXTCOLOR", (0, i+1), (0, i+1), WHITE))
style_cmds.append(("FONTNAME", (0, i+1), (0, i+1), "Helvetica-Bold"))
bw_table.setStyle(TableStyle(style_cmds))
story.append(bw_table)
story.append(Spacer(1, 0.4*cm))
# ── SECTION 8: Safety Note ────────────────────────────────────────────────
story.append(TipBox(
"SAFETY: ~13% of meditators report adverse experiences (Harvard, 2025). If you have trauma history, psychosis risk, or severe anxiety, consult a clinician before intensive practice.",
icon="!", bg=colors.HexColor("#FFF3E0"), accent=ORANGE, width=W
))
story.append(Spacer(1, 0.3*cm))
# ── Footer ────────────────────────────────────────────────────────────────
story.append(HRFlowable(width=W, thickness=1, color=MID_GRAY))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
"Sources: Kim et al. (2022) Int J Environ Res Public Health | Maher et al. (2025) PNAS | "
"Baten et al. (2026) Neurosci Biobehav Rev | Harvard MGH Meditation Research Program | "
"Angelopoulou & Panagopoulou (2022) Appl Psychol Health Well Being",
S["small"]
))
story.append(Paragraph(
"Created by Orris AI - July 2026 | For educational purposes only. Not a substitute for medical advice.",
S["small"]
))
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
build()
cd /home/daytona/workspace/meditation-guide && python build_pdf.py 2>&1
ls -lh /home/daytona/workspace/meditation-guide/Meditation_Beginners_Guide.pdf
Meditation Beginners Guide
PDF Document · PDF
| Section | Content |
|---|---|
| Cover | Styled header with 4 key stats (adoption rate, time to brain change, session length, cortisol reduction) |
| Section 1 | What is meditation - science-based definition |
| Section 2 | All 6 brain stages as colour-coded cards (with time, Hz, and key events) |
| Section 3 | 7-step "how to start" table with the neuroscience reason for each step |
| Section 4 | 5 meditation types (FA, Body Scan, Loving-Kindness, Open Monitoring, MBSR) with beginner guidance |
| Section 5 | 6 common obstacles and practical solutions |
| Section 6 | Week-by-week progress timeline from Week 1 to 1+ year, with brain changes |
| Section 7 | Brainwave quick-reference table (Beta, Alpha, Theta, Delta, Gamma) |
| Safety note | Harvard 2025 finding on adverse experiences in 13% of practitioners |
| Footer | All peer-reviewed sources cited |