Hi I wanted to know how many dr. Marwag video total are there in 'prepladder app

Searching the Web

Dr. Marwag PrepLadder total videos count

I noticed you mentioned "Dr. Marwag" - based on the search results, you likely mean Dr. Deepak Marwah (Medicine faculty on PrepLadder). Here's what I found:

Dr. Deepak Marwah on PrepLadder

According to PrepLadder's official course page, Dr. Deepak Marwah's Medicine course includes:
  • 190+ Medicine Video Lectures (high-yield video lectures for conceptual understanding)
  • 1,500+ Practice Questions

A few important notes:

  1. This count may change - PrepLadder regularly adds new content, so the number on the app at any given time could be higher.
  2. Subject-specific count - The 190+ figure is specifically for the Medicine subject. If Dr. Marwah teaches other subjects on the platform, those would be separate.
  3. For the exact current count, the most reliable way is to:
    • Open the PrepLadder app
    • Go to your subject (Medicine)
    • Tap on Dr. Deepak Marwah's course - the total lecture count will be listed there.
You can also check the official course page at PrepLadder Medicine for the latest numbers.

From medicine subject by Guyton for plab perspective as an indian intern in gmc silvassa what topics of medicine should I master Please get me full list of chapters or topics

Asking for Preferences
Searching the Web

PLAB 1 2 high yield medicine topics syllabus GMC 2025 2026

Searching the Web

Dr Deepak Marwah PrepLadder medicine complete chapter list topics

Reading Web Page

https://www.iatrox.com/blog/high-yield-plab-1-topics

Here is your complete, structured guide - Dr. Marwah's Medicine chapters prioritized for PLAB 1 + PLAB 2, with your context as an Indian intern at GMC Silvassa in mind.

Dr. Deepak Marwah - Medicine Topics to Master for PLAB 1 + 2

Your context: Indian MBBS intern at GMC Silvassa. PLAB is pitched at UK Foundation Year 2 (F2) level. The 2026 GMC MLA content map drives the exam blueprint. Topics below are sorted by PLAB weight, not Indian PG weight - some NEET PG favorites are lower priority here.

TIER 1 - Master These First (Very High PLAB Weight)

1. Cardiology

  • Acute Coronary Syndrome (STEMI, NSTEMI, UA) - management per UK guidelines (NICE)
  • Heart Failure (HFrEF vs HFpEF) - drug ladder, acute pulmonary edema
  • Atrial Fibrillation - rate vs rhythm, anticoagulation (CHA2DS2-VASc), cardioversion
  • Aortic Stenosis vs HOCM vs Supra-valvular Aortic Stenosis
  • Cardiomyopathy (Dilated, HOCM, ARVC, Takotsubo)
  • Brugada Syndrome
  • Heart blocks (1st, 2nd Wenckebach/Mobitz II, 3rd degree) - when to pace
  • VT, TdP, MAT - acute management
  • Infective Endocarditis - Duke criteria, prophylaxis
  • Pericarditis vs Myocarditis
  • ECG interpretation (this is a PLAB 2 OSCE skill - master it)

2. Respiratory Medicine

  • Asthma - acute severe vs life-threatening, stepwise management
  • COPD - GOLD staging, acute exacerbation management, NIV criteria
  • Pneumonia - CAP, HAP, CURB-65 scoring, antibiotic choice per UK guidelines
  • Pulmonary Embolism - Wells score, CTPA, thrombolysis criteria
  • Pleural Effusion - Light's criteria (transudate vs exudate)
  • Pneumothorax - primary vs secondary, management algorithm
  • Interstitial Lung Disease - UIP/IPF, causes, HRCT patterns
  • Lung Cancer - types, paraneoplastic syndromes, staging
  • Fat Embolism vs PE
  • Ventilator-associated Pneumonia + CPIS score

3. Gastroenterology & Hepatology

  • Upper GI Bleed - Rockford/Blatchford score, variceal vs non-variceal
  • Lower GI Bleed - causes and approach
  • IBD - Crohn's vs UC (very commonly tested in PLAB)
  • Liver Cirrhosis - Child-Pugh, MELD, complications (ascites, SBP, HRS, HE)
  • Acute Liver Failure - causes, King's College criteria
  • Jaundice - pre/intra/post hepatic workup
  • Pancreatitis - Glasgow/Ranson criteria, management
  • Coeliac Disease - diagnosis, management
  • Peptic Ulcer Disease - H. pylori eradication, alarm features
  • Hepatitis B and C - serology interpretation, treatment

4. Endocrinology & Metabolic

  • Diabetes Mellitus Type 1 and 2 - UK drug ladder (metformin, SGLT2i, GLP-1)
  • DKA - management protocol (very commonly tested in PLAB 2)
  • HHS (Hyperosmolar Hyperglycaemic State)
  • Hypoglycaemia - causes, management
  • Thyroid disease - hypothyroidism, hyperthyroidism, Graves', thyroid storm, myxedema coma
  • Hashimoto's encephalopathy
  • Cushing's syndrome vs Addison's disease - tests and management
  • Adrenal crisis - emergency management
  • Hyponatraemia - types, SIADH, osmotic demyelination syndrome
  • Hypercalcaemia - causes, management
  • Normal anion gap vs high anion gap metabolic acidosis
  • Metabolic acidosis/alkalosis vs respiratory - partial vs fully compensated

5. Acute Medicine / Emergency (Most PLAB 2 Critical)

  • Sepsis - Sepsis-6 bundle, qSOFA, NEWS2 scoring
  • Anaphylaxis - IM adrenaline, doses, management
  • The acutely unwell patient - ABCDE approach (core PLAB 2 OSCE framework)
  • Shock types (distributive, cardiogenic, hypovolaemic, obstructive)
  • Acute kidney injury - KDIGO staging, causes, management
  • Hyperkalaemia - ECG changes, emergency management
  • Fluid management - crystalloids vs colloids, assessment of fluid status

TIER 2 - High Priority (Cover After Tier 1)

6. Neurology

  • Stroke - FAST, thrombolysis criteria (4.5 hr window), TIA (ABCD2 score)
  • Epilepsy - status epilepticus management
  • Meningitis - bacterial vs viral vs TB - LP findings, empirical antibiotics
  • GBS (Guillain-Barre) vs transverse myelitis vs hypokalemic paralysis - ascending paralysis approach
  • Myasthenia Gravis - crisis, cholinergic vs myasthenic crisis
  • Parkinson's disease - drugs, management
  • Headache - red flags, migraine vs cluster vs tension
  • Multiple Sclerosis - types, treatment
  • Dementia - Alzheimer's vs Lewy body vs vascular vs FTD

7. Nephrology

  • CKD - staging, complications, when to refer for dialysis
  • Nephrotic vs Nephritic syndrome
  • MGN, MPGN, FSGS - causes and associations
  • Glomerulonephritis - post-strep, rapidly progressive
  • Renal Tubular Acidosis types
  • Dialysis indications - AEIOU mnemonic

8. Rheumatology

  • Rheumatoid Arthritis - DMARDs, biologics, extra-articular features
  • SLE - criteria, investigations, BILAG
  • Gout vs Pseudogout - joint fluid analysis
  • Ankylosing Spondylitis vs other SpA
  • Vasculitis - GPA (Wegener's), MPA, EGPA (Churg-Strauss), PAN
  • Cryoglobulinemia
  • Osteoporosis - DEXA, FRAX, bisphosphonates

9. Infectious Disease

  • HIV/AIDS - opportunistic infections, IOC for each OI, antiretrovirals
  • Tuberculosis - pulmonary vs extrapulmonary, RIPE regime, MDR-TB
  • Malaria (important for your GMC Silvassa background - tropical medicine)
  • Sepsis pathophysiology and antimicrobial stewardship
  • Common UK infections - UTI, cellulitis, CAP, LRTI - empirical antibiotic choice per UK guidelines
  • Fever returning from travel - common differentials

10. Haematology

  • Anaemia types - microcytic, normocytic, macrocytic workup
  • Iron deficiency vs B12/folate vs haemolytic anaemia
  • Sickle cell disease - crises, management
  • Thalassaemia
  • ITP vs TTP vs HUS - distinguish
  • DIC - management
  • Myeloma - diagnosis, complications (hypercalcaemia, renal failure, bone pain)
  • Lymphoma - Hodgkin's vs Non-Hodgkin's
  • Leukaemia types - CLL, CML (imatinib), AML, ALL
  • Transfusion medicine - reactions, blood products

TIER 3 - Important but Lower PLAB Weight vs NEET PG

11. Psychiatry (High PLAB Weight - Don't Skip)

  • Depression - PHQ-9, antidepressants, safe prescribing
  • Schizophrenia - antipsychotics, side effects
  • Bipolar disorder - lithium monitoring
  • Delirium vs Dementia - distinguish (high PLAB 2 priority)
  • Risk assessment (suicide, self-harm)
  • Mental Health Act basics (UK-specific - learn this for PLAB 2)
  • Capacity and consent (Mental Capacity Act 2005 - very commonly tested)

12. Ethics, Law & Safeguarding (Threads through ALL of PLAB 2)

  • Capacity assessment - 4-step test
  • Consent - valid consent, children (Gillick competence)
  • Confidentiality - when to break it (child protection, DVLA, etc.)
  • Safeguarding adults and children
  • Duty of Candour
  • Breaking bad news - SPIKES framework (PLAB 2 OSCE stations)

13. Dermatology (in context of Medicine)

  • Drug rashes - SJS, TEN, DRESS, fixed drug eruption
  • Skin signs of systemic disease (jaundice, clubbing, koilonychia etc.)

PLAB-Specific Notes for an Indian Intern

Indian PG (NEET/AIIMS) focusPLAB focus (shift your thinking)
Rare syndromes, eponymsCommon UK presentations at F2 level
Memorise all causesClinical decision-making and next best step
Investigation of choice (IOC)NICE guidelines - drug of choice in UK
Doses in mg/kgSafe prescribing, drug interactions
Pathology-heavy cardiologyAcute management algorithms
Theory-heavy neurologyABCDE approach, when to escalate

Practical Study Strategy

  1. Use Dr. Marwah's lectures for conceptual understanding and building clinical reasoning - he is excellent for this.
  2. Cross-reference with UK guidelines (NICE) for drug choices - these differ from Indian practice (e.g., UK first-line for T2DM is metformin + SGLT2i, thrombolysis cut-off is 4.5 hrs for stroke).
  3. PLABable is the most trusted PLAB 1 question bank - use it alongside your lecture revision.
  4. PLAB 2: Practice the ABCDE approach and communication stations (breaking bad news, capacity, safeguarding) - these are Indian intern blind spots.
  5. Samson Notes are widely used by IMGs for PLAB 1 revision alongside video lectures.

Good luck with your PLAB prep! The biggest adjustment from Indian PG to PLAB is shifting from "what is the IOC" to "what is the next best management step per UK guidelines" - keep that in mind as you watch Dr. Marwah's videos.

Also i m an indian mbbs intern preparing for plab uk 2027 both part 1 and 2 what practice modules or learning tools should i use..make it crisp and easy to learn please

Searching the Web

best PLAB 1 2 preparation tools resources 2026 2027 Indian IMG PLABable Samson

Here's your crisp, no-fluff guide:

🎯 PLAB 1 + 2 Prep Toolkit (2027 Target)


PLAB 1 Tools

ToolWhat It DoesPriority
PLABable (app + web)5000+ PLAB-style SBA questions, MLA-aligned, "Must Know" filter, mock exams⭐ #1 - Use daily
Samson Notes + 1700 Qs PDFCompact revision notes + classic question set - free, widely used by IMGs⭐ Must have
MedRevisionsTopic notes + SBA questions + mocks, good for weak topicsGood supplement
iatroX / QuesmedAdaptive Q-banks with analytics, identify weak areasOptional add-on
NICE Guidelines (nice.org.uk)UK drug choices, management protocols - non-negotiable for PLAB 1Reference
Dr. Marwah (PrepLadder)Your conceptual base - watch lectures, then do PLABable Qs on that topicFoundation

PLAB 2 Tools

ToolWhat It DoesPriority
Geeky Medics (app + website)OSCE station walkthroughs, history taking, examinations⭐ #1
PLAB 2 AcademyVideo-based OSCE prep, communication skills practiceHighly recommended
NHS.uk + GMC Ethical GuidanceCapacity, consent, confidentiality, safeguarding - UK lawMust read
Telegram/WhatsApp PLAB groupsPeer practice for OSCE roleplay, daily station drillsVery useful
ABCDE Framework (practice daily)Core skill for every acutely unwell station in PLAB 2Master this

Your Study Flow (As an Intern)

Watch Dr. Marwah lecture (concept)
        ↓
Do PLABable questions on that topic (application)
        ↓
Check NICE guidelines for UK-specific management
        ↓
Review Samson Notes for rapid revision
        ↓
PLAB 2: Geeky Medics OSCE station daily

3 Key Mindset Shifts from Indian PG β†’ PLAB

  1. NICE > Harrison's - UK drug choices are the answer, not what you used in India
  2. "Next best step" beats memorizing all causes - PLAB rewards clinical action
  3. Communication = marks - PLAB 2 is heavily OSCE-based; GMC ethical scenarios (capacity, consent, breaking bad news) are guaranteed stations

Free Resources Worth Bookmarking


Timeline tip: You have until 2027 - that's roughly 12 months. Spend the first 6 months on concepts (Dr. Marwah + Samson) + PLABable, and the last 6 months shifting focus heavily toward PLAB 2 OSCE practice. Don't leave PLAB 2 prep for the last minute - it's where many IMGs struggle most.

Also with taht i m preparing for oet medicine so help me in preparation for that as I m vwry new with everything so help me what to learn,how to learn and all combine it with the 12 month plab and oet study scheduled tailored according to timeline and my internship ends by June 2027 so help me make timeline so that I can take oet in between and give plab 1 june and plab 2 in uk I hope you get what I mean

Searching the Web

OET medicine exam dates 2026 2027 schedule registration

Searching the Web

PLAB 1 exam dates 2027 GMC schedule registration

Searching the Web

OET medicine preparation tips for Indian doctors reading writing listening speaking

Got all I need. Here's your complete, tailored master plan.

πŸ—“οΈ Your 12-Month PLAB 1 + PLAB 2 + OET Master Plan

Indian Intern | GMC Silvassa | Internship ends June 2027


πŸ”‘ Key Exam Targets

ExamWhenWhere
OETFebruary or March 2027India (online/test centre)
PLAB 1May 2027India (international centre)
PLAB 2August/Sept 2027UK
Important: From 2027, PLAB 1 February sitting will NOT run at international locations. The May 2027 sitting is your best bet to give it in India before flying to UK for PLAB 2.

πŸ“š What Is OET? (Complete Beginner Guide)

OET (Occupational English Test) tests your medical English in 4 parts. You need Grade B in all 4 for GMC registration.
Sub-testWhat It TestsDuration
Reading3 parts - skim/scan medical texts60 min
ListeningConsultations, patient interviews40 min
WritingReferral/discharge letter from case notes45 min
Speaking2 role-play consultations (patient scenarios)20 min
The hardest parts for Indian doctors: Writing (formal UK letter style) + Speaking (patient communication style)

πŸ—ΊοΈ 12-Month Month-by-Month Schedule


PHASE 1: Foundation (July - September 2026)

You are here. Internship ongoing. Study 1.5-2 hrs/day.
July 2026
  • Start Dr. Marwah PrepLadder - Cardiology + Respiratory (Tier 1 topics)
  • Take OET free sample test on oet.com - assess your current English level
  • Create PLABable account - do 10 Qs/day to get a feel
August 2026
  • Continue Dr. Marwah - Gastro + Endocrinology + Acute Medicine
  • OET: Start E2Language or OET.com official course - learn the format of all 4 sub-tests
  • PLABable: 15 Qs/day, topic-wise (same topic as lecture)
September 2026
  • Dr. Marwah - Neurology + Nephrology + Rheumatology
  • OET Writing: Practice 1 referral letter per week (use E2Language templates)
  • OET Speaking: Start watching role-play videos on YouTube (OET official channel)
  • PLABable: 20 Qs/day

PHASE 2: Build + OET Focus (October - December 2026)

Internship ongoing. Push to 2-2.5 hrs/day.
October 2026
  • Dr. Marwah - Haematology + Infectious Disease + ID
  • OET Writing: Do 2 letters/week, get feedback (E2Language has paid feedback service)
  • OET Listening: Practice Part A (consultation notes) + Part B daily - 30 min
  • PLABable: 25 Qs/day + review all explanations
November 2026
  • Dr. Marwah - Psychiatry + Dermatology + remaining topics
  • Samson Notes: Start reading alongside Dr. Marwah as revision
  • OET Full mock test - assess where you stand
  • OET Speaking: Join a speaking practice group (Telegram/WhatsApp OET groups)
  • Register for OET - book February or March 2027 sitting now
December 2026
  • Dr. Marwah: Complete revision of all subjects
  • PLAB 1: Full topic revision starts - Samson Notes chapter-by-chapter
  • OET: 3 mock tests, target weak areas, 2 letters/week
  • OET Speaking: 3-4 role-plays/week with a partner or tutor

PHASE 3: OET Exam + PLAB 1 Crunch (January - March 2027)

Final internship months. Study 3 hrs/day.
January 2027
  • OET: Final intensive prep - daily mocks, fix weak sub-tests
  • PLAB 1: PLABable 40 Qs/day + Samson Notes revision
  • NICE guidelines: Daily 15-min read (1 guideline per day)
February/March 2027
  • βœ… GIVE OET (aim for Feb if confident, Mar as backup)
  • After OET: Full focus shifts to PLAB 1
  • PLABable: 50 Qs/day + timed mock exams
  • Revise Dr. Marwah Tier 1 topics - rapid revision

PHASE 4: PLAB 1 Crunch (April - May 2027)

Internship ending June 2027. Maximum focus.
April 2027
  • PLABable full-length mock exams (timed, exam conditions)
  • Review all incorrect answers + explanations
  • Weak topic targeted revision
  • Ethics, Law, Safeguarding - do dedicated revision (GMC Good Medical Practice)
May 2027
  • βœ… GIVE PLAB 1 (May sitting, international centre in India)
  • Keep light PLAB 2 preparation going in background

PHASE 5: PLAB 2 Prep + Travel to UK (June - August 2027)

Internship ends June 2027. You are free.
June 2027
  • Internship ends - full-time PLAB 2 prep begins
  • Geeky Medics: Go through every OSCE station systematically
  • ABCDE framework: Practice daily until it becomes second nature
  • Start PLAB 2 Academy course
July 2027
  • Intensive PLAB 2: History taking, examinations, communication stations
  • Ethics OSCE stations: Capacity, consent, breaking bad news, safeguarding
  • Practice with a partner daily (role-play each station)
  • Apply for PLAB 2 date in UK (book early - slots fill fast)
  • Book UK travel + accommodation
August/September 2027
  • Travel to UK
  • βœ… GIVE PLAB 2
  • Apply for GMC registration after passing

πŸ“± Your Complete Toolkit Summary

PLAB 1

ResourceUse
Dr. Marwah (PrepLadder)Concept building
PLABableDaily Q-bank (primary)
Samson NotesCompact revision
NICE GuidelinesUK-specific management

PLAB 2

ResourceUse
Geeky MedicsOSCE stations
PLAB 2 AcademyVideo-based OSCE prep
GMC Good Medical PracticeEthics/Law
Partner practice (Telegram groups)Role-play

OET

ResourceUse
OET.com official materialFormat + free samples
E2LanguageAll 4 sub-tests, writing feedback
OET official YouTubeSpeaking role-plays
OET Telegram groupsSpeaking partner practice

⏱️ Daily Study Template (Internship days)

Morning (30 min before hospital)
β†’ PLABable: 10-15 questions

Evening (1-1.5 hrs after duty)
β†’ 45 min: Dr. Marwah lecture OR Samson Notes
β†’ 30 min: OET practice (rotate Reading/Listening/Writing/Speaking)

Weekend (3-4 hrs)
β†’ Sat: Full PLABable topic session + mock
β†’ Sun: OET full mock OR letter writing practice + review

⚠️ 3 Things Most Indian Interns Get Wrong

  1. Leaving OET too late - OET prep takes 8-10 weeks minimum for Indian doctors. Start now, give it by March 2027 at latest.
  2. Ignoring UK Ethics for PLAB 2 - Mental Capacity Act, Gillick competence, and safeguarding are almost guaranteed OSCE stations. Indian interns are blind to these.
  3. Not booking PLAB 2 early - UK slots fill months in advance. Book immediately after PLAB 1 result.

You're starting at the right time - July 2026 with a June 2027 internship end gives you a clean, workable runway. Stick to the phase structure and you'll be sitting PLAB 2 in the UK by late 2027. πŸ’ͺ

Generate a printable 12-month PLAB/OET study tracker PDF

Reading File
Running Command

mkdir -p /tmp/workspace/plab-oet-tracker && ls /tmp/workspace/

Writing File

~/plab-oet-tracker/generate_tracker.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, PageBreak
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import KeepTogether

OUTPUT = "/tmp/workspace/plab-oet-tracker/PLAB_OET_Study_Tracker.pdf"

# ── Colour palette ──────────────────────────────────────────────
C_NAVY    = colors.HexColor("#1A3557")
C_TEAL    = colors.HexColor("#1A7F8E")
C_MINT    = colors.HexColor("#D6F0F0")
C_ORANGE  = colors.HexColor("#E87722")
C_AMBER   = colors.HexColor("#FFF3CD")
C_PURPLE  = colors.HexColor("#6A3FA0")
C_LAVENDER= colors.HexColor("#EDE7F6")
C_GREEN   = colors.HexColor("#2E7D52")
C_LTGREEN = colors.HexColor("#E8F5E9")
C_RED     = colors.HexColor("#C0392B")
C_LTRED   = colors.HexColor("#FDEDEC")
C_LGRAY   = colors.HexColor("#F5F6FA")
C_MGRAY   = colors.HexColor("#DEE2E6")
C_DKGRAY  = colors.HexColor("#495057")
C_WHITE   = colors.white
C_BLACK   = colors.black

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=14*mm, rightMargin=14*mm,
    topMargin=14*mm, bottomMargin=14*mm,
    title="12-Month PLAB & OET Study Tracker",
    author="Orris AI"
)

W, H = A4
styles = getSampleStyleSheet()

def sty(name="Normal", size=10, bold=False, color=C_BLACK,
        align=TA_LEFT, leading=None, space_before=0, space_after=2):
    return ParagraphStyle(
        name,
        parent=styles["Normal"],
        fontSize=size,
        fontName="Helvetica-Bold" if bold else "Helvetica",
        textColor=color,
        alignment=align,
        leading=leading or size * 1.25,
        spaceBefore=space_before,
        spaceAfter=space_after,
    )

# ── Helper: checkbox row ─────────────────────────────────────────
def checkboxes(n=7):
    return "  ".join(["☐"] * n)

# ── Helper: section header ───────────────────────────────────────
def section_header(text, bg=C_NAVY, fg=C_WHITE, size=11):
    p = Paragraph(text, sty(size=size, bold=True, color=fg, align=TA_CENTER))
    t = Table([[p]], colWidths=[doc.width])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("ROUNDEDCORNERS", [4]),
    ]))
    return t

# ── Helper: two-col mini table ───────────────────────────────────
def two_col(rows, col1=75*mm, col2=None, bg_header=C_TEAL, header=None):
    col2 = col2 or (doc.width - col1)
    data = []
    if header:
        data.append([
            Paragraph(header[0], sty(size=8, bold=True, color=C_WHITE, align=TA_CENTER)),
            Paragraph(header[1], sty(size=8, bold=True, color=C_WHITE, align=TA_CENTER)),
        ])
    for r in rows:
        data.append([
            Paragraph(r[0], sty(size=8, color=C_DKGRAY)),
            Paragraph(r[1], sty(size=8, color=C_DKGRAY, align=TA_CENTER)),
        ])
    t = Table(data, colWidths=[col1, col2])
    style = [
        ("GRID",        (0,0), (-1,-1), 0.4, C_MGRAY),
        ("TOPPADDING",  (0,0), (-1,-1), 3),
        ("BOTTOMPADDING",(0,0),(-1,-1), 3),
        ("LEFTPADDING", (0,0), (-1,-1), 5),
        ("RIGHTPADDING",(0,0), (-1,-1), 5),
    ]
    if header:
        style += [
            ("BACKGROUND", (0,0), (1,0), bg_header),
        ]
    for i in range(1 if header else 0, len(data)):
        bg = C_WHITE if i % 2 == (0 if not header else 1) else C_LGRAY
        style.append(("BACKGROUND", (0,i), (-1,i), bg))
    t.setStyle(TableStyle(style))
    return t

# ════════════════════════════════════════════════════════════════
# PAGE 1 – COVER / OVERVIEW
# ════════════════════════════════════════════════════════════════
story = []

# Cover banner
cover_data = [[
    Paragraph("12-Month PLAB & OET", sty(size=26, bold=True, color=C_WHITE, align=TA_CENTER)),
    ],[
    Paragraph("Study Tracker & Planner", sty(size=18, bold=False, color=C_MINT, align=TA_CENTER)),
    ],[
    Paragraph("Indian MBBS Intern  Β·  GMC Silvassa  Β·  July 2026 – August 2027",
              sty(size=10, color=colors.HexColor("#AED6F1"), align=TA_CENTER)),
]]
cover_tbl = Table(cover_data, colWidths=[doc.width])
cover_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), C_NAVY),
    ("TOPPADDING",    (0,0), (-1,-1), 7),
    ("BOTTOMPADDING", (0,0), (-1,-1), 7),
]))
story.append(cover_tbl)
story.append(Spacer(1, 6*mm))

# Exam milestone strip
milestone_data = [
    [Paragraph("🎯 OET", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER)),
     Paragraph("🎯 PLAB 1", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER)),
     Paragraph("πŸŽ“ Internship Ends", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER)),
     Paragraph("✈️ PLAB 2 UK", sty(size=10, bold=True, color=C_WHITE, align=TA_CENTER))],
    [Paragraph("Feb/Mar 2027", sty(size=9, color=C_AMBER, align=TA_CENTER)),
     Paragraph("May 2027", sty(size=9, color=C_AMBER, align=TA_CENTER)),
     Paragraph("June 2027", sty(size=9, color=C_AMBER, align=TA_CENTER)),
     Paragraph("Aug/Sep 2027", sty(size=9, color=C_AMBER, align=TA_CENTER))],
]
mt = Table(milestone_data, colWidths=[doc.width/4]*4)
mt.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), C_TEAL),
    ("BACKGROUND", (0,1), (-1,1), C_NAVY),
    ("GRID",       (0,0), (-1,-1), 0.5, colors.HexColor("#2C7FA8")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(mt)
story.append(Spacer(1, 6*mm))

# Phase overview table
story.append(section_header("πŸ“‹  PHASE OVERVIEW"))
story.append(Spacer(1, 2*mm))

phase_rows = [
    ["Phase", "Months", "Focus", "Daily Time"],
    ["1 – Foundation",    "Jul – Sep 2026", "Dr. Marwah lectures (Cardioβ†’Neuro) + OET format intro + PLABable 10-15 Qs/day",  "1.5 hrs"],
    ["2 – Build + OET",   "Oct – Dec 2026", "Complete Dr. Marwah + Samson Notes + OET mocks + Writing practice",               "2 hrs"],
    ["3 – OET Crunch",    "Jan – Mar 2027", "OET intensive (daily mocks, letter writing) β†’ Give OET β†’ PLAB 1 crunch",          "3 hrs"],
    ["4 – PLAB 1 Crunch", "Apr – May 2027", "PLABable full mocks + NICE guidelines + Ethics/Law revision β†’ Give PLAB 1",       "3+ hrs"],
    ["5 – PLAB 2 + UK",   "Jun – Aug 2027", "Full-time PLAB 2: Geeky Medics, OSCE roleplay, ABCDE β†’ Travel UK β†’ Give PLAB 2", "Full day"],
]
cw = [28*mm, 28*mm, 95*mm, 18*mm]
pt = Table(phase_rows, colWidths=cw, repeatRows=1)
pt.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_TEAL),
    ("TEXTCOLOR",     (0,0), (-1,0), C_WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 8),
    ("GRID",          (0,0), (-1,-1), 0.4, C_MGRAY),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LEFTPADDING",   (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("BACKGROUND",    (0,1), (-1,1), C_MINT),
    ("BACKGROUND",    (0,2), (-1,2), C_LGRAY),
    ("BACKGROUND",    (0,3), (-1,3), C_MINT),
    ("BACKGROUND",    (0,4), (-1,4), C_LGRAY),
    ("BACKGROUND",    (0,5), (-1,5), C_LAVENDER),
]))
story.append(pt)
story.append(Spacer(1, 5*mm))

# Personal info box
info_data = [
    [Paragraph("Name:", sty(size=9, bold=True)),
     Paragraph("_"*40, sty(size=9)),
     Paragraph("Target OET Score:", sty(size=9, bold=True)),
     Paragraph("Grade B in all 4 sub-tests", sty(size=9))],
    [Paragraph("College:", sty(size=9, bold=True)),
     Paragraph("GMC Silvassa  ____________________", sty(size=9)),
     Paragraph("PLAB 1 Target:", sty(size=9, bold=True)),
     Paragraph("Pass (β‰₯ 122/180)", sty(size=9))],
    [Paragraph("Start Date:", sty(size=9, bold=True)),
     Paragraph("July 2026", sty(size=9)),
     Paragraph("Motto:", sty(size=9, bold=True)),
     Paragraph('"One day at a time, one topic at a time."', sty(size=9, color=C_TEAL))],
]
it = Table(info_data, colWidths=[25*mm, 60*mm, 38*mm, 46*mm])
it.setStyle(TableStyle([
    ("BOX",           (0,0), (-1,-1), 1, C_TEAL),
    ("BACKGROUND",    (0,0), (-1,-1), C_MINT),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LEFTPADDING",   (0,0), (-1,-1), 5),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(it)

story.append(PageBreak())

# ════════════════════════════════════════════════════════════════
# PAGES 2-13 – ONE PAGE PER MONTH
# ════════════════════════════════════════════════════════════════

month_data = [
    {
        "month": "July 2026", "phase": "Phase 1 – Foundation", "phase_color": C_TEAL,
        "plab_topics": [
            "Cardiology: ACS, Heart Failure, AF, Arrhythmias",
            "Cardiology: Cardiomyopathy, Endocarditis, Pericarditis",
            "Respiratory: Asthma, COPD – pathophysiology & management",
            "Respiratory: Pneumonia, PE, Pneumothorax",
            "PLABable: 10 Qs/day (topic-matched) – get familiar with format",
        ],
        "oet_tasks": [
            "Take OET free sample test on oet.com – benchmark yourself",
            "Understand OET format: 4 sub-tests, Grade B target",
            "Watch OET official YouTube intro videos",
            "E2Language: Enrol and complete orientation module",
        ],
        "weekly_goals": ["Complete Cardiology lectures (Dr. Marwah)", "Start Respiratory lectures",
                         "OET sample test done", "PLABable account created, 70 Qs done"],
        "exam_note": None,
    },
    {
        "month": "August 2026", "phase": "Phase 1 – Foundation", "phase_color": C_TEAL,
        "plab_topics": [
            "Gastroenterology: GI Bleed, IBD, Liver Cirrhosis, Pancreatitis",
            "Hepatology: Jaundice workup, Hepatitis B & C serology",
            "Endocrinology: DM Type 1 & 2, DKA, HHS, Hypoglycaemia",
            "Endocrinology: Thyroid (hypo/hyper/storm), Cushing's, Addison's",
            "PLABable: 15 Qs/day – include NICE guideline review on wrong Qs",
        ],
        "oet_tasks": [
            "E2Language: Complete Reading module (skimming + scanning techniques)",
            "E2Language: Complete Listening module (Part A note-taking)",
            "OET Reading: Practice 2 sample texts with timer",
            "OET Listening: Practice 2 Part A consultations",
        ],
        "weekly_goals": ["Gastro + Hepato lectures done", "Endocrinology lectures done",
                         "OET Reading module complete", "105 PLABable Qs done this month"],
        "exam_note": None,
    },
    {
        "month": "September 2026", "phase": "Phase 1 – Foundation", "phase_color": C_TEAL,
        "plab_topics": [
            "Neurology: Stroke, TIA, Epilepsy, Meningitis",
            "Neurology: GBS, Myasthenia Gravis, MS, Parkinson's",
            "Nephrology: AKI, CKD, Nephrotic vs Nephritic, Glomerulonephritis",
            "Electrolytes: Hyperkalaemia, Hyponatraemia, acid-base disorders",
            "PLABable: 20 Qs/day – start timed sessions (2 min/question)",
        ],
        "oet_tasks": [
            "E2Language: Complete Writing module – referral letter structure",
            "OET Writing: Write 1st practice referral letter, self-review",
            "OET Speaking: Watch 3 role-play videos (OET official YouTube)",
            "Join OET Telegram/WhatsApp group for speaking practice partner",
        ],
        "weekly_goals": ["Neurology lectures done", "Nephrology done",
                         "First OET referral letter written", "140 PLABable Qs this month"],
        "exam_note": None,
    },
    {
        "month": "October 2026", "phase": "Phase 2 – Build + OET", "phase_color": C_PURPLE,
        "plab_topics": [
            "Rheumatology: RA, SLE, Gout, AS, Vasculitis, Cryoglobulinemia",
            "Haematology: Anaemia types, ITP/TTP/HUS, DIC, Myeloma",
            "Haematology: Lymphoma, Leukaemia (CML/CLL/AML/ALL), Transfusion",
            "Infectious Disease: HIV/AIDS, Opportunistic infections, ARTs",
            "PLABable: 25 Qs/day – flag all wrong Qs for later review",
        ],
        "oet_tasks": [
            "OET Writing: 2 letters/week – get E2Language written feedback",
            "OET Listening: Daily 30-min practice (Part B & C)",
            "OET Speaking: 2 role-plays/week with practice partner",
            "OET Full mock test #1 – note all weak areas",
        ],
        "weekly_goals": ["Rheumatology done", "Haematology done",
                         "OET Mock #1 complete – score recorded", "175 PLABable Qs this month"],
        "exam_note": None,
    },
    {
        "month": "November 2026", "phase": "Phase 2 – Build + OET", "phase_color": C_PURPLE,
        "plab_topics": [
            "Psychiatry: Depression, Schizophrenia, Bipolar, Delirium vs Dementia",
            "Ethics & Law: Mental Capacity Act, Consent, Confidentiality",
            "Ethics & Law: Safeguarding, Gillick competence, Duty of Candour",
            "Infectious Disease: TB, Malaria, Sepsis, Antimicrobial stewardship",
            "Samson Notes: Begin reading – first 5 chapters",
            "PLABable: 25 Qs/day – ethics & psychiatry focus",
        ],
        "oet_tasks": [
            "OET Writing: 2 letters/week – discharge + referral types",
            "OET Speaking: 3 role-plays/week – focus on opening + closing",
            "OET Full mock test #2 – compare with Mock #1",
            "πŸ“Œ REGISTER for OET – Book February or March 2027 slot",
        ],
        "weekly_goals": ["Psychiatry + Ethics done", "OET registered βœ“",
                         "Samson Notes started", "175+ PLABable Qs this month"],
        "exam_note": "⚠️ BOOK OET EXAM THIS MONTH – slots fill fast!",
    },
    {
        "month": "December 2026", "phase": "Phase 2 – Build + OET", "phase_color": C_PURPLE,
        "plab_topics": [
            "Revision: All Dr. Marwah lectures – rapid re-watch (1.5x speed)",
            "Samson Notes: Complete reading – all chapters",
            "PLABable: 30 Qs/day – rotate all subjects",
            "NICE Guidelines: 1 guideline per day (DM, AF, Asthma, COPD, PE...)",
            "PLABable mock exam #1 – full timed 180 Qs",
        ],
        "oet_tasks": [
            "OET: 3 full mock tests this month",
            "OET Writing: Target consistent B grade on letters",
            "OET Speaking: Daily role-play, focus on fluency not perfection",
            "OET Listening: Drill weakest part (A/B/C)",
            "OET Reading: Speed drills – finish 3-part paper in 60 min",
        ],
        "weekly_goals": ["All subjects revised", "Samson Notes complete",
                         "PLABable Mock #1 done – score noted", "3 OET mocks done"],
        "exam_note": None,
    },
    {
        "month": "January 2027", "phase": "Phase 3 – OET Crunch + PLAB 1 Build", "phase_color": C_ORANGE,
        "plab_topics": [
            "PLABable: 40 Qs/day – timed, exam conditions",
            "Samson Notes: 2nd read – focus on weak topics",
            "NICE Guidelines: Cardio, Respiratory, Neuro, Endo daily",
            "Ethics revision: GMC Good Medical Practice – all chapters",
            "PLABable mock exam #2 – full timed",
        ],
        "oet_tasks": [
            "OET: Daily full sub-test practice (one each day, rotate)",
            "OET Writing: 1 letter every 2 days – aim for B+ consistently",
            "OET Speaking: 4+ role-plays/week with partner",
            "OET Final Mock #4 and #5 – simulate exam conditions",
            "Exam logistics: travel, ID, test centre confirmation",
        ],
        "weekly_goals": ["PLABable Mock #2 done", "Ethics revision complete",
                         "OET: All sub-tests at B level in mocks", "OET exam logistics confirmed"],
        "exam_note": "πŸ“… OET EXAM: February 2027 – FINAL COUNTDOWN",
    },
    {
        "month": "February 2027", "phase": "Phase 3 – OET EXAM MONTH", "phase_color": C_RED,
        "plab_topics": [
            "Light PLAB 1 revision only – don't overload before OET",
            "PLABable: 20 Qs/day (maintenance)",
            "Post-OET: Full PLAB 1 intensity resumes immediately after exam",
            "PLABable: 50 Qs/day after OET",
            "Weak topic targeted revision (from PLABable analytics)",
        ],
        "oet_tasks": [
            "🟒 OET EXAM (February sitting)",
            "Day before: rest, review letter template only",
            "Post exam: note which sub-tests felt weak",
            "Results in ~16 days – check oet.com",
            "If any sub-test below B: plan resit (April 2027 option)",
        ],
        "weekly_goals": ["βœ… OET Exam given", "Result awaited",
                         "PLAB 1 intensity resumed", "50 PLABable Qs/day started"],
        "exam_note": "πŸ”΄ OET EXAM THIS MONTH – Rest well, trust your prep!",
    },
    {
        "month": "March 2027", "phase": "Phase 3β†’4 – PLAB 1 Crunch Begins", "phase_color": C_ORANGE,
        "plab_topics": [
            "PLABable: 50 Qs/day – full subject rotation",
            "PLABable Mock #3 – full timed 180 Qs, analyse performance",
            "Samson Notes: 3rd rapid revision pass",
            "NICE: Gastro, Rheumatology, Psychiatry guidelines",
            "Cardiology deep dive: ECG revision, ACS algorithms",
        ],
        "oet_tasks": [
            "OET result arrives – record score in tracker",
            "If Grade B in all 4: βœ… OET COMPLETE",
            "If any sub-test < B: Book April resit immediately",
            "Maintain English: Read 1 BMJ/NICE article daily",
        ],
        "weekly_goals": ["OET result received – recorded", "PLABable Mock #3 done",
                         "Samson Notes 3rd pass done", "1750+ total PLABable Qs done"],
        "exam_note": "πŸ“¬ OET RESULTS ARRIVE – Record and plan next step",
    },
    {
        "month": "April 2027", "phase": "Phase 4 – PLAB 1 Final Crunch", "phase_color": C_RED,
        "plab_topics": [
            "PLABable: 50 Qs/day + full mock every Sunday",
            "PLABable Mock #4 and #5 – timed 180 Qs each",
            "Targeted revision: all topics where accuracy < 60% on PLABable",
            "Acute Medicine: Sepsis-6, Anaphylaxis, DKA, Hyperkalaemia – protocols",
            "Ethics: Mental Capacity Act, consent, confidentiality – final pass",
        ],
        "oet_tasks": [
            "OET resit (if needed) – April sitting",
            "OET complete: focus 100% on PLAB 1",
            "Maintain reading 1 clinical article/day",
        ],
        "weekly_goals": ["2 full PLAB mocks done", "All weak topics flagged + revised",
                         "Accuracy > 70% on PLABable", "Ethics/Law revision complete"],
        "exam_note": "⚠️ PLAB 1 in 4-5 weeks – Exam-mode ON",
    },
    {
        "month": "May 2027", "phase": "Phase 4 – PLAB 1 EXAM MONTH", "phase_color": C_RED,
        "plab_topics": [
            "Week 1-2: Final PLABable revision – Must Know filter only",
            "Week 3: Samson Notes final rapid pass – 1 chapter/hr",
            "Week 4 (exam week): Light revision only, no new topics",
            "🟒 PLAB 1 EXAM – International centre (India)",
            "Post exam: Begin PLAB 2 preparation immediately",
        ],
        "oet_tasks": [
            "OET: Complete βœ… (or resit booked)",
            "Post PLAB 1: Start Geeky Medics OSCE orientation",
            "Watch 5 PLAB 2 station videos on YouTube",
        ],
        "weekly_goals": ["Final Samson Notes pass done", "βœ… PLAB 1 GIVEN",
                         "Geeky Medics account created", "PLAB 2 Academy enrolled"],
        "exam_note": "πŸ”΄ PLAB 1 EXAM THIS MONTH – You've got this!",
    },
    {
        "month": "June 2027", "phase": "Phase 5 – PLAB 2 Prep (Full-time after Internship)", "phase_color": C_GREEN,
        "plab_topics": [
            "πŸŽ“ INTERNSHIP ENDS – Full-time PLAB 2 prep begins",
            "PLAB 1 result arrives – apply for PLAB 2 date in UK immediately",
            "Geeky Medics: History taking stations – all systems",
            "Geeky Medics: Clinical examination stations – all systems",
            "ABCDE approach: Practice daily until automatic",
        ],
        "oet_tasks": [
            "OET: βœ… Complete",
            "Maintain English – read 1 NHS patient leaflet daily",
            "Communication stations use OET speaking skills – leverage this!",
        ],
        "weekly_goals": ["PLAB 1 result received – PLAB 2 date booked",
                         "UK travel + accommodation planned",
                         "All history taking stations started on Geeky Medics",
                         "ABCDE framework memorised"],
        "exam_note": "πŸŽ“ INTERNSHIP ENDS + PLAB 2 FULL-TIME PREP BEGINS",
    },
]

# Additional months for PLAB 2 (July + August)
extra_months = [
    {
        "month": "July 2027", "phase": "Phase 5 – PLAB 2 Intensive", "phase_color": C_GREEN,
        "plab_topics": [
            "Geeky Medics: ALL OSCE stations – history, examination, data interpretation",
            "PLAB 2 Academy: Communication skills – breaking bad news, consent",
            "Ethics stations: Capacity, safeguarding, confidentiality – roleplay daily",
            "Prescribing safety stations: drug interactions, safe prescribing",
            "Partner roleplay: 2-3 stations daily (WhatsApp/Telegram groups)",
        ],
        "oet_tasks": [
            "OET: βœ… Complete – no further action needed",
        ],
        "weekly_goals": ["All Geeky Medics stations done",
                         "20+ ethics roleplay scenarios practiced",
                         "Breaking bad news – SPIKES framework mastered",
                         "UK travel booked, visa/GMC docs ready"],
        "exam_note": "✈️ TRAVEL TO UK THIS MONTH FOR PLAB 2",
    },
    {
        "month": "August 2027", "phase": "Phase 5 – PLAB 2 EXAM", "phase_color": C_GREEN,
        "plab_topics": [
            "Week 1-2: Final station practice in UK – find practice partners",
            "Attend any PLAB 2 preparation courses/workshops in UK if possible",
            "Week 3 (exam week): Light review, rest well, confidence building",
            "🟒 PLAB 2 EXAM – UK OSCE centre",
            "Post exam: Apply for GMC registration immediately after pass",
        ],
        "oet_tasks": [
            "OET: βœ… Complete",
            "GMC registration: Submit OET score, PLAB 1 + PLAB 2 results",
        ],
        "weekly_goals": ["UK OSCE practice done", "βœ… PLAB 2 GIVEN",
                         "GMC registration application submitted", "πŸ‡¬πŸ‡§ UK Medical Career Begins!"],
        "exam_note": "πŸ”΄ PLAB 2 EXAM IN UK – The finish line is HERE!",
    },
]

all_months = month_data + extra_months

for m in all_months:
    story.append(section_header(
        f"  {m['month']}  Β·  {m['phase']}",
        bg=m["phase_color"], fg=C_WHITE, size=11
    ))
    story.append(Spacer(1, 3*mm))

    # Exam note banner
    if m.get("exam_note"):
        note_data = [[Paragraph(m["exam_note"], sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
        nt = Table(note_data, colWidths=[doc.width])
        nt.setStyle(TableStyle([
            ("BACKGROUND",    (0,0), (-1,-1), C_RED),
            ("TOPPADDING",    (0,0), (-1,-1), 4),
            ("BOTTOMPADDING", (0,0), (-1,-1), 4),
            ("ROUNDEDCORNERS", [3]),
        ]))
        story.append(nt)
        story.append(Spacer(1, 2*mm))

    # Two columns: PLAB tasks | OET tasks
    half = doc.width / 2 - 2*mm

    # PLAB column
    plab_rows = [[Paragraph("πŸ“˜ PLAB 1 / PLAB 2 Tasks", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
    for task in m["plab_topics"]:
        plab_rows.append([Paragraph(f"☐  {task}", sty(size=8, color=C_DKGRAY))])
    plab_col = Table(plab_rows, colWidths=[half])
    plab_col.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,0), C_NAVY),
        ("BACKGROUND",    (0,1), (-1,-1), C_LGRAY),
        ("GRID",          (0,0), (-1,-1), 0.3, C_MGRAY),
        ("TOPPADDING",    (0,0), (-1,-1), 3),
        ("BOTTOMPADDING", (0,0), (-1,-1), 3),
        ("LEFTPADDING",   (0,0), (-1,-1), 5),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ]))

    # OET column
    oet_rows = [[Paragraph("πŸ—£οΈ OET Tasks", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
    for task in m["oet_tasks"]:
        oet_rows.append([Paragraph(f"☐  {task}", sty(size=8, color=C_DKGRAY))])
    # Pad to match PLAB rows
    while len(oet_rows) < len(plab_rows):
        oet_rows.append([Paragraph("", sty(size=8))])
    oet_col = Table(oet_rows, colWidths=[half])
    oet_col.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,0), C_TEAL),
        ("BACKGROUND",    (0,1), (-1,-1), C_MINT),
        ("GRID",          (0,0), (-1,-1), 0.3, C_MGRAY),
        ("TOPPADDING",    (0,0), (-1,-1), 3),
        ("BOTTOMPADDING", (0,0), (-1,-1), 3),
        ("LEFTPADDING",   (0,0), (-1,-1), 5),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ]))

    two_col_tbl = Table([[plab_col, oet_col]], colWidths=[half+2*mm, half+2*mm])
    two_col_tbl.setStyle(TableStyle([
        ("VALIGN",       (0,0), (-1,-1), "TOP"),
        ("LEFTPADDING",  (0,0), (-1,-1), 0),
        ("RIGHTPADDING", (0,0), (-1,-1), 0),
    ]))
    story.append(two_col_tbl)
    story.append(Spacer(1, 3*mm))

    # Weekly goals
    wg_rows = [[Paragraph("βœ… Monthly Goals (Tick When Done)", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]]
    goal_cells = []
    for g in m["weekly_goals"]:
        goal_cells.append(Paragraph(f"☐  {g}", sty(size=8, color=C_DKGRAY)))
    # layout 2 per row
    goal_rows_data = []
    for i in range(0, len(goal_cells), 2):
        row = [goal_cells[i]]
        row.append(goal_cells[i+1] if i+1 < len(goal_cells) else Paragraph("", sty(size=8)))
        goal_rows_data.append(row)
    wg_rows += goal_rows_data
    wg_tbl_inner = Table(goal_rows_data, colWidths=[doc.width/2]*2)
    wg_tbl_inner.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), C_AMBER),
        ("GRID",          (0,0), (-1,-1), 0.3, C_MGRAY),
        ("TOPPADDING",    (0,0), (-1,-1), 3),
        ("BOTTOMPADDING", (0,0), (-1,-1), 3),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ]))
    header_row = Table(
        [[Paragraph("βœ… Monthly Goals (Tick When Done)", sty(size=9, bold=True, color=C_WHITE, align=TA_CENTER))]],
        colWidths=[doc.width]
    )
    header_row.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), C_ORANGE),
        ("TOPPADDING",    (0,0), (-1,-1), 3),
        ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ]))
    story.append(header_row)
    story.append(wg_tbl_inner)
    story.append(Spacer(1, 3*mm))

    # Notes + Score tracker
    notes_score = [
        [
            Paragraph("πŸ“ Notes / Reflections:", sty(size=8, bold=True, color=C_DKGRAY)),
            Paragraph("πŸ“Š Score Tracker:", sty(size=8, bold=True, color=C_DKGRAY)),
        ],
        [
            Paragraph(
                "_"*55 + "<br/>" + "_"*55 + "<br/>" + "_"*55,
                sty(size=8, color=C_DKGRAY)
            ),
            Table([
                [Paragraph("PLABable Mock Score:", sty(size=7)), Paragraph("___ / 180", sty(size=7))],
                [Paragraph("PLABable Accuracy %:", sty(size=7)), Paragraph("____ %", sty(size=7))],
                [Paragraph("OET Sub-test Scores:", sty(size=7)), Paragraph("R__ L__ W__ S__", sty(size=7))],
                [Paragraph("Total Qs Done (month):", sty(size=7)), Paragraph("______", sty(size=7))],
            ], colWidths=[45*mm, 35*mm], style=[
                ("GRID",       (0,0), (-1,-1), 0.3, C_MGRAY),
                ("BACKGROUND", (0,0), (-1,-1), C_LGRAY),
                ("TOPPADDING",    (0,0), (-1,-1), 2),
                ("BOTTOMPADDING", (0,0), (-1,-1), 2),
                ("LEFTPADDING",   (0,0), (-1,-1), 3),
                ("FONTSIZE",      (0,0), (-1,-1), 7),
            ]),
        ],
    ]
    ns_tbl = Table(notes_score, colWidths=[doc.width*0.55, doc.width*0.45])
    ns_tbl.setStyle(TableStyle([
        ("VALIGN",       (0,0), (-1,-1), "TOP"),
        ("TOPPADDING",   (0,0), (-1,-1), 3),
        ("LEFTPADDING",  (0,0), (-1,-1), 0),
        ("RIGHTPADDING", (0,0), (-1,-1), 0),
        ("BOX",          (0,0), (-1,-1), 0.5, C_MGRAY),
        ("BACKGROUND",   (0,0), (-1,-1), C_LGRAY),
    ]))
    story.append(ns_tbl)
    story.append(PageBreak())

# ════════════════════════════════════════════════════════════════
# FINAL PAGE – TOOLKIT REFERENCE + QUICK LINKS
# ════════════════════════════════════════════════════════════════
story.append(section_header("🧰  COMPLETE STUDY TOOLKIT REFERENCE", bg=C_NAVY))
story.append(Spacer(1, 3*mm))

toolkit = [
    ["#", "Resource", "Type", "Use For", "Priority"],
    ["1", "PLABable (app + web)", "Q-Bank", "PLAB 1 daily questions, mocks, Must Know filter", "⭐⭐⭐"],
    ["2", "Samson Notes + 1700 Qs PDF", "Notes/Qs", "PLAB 1 compact revision, free PDF", "⭐⭐⭐"],
    ["3", "Dr. Marwah – PrepLadder", "Video", "Clinical Medicine concept building", "⭐⭐⭐"],
    ["4", "NICE Guidelines (nice.org.uk)", "Reference", "UK drug & management protocols", "⭐⭐⭐"],
    ["5", "E2Language", "OET Course", "All 4 OET sub-tests + written feedback", "⭐⭐⭐"],
    ["6", "OET.com Official Material", "OET", "Free sample tests, format guides", "⭐⭐"],
    ["7", "Geeky Medics (app + web)", "PLAB 2", "OSCE stations, history, examinations", "⭐⭐⭐"],
    ["8", "PLAB 2 Academy", "PLAB 2", "Video OSCE prep, communication skills", "⭐⭐"],
    ["9", "GMC Good Medical Practice", "Ethics", "Capacity, consent, confidentiality, law", "⭐⭐⭐"],
    ["10","MedRevisions / iatroX", "Q-Bank", "PLAB 1 supplement, adaptive analytics", "⭐"],
    ["11","OET/PLAB Telegram Groups", "Community", "Speaking partner, peer revision, tips", "⭐⭐"],
    ["12","BMJ Best Practice / Uptodate", "Reference", "Clinical evidence, management algorithms", "⭐⭐"],
]
tk_cw = [8*mm, 42*mm, 22*mm, 72*mm, 18*mm]
tk_tbl = Table(toolkit, colWidths=tk_cw, repeatRows=1)
tk_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_TEAL),
    ("TEXTCOLOR",     (0,0), (-1,0), C_WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 8),
    ("GRID",          (0,0), (-1,-1), 0.4, C_MGRAY),
    ("TOPPADDING",    (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
for i in range(1, len(toolkit)):
    bg = C_LGRAY if i % 2 == 0 else C_WHITE
    tk_tbl.setStyle(TableStyle([("BACKGROUND", (0,i), (-1,i), bg)]))
story.append(tk_tbl)
story.append(Spacer(1, 5*mm))

# OET Sub-test reference
story.append(section_header("πŸ“–  OET QUICK REFERENCE  Β·  What Each Sub-test Involves", bg=C_TEAL))
story.append(Spacer(1, 2*mm))
oet_ref = [
    ["Sub-test", "Duration", "Format", "Indian Doctor Difficulty", "Key Tip"],
    ["Reading",  "60 min", "3 parts – skim/scan medical texts", "Medium", "Skimming + scanning practice daily"],
    ["Listening","40 min", "Part A: consult notes | B: short extracts | C: presentations", "Medium", "Note-taking speed is key in Part A"],
    ["Writing",  "45 min", "Referral or discharge letter from case notes", "HIGH", "Use fixed template; practice weekly"],
    ["Speaking", "~20 min","2 role-play consultations (patient actor)", "HIGH", "Partner practice; open/close well"],
]
oet_cw = [22*mm, 18*mm, 58*mm, 32*mm, 39*mm]
ot = Table(oet_ref, colWidths=oet_cw, repeatRows=1)
ot.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_TEAL),
    ("TEXTCOLOR",     (0,0), (-1,0), C_WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 8),
    ("GRID",          (0,0), (-1,-1), 0.4, C_MGRAY),
    ("TOPPADDING",    (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ("BACKGROUND",    (0,1), (-1,1), C_LGRAY),
    ("BACKGROUND",    (0,3), (-1,3), C_LGRAY),
    ("BACKGROUND",    (0,4), (-1,4), C_LTRED),
    ("BACKGROUND",    (0,2), (-1,2), C_WHITE),
]))
story.append(ot)
story.append(Spacer(1, 5*mm))

# Daily routine reminder
story.append(section_header("⏰  DAILY ROUTINE TEMPLATE (Internship Days)", bg=C_PURPLE))
story.append(Spacer(1, 2*mm))
routine = [
    ["Time", "Activity", "Duration"],
    ["Morning (before hospital)", "PLABable: 10-15 questions (topic-matched to current lecture)", "30 min"],
    ["Evening (after duty) – Part 1", "Dr. Marwah lecture OR Samson Notes revision", "45 min"],
    ["Evening – Part 2", "OET practice (rotate: Reading β†’ Listening β†’ Writing β†’ Speaking)", "30 min"],
    ["Saturday", "PLABable full topic session + timed mock (40-50 Qs)", "2-3 hrs"],
    ["Sunday", "OET full mock OR letter writing + review + speaking roleplay", "2-3 hrs"],
    ["Post-internship (Jun 2027+)", "Full-time PLAB 2: Geeky Medics + OSCE roleplay + ethics", "6-8 hrs"],
]
rt = Table(routine, colWidths=[45*mm, 100*mm, 24*mm], repeatRows=1)
rt.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), C_PURPLE),
    ("TEXTCOLOR",     (0,0), (-1,0), C_WHITE),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 8),
    ("GRID",          (0,0), (-1,-1), 0.4, C_MGRAY),
    ("TOPPADDING",    (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
for i in range(1, len(routine)):
    bg = C_LAVENDER if i % 2 == 0 else C_WHITE
    rt.setStyle(TableStyle([("BACKGROUND", (0,i), (-1,i), bg)]))
story.append(rt)
story.append(Spacer(1, 4*mm))

# Footer
footer_data = [[Paragraph(
    "Generated by Orris AI  Β·  Tailored for: Indian MBBS Intern, GMC Silvassa  Β·  PLAB 1: May 2027  Β·  PLAB 2: Aug/Sep 2027  Β·  OET: Feb/Mar 2027",
    sty(size=7, color=C_WHITE, align=TA_CENTER)
)]]
ft = Table(footer_data, colWidths=[doc.width])
ft.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,-1), C_NAVY),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(ft)

# Build
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /tmp/workspace/plab-oet-tracker && python generate_tracker.py 2>&1

Running Command

ls -lh /tmp/workspace/plab-oet-tracker/PLAB_OET_Study_Tracker.pdf

Your printable study tracker PDF is ready! πŸŽ‰

PLAB OET Study Tracker

PDF Document Β· PDF


Here's what's inside the PDF (15 pages, A4, print-ready):
PageContent
Page 1Cover + Exam milestone strip + Phase overview table + Personal info box
Pages 2-13One full page per month (Jul 2026 - Jun 2027)
Pages 14-15July + August 2027 (PLAB 2 intensive + exam)
Last pageFull toolkit reference + OET sub-test guide + Daily routine template
Each monthly page includes:
  • ☐ PLAB task checklist (left column, navy)
  • ☐ OET task checklist (right column, teal)
  • βœ… Monthly goals to tick off (amber)
  • πŸ“ Notes / reflection space
  • πŸ“Š Score tracker (PLABable mock score, accuracy %, OET sub-test grades)
  • Red alert banners for exam months (OET Feb, PLAB 1 May, PLAB 2 Aug)
Print it double-sided, bind it, and stick it on your study desk. Every month is self-contained so you can tear and use one page at a time if you prefer. Good luck! πŸ’ͺ
This is a shared conversation. Sign in to Orris to start your own chat.