Here it is — copy and paste the whole thing into Notes, WhatsApp Saved Messages, Notion, or anywhere: --- ``` ╔══════════════════════════════════════════════════════════════╗ ║ USMLE STEP 1 — STRATEGIC TIMETABLE — NOV 1, 2026 ║ ║ Manasa Veena Mayabrahma ║ ║ 2,595 Qs | 24 Topics | 80 Qs/day | Exam: Nov 1 ║ ╚══════════════════════════════════════════════════════════════╝ LEGEND 📖 FA READ = Read First Aid + make Anki cards ✅ UWORLD = 2 blocks of 40 Qs (tutor mode) + full review 🔄 REVISION = 7 days after topic: re-read weak areas + 20 Qs 📦 FA+UW = Small topic: FA read + all Qs same day TIER SYSTEM 🔴 TIER 1 — Concept-Heavy : Renal → Cardio → Pulm 🟠 BRIDGE — GP Reinforce : Pathology, Biochem, Pharmacology 🔵 TIER 2 — Memory-Based : Repro → Endo → Neuro → Immuno 🟢 TIER 3 — High-Volume : GI → Infec → Heme → Psych 🟣 TIER 4 — Standalone : Derm → Rheum → Biostats → Social Sci ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ JUNE 2026 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Sat 20 Jun 🔴 📖 FA READ Renal (Part 1/2) Sun 21 Jun 🔴 📖 FA READ Renal (Part 2/2) Mon 22 Jun 🔴 ✅ UWORLD Renal — Block 1 (80 Qs) Tue 23 Jun 🔴 ✅ UWORLD Renal — Block 2 (35 Qs) ← DONE Wed 24 Jun 🔴 📖 FA READ Cardiovascular (Part 1/2) Thu 25 Jun 🔴 📖 FA READ Cardiovascular (Part 2/2) Fri 26 Jun 🔴 ✅ UWORLD Cardiovascular — Block 1 (80 Qs) Sat 27 Jun 🔴 🔄 REVISION Renal [7-day spaced review] Sun 28 Jun 🔴 ✅ UWORLD Cardiovascular — Block 2 (80 Qs) Mon 29 Jun 🔴 ✅ UWORLD Cardiovascular — Block 3 (80 Qs) Tue 30 Jun 🔴 ✅ UWORLD Cardiovascular — Block 4 (63 Qs) ← DONE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ JULY 2026 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Wed 01 Jul 🔴 🔄 REVISION Cardiovascular [7-day spaced review] Thu 02 Jul 🔴 📖 FA READ Pulmonary & Critical Care (Part 1/2) Fri 03 Jul 🔴 📖 FA READ Pulmonary & Critical Care (Part 2/2) Sat 04 Jul 🔴 ✅ UWORLD Pulmonary — Block 1 (80 Qs) Sun 05 Jul 🔴 ✅ UWORLD Pulmonary — Block 2 (80 Qs) Mon 06 Jul 🔴 ✅ UWORLD Pulmonary — Block 3 (67 Qs) ← DONE Tue 07 Jul 🟠 📦 FA+UW Pathology GP (26 Qs) — combined day Wed 08 Jul 🔴 🔄 REVISION Pulmonary [7-day spaced review] Thu 09 Jul 🟠 📦 FA+UW Biochemistry GP (29 Qs) — combined day Fri 10 Jul 🟠 📖 FA READ Pharmacology GP Sat 11 Jul 🟠 ✅ UWORLD Pharmacology GP (45 Qs) ← DONE Sun 12 Jul 🔵 📦 FA+UW Pregnancy/Childbirth/Puerperium (39 Qs) Mon 13 Jul 🔵 📦 FA+UW Male Reproductive System (4 Qs) Tue 14 Jul 🟠 🔄 REVISION Pathology GP [7-day spaced review] Wed 15 Jul 🔵 📖 FA READ Endocrine, Diabetes & Metabolism (Part 1/2) Thu 16 Jul 🟠 🔄 REVISION Biochemistry GP [7-day spaced review] Fri 17 Jul 🔵 📖 FA READ Endocrine, Diabetes & Metabolism (Part 2/2) Sat 18 Jul 🟠 🔄 REVISION Pharmacology GP [7-day spaced review] Sun 19 Jul 🔵 ✅ UWORLD Endocrine — Block 1 (80 Qs) Mon 20 Jul 🔵 🔄 REVISION Pregnancy/Repro [7-day spaced review] Tue 21 Jul 🔵 🔄 REVISION Male Reproductive [7-day spaced review] Wed 22 Jul 🔵 ✅ UWORLD Endocrine — Block 2 (30 Qs) ← DONE Thu 23 Jul 🔵 🔄 REVISION Endocrine [7-day spaced review] Fri 24 Jul 🔵 📖 FA READ Genetics GP Sat 25 Jul 🔵 ✅ UWORLD Genetics GP (62 Qs) ← DONE Sun 26 Jul 🔵 📖 FA READ Nervous System (Part 1/2) Mon 27 Jul 🔵 📖 FA READ Nervous System (Part 2/2) Tue 28 Jul 🔵 ✅ UWORLD Nervous System — Block 1 (80 Qs) Wed 29 Jul 🔵 ✅ UWORLD Nervous System — Block 2 (80 Qs) Thu 30 Jul 🔵 🔄 REVISION Genetics GP [7-day spaced review] Fri 31 Jul 🔵 ✅ UWORLD Nervous System — Block 3 (80 Qs) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ AUGUST 2026 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Sat 01 Aug 🔵 ✅ UWORLD Nervous System — Block 4 (42 Qs) ← DONE Sun 02 Aug 🔵 🔄 REVISION Nervous System [7-day spaced review] Mon 03 Aug 🔵 📦 FA+UW Allergy & Immunology (28 Qs) — combined day Tue 04 Aug 🟢 📖 FA READ Gastrointestinal & Nutrition (Part 1/2) Wed 05 Aug 🟢 📖 FA READ Gastrointestinal & Nutrition (Part 2/2) Thu 06 Aug 🟢 ✅ UWORLD GI & Nutrition — Block 1 (80 Qs) Fri 07 Aug 🟢 ✅ UWORLD GI & Nutrition — Block 2 (80 Qs) Sat 08 Aug 🟢 ✅ UWORLD GI & Nutrition — Block 3 (80 Qs) Sun 09 Aug 🟢 ✅ UWORLD GI & Nutrition — Block 4 (45 Qs) ← DONE Mon 10 Aug 🔵 🔄 REVISION Allergy & Immunology [7-day spaced review] Tue 11 Aug 🟢 📦 FA+UW Microbiology GP (5 Qs) — combined day Wed 12 Aug 🟢 🔄 REVISION GI & Nutrition [7-day spaced review] Thu 13 Aug 🟢 📖 FA READ Infectious Diseases (Part 1/2) Fri 14 Aug 🟢 📖 FA READ Infectious Diseases (Part 2/2) Sat 15 Aug 🟢 ✅ UWORLD Infectious Diseases — Block 1 (80 Qs) Sun 16 Aug 🟢 ✅ UWORLD Infectious Diseases — Block 2 (80 Qs) Mon 17 Aug 🟢 ✅ UWORLD Infectious Diseases — Block 3 (80 Qs) Tue 18 Aug 🟢 🔄 REVISION Microbiology GP [7-day spaced review] Wed 19 Aug 🟢 ✅ UWORLD Infectious Diseases — Block 4 (31 Qs) ← DONE Thu 20 Aug 🟢 🔄 REVISION Infectious Diseases [7-day spaced review] Fri 21 Aug 🟢 📖 FA READ Hematology & Oncology Sat 22 Aug 🟢 ✅ UWORLD Hematology & Oncology — Block 1 (80 Qs) Sun 23 Aug 🟢 ✅ UWORLD Hematology & Oncology — Block 2 (18 Qs) ← DONE Mon 24 Aug 🟢 📖 FA READ Psychiatry/Behavioral (Part 1/2) Tue 25 Aug 🟢 📖 FA READ Psychiatry/Behavioral (Part 2/2) Wed 26 Aug 🟢 ✅ UWORLD Psychiatry — Block 1 (80 Qs) Thu 27 Aug 🟢 🔄 REVISION Hematology & Oncology [7-day spaced review] Fri 28 Aug 🟢 ✅ UWORLD Psychiatry — Block 2 (78 Qs) ← DONE Sat 29 Aug 🟣 📖 FA READ Dermatology Sun 30 Aug 🟣 ✅ UWORLD Dermatology — Block 1 (80 Qs) Mon 31 Aug 🟢 🔄 REVISION Psychiatry [7-day spaced review] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SEPTEMBER 2026 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Tue 01 Sep 🟣 ✅ UWORLD Dermatology — Block 2 (12 Qs) ← DONE Wed 02 Sep 🟣 📖 FA READ Rheumatology/Orthopedics (Part 1/2) Thu 03 Sep 🟣 📖 FA READ Rheumatology/Orthopedics (Part 2/2) Fri 04 Sep 🟣 ✅ UWORLD Rheumatology — Block 1 (80 Qs) Sat 05 Sep 🟣 🔄 REVISION Dermatology [7-day spaced review] Sun 06 Sep 🟣 ✅ UWORLD Rheumatology — Block 2 (62 Qs) ← DONE Mon 07 Sep 🟣 📦 FA+UW ENT (34 Qs) — combined day Tue 08 Sep 🟣 📦 FA+UW Ophthalmology (1 Q) — combined day Wed 09 Sep 🟣 🔄 REVISION Rheumatology [7-day spaced review] Thu 10 Sep 🟣 📖 FA READ Biostatistics & Epidemiology (Part 1/2) Fri 11 Sep 🟣 📖 FA READ Biostatistics & Epidemiology (Part 2/2) Sat 12 Sep 🟣 ✅ UWORLD Biostatistics — Block 1 (80 Qs) Sun 13 Sep 🟣 ✅ UWORLD Biostatistics — Block 2 (34 Qs) ← DONE Mon 14 Sep 🟣 🔄 REVISION ENT [7-day spaced review] Tue 15 Sep 🟣 📖 FA READ Social Sciences/Ethics (Part 1/2) Wed 16 Sep 🟣 🔄 REVISION Ophthalmology [7-day spaced review] Thu 17 Sep 🟣 🔄 REVISION Biostatistics [7-day spaced review] Fri 18 Sep 🟣 📖 FA READ Social Sciences/Ethics (Part 2/2) Sat 19 Sep 🟣 ✅ UWORLD Social Sciences — Block 1 (80 Qs) Sun 20 Sep 🟣 ✅ UWORLD Social Sciences — Block 2 (27 Qs) ← DONE Mon 21 Sep 🟣 🔄 REVISION Social Sciences [7-day spaced review] Tue 22 Sep 🟣 📦 FA+UW Poisoning & Environmental (18 Qs) ← DONE 🏁 ALL 2,595 UWORLD QUESTIONS COMPLETE — SEP 22 Tue 29 Sep 🟣 🔄 REVISION Poisoning & Environmental [7-day review] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ FINAL STRETCH — OCT 18 to NOV 1 NBMEs + Weak Area Review + EXAM ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Oct 18 📋 NBME #1 — full exam + review all wrong answers Oct 22 📋 NBME #2 — full exam + review Oct 24 📖 FA weak area re-read — Tier 1 gaps (Renal/Cardio/Pulm) Oct 26 📋 NBME #3 — full exam + review Oct 27 ✅ UWorld custom — wrong answers only (80 Qs) Oct 28 📖 FA weak area re-read — Tier 2 gaps (Neuro/Endo) Oct 29 ✅ UWorld custom — Cardio + Renal mixed (80 Qs) Oct 30 📖 Final FA rapid review — all high-yield tables Oct 31 😴 Rest day — Anki only — sleep by 10 PM Nov 01 🎯 EXAM DAY — YOU'VE GOT THIS, MANASA! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DAILY SCHEDULE (8-10 hrs) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 06:00-08:00 Warm up: yesterday's wrong answers + Anki 08:00-09:30 FA Read Block 1 OR UWorld Block 1 (40 Qs) 09:30-11:30 UWorld Block 1 full review + annotate FA 11:30-12:00 Break + lunch 12:00-13:30 FA Read Block 2 OR UWorld Block 2 (40 Qs) 13:30-15:30 UWorld Block 2 full review + make Anki cards 15:30-16:00 Break 16:00-17:30 Anki / active recall / weak area sketching 17:30-18:00 Plan tomorrow + mark today done ✓ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` Select all of that, copy, and paste into WhatsApp Saved Messages, Apple Notes, Google Keep, or Notion - it'll hold its formatting. The `← DONE` markers are there so you can search "DONE" to find where each topic ends. crate proper timetable pdf

Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"

Writing File

~/usmle-timetable/generate_timetable.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import KeepTogether
from reportlab.lib.colors import HexColor
import os

OUTPUT = "/home/daytona/workspace/usmle-timetable/USMLE_Step1_Timetable_Manasa.pdf"

# Color palette
C_RED      = HexColor("#C0392B")
C_ORANGE   = HexColor("#E67E22")
C_BLUE     = HexColor("#2980B9")
C_GREEN    = HexColor("#27AE60")
C_PURPLE   = HexColor("#8E44AD")
C_DARK     = HexColor("#1A1A2E")
C_HEADER   = HexColor("#0D1B2A")
C_ACCENT   = HexColor("#E8F4FD")
C_WHITE    = colors.white
C_LIGHT_GRAY = HexColor("#F8F9FA")
C_MID_GRAY = HexColor("#DEE2E6")
C_DONE_BG  = HexColor("#E8F8E8")
C_GOLD     = HexColor("#F39C12")

TIER_COLORS = {
    "🔴": (C_RED,     HexColor("#FDECEA")),
    "🟠": (C_ORANGE,  HexColor("#FEF0E7")),
    "🔵": (C_BLUE,    HexColor("#EBF5FB")),
    "🟢": (C_GREEN,   HexColor("#EAFAF1")),
    "🟣": (C_PURPLE,  HexColor("#F5EEF8")),
}

ACTIVITY_COLORS = {
    "📖": HexColor("#1A5276"),
    "✅": HexColor("#145A32"),
    "🔄": HexColor("#7D6608"),
    "📦": HexColor("#6E2F8E"),
    "📋": HexColor("#1A5276"),
    "😴": HexColor("#555555"),
    "🎯": HexColor("#C0392B"),
}

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=12*mm,
    rightMargin=12*mm,
    topMargin=12*mm,
    bottomMargin=12*mm,
    title="USMLE Step 1 Timetable — Manasa Veena Mayabrahma",
    author="Orris AI",
)

W, H = A4
CONTENT_W = W - 24*mm

styles = getSampleStyleSheet()

def style(name, **kwargs):
    base = styles["Normal"]
    return ParagraphStyle(name, parent=base, **kwargs)

TITLE_STYLE   = style("title",   fontSize=18, textColor=C_WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=22)
SUB_STYLE     = style("sub",     fontSize=9,  textColor=HexColor("#BDC3C7"), alignment=TA_CENTER, fontName="Helvetica", leading=13)
SECTION_STYLE = style("section", fontSize=11, textColor=C_WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=14)
DATE_STYLE    = style("date",    fontSize=8.5,textColor=HexColor("#2C3E50"), fontName="Helvetica-Bold", leading=11)
ACT_STYLE     = style("act",     fontSize=8, textColor=C_WHITE, fontName="Helvetica-Bold", leading=10)
DESC_STYLE    = style("desc",    fontSize=8.5,textColor=HexColor("#1A1A2E"), fontName="Helvetica", leading=11)
DONE_STYLE    = style("done",    fontSize=7.5,textColor=HexColor("#27AE60"), fontName="Helvetica-Bold", leading=10)
LEGEND_STYLE  = style("legend",  fontSize=8, textColor=HexColor("#2C3E50"), fontName="Helvetica", leading=11)
NOTE_STYLE    = style("note",    fontSize=7.5,textColor=HexColor("#555555"), fontName="Helvetica-Oblique", leading=10, alignment=TA_CENTER)
DAILY_HDR     = style("dailyhdr",fontSize=8.5,textColor=C_WHITE, fontName="Helvetica-Bold", leading=11)
DAILY_ROW     = style("dailyrow",fontSize=8, textColor=HexColor("#1A1A2E"), fontName="Helvetica", leading=11)

story = []

# ─── HEADER BLOCK ───────────────────────────────────────────────────────────
def header_table():
    title_para = Paragraph("USMLE STEP 1 — STRATEGIC TIMETABLE — NOV 1, 2026", TITLE_STYLE)
    name_para  = Paragraph("Manasa Veena Mayabrahma", style("n2", fontSize=13, textColor=HexColor("#F39C12"), alignment=TA_CENTER, fontName="Helvetica-Bold", leading=16))
    stats_para = Paragraph("2,595 Questions  |  24 Topics  |  80 Qs/day  |  Exam: November 1, 2026", SUB_STYLE)
    t = Table([[title_para],[name_para],[stats_para]], colWidths=[CONTENT_W])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), C_HEADER),
        ("TOPPADDING",    (0,0),(-1,-1), 10),
        ("BOTTOMPADDING", (0,0),(-1,-1), 7),
        ("LEFTPADDING",   (0,0),(-1,-1), 14),
        ("RIGHTPADDING",  (0,0),(-1,-1), 14),
        ("ROUNDEDCORNERS", (0,0),(-1,-1), 6),
    ]))
    return t

story.append(header_table())
story.append(Spacer(1, 5*mm))

# ─── LEGEND + TIERS ─────────────────────────────────────────────────────────
legend_items = [
    ("📖 FA READ",  "Read First Aid + make Anki cards"),
    ("✅ UWORLD",   "2 blocks of 40 Qs (tutor mode) + full review"),
    ("🔄 REVISION", "7 days after topic: re-read weak areas + 20 Qs"),
    ("📦 FA+UW",    "Small topic: FA read + all Qs same day"),
]
tier_items = [
    ("🔴 TIER 1", "Concept-Heavy",  "Renal → Cardio → Pulm",                    C_RED),
    ("🟠 BRIDGE", "GP Reinforce",   "Pathology, Biochem, Pharmacology",          C_ORANGE),
    ("🔵 TIER 2", "Memory-Based",   "Repro → Endo → Neuro → Immuno",             C_BLUE),
    ("🟢 TIER 3", "High-Volume",    "GI → Infec → Heme → Psych",                 C_GREEN),
    ("🟣 TIER 4", "Standalone",     "Derm → Rheum → Biostats → Social Sci",      C_PURPLE),
]

leg_data = [[Paragraph(f"<b>{k}</b> — {v}", LEGEND_STYLE)] for k,v in legend_items]
leg_t = Table(leg_data, colWidths=[CONTENT_W/2 - 3*mm])
leg_t.setStyle(TableStyle([
    ("BACKGROUND", (0,0),(-1,-1), HexColor("#EEF2F7")),
    ("BOX",        (0,0),(-1,-1), 0.5, C_MID_GRAY),
    ("TOPPADDING",    (0,0),(-1,-1), 3),
    ("BOTTOMPADDING", (0,0),(-1,-1), 3),
    ("LEFTPADDING",   (0,0),(-1,-1), 8),
]))

tier_data = []
for emoji_label, kind, topics, color in tier_items:
    tier_data.append([
        Paragraph(f"<b>{emoji_label}</b>", style("t1", fontSize=8, textColor=color, fontName="Helvetica-Bold", leading=10)),
        Paragraph(kind, style("t2", fontSize=8, textColor=HexColor("#555555"), fontName="Helvetica-Oblique", leading=10)),
        Paragraph(topics, style("t3", fontSize=8, textColor=HexColor("#1A1A2E"), fontName="Helvetica", leading=10)),
    ])

tier_t = Table(tier_data, colWidths=[22*mm, 28*mm, CONTENT_W/2 - 50*mm - 3*mm])
tier_t.setStyle(TableStyle([
    ("BACKGROUND", (0,0),(-1,-1), HexColor("#FAFAFA")),
    ("BOX",        (0,0),(-1,-1), 0.5, C_MID_GRAY),
    ("TOPPADDING",    (0,0),(-1,-1), 3),
    ("BOTTOMPADDING", (0,0),(-1,-1), 3),
    ("LEFTPADDING",   (0,0),(-1,-1), 5),
]))

combined = Table([[leg_t, Spacer(6*mm,1), tier_t]], colWidths=[CONTENT_W/2-3*mm, 6*mm, CONTENT_W/2-3*mm])
combined.setStyle(TableStyle([("VALIGN",(0,0),(-1,-1),"TOP")]))
story.append(combined)
story.append(Spacer(1, 5*mm))

# ─── TIMETABLE DATA ──────────────────────────────────────────────────────────
# Format: (date_str, tier_emoji, activity_emoji, activity_label, description, is_done)
ENTRIES = [
    # JUNE
    ("Sat 20 Jun", "🔴", "📖", "FA READ",  "Renal (Part 1/2)", False),
    ("Sun 21 Jun", "🔴", "📖", "FA READ",  "Renal (Part 2/2)", False),
    ("Mon 22 Jun", "🔴", "✅", "UWORLD",   "Renal — Block 1 (80 Qs)", False),
    ("Tue 23 Jun", "🔴", "✅", "UWORLD",   "Renal — Block 2 (35 Qs)", True),
    ("Wed 24 Jun", "🔴", "📖", "FA READ",  "Cardiovascular (Part 1/2)", False),
    ("Thu 25 Jun", "🔴", "📖", "FA READ",  "Cardiovascular (Part 2/2)", False),
    ("Fri 26 Jun", "🔴", "✅", "UWORLD",   "Cardiovascular — Block 1 (80 Qs)", False),
    ("Sat 27 Jun", "🔴", "🔄", "REVISION", "Renal [7-day spaced review]", False),
    ("Sun 28 Jun", "🔴", "✅", "UWORLD",   "Cardiovascular — Block 2 (80 Qs)", False),
    ("Mon 29 Jun", "🔴", "✅", "UWORLD",   "Cardiovascular — Block 3 (80 Qs)", False),
    ("Tue 30 Jun", "🔴", "✅", "UWORLD",   "Cardiovascular — Block 4 (63 Qs)", True),
    # JULY
    ("Wed 01 Jul", "🔴", "🔄", "REVISION", "Cardiovascular [7-day spaced review]", False),
    ("Thu 02 Jul", "🔴", "📖", "FA READ",  "Pulmonary & Critical Care (Part 1/2)", False),
    ("Fri 03 Jul", "🔴", "📖", "FA READ",  "Pulmonary & Critical Care (Part 2/2)", False),
    ("Sat 04 Jul", "🔴", "✅", "UWORLD",   "Pulmonary — Block 1 (80 Qs)", False),
    ("Sun 05 Jul", "🔴", "✅", "UWORLD",   "Pulmonary — Block 2 (80 Qs)", False),
    ("Mon 06 Jul", "🔴", "✅", "UWORLD",   "Pulmonary — Block 3 (67 Qs)", True),
    ("Tue 07 Jul", "🟠", "📦", "FA+UW",    "Pathology GP (26 Qs) — combined day", False),
    ("Wed 08 Jul", "🔴", "🔄", "REVISION", "Pulmonary [7-day spaced review]", False),
    ("Thu 09 Jul", "🟠", "📦", "FA+UW",    "Biochemistry GP (29 Qs) — combined day", False),
    ("Fri 10 Jul", "🟠", "📖", "FA READ",  "Pharmacology GP", False),
    ("Sat 11 Jul", "🟠", "✅", "UWORLD",   "Pharmacology GP (45 Qs)", True),
    ("Sun 12 Jul", "🔵", "📦", "FA+UW",    "Pregnancy/Childbirth/Puerperium (39 Qs)", False),
    ("Mon 13 Jul", "🔵", "📦", "FA+UW",    "Male Reproductive System (4 Qs)", False),
    ("Tue 14 Jul", "🟠", "🔄", "REVISION", "Pathology GP [7-day spaced review]", False),
    ("Wed 15 Jul", "🔵", "📖", "FA READ",  "Endocrine, Diabetes & Metabolism (Part 1/2)", False),
    ("Thu 16 Jul", "🟠", "🔄", "REVISION", "Biochemistry GP [7-day spaced review]", False),
    ("Fri 17 Jul", "🔵", "📖", "FA READ",  "Endocrine, Diabetes & Metabolism (Part 2/2)", False),
    ("Sat 18 Jul", "🟠", "🔄", "REVISION", "Pharmacology GP [7-day spaced review]", False),
    ("Sun 19 Jul", "🔵", "✅", "UWORLD",   "Endocrine — Block 1 (80 Qs)", False),
    ("Mon 20 Jul", "🔵", "🔄", "REVISION", "Pregnancy/Repro [7-day spaced review]", False),
    ("Tue 21 Jul", "🔵", "🔄", "REVISION", "Male Reproductive [7-day spaced review]", False),
    ("Wed 22 Jul", "🔵", "✅", "UWORLD",   "Endocrine — Block 2 (30 Qs)", True),
    ("Thu 23 Jul", "🔵", "🔄", "REVISION", "Endocrine [7-day spaced review]", False),
    ("Fri 24 Jul", "🔵", "📖", "FA READ",  "Genetics GP", False),
    ("Sat 25 Jul", "🔵", "✅", "UWORLD",   "Genetics GP (62 Qs)", True),
    ("Sun 26 Jul", "🔵", "📖", "FA READ",  "Nervous System (Part 1/2)", False),
    ("Mon 27 Jul", "🔵", "📖", "FA READ",  "Nervous System (Part 2/2)", False),
    ("Tue 28 Jul", "🔵", "✅", "UWORLD",   "Nervous System — Block 1 (80 Qs)", False),
    ("Wed 29 Jul", "🔵", "✅", "UWORLD",   "Nervous System — Block 2 (80 Qs)", False),
    ("Thu 30 Jul", "🔵", "🔄", "REVISION", "Genetics GP [7-day spaced review]", False),
    ("Fri 31 Jul", "🔵", "✅", "UWORLD",   "Nervous System — Block 3 (80 Qs)", False),
    # AUGUST
    ("Sat 01 Aug", "🔵", "✅", "UWORLD",   "Nervous System — Block 4 (42 Qs)", True),
    ("Sun 02 Aug", "🔵", "🔄", "REVISION", "Nervous System [7-day spaced review]", False),
    ("Mon 03 Aug", "🔵", "📦", "FA+UW",    "Allergy & Immunology (28 Qs) — combined day", False),
    ("Tue 04 Aug", "🟢", "📖", "FA READ",  "Gastrointestinal & Nutrition (Part 1/2)", False),
    ("Wed 05 Aug", "🟢", "📖", "FA READ",  "Gastrointestinal & Nutrition (Part 2/2)", False),
    ("Thu 06 Aug", "🟢", "✅", "UWORLD",   "GI & Nutrition — Block 1 (80 Qs)", False),
    ("Fri 07 Aug", "🟢", "✅", "UWORLD",   "GI & Nutrition — Block 2 (80 Qs)", False),
    ("Sat 08 Aug", "🟢", "✅", "UWORLD",   "GI & Nutrition — Block 3 (80 Qs)", False),
    ("Sun 09 Aug", "🟢", "✅", "UWORLD",   "GI & Nutrition — Block 4 (45 Qs)", True),
    ("Mon 10 Aug", "🔵", "🔄", "REVISION", "Allergy & Immunology [7-day spaced review]", False),
    ("Tue 11 Aug", "🟢", "📦", "FA+UW",    "Microbiology GP (5 Qs) — combined day", False),
    ("Wed 12 Aug", "🟢", "🔄", "REVISION", "GI & Nutrition [7-day spaced review]", False),
    ("Thu 13 Aug", "🟢", "📖", "FA READ",  "Infectious Diseases (Part 1/2)", False),
    ("Fri 14 Aug", "🟢", "📖", "FA READ",  "Infectious Diseases (Part 2/2)", False),
    ("Sat 15 Aug", "🟢", "✅", "UWORLD",   "Infectious Diseases — Block 1 (80 Qs)", False),
    ("Sun 16 Aug", "🟢", "✅", "UWORLD",   "Infectious Diseases — Block 2 (80 Qs)", False),
    ("Mon 17 Aug", "🟢", "✅", "UWORLD",   "Infectious Diseases — Block 3 (80 Qs)", False),
    ("Tue 18 Aug", "🟢", "🔄", "REVISION", "Microbiology GP [7-day spaced review]", False),
    ("Wed 19 Aug", "🟢", "✅", "UWORLD",   "Infectious Diseases — Block 4 (31 Qs)", True),
    ("Thu 20 Aug", "🟢", "🔄", "REVISION", "Infectious Diseases [7-day spaced review]", False),
    ("Fri 21 Aug", "🟢", "📖", "FA READ",  "Hematology & Oncology", False),
    ("Sat 22 Aug", "🟢", "✅", "UWORLD",   "Hematology & Oncology — Block 1 (80 Qs)", False),
    ("Sun 23 Aug", "🟢", "✅", "UWORLD",   "Hematology & Oncology — Block 2 (18 Qs)", True),
    ("Mon 24 Aug", "🟢", "📖", "FA READ",  "Psychiatry/Behavioral (Part 1/2)", False),
    ("Tue 25 Aug", "🟢", "📖", "FA READ",  "Psychiatry/Behavioral (Part 2/2)", False),
    ("Wed 26 Aug", "🟢", "✅", "UWORLD",   "Psychiatry — Block 1 (80 Qs)", False),
    ("Thu 27 Aug", "🟢", "🔄", "REVISION", "Hematology & Oncology [7-day spaced review]", False),
    ("Fri 28 Aug", "🟢", "✅", "UWORLD",   "Psychiatry — Block 2 (78 Qs)", True),
    ("Sat 29 Aug", "🟣", "📖", "FA READ",  "Dermatology", False),
    ("Sun 30 Aug", "🟣", "✅", "UWORLD",   "Dermatology — Block 1 (80 Qs)", False),
    ("Mon 31 Aug", "🟢", "🔄", "REVISION", "Psychiatry [7-day spaced review]", False),
    # SEPTEMBER
    ("Tue 01 Sep", "🟣", "✅", "UWORLD",   "Dermatology — Block 2 (12 Qs)", True),
    ("Wed 02 Sep", "🟣", "📖", "FA READ",  "Rheumatology/Orthopedics (Part 1/2)", False),
    ("Thu 03 Sep", "🟣", "📖", "FA READ",  "Rheumatology/Orthopedics (Part 2/2)", False),
    ("Fri 04 Sep", "🟣", "✅", "UWORLD",   "Rheumatology — Block 1 (80 Qs)", False),
    ("Sat 05 Sep", "🟣", "🔄", "REVISION", "Dermatology [7-day spaced review]", False),
    ("Sun 06 Sep", "🟣", "✅", "UWORLD",   "Rheumatology — Block 2 (62 Qs)", True),
    ("Mon 07 Sep", "🟣", "📦", "FA+UW",    "ENT (34 Qs) — combined day", False),
    ("Tue 08 Sep", "🟣", "📦", "FA+UW",    "Ophthalmology (1 Q) — combined day", False),
    ("Wed 09 Sep", "🟣", "🔄", "REVISION", "Rheumatology [7-day spaced review]", False),
    ("Thu 10 Sep", "🟣", "📖", "FA READ",  "Biostatistics & Epidemiology (Part 1/2)", False),
    ("Fri 11 Sep", "🟣", "📖", "FA READ",  "Biostatistics & Epidemiology (Part 2/2)", False),
    ("Sat 12 Sep", "🟣", "✅", "UWORLD",   "Biostatistics — Block 1 (80 Qs)", False),
    ("Sun 13 Sep", "🟣", "✅", "UWORLD",   "Biostatistics — Block 2 (34 Qs)", True),
    ("Mon 14 Sep", "🟣", "🔄", "REVISION", "ENT [7-day spaced review]", False),
    ("Tue 15 Sep", "🟣", "📖", "FA READ",  "Social Sciences/Ethics (Part 1/2)", False),
    ("Wed 16 Sep", "🟣", "🔄", "REVISION", "Ophthalmology [7-day spaced review]", False),
    ("Thu 17 Sep", "🟣", "🔄", "REVISION", "Biostatistics [7-day spaced review]", False),
    ("Fri 18 Sep", "🟣", "📖", "FA READ",  "Social Sciences/Ethics (Part 2/2)", False),
    ("Sat 19 Sep", "🟣", "✅", "UWORLD",   "Social Sciences — Block 1 (80 Qs)", False),
    ("Sun 20 Sep", "🟣", "✅", "UWORLD",   "Social Sciences — Block 2 (27 Qs)", True),
    ("Mon 21 Sep", "🟣", "🔄", "REVISION", "Social Sciences [7-day spaced review]", False),
    ("Tue 22 Sep", "🟣", "📦", "FA+UW",    "Poisoning & Environmental (18 Qs)", True),
    ("Tue 29 Sep", "🟣", "🔄", "REVISION", "Poisoning & Environmental [7-day review]", False),
]

MONTHS = [
    ("JUNE 2026",      "🔴 Tier 1 — Concept-Heavy: Renal + Cardiovascular",     HexColor("#C0392B")),
    ("JULY 2026",      "🔴 Tier 1 + 🟠 Bridge + 🔵 Tier 2: Pulm, Pharm, Endo, Neuro begins", HexColor("#E67E22")),
    ("AUGUST 2026",    "🔵 Tier 2 + 🟢 Tier 3: Neuro, Immuno, GI, Infec, Heme, Psych", HexColor("#2980B9")),
    ("SEPTEMBER 2026", "🟣 Tier 4 + Final Qs: Derm, Rheum, Biostats, Social Sci, Poison", HexColor("#8E44AD")),
]

MONTH_ENTRIES = {
    "JUNE 2026":      [e for e in ENTRIES if "Jun" in e[0]],
    "JULY 2026":      [e for e in ENTRIES if "Jul" in e[0]],
    "AUGUST 2026":    [e for e in ENTRIES if "Aug" in e[0]],
    "SEPTEMBER 2026": [e for e in ENTRIES if "Sep" in e[0]],
}

def make_badge(label, bg_color, text_color=C_WHITE, width=17*mm):
    st = style("badge", fontSize=7, textColor=text_color, fontName="Helvetica-Bold",
               alignment=TA_CENTER, leading=9)
    return Paragraph(f"<b>{label}</b>", st)

def month_section(month_name, subtitle, color, entries):
    # Section header
    hdr_para = Paragraph(month_name, SECTION_STYLE)
    sub_para  = Paragraph(subtitle, style("ms", fontSize=7.5, textColor=HexColor("#BDC3C7"), alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=10))
    hdr_t = Table([[hdr_para],[sub_para]], colWidths=[CONTENT_W])
    hdr_t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), color),
        ("TOPPADDING",    (0,0),(-1,-1), 7),
        ("BOTTOMPADDING", (0,0),(-1,-1), 6),
        ("LEFTPADDING",   (0,0),(-1,-1), 10),
        ("RIGHTPADDING",  (0,0),(-1,-1), 10),
    ]))
    rows = []
    for (date, tier, act_em, act_label, desc, done) in entries:
        tier_col, tier_bg = TIER_COLORS.get(tier, (C_DARK, C_LIGHT_GRAY))
        act_col            = ACTIVITY_COLORS.get(act_em, C_DARK)

        date_p  = Paragraph(f"<b>{date}</b>", DATE_STYLE)
        act_p   = Paragraph(f"<b>{act_label}</b>",
                            style("ap", fontSize=7.5, textColor=C_WHITE, fontName="Helvetica-Bold",
                                  alignment=TA_CENTER, leading=9))
        desc_p  = Paragraph(desc, DESC_STYLE)
        done_p  = Paragraph("✔ DONE", DONE_STYLE) if done else Paragraph("", DONE_STYLE)

        row_bg = C_DONE_BG if done else tier_bg
        rows.append([date_p, act_p, desc_p, done_p])

    col_widths = [26*mm, 20*mm, CONTENT_W - 26*mm - 20*mm - 16*mm, 16*mm]
    t = Table(rows, colWidths=col_widths, repeatRows=0)

    ts = [
        ("VALIGN",       (0,0), (-1,-1), "MIDDLE"),
        ("TOPPADDING",   (0,0), (-1,-1), 3.5),
        ("BOTTOMPADDING",(0,0), (-1,-1), 3.5),
        ("LEFTPADDING",  (0,0), (-1,-1), 5),
        ("RIGHTPADDING", (0,0), (-1,-1), 5),
        ("LINEBELOW",    (0,0), (-1,-1), 0.3, HexColor("#E0E0E0")),
        ("ROWBACKGROUNDS",(0,0),(-1,-1), [HexColor("#FAFAFA"), C_WHITE]),
    ]

    for i, (date, tier, act_em, act_label, desc, done) in enumerate(entries):
        tier_col, tier_bg = TIER_COLORS.get(tier, (C_DARK, C_LIGHT_GRAY))
        act_col            = ACTIVITY_COLORS.get(act_em, C_DARK)
        row_bg = C_DONE_BG if done else (tier_bg if i % 2 == 0 else C_WHITE)
        ts.append(("BACKGROUND", (0,i), (-1,i), row_bg))
        ts.append(("BACKGROUND", (1,i), (1,i), act_col))
        ts.append(("TEXTCOLOR",  (3,i), (3,i), HexColor("#27AE60")))

    t.setStyle(TableStyle(ts))
    return [hdr_t, t, Spacer(1, 4*mm)]

# Build month sections
for month_name, subtitle, color in MONTHS:
    entries = MONTH_ENTRIES.get(month_name, [])
    story.extend(month_section(month_name, subtitle, color, entries))

# ─── MILESTONE BANNER ────────────────────────────────────────────────────────
milestone_p = Paragraph(
    "🏁  ALL 2,595 UWORLD QUESTIONS COMPLETE — SEPTEMBER 22, 2026",
    style("ms2", fontSize=11, textColor=C_WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=14)
)
ms_t = Table([[milestone_p]], colWidths=[CONTENT_W])
ms_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,-1), HexColor("#1E8449")),
    ("TOPPADDING",    (0,0),(-1,-1), 10),
    ("BOTTOMPADDING", (0,0),(-1,-1), 10),
]))
story.append(ms_t)
story.append(Spacer(1, 5*mm))

# ─── FINAL STRETCH ───────────────────────────────────────────────────────────
final_hdr = Paragraph("FINAL STRETCH — OCT 18 TO NOV 1", SECTION_STYLE)
final_sub = Paragraph("NBMEs + Weak Area Review + EXAM DAY", style("fs", fontSize=8, textColor=HexColor("#BDC3C7"), alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=10))
fhdr_t = Table([[final_hdr],[final_sub]], colWidths=[CONTENT_W])
fhdr_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,-1), C_DARK),
    ("TOPPADDING",    (0,0),(-1,-1), 8),
    ("BOTTOMPADDING", (0,0),(-1,-1), 6),
]))
story.append(fhdr_t)

final_entries = [
    ("Oct 18", "📋", "NBME #1",        "Full exam + review all wrong answers",              False),
    ("Oct 22", "📋", "NBME #2",        "Full exam + review",                                False),
    ("Oct 24", "📖", "FA WEAK AREAS",  "Tier 1 gaps: Renal / Cardio / Pulm",                False),
    ("Oct 26", "📋", "NBME #3",        "Full exam + review",                                False),
    ("Oct 27", "✅", "UWORLD CUSTOM",  "Wrong answers only (80 Qs)",                        False),
    ("Oct 28", "📖", "FA WEAK AREAS",  "Tier 2 gaps: Neuro / Endo",                         False),
    ("Oct 29", "✅", "UWORLD CUSTOM",  "Cardio + Renal mixed (80 Qs)",                      False),
    ("Oct 30", "📖", "RAPID REVIEW",   "Final FA rapid review — all high-yield tables",     False),
    ("Oct 31", "😴", "REST DAY",       "Anki only — sleep by 10 PM",                        False),
    ("Nov 01", "🎯", "EXAM DAY",       "YOU'VE GOT THIS, MANASA! 🎯",                      False),
]

f_rows = []
for (date, em, label, desc, done) in final_entries:
    act_col = ACTIVITY_COLORS.get(em, C_DARK)
    if em == "🎯":
        act_col = C_RED
    date_p  = Paragraph(f"<b>{date}</b>", DATE_STYLE)
    act_p   = Paragraph(f"<b>{label}</b>",
                        style("fp", fontSize=7.5, textColor=C_WHITE, fontName="Helvetica-Bold",
                              alignment=TA_CENTER, leading=9))
    if em == "🎯":
        desc_p = Paragraph(f"<b>{desc}</b>",
                           style("gp", fontSize=9, textColor=C_RED, fontName="Helvetica-Bold", leading=11))
    else:
        desc_p = Paragraph(desc, DESC_STYLE)
    f_rows.append([date_p, act_p, desc_p])

col_widths_f = [26*mm, 30*mm, CONTENT_W - 56*mm]
ft = Table(f_rows, colWidths=col_widths_f)
fts = [
    ("VALIGN",       (0,0),(-1,-1), "MIDDLE"),
    ("TOPPADDING",   (0,0),(-1,-1), 4),
    ("BOTTOMPADDING",(0,0),(-1,-1), 4),
    ("LEFTPADDING",  (0,0),(-1,-1), 5),
    ("RIGHTPADDING", (0,0),(-1,-1), 5),
    ("LINEBELOW",    (0,0),(-1,-1), 0.3, HexColor("#E0E0E0")),
    ("ROWBACKGROUNDS",(0,0),(-1,-1), [HexColor("#FAFAFA"), C_WHITE]),
]
for i, (date, em, label, desc, done) in enumerate(final_entries):
    act_col = ACTIVITY_COLORS.get(em, C_DARK)
    if em == "🎯":
        act_col = C_RED
        fts.append(("BACKGROUND", (0,i), (-1,i), HexColor("#FDE8E8")))
    elif em == "😴":
        fts.append(("BACKGROUND", (0,i), (-1,i), HexColor("#F0F0F0")))
    fts.append(("BACKGROUND", (1,i), (1,i), act_col))

ft.setStyle(TableStyle(fts))
story.append(ft)
story.append(Spacer(1, 5*mm))

# ─── DAILY SCHEDULE ──────────────────────────────────────────────────────────
daily_hdr_p = Paragraph("DAILY SCHEDULE (8-10 hrs)", SECTION_STYLE)
daily_sub_p = Paragraph("Repeat every study day — adjust on revision days", style("ds", fontSize=8, textColor=HexColor("#BDC3C7"), alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=10))
dhdr_t = Table([[daily_hdr_p],[daily_sub_p]], colWidths=[CONTENT_W])
dhdr_t.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,-1), HexColor("#2C3E50")),
    ("TOPPADDING",    (0,0),(-1,-1), 8),
    ("BOTTOMPADDING", (0,0),(-1,-1), 6),
]))
story.append(dhdr_t)

daily_rows = [
    ("06:00 – 08:00", "Warm-up",    "Yesterday's wrong answers + Anki deck review",              HexColor("#D5E8D4")),
    ("08:00 – 09:30", "Block 1",    "FA Read Block 1  OR  UWorld Block 1 (40 Qs)",                HexColor("#DAE8FC")),
    ("09:30 – 11:30", "Review 1",   "UWorld Block 1 full review + annotate FA",                  HexColor("#DAE8FC")),
    ("11:30 – 12:00", "Break",      "Lunch + short walk",                                         HexColor("#FFFDE7")),
    ("12:00 – 13:30", "Block 2",    "FA Read Block 2  OR  UWorld Block 2 (40 Qs)",                HexColor("#DAE8FC")),
    ("13:30 – 15:30", "Review 2",   "UWorld Block 2 full review + make Anki cards",              HexColor("#DAE8FC")),
    ("15:30 – 16:00", "Break",      "Short break — stretch / snack",                              HexColor("#FFFDE7")),
    ("16:00 – 17:30", "Active Recall","Anki / active recall / weak area sketching",              HexColor("#E8DAEF")),
    ("17:30 – 18:00", "Plan",       "Plan tomorrow + mark today done ✓",                         HexColor("#FDECEA")),
]

d_rows_data = []
for (time, label, detail, bg) in daily_rows:
    d_rows_data.append([
        Paragraph(f"<b>{time}</b>", style("dt", fontSize=8, textColor=HexColor("#1A1A2E"), fontName="Helvetica-Bold", leading=10)),
        Paragraph(f"<b>{label}</b>", style("dl", fontSize=8, textColor=HexColor("#1A1A2E"), fontName="Helvetica-Bold", leading=10, alignment=TA_CENTER)),
        Paragraph(detail, style("dd", fontSize=8, textColor=HexColor("#2C3E50"), fontName="Helvetica", leading=10)),
    ])

col_widths_d = [32*mm, 25*mm, CONTENT_W - 57*mm]
dt = Table(d_rows_data, colWidths=col_widths_d)
dts = [
    ("VALIGN",       (0,0),(-1,-1), "MIDDLE"),
    ("TOPPADDING",   (0,0),(-1,-1), 4.5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 4.5),
    ("LEFTPADDING",  (0,0),(-1,-1), 7),
    ("RIGHTPADDING", (0,0),(-1,-1), 5),
    ("LINEBELOW",    (0,0),(-1,-1), 0.3, HexColor("#E0E0E0")),
    ("ALIGN",        (1,0), (1,-1), "CENTER"),
]
for i, (time, label, detail, bg) in enumerate(daily_rows):
    dts.append(("BACKGROUND", (0,i), (-1,i), bg))

dt.setStyle(TableStyle(dts))
story.append(dt)
story.append(Spacer(1, 6*mm))

# ─── FOOTER ──────────────────────────────────────────────────────────────────
footer_p = Paragraph(
    "Generated by Orris AI  |  USMLE Step 1 — Nov 1, 2026  |  Manasa Veena Mayabrahma  |  2,595 Questions across 24 Topics",
    style("footer", fontSize=7, textColor=HexColor("#AAAAAA"), alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=9)
)
story.append(footer_p)

# ─── BUILD ───────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
print(f"File size: {os.path.getsize(OUTPUT)/1024:.1f} KB")
Running Command

cd /home/daytona/workspace/usmle-timetable && python generate_timetable.py

Your PDF is ready, Manasa! Here's your download link:

USMLE Step1 Timetable Manasa

PDF Document · PDF


Here's what's included in the PDF:
Cover header - Your name, exam date (Nov 1, 2026), total question count, and pace summary in a dark navy banner with gold accent.
Legend + Tier System - Side-by-side panels showing activity codes (FA READ, UWORLD, REVISION, FA+UW) and all 5 tiers with their color coding.
Full day-by-day timetable across 4 color-coded month sections:
  • June 2026 (Red - Renal + Cardio)
  • July 2026 (Orange/Bridge - Pulm, Pharm, Endo, Neuro begins)
  • August 2026 (Blue/Green - Neuro, Immuno, GI, Infec, Heme, Psych)
  • September 2026 (Purple - Derm, Rheum, Biostats, Social Sci, Poison)
Each row shows: date, color-coded activity badge, topic description, and a green "✔ DONE" marker for completed entries. Done rows get a soft green background so they stand out at a glance.
Milestone banner - Green "All 2,595 Questions Complete - Sep 22" strip.
Final Stretch block - Oct 18 to Nov 1 with NBME dates, weak area reviews, and a highlighted red Exam Day row.
Daily schedule - The 06:00-18:00 timed block breakdown with color bands by activity type.
This is a shared conversation. Sign in to Orris to start your own chat.