Kindly create a Study plan for me for Biochemistry Exam which is held on the 5 June 2026 in the morning 8am. I have just this time from this time means 11pm and the next whole day for the revision of the syllabus There are following chapter of the Biochemistry Chapters follow 1. Basic Biochemistry 2.Carbohydrates (Basic Chemistry of Biomolecules) 3.Lipids 4.Proteins and Amino Acids 5.Nucleic Acids (imp) 6.Vitamins (imp) 7.Hormones (imp) 8.Enzymes (Michael Menten Equation) (imp) 9.Metabolic Fate of Carbohydrates (imp) 10.Metabolic Fate of Lipids (imp) 11.Metabolic Fate of Proteins and Amino Acids (imp) 12.Bioenergetics (imp) 13.Gene Expression (imp) 14.Introduction to Clinical Chemistry At the end create a Pdf format file
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
~/study-plan/generate_study_plan.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import PageBreak
# ── Output path ────────────────────────────────────────────────────────────────
OUTPUT = "/home/daytona/workspace/study-plan/Biochemistry_Study_Plan.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=1.8*cm, bottomMargin=1.8*cm,
title="Biochemistry Exam Study Plan",
author="Orris AI"
)
W, H = A4
styles = getSampleStyleSheet()
# ── Custom styles ──────────────────────────────────────────────────────────────
def S(name, **kw):
s = ParagraphStyle(name, **kw)
return s
TITLE = S("TITLE",
fontName="Helvetica-Bold", fontSize=22, textColor=colors.HexColor("#1a237e"),
alignment=TA_CENTER, spaceAfter=4)
SUBTITLE = S("SUBTITLE",
fontName="Helvetica", fontSize=11, textColor=colors.HexColor("#3949ab"),
alignment=TA_CENTER, spaceAfter=2)
EXAM_ALERT = S("EXAM_ALERT",
fontName="Helvetica-Bold", fontSize=10, textColor=colors.HexColor("#b71c1c"),
alignment=TA_CENTER, spaceAfter=6)
SEC_HEAD = S("SEC_HEAD",
fontName="Helvetica-Bold", fontSize=13, textColor=colors.HexColor("#1a237e"),
spaceBefore=12, spaceAfter=4)
SUB_HEAD = S("SUB_HEAD",
fontName="Helvetica-Bold", fontSize=10, textColor=colors.HexColor("#37474f"),
spaceBefore=6, spaceAfter=2)
BODY = S("BODY",
fontName="Helvetica", fontSize=9, textColor=colors.HexColor("#212121"),
spaceAfter=2, leading=13)
BULLET = S("BULLET",
fontName="Helvetica", fontSize=9, textColor=colors.HexColor("#212121"),
leftIndent=14, spaceAfter=2, leading=13)
FOOTER_STYLE = S("FOOTER",
fontName="Helvetica-Oblique", fontSize=8, textColor=colors.HexColor("#9e9e9e"),
alignment=TA_CENTER)
TIP = S("TIP",
fontName="Helvetica-Oblique", fontSize=8.5, textColor=colors.HexColor("#1b5e20"),
leftIndent=8, spaceAfter=2, leading=12)
# ── Colour palette ─────────────────────────────────────────────────────────────
C_HEADER = colors.HexColor("#1a237e") # deep indigo
C_ALT1 = colors.HexColor("#e8eaf6") # light indigo tint
C_ALT2 = colors.white
C_IMP = colors.HexColor("#fff3e0") # amber tint (important chapters)
C_IMP_TXT = colors.HexColor("#e65100") # amber text
C_BREAK = colors.HexColor("#fce4ec") # pink tint (break rows)
C_SLEEP = colors.HexColor("#e3f2fd") # blue tint (sleep rows)
C_BORDER = colors.HexColor("#9fa8da") # indigo border
# ═══════════════════════════════════════════════════════════════════════════════
# SCHEDULE DATA
# ═══════════════════════════════════════════════════════════════════════════════
#
# Available window:
# Night 1 : 11:00 PM Wed 3 June → ~2:00 AM Thu 4 June (3 hrs study)
# Sleep : 02:00 AM → 07:00 AM (5 hrs)
# Day : 07:00 AM Thu 4 June → 10:00 PM Thu 4 June (main revision)
# Sleep : 10:00 PM → 05:30 AM Fri 5 June (~7.5 hrs)
# Morning : 05:30 AM → 07:30 AM Fri 5 June (final review / get ready)
# EXAM : 08:00 AM Fri 5 June
#
# 14 chapters assigned as below
# imp chapters get 1.5-2 hrs, normal get 40-60 min
night1 = [
("11:00 PM – 11:10 PM", "Orientation & Planning",
"Skim all chapter headings, gather notes/textbook. Prioritise IMP chapters.", "", C_ALT1),
("11:10 PM – 12:10 AM", "Ch 1: Basic Biochemistry",
"Water, pH, buffers, functional groups, bonds. Cover all definitions.", "", C_ALT2),
("12:10 AM – 12:50 AM", "Ch 2: Carbohydrates (Basic Chemistry of Biomolecules)",
"Monosaccharides, disaccharides, polysaccharides. Anomers, epimers, glycosidic bonds.", "", C_ALT1),
("12:50 AM – 01:00 AM", "SHORT BREAK", "Hydrate. Step away from the desk.", "", C_BREAK),
("01:00 AM – 01:40 AM", "Ch 3: Lipids",
"Fatty acids (sat vs unsat), triglycerides, phospholipids, sterols, waxes.", "", C_ALT2),
("01:40 AM – 02:00 AM", "Ch 14: Introduction to Clinical Chemistry",
"Specimen types, reference ranges, enzyme markers (AST, ALT, ALP, LDH). Quick overview.", "", C_ALT1),
("02:00 AM – 07:00 AM", "SLEEP (5 hours)",
"Non-negotiable. Sleep consolidates memory. Set alarm for 07:00 AM.", "", C_SLEEP),
]
day = [
("07:00 AM – 07:20 AM", "Morning Routine + Light Breakfast",
"Eat well (glucose fuels the brain!). Review yesterday's quick notes.", "", C_BREAK),
("07:20 AM – 09:00 AM", "Ch 4: Proteins and Amino Acids",
"20 amino acids (structures/properties), peptide bonds, protein levels (1°-4°), fibrous vs globular. "
"Hb/Mb structure.", "", C_ALT2),
("09:00 AM – 10:30 AM", "Ch 5: Nucleic Acids ★ IMP",
"DNA vs RNA structure, Watson-Crick base pairing, A/B/Z-DNA forms, "
"replication (semi-conservative), DNA polymerase.", "", C_IMP),
("10:30 AM – 10:45 AM", "BREAK", "Snack + short walk.", "", C_BREAK),
("10:45 AM – 12:15 PM", "Ch 8: Enzymes (Michaelis-Menten) ★ IMP",
"Enzyme kinetics: Km, Vmax, kcat. Lineweaver-Burk plot. "
"Competitive vs non-competitive vs uncompetitive inhibition. "
"Allosteric enzymes, coenzymes, cofactors.", "", C_IMP),
("12:15 PM – 01:15 PM", "Ch 6: Vitamins ★ IMP",
"Fat-soluble (A, D, E, K) — functions, deficiency diseases. "
"Water-soluble (B-complex, C) — coenzyme roles, deficiencies "
"(Beriberi, Pellagra, Scurvy, Rickets, Night blindness).", "", C_IMP),
("01:15 PM – 01:45 PM", "LUNCH BREAK", "Eat a proper meal. Rest eyes. No screen.", "", C_BREAK),
("01:45 PM – 03:15 PM", "Ch 9: Metabolic Fate of Carbohydrates ★ IMP",
"Glycolysis (10 steps, key enzymes, ATP yield). TCA cycle (8 steps). "
"Glycogen synthesis/breakdown. Gluconeogenesis key steps. "
"Pentose phosphate pathway (NADPH, ribose-5P).", "", C_IMP),
("03:15 PM – 04:45 PM", "Ch 12: Bioenergetics ★ IMP",
"ETC (Complex I-IV), oxidative phosphorylation, chemiosmosis (Mitchell), "
"ATP synthase, P:O ratios, uncouplers (DNP, thermogenin). "
"Total ATP from glucose (net 30-32 ATP).", "", C_IMP),
("04:45 PM – 05:00 PM", "BREAK", "Hydrate. Light stretching.", "", C_BREAK),
("05:00 PM – 06:30 PM", "Ch 10: Metabolic Fate of Lipids ★ IMP",
"Beta-oxidation (steps, ATP yield of palmitate). "
"Fatty acid synthesis (acetyl-CoA carboxylase, FAS). "
"Ketone bodies (formation, use). Lipoprotein metabolism (VLDL, LDL, HDL).", "", C_IMP),
("06:30 PM – 07:30 PM", "Ch 7: Hormones ★ IMP",
"Peptide vs steroid hormones. Insulin/glucagon axis. "
"Thyroid hormones (T3/T4). Adrenaline, cortisol actions. "
"Second messengers (cAMP, IP3/DAG, Ca2+).", "", C_IMP),
("07:30 PM – 07:45 PM", "BREAK", "Dinner / light snack.", "", C_BREAK),
("07:45 PM – 09:00 PM", "Ch 11: Metabolic Fate of Proteins & Amino Acids ★ IMP",
"Transamination (ALT/AST), deamination. Urea cycle (6 steps, organs). "
"Amino acid catabolism fates (glucogenic vs ketogenic). "
"PKU, maple syrup urine disease, albinism.", "", C_IMP),
("09:00 PM – 09:30 PM", "Ch 13: Gene Expression ★ IMP",
"Transcription (RNA pol, promoter, enhancer). "
"Translation (ribosomes, tRNA charging, initiation-elongation-termination). "
"Lac operon (inducible). Post-translational modification.", "", C_IMP),
("09:30 PM – 10:00 PM", "RAPID REVISION SESSION",
"Flip through all hand-written key-point summaries. Focus on reaction equations, "
"yield values, and named diseases.", "", C_ALT1),
("10:00 PM – 05:30 AM", "SLEEP (7.5 hours) — MANDATORY",
"Best performance comes from adequate rest. "
"Sleeping now cements today's learning into long-term memory.", "", C_SLEEP),
]
exam_morning = [
("05:30 AM – 06:00 AM", "Wake up + Freshen up", "Light breakfast. No heavy studying.", "", C_BREAK),
("06:00 AM – 07:00 AM", "Final Flash Review",
"Glance at: Km/Vmax formulas, ATP yields, Urea cycle diagram, "
"Vitamin deficiency table, ETC complexes.", "", C_ALT1),
("07:00 AM – 07:30 AM", "Travel / Arrive at Exam Hall",
"Arrive early. Breathe. No new material — trust your preparation.", "", C_BREAK),
("08:00 AM", "✦ BIOCHEMISTRY EXAM ✦",
"You are ready. Attempt all questions. Show working where needed.", "", colors.HexColor("#e8f5e9")),
]
# ═══════════════════════════════════════════════════════════════════════════════
# HELPER: build a schedule table
# ═══════════════════════════════════════════════════════════════════════════════
def build_schedule_table(rows, col_widths=None):
if col_widths is None:
col_widths = [3.8*cm, 5.5*cm, 8.4*cm]
table_data = [
[
Paragraph("<b>Time</b>", S("h", fontName="Helvetica-Bold", fontSize=9,
textColor=colors.white, alignment=TA_CENTER)),
Paragraph("<b>Topic / Session</b>", S("h2", fontName="Helvetica-Bold", fontSize=9,
textColor=colors.white, alignment=TA_CENTER)),
Paragraph("<b>Key Focus Points</b>", S("h3", fontName="Helvetica-Bold", fontSize=9,
textColor=colors.white, alignment=TA_CENTER)),
]
]
styles_map = []
for i, (time, topic, details, _, row_color) in enumerate(rows):
is_imp = "★ IMP" in topic
is_break = row_color in (C_BREAK,)
is_sleep = row_color == C_SLEEP
t_style = S(f"tc{i}", fontName="Helvetica-Bold" if is_imp or is_sleep else "Helvetica",
fontSize=8.5,
textColor=C_IMP_TXT if is_imp else (
colors.HexColor("#0d47a1") if is_sleep else colors.HexColor("#212121")),
alignment=TA_CENTER)
top_style = S(f"tp{i}", fontName="Helvetica-Bold" if is_imp else "Helvetica",
fontSize=8.5,
textColor=C_IMP_TXT if is_imp else (
colors.HexColor("#0d47a1") if is_sleep else colors.HexColor("#37474f")))
det_style = S(f"dp{i}", fontName="Helvetica" if not is_imp else "Helvetica-Oblique",
fontSize=8,
textColor=colors.HexColor("#4e342e") if is_imp else colors.HexColor("#424242"),
leading=11)
table_data.append([
Paragraph(time, t_style),
Paragraph(topic, top_style),
Paragraph(details, det_style),
])
styles_map.append((i + 1, row_color)) # +1 for header offset
ts = TableStyle([
# Header
("BACKGROUND", (0, 0), (-1, 0), C_HEADER),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("ALIGN", (0, 0), (-1, 0), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("ROWBACKGROUND", (0, 0), (-1, 0), C_HEADER),
# Grid
("GRID", (0, 0), (-1, -1), 0.4, C_BORDER),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("RIGHTPADDING", (0, 0), (-1, -1), 6),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING",(0, 0), (-1, -1), 5),
])
for (row_idx, row_color) in styles_map:
ts.add("BACKGROUND", (0, row_idx), (-1, row_idx), row_color)
t = Table(table_data, colWidths=col_widths, repeatRows=1)
t.setStyle(ts)
return t
# ═══════════════════════════════════════════════════════════════════════════════
# CHAPTER OVERVIEW TABLE
# ═══════════════════════════════════════════════════════════════════════════════
chapter_data = [
["#", "Chapter", "Priority", "Time Slot", "Marks Focus"],
["1", "Basic Biochemistry", "Normal", "Night 1 / 11:10 PM", "Definitions, bonds, pH"],
["2", "Carbohydrates (Basic Chemistry)", "Normal", "Night 1 / 12:10 AM", "Structures, isomers"],
["3", "Lipids", "Normal", "Night 1 / 01:00 AM", "Classes, fatty acids"],
["4", "Proteins & Amino Acids", "Normal", "Day / 07:20 AM", "AA properties, protein levels"],
["5", "Nucleic Acids", "★ HIGH", "Day / 09:00 AM", "DNA/RNA, replication"],
["6", "Vitamins", "★ HIGH", "Day / 12:15 PM", "Functions & deficiencies"],
["7", "Hormones", "★ HIGH", "Day / 06:30 PM", "Mechanisms, 2nd messengers"],
["8", "Enzymes (Michaelis-Menten)", "★ HIGH", "Day / 10:45 AM", "Km, Vmax, inhibition types"],
["9", "Metabolic Fate of Carbohydrates", "★ HIGH", "Day / 01:45 PM", "Glycolysis, TCA, ATP yield"],
["10", "Metabolic Fate of Lipids", "★ HIGH", "Day / 05:00 PM", "β-oxidation, ketones"],
["11", "Metabolic Fate of Proteins & AA", "★ HIGH", "Day / 07:45 PM", "Urea cycle, transamination"],
["12", "Bioenergetics", "★ HIGH", "Day / 03:15 PM", "ETC, ATP synthesis"],
["13", "Gene Expression", "★ HIGH", "Day / 09:00 PM", "Transcription, translation"],
["14", "Introduction to Clinical Chemistry","Normal", "Night 1 / 01:40 AM", "Markers, specimen types"],
]
def build_chapter_table():
col_w = [0.8*cm, 5.8*cm, 1.8*cm, 3.5*cm, 5.0*cm]
hdr_s = S("ch", fontName="Helvetica-Bold", fontSize=8.5, textColor=colors.white, alignment=TA_CENTER)
def cell(text, bold=False, color="#212121", center=False):
return Paragraph(text, S("c", fontName="Helvetica-Bold" if bold else "Helvetica",
fontSize=8, textColor=colors.HexColor(color),
alignment=TA_CENTER if center else TA_LEFT, leading=11))
tdata = [[Paragraph(h, hdr_s) for h in chapter_data[0]]]
for i, row in enumerate(chapter_data[1:]):
num, ch, pri, slot, focus = row
is_imp = "★" in pri
bg = C_IMP if is_imp else (C_ALT1 if i % 2 == 0 else C_ALT2)
tdata.append([
cell(num, center=True),
cell(ch, bold=is_imp, color="#e65100" if is_imp else "#212121"),
cell(pri, bold=is_imp, color="#e65100" if is_imp else "#37474f", center=True),
cell(slot, color="#1565c0"),
cell(focus),
])
ts = TableStyle([
("BACKGROUND", (0, 0), (-1, 0), C_HEADER),
("GRID", (0, 0), (-1, -1), 0.4, C_BORDER),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("LEFTPADDING", (0, 0), (-1, -1), 5),
("RIGHTPADDING", (0, 0), (-1, -1), 5),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING",(0, 0), (-1, -1), 4),
])
for i, row in enumerate(chapter_data[1:]):
is_imp = "★" in row[2]
bg = C_IMP if is_imp else (C_ALT1 if i % 2 == 0 else C_ALT2)
ts.add("BACKGROUND", (0, i+1), (-1, i+1), bg)
t = Table(tdata, colWidths=col_w)
t.setStyle(ts)
return t
# ═══════════════════════════════════════════════════════════════════════════════
# KEY FORMULAS BOX
# ═══════════════════════════════════════════════════════════════════════════════
def formula_box():
lines = [
("Michaelis-Menten Equation:", "v = (Vmax × [S]) / (Km + [S])"),
("Lineweaver-Burk (double reciprocal):", "1/v = (Km/Vmax) × (1/[S]) + 1/Vmax"),
("Henderson-Hasselbalch:", "pH = pKa + log([A⁻]/[HA])"),
("ATP yield — Glucose (aerobic):", "Net ≈ 30–32 ATP (NADH→2.5, FADH₂→1.5 ATP)"),
("Palmitate β-oxidation net ATP:", "106 ATP (8 acetyl-CoA → 8×10 = 80 + 28 from β-ox steps)"),
("Urea cycle net:", "1 NH₃ + 1 CO₂ + 1 Aspartate → Urea (costs 3 ATP equiv)"),
]
data = []
for label, val in lines:
data.append([
Paragraph(label, S("fl", fontName="Helvetica-Bold", fontSize=8.5,
textColor=colors.HexColor("#1a237e"))),
Paragraph(val, S("fv", fontName="Helvetica", fontSize=8.5,
textColor=colors.HexColor("#4e342e"), leading=11)),
])
ts = TableStyle([
("BACKGROUND", (0, 0), (-1, -1), colors.HexColor("#f3e5f5")),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#ce93d8")),
("LEFTPADDING", (0, 0), (-1, -1), 7),
("RIGHTPADDING", (0, 0), (-1, -1), 7),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING",(0, 0), (-1, -1), 4),
("VALIGN", (0, 0), (-1, -1), "TOP"),
])
t = Table(data, colWidths=[6.0*cm, 11.5*cm])
t.setStyle(ts)
return t
# ═══════════════════════════════════════════════════════════════════════════════
# TIPS BOX
# ═══════════════════════════════════════════════════════════════════════════════
def tips_table(tips):
data = [[Paragraph(f"• {t}", S("tip", fontName="Helvetica", fontSize=8.5,
textColor=colors.HexColor("#1b5e20"), leading=12))]
for t in tips]
ts = TableStyle([
("BACKGROUND", (0, 0), (-1, -1), colors.HexColor("#f1f8e9")),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#a5d6a7")),
("LEFTPADDING", (0, 0), (-1, -1), 8),
("RIGHTPADDING", (0, 0), (-1, -1), 8),
("TOPPADDING", (0, 0), (-1, -1), 3),
("BOTTOMPADDING",(0, 0), (-1, -1), 3),
])
t = Table(data, colWidths=[17.5*cm])
t.setStyle(ts)
return t
# ═══════════════════════════════════════════════════════════════════════════════
# LEGEND TABLE
# ═══════════════════════════════════════════════════════════════════════════════
def legend_table():
items = [
(C_IMP, C_IMP_TXT, "★ IMP Chapter — High exam weight, longer study slot"),
(C_BREAK, colors.HexColor("#880e4f"), "Break / Meal — Step away, rest, hydrate"),
(C_SLEEP, colors.HexColor("#0d47a1"), "Sleep — Do NOT compromise. Memory consolidation happens here"),
(C_ALT1, colors.HexColor("#212121"), "Normal Chapter — Standard revision"),
]
data = []
for bg, tc, label in items:
data.append([
Paragraph(" ", S("lb", fontName="Helvetica", fontSize=9)),
Paragraph(label, S("lt", fontName="Helvetica", fontSize=8.5,
textColor=tc)),
])
ts = TableStyle([
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("LEFTPADDING", (0, 0), (-1, -1), 4),
("RIGHTPADDING", (0, 0), (-1, -1), 4),
("TOPPADDING", (0, 0), (-1, -1), 3),
("BOTTOMPADDING", (0, 0), (-1, -1), 3),
("BOX", (0, 0), (-1, -1), 0.5, C_BORDER),
("LINEBELOW", (0, 0), (-1, -2), 0.3, colors.HexColor("#c5cae9")),
])
for i, (bg, tc, _) in enumerate(items):
ts.add("BACKGROUND", (0, i), (0, i), bg)
ts.add("BACKGROUND", (1, i), (1, i), bg)
t = Table(data, colWidths=[0.8*cm, 16.7*cm])
t.setStyle(ts)
return t
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD DOCUMENT
# ═══════════════════════════════════════════════════════════════════════════════
story = []
# ── Cover / Header ─────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("BIOCHEMISTRY EXAM", TITLE))
story.append(Paragraph("Complete 33-Hour Revision Study Plan", SUBTITLE))
story.append(HRFlowable(width="100%", thickness=2, color=C_HEADER, spaceAfter=6))
story.append(Paragraph(
"🕐 Study Window: 11:00 PM, Wed 3 June 2026 → 07:30 AM, Fri 5 June 2026",
SUBTITLE))
story.append(Paragraph(
"⚠️ EXAM: Friday 5 June 2026 | 8:00 AM | Arrive by 07:30 AM",
EXAM_ALERT))
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor("#9fa8da"), spaceAfter=8))
# ── Legend ─────────────────────────────────────────────────────────────────────
story.append(Paragraph("Colour Legend", SEC_HEAD))
story.append(legend_table())
story.append(Spacer(1, 0.4*cm))
# ── Chapter Overview ───────────────────────────────────────────────────────────
story.append(Paragraph("Chapter Overview & Time Allocation", SEC_HEAD))
story.append(build_chapter_table())
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph(
"Note: Chapters marked ★ HIGH are exam-heavy and allocated 1.5–2 hours each. "
"Normal chapters get 40–60 minutes and appear in the late-night slot.",
BODY))
story.append(PageBreak())
# ── Night 1 Schedule ──────────────────────────────────────────────────────────
story.append(Paragraph("PHASE 1 — Night Session | Wed 3 June 2026", SEC_HEAD))
story.append(Paragraph(
"Start strong. Cover the 3 non-IMP chapters and a quick Clinical Chemistry overview "
"to free up the full day for high-priority metabolism topics.",
BODY))
story.append(Spacer(1, 0.2*cm))
story.append(build_schedule_table(night1))
story.append(Spacer(1, 0.5*cm))
# ── Day Schedule ──────────────────────────────────────────────────────────────
story.append(Paragraph("PHASE 2 — Full Day Revision | Thu 4 June 2026", SEC_HEAD))
story.append(Paragraph(
"This is your main revision day. All IMP chapters are tackled in order of concept dependency "
"(structure → kinetics → vitamins → metabolism → bioenergetics → gene expression). "
"Take all scheduled breaks — they are part of the plan.",
BODY))
story.append(Spacer(1, 0.2*cm))
story.append(build_schedule_table(day))
story.append(Spacer(1, 0.5*cm))
story.append(PageBreak())
# ── Exam Morning ──────────────────────────────────────────────────────────────
story.append(Paragraph("PHASE 3 — Exam Morning | Fri 5 June 2026", SEC_HEAD))
story.append(Paragraph(
"Light review only. Do NOT start new topics. Confidence and calmness matter most now.",
BODY))
story.append(Spacer(1, 0.2*cm))
story.append(build_schedule_table(exam_morning))
story.append(Spacer(1, 0.5*cm))
# ── Key Formulas ──────────────────────────────────────────────────────────────
story.append(Paragraph("Essential Formulas & Quick-Reference Numbers", SEC_HEAD))
story.append(formula_box())
story.append(Spacer(1, 0.4*cm))
# ── Study Tips ────────────────────────────────────────────────────────────────
story.append(Paragraph("Exam Strategy & Study Tips", SEC_HEAD))
general_tips = [
"Write down reaction steps by hand — motor memory reinforces recall far better than re-reading.",
"For Michaelis-Menten: practice drawing the curve AND the Lineweaver-Burk plot with all three inhibition patterns.",
"Use the acronym NAKED for fat-soluble vitamins: No Aqueous (water) Known Excretion Deficiency (A, D, E, K).",
"Glycolysis: Remember 'Good Luck Finding A Foxy Girl Picking Good Pears' (10 steps mnemonic).",
"ETC Complexes: 'I Quarter (Q) Constantly Cycle (C) IV' — Complex I → Q → Complex II → Q → III → Cyt C → IV.",
"Urea cycle: 'Ordinarily Careless Crappers Are Also Frivolous About Urination' — Ornithine → Carbamoyl-P → Citrulline → Argininosuccinate → Arginine → Fumarate → Arginase → Urea.",
"During the exam: read each question fully before answering. For calculation questions, show each step.",
"If stuck, move on and return. Budget approximately 1–1.5 min per MCQ, 4–5 min per short answer.",
"Drink water during the exam. Dehydration reduces cognitive performance measurably.",
"The night before (Thu 10 PM): stop studying, shower, and sleep. You cannot cram 14 chapters in one night.",
]
story.append(tips_table(general_tips))
story.append(Spacer(1, 0.4*cm))
# ── Chapter-Specific Tips ─────────────────────────────────────────────────────
story.append(Paragraph("Chapter-Specific High-Yield Points", SEC_HEAD))
ch_tips = [
"Ch 5 – Nucleic Acids: Purines = Adenine + Guanine (double ring). Pyrimidines = Cytosine + Thymine + Uracil.",
"Ch 6 – Vitamins: Thiamine (B1) → Beriberi. Niacin (B3) → Pellagra (4 Ds). B12 + Folate → Megaloblastic anaemia.",
"Ch 8 – Enzymes: Km ↑ in competitive inhibition (Vmax unchanged). Km unchanged in non-competitive (Vmax ↓).",
"Ch 9 – Carbohydrate Metabolism: Net glycolysis ATP = 2 (substrate level). NADH → 2.5 ATP; FADH₂ → 1.5 ATP.",
"Ch 10 – Lipid Metabolism: Acetyl-CoA carboxylase is the rate-limiting enzyme of fatty acid synthesis.",
"Ch 11 – Amino Acid Metabolism: Glucogenic AAs → glucose; Ketogenic (Leu, Lys only pure ketogenic).",
"Ch 12 – Bioenergetics: P:O ratio = 2.5 for NADH; 1.5 for FADH₂. ATP synthase inhibited by oligomycin.",
"Ch 13 – Gene Expression: Prokaryotic ribosomes = 70S (50S + 30S). Eukaryotic = 80S (60S + 40S).",
"Ch 7 – Hormones: Insulin = anabolic. Glucagon = catabolic. Both are peptide hormones (cannot cross membrane).",
]
story.append(tips_table(ch_tips))
story.append(Spacer(1, 0.5*cm))
# ── Time Summary Box ──────────────────────────────────────────────────────────
story.append(Paragraph("Total Time Allocation Summary", SEC_HEAD))
summary_data = [
["Category", "Hours", "Chapters Covered"],
["Night 1 Study (Wed 11 PM – 2 AM)", "3 hrs", "Ch 1, 2, 3, 14"],
["Sleep Night 1 (2 AM – 7 AM)", "5 hrs", "Memory consolidation"],
["Morning Routine + Breakfast (7–7:20 AM)", "0.3 hrs", "—"],
["Day Study — IMP Chapters (7:20 AM – 10 PM)", "~12 hrs (with breaks)", "Ch 4, 5, 8, 6, 9, 12, 10, 7, 11, 13"],
["Total Break Time (day)", "~1.75 hrs", "Mental recovery"],
["Sleep Night 2 (10 PM – 5:30 AM)", "7.5 hrs", "Critical consolidation"],
["Exam Morning Review (5:30–7:30 AM)", "1 hr (light)", "Flash review only"],
["TOTAL STUDY TIME", "~16 hours", "All 14 chapters"],
]
sum_ts = TableStyle([
("BACKGROUND", (0, 0), (-1, 0), C_HEADER),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("GRID", (0, 0), (-1, -1), 0.4, C_BORDER),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("RIGHTPADDING",(0, 0), (-1, -1), 6),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING",(0, 0), (-1, -1), 4),
("BACKGROUND", (0, -1), (-1, -1), colors.HexColor("#e8f5e9")),
("FONTNAME", (0, -1), (-1, -1), "Helvetica-Bold"),
("TEXTCOLOR", (0, -1), (-1, -1), colors.HexColor("#1b5e20")),
])
for i in range(1, len(summary_data)-1):
bg = C_ALT1 if i % 2 == 1 else C_ALT2
if "Sleep" in summary_data[i][0]:
bg = C_SLEEP
elif "Break" in summary_data[i][0] or "Routine" in summary_data[i][0] or "Morning" in summary_data[i][0]:
bg = C_BREAK
sum_ts.add("BACKGROUND", (0, i), (-1, i), bg)
sum_tdata = []
for i, row in enumerate(summary_data):
if i == 0:
sum_tdata.append([Paragraph(c, S("sh", fontName="Helvetica-Bold", fontSize=9,
textColor=colors.white, alignment=TA_CENTER)) for c in row])
else:
bold = (i == len(summary_data)-1)
sum_tdata.append([Paragraph(c, S(f"sr{i}", fontName="Helvetica-Bold" if bold else "Helvetica",
fontSize=8.5, textColor=colors.HexColor("#1b5e20") if bold else colors.HexColor("#212121")))
for c in row])
sum_t = Table(sum_tdata, colWidths=[7.5*cm, 2.5*cm, 7.7*cm])
sum_t.setStyle(sum_ts)
story.append(sum_t)
# ── Footer ─────────────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.6*cm))
story.append(HRFlowable(width="100%", thickness=1, color=C_BORDER))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
"Generated by Orris AI • Biochemistry Exam Study Plan • Exam Date: Friday 5 June 2026 • Good luck!",
FOOTER_STYLE))
# ── Build ──────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created successfully: {OUTPUT}")
cd /home/daytona/workspace/study-plan && python generate_study_plan.py
ls -lh /home/daytona/workspace/study-plan/Biochemistry_Study_Plan.pdf
Biochemistry Study Plan
PDF Document · PDF
| Time | Chapter |
|---|---|
| 11:10 PM - 12:10 AM | Ch 1: Basic Biochemistry |
| 12:10 AM - 12:50 AM | Ch 2: Carbohydrates (Basic Chemistry) |
| 1:00 AM - 1:40 AM | Ch 3: Lipids |
| 1:40 AM - 2:00 AM | Ch 14: Clinical Chemistry (quick overview) |
| 2:00 AM - 7:00 AM | SLEEP |
| Time | Chapter |
|---|---|
| 7:20 - 9:00 AM | Ch 4: Proteins & Amino Acids |
| 9:00 - 10:30 AM | Ch 5: Nucleic Acids ★ |
| 10:45 AM - 12:15 PM | Ch 8: Enzymes / Michaelis-Menten ★ |
| 12:15 - 1:15 PM | Ch 6: Vitamins ★ |
| 1:45 - 3:15 PM | Ch 9: Metabolic Fate of Carbohydrates ★ |
| 3:15 - 4:45 PM | Ch 12: Bioenergetics ★ |
| 5:00 - 6:30 PM | Ch 10: Metabolic Fate of Lipids ★ |
| 6:30 - 7:30 PM | Ch 7: Hormones ★ |
| 7:45 - 9:00 PM | Ch 11: Metabolic Fate of Proteins & AA ★ |
| 9:00 - 9:30 PM | Ch 13: Gene Expression ★ |
| 9:30 - 10:00 PM | Rapid Revision Session |
| 10:00 PM - 5:30 AM | SLEEP (7.5 hrs) - mandatory |
| Time | Activity |
|---|---|
| 5:30 - 6:00 AM | Wake up + breakfast |
| 6:00 - 7:00 AM | Flash review (formulas, ATP yields, Urea cycle) |
| 7:00 - 7:30 AM | Travel to exam hall |
| 8:00 AM | EXAM |