Hi

Hey! How can I help you today?

I am preparing for neet 2027

That's great! NEET 2027 gives you a solid runway to prepare well. I can help you across all three subjects - Physics, Chemistry, and Biology.
Here's how I can assist you:
Biology
  • Explain concepts from Botany and Zoology
  • Help with NCERT-based questions
  • Cover topics like genetics, ecology, human physiology, cell biology, etc.
Chemistry
  • Physical, Organic, and Inorganic Chemistry concepts
  • Reaction mechanisms, named reactions, periodic trends
  • Problem-solving for numerical questions
Physics
  • Concepts and derivations
  • Numerical problem practice
  • Topics like mechanics, electrostatics, optics, modern physics, etc.
Other support
  • Topic-wise notes and summaries
  • Previous year question (PYQ) analysis
  • Doubt clearing on any concept
  • Study strategy and topic prioritization

What would you like to start with? You can ask me a concept, a doubt, a question from any topic, or even ask me to suggest a study plan.

All

Asking for Preferences
Got it! You're in Class 12, all subjects feel tough, and you need concept clarity. That's actually the best place to start - strong concepts make everything else (PYQs, MCQs, revision) much easier.
Here's a practical approach for you:

Your NEET 2027 Game Plan

You have ~12-13 months. That's enough time to cover everything thoroughly if you're consistent.

Phase 1: Foundation (Now - Oct 2026)

Focus on Class 12 syllabus alongside your school, and revise Class 11 topics in parallel.
SubjectPriority Class 12 Topics to Start
BiologyReproduction, Genetics & Evolution, Biology in Human Welfare
ChemistryElectrochemistry, Chemical Kinetics, Coordination Compounds, Organic (Amines, Biomolecules)
PhysicsElectrostatics, Current Electricity, Magnetic Effects, Optics

Phase 2: Complete + Practice (Nov 2026 - Feb 2027)

  • Finish full syllabus
  • Start solving PYQs topic-wise
  • Focus on NCERT thoroughly (especially Biology - 90%+ questions are NCERT-based)

Phase 3: Revision + Mocks (Mar - May 2027)

  • Full syllabus revision (at least 3 rounds)
  • Daily mock tests
  • Weak area targeting

Subject-wise Tips

Biology - Most scoring (360 marks). Read NCERT line by line. Diagrams are frequently asked. Target 300+.
Chemistry - Balance theory (Inorganic = NCERT) and numericals (Physical). Organic reactions need daily practice.
Physics - Most concept-heavy. Build formula sheets. Practice at least 20 numericals per topic before moving on.

How to use me effectively

Just ask things like:
  • "Explain the mechanism of DNA replication"
  • "I don't understand coordination compounds - start from basics"
  • "Give me 5 PYQ-style questions on Ray Optics"
  • "What's the difference between Km and Vmax in enzymes?"
What topic would you like to start with today?

Ok

Pick a topic and let's dive in! ๐ŸŽฏ
What do you want to start with today?
Some popular starting points for Class 12 NEET prep:
  • Bio: Reproduction in organisms / Genetics
  • Chem: Electrochemistry / Coordination compounds
  • Physics: Electrostatics / Current electricity
Just name the topic - or ask any doubt you have right now!
attachment
attachment

I have exam of these topics

Your Minor Test is on 5th July 2026 - that's just 6 days away! Let's make the most of it.
Here's your syllabus breakdown:
SubjectTopic
PhysicsUnits and Dimensions
ChemistryMole Concept and Atomic Structure
Biology (Botany)Cell - The Unit of Life, Cell Cycle and Division (upto Mitosis)
Biology (Zoology)Breathing and Exchange of Gases

These are all high-weightage NEET topics - great that you're focusing on them early.
Where do you want to start?
  1. ๐Ÿ“ Physics - Units & Dimensions
  2. โš—๏ธ Chemistry - Mole Concept & Atomic Structure
  3. ๐ŸŒฟ Botany - Cell: Unit of Life + Cell Cycle/Mitosis
  4. ๐Ÿซ Zoology - Breathing & Exchange of Gases
  5. ๐Ÿ—‚๏ธ Give me a quick revision summary of ALL topics
Just pick a number or name the topic!

All


6-Day Study Plan Before Your Test

DayFocus
Today (June 29)Cell - Unit of Life (read + revise organelles)
June 30Cell Cycle + Mitosis (stages with diagrams)
July 1Breathing & Exchange of Gases
July 2Mole Concept + Atomic Structure
July 3Units & Dimensions + solve PYQs for all topics
July 4Full mock revision + weak areas
July 5TEST DAY - quick morning revision

Ask me anything from any of these topics - concept doubts, MCQ practice, formula help - I'm here! ๐Ÿ’ช

All in pdf so that I can take print outโ€ฆ

Reading File
Running Command

mkdir -p /home/daytona/workspace/neet-revision && ls /home/daytona/workspace/neet-revision/

Writing File

~/neet-revision/generate_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
                                 TableStyle, HRFlowable, PageBreak)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics

OUTPUT = "/home/daytona/workspace/neet-revision/NEET_Revision_Guide.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.8*cm, leftMargin=1.8*cm,
    topMargin=1.8*cm, bottomMargin=1.8*cm,
    title="NEET 2027 - Minor Test Revision Guide",
    author="Orris AI"
)

W, H = A4
styles = getSampleStyleSheet()

# Custom styles
def make_style(name, parent='Normal', **kwargs):
    s = ParagraphStyle(name, parent=styles[parent], **kwargs)
    return s

cover_title = make_style('CoverTitle', fontSize=26, fontName='Helvetica-Bold',
                          textColor=colors.HexColor('#1a237e'), alignment=TA_CENTER,
                          spaceAfter=8)
cover_sub = make_style('CoverSub', fontSize=14, fontName='Helvetica',
                        textColor=colors.HexColor('#37474f'), alignment=TA_CENTER, spaceAfter=6)
cover_info = make_style('CoverInfo', fontSize=12, fontName='Helvetica',
                         textColor=colors.HexColor('#e65100'), alignment=TA_CENTER, spaceAfter=4)

sec_title = make_style('SecTitle', fontSize=16, fontName='Helvetica-Bold',
                        textColor=colors.white, alignment=TA_LEFT, spaceAfter=4,
                        spaceBefore=12, leftIndent=6)
sub_title = make_style('SubTitle', fontSize=13, fontName='Helvetica-Bold',
                        textColor=colors.HexColor('#1a237e'), spaceAfter=4, spaceBefore=8)
sub2_title = make_style('Sub2Title', fontSize=11, fontName='Helvetica-Bold',
                         textColor=colors.HexColor('#37474f'), spaceAfter=3, spaceBefore=6)
body = make_style('Body', fontSize=9.5, leading=14, spaceAfter=3)
bullet = make_style('Bullet', fontSize=9.5, leading=14, leftIndent=14,
                     bulletIndent=4, spaceAfter=2)
note_style = make_style('Note', fontSize=9, fontName='Helvetica-Oblique',
                         textColor=colors.HexColor('#b71c1c'), leftIndent=10,
                         borderPad=4, spaceAfter=4)

# Table style helper
def plain_table(data, col_widths, header_color='#1a237e', alt_row=True):
    t = Table(data, colWidths=col_widths, repeatRows=1)
    style_cmds = [
        ('BACKGROUND', (0,0), (-1,0), colors.HexColor(header_color)),
        ('TEXTCOLOR', (0,0), (-1,0), colors.white),
        ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
        ('FONTSIZE', (0,0), (-1,0), 9),
        ('FONTSIZE', (0,1), (-1,-1), 9),
        ('FONTNAME', (0,1), (-1,-1), 'Helvetica'),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f5f5f5'), colors.white] if alt_row else [colors.white]),
        ('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#bdbdbd')),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 6),
        ('RIGHTPADDING', (0,0), (-1,-1), 6),
        ('ALIGN', (0,0), (-1,-1), 'LEFT'),
    ]
    t.setStyle(TableStyle(style_cmds))
    return t

def section_header(text, color='#1a237e'):
    """Colored section header block."""
    data = [[Paragraph(text, sec_title)]]
    t = Table(data, colWidths=[W - 3.6*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor(color)),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
    ]))
    return t

def tip_box(text, bg='#fff8e1', border='#f9a825'):
    data = [[Paragraph(text, make_style('TipInner', fontSize=9, fontName='Helvetica-Oblique',
                                         textColor=colors.HexColor('#4e342e'), leading=13))]]
    t = Table(data, colWidths=[W - 3.6*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor(bg)),
        ('BOX', (0,0), (-1,-1), 1, colors.HexColor(border)),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
    ]))
    return t

story = []

# โ”€โ”€โ”€ COVER PAGE โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(Spacer(1, 2*cm))
story.append(Paragraph("NEET 2027", cover_title))
story.append(Paragraph("Minor Test - Complete Revision Guide", cover_sub))
story.append(Spacer(1, 0.4*cm))
story.append(HRFlowable(width="80%", thickness=2, color=colors.HexColor('#1a237e'), hAlign='CENTER'))
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph("TEST DATE: 5th July 2026 (Sunday) | 2:00 PM - 5:00 PM", cover_info))
story.append(Paragraph("EUROSE BATCH - Pre Medical Session 2026-27", cover_sub))
story.append(Spacer(1, 1.2*cm))

# syllabus table on cover
syl_data = [
    ['Subject', 'Topics'],
    ['Physics', 'Units and Dimensions'],
    ['Chemistry', 'Mole Concept & Atomic Structure'],
    ['Biology - Botany', 'Cell: Unit of Life | Cell Cycle & Mitosis'],
    ['Biology - Zoology', 'Breathing and Exchange of Gases'],
]
syl_t = plain_table(syl_data, [5*cm, 11*cm], header_color='#37474f')
story.append(syl_t)
story.append(Spacer(1, 0.8*cm))

study_data = [
    ['Day', 'Focus Area'],
    ['Today (June 29)', 'Cell - Unit of Life (organelles & structure)'],
    ['June 30', 'Cell Cycle + Mitosis (stages with diagrams)'],
    ['July 1', 'Breathing & Exchange of Gases'],
    ['July 2', 'Mole Concept + Atomic Structure'],
    ['July 3', 'Units & Dimensions + PYQ practice all topics'],
    ['July 4', 'Full mock revision + weak areas'],
    ['July 5 (TEST DAY)', 'Quick morning revision only'],
]
study_t = plain_table(study_data, [5*cm, 11*cm], header_color='#2e7d32')
story.append(Paragraph("6-Day Study Plan", sub_title))
story.append(study_t)
story.append(PageBreak())

# โ”€โ”€โ”€ PHYSICS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("โšก  PHYSICS - Units and Dimensions", '#1565c0'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Fundamental SI Units", sub_title))
si_data = [
    ['Quantity', 'SI Unit', 'Symbol'],
    ['Length', 'Metre', 'm'],
    ['Mass', 'Kilogram', 'kg'],
    ['Time', 'Second', 's'],
    ['Electric Current', 'Ampere', 'A'],
    ['Temperature', 'Kelvin', 'K'],
    ['Luminous Intensity', 'Candela', 'cd'],
    ['Amount of Substance', 'Mole', 'mol'],
]
story.append(plain_table(si_data, [6*cm, 6*cm, 4*cm], header_color='#1565c0'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Supplementary Units", sub2_title))
story.append(Paragraph("โ€ข Plane angle โ†’ radian (rad)", bullet))
story.append(Paragraph("โ€ข Solid angle โ†’ steradian (sr)", bullet))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Important Derived Units & Dimensions", sub_title))
dim_data = [
    ['Quantity', 'Formula', 'Dimensions'],
    ['Force', 'ma', '[MLTโปยฒ]'],
    ['Work / Energy', 'Fd', '[MLยฒTโปยฒ]'],
    ['Power', 'W/t', '[MLยฒTโปยณ]'],
    ['Pressure', 'F/A', '[MLโปยนTโปยฒ]'],
    ['Velocity', 'd/t', '[LTโปยน]'],
    ['Acceleration', 'v/t', '[LTโปยฒ]'],
    ['Momentum', 'mv', '[MLTโปยน]'],
    ['Density', 'm/V', '[MLโปยณ]'],
    ['Frequency', '1/t', '[Tโปยน]'],
    ['Charge', 'It', '[AT]'],
    ['Voltage', 'W/q', '[MLยฒTโปยณAโปยน]'],
]
story.append(plain_table(dim_data, [5.5*cm, 4.5*cm, 6*cm], header_color='#1565c0'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Quantities with Same Dimensions", sub_title))
same_dim = [
    ['Dimensions', 'Quantities'],
    ['[MLยฒTโปยฒ]', 'Work, Energy, Torque'],
    ['[Tโปยน]', 'Frequency, Angular velocity, Decay constant'],
    ['[MLTโปยน]', 'Impulse, Momentum'],
    ['[MLโปยนTโปยฒ]', 'Stress, Pressure, Elastic modulus'],
]
story.append(plain_table(same_dim, [6*cm, 10*cm], header_color='#1565c0'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Rules for Significant Figures", sub_title))
for s in [
    "1. All non-zero digits are significant.",
    "2. Zeros <b>between</b> non-zero digits are significant. (e.g., 1007 โ†’ 4 sig figs)",
    "3. <b>Leading</b> zeros are NOT significant. (e.g., 0.007 โ†’ 1 sig fig)",
    "4. <b>Trailing</b> zeros after decimal ARE significant. (e.g., 1.500 โ†’ 4 sig figs)",
]:
    story.append(Paragraph(s, bullet))
story.append(Spacer(1, 0.2*cm))

story.append(Paragraph("Uses of Dimensional Analysis", sub_title))
for s in [
    "1. Check correctness of an equation (dimensions must balance on both sides).",
    "2. Derive relations between physical quantities.",
    "3. Convert units from one system to another.",
]:
    story.append(Paragraph(s, bullet))
story.append(Spacer(1, 0.2*cm))

story.append(tip_box("NEET TIP: Dimensional analysis CANNOT determine dimensionless constants (2, ฯ€, ยฝ) and CANNOT check equations involving addition or subtraction."))
story.append(PageBreak())

# โ”€โ”€โ”€ CHEMISTRY โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("โš—๏ธ  CHEMISTRY - Mole Concept & Atomic Structure", '#4a148c'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("PART A: MOLE CONCEPT", sub_title))
story.append(Paragraph("1 mole = <b>6.022 ร— 10ยฒยณ</b> particles (Avogadro's number). "
                        "1 mole of any gas at STP = <b>22.4 L</b>. "
                        "Molar mass = mass of 1 mole in grams.", body))
story.append(Spacer(1, 0.2*cm))

story.append(Paragraph("Key Formulas", sub2_title))
mol_data = [
    ['Formula', 'Expression'],
    ['Moles (from mass)', 'n = mass (g) / Molar mass'],
    ['Moles (from particles)', 'n = N / Nโ‚'],
    ['Moles of gas at STP', 'n = Volume (L) / 22.4'],
    ['Molarity (M)', 'Moles of solute / Volume of solution (L)'],
    ['Molality (m)', 'Moles of solute / Mass of solvent (kg)'],
    ['Mole fraction', 'nโ‚ / (nโ‚ + n_b)'],
    ['% by mass', '(mass of solute / mass of solution) ร— 100'],
]
story.append(plain_table(mol_data, [7*cm, 9*cm], header_color='#4a148c'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Empirical vs Molecular Formula", sub2_title))
story.append(Paragraph("โ€ข <b>Empirical formula</b> = simplest whole number ratio of atoms.", bullet))
story.append(Paragraph("โ€ข <b>Molecular formula</b> = actual number of atoms.", bullet))
story.append(Paragraph("โ€ข Molecular formula = n ร— Empirical formula &nbsp;&nbsp; where n = Molecular mass / Empirical formula mass", bullet))
story.append(Spacer(1, 0.2*cm))

story.append(tip_box("POAC (Principle of Atom Conservation): Atoms of each element are conserved in a reaction. Very useful for mole calculations without balancing equations."))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("PART B: ATOMIC STRUCTURE", sub_title))

story.append(Paragraph("Discovery Timeline", sub2_title))
disc_data = [
    ['Discovery', 'Scientist', 'Key Point'],
    ['Electron', 'J.J. Thomson', 'Cathode ray experiment; e/m ratio measured'],
    ['Proton', 'Goldstein', 'Anode rays (canal rays)'],
    ['Neutron', 'Chadwick', 'Bombardment of Be with ฮฑ-particles'],
    ['Nucleus', 'Rutherford', 'Gold foil (ฮฑ-scattering) experiment'],
]
story.append(plain_table(disc_data, [4*cm, 4.5*cm, 7.5*cm], header_color='#4a148c'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Bohr's Model (Hydrogen-like atoms)", sub2_title))
story.append(Paragraph("โ€ข Electrons in fixed circular orbits (shells); energy is quantized.", bullet))
story.append(Paragraph("โ€ข Energy: E_n = โˆ’13.6 / nยฒ eV &nbsp;&nbsp;&nbsp; Radius: r_n = 0.529 ร— nยฒ ร… (for H)", bullet))
story.append(Paragraph("โ€ข Absorbs energy โ†’ jumps to higher orbit. Releases energy โ†’ falls to lower orbit.", bullet))
story.append(Spacer(1, 0.2*cm))

story.append(Paragraph("Spectral Series of Hydrogen", sub2_title))
spec_data = [
    ['Series', 'Transition to Shell', 'Region'],
    ['Lyman', 'n = 1', 'Ultraviolet (UV)'],
    ['Balmer', 'n = 2', 'Visible'],
    ['Paschen', 'n = 3', 'Infrared (IR)'],
    ['Brackett', 'n = 4', 'Infrared (IR)'],
    ['Pfund', 'n = 5', 'Infrared (IR)'],
]
story.append(plain_table(spec_data, [5*cm, 5.5*cm, 5.5*cm], header_color='#4a148c'))
story.append(tip_box("Memory Trick: \"Let Bright People Be Positive\" โ†’ Lyman, Balmer, Paschen, Brackett, Pfund"))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Quantum Numbers", sub2_title))
qn_data = [
    ['Quantum Number', 'Symbol', 'Values', 'Describes'],
    ['Principal', 'n', '1, 2, 3...', 'Shell / Energy level'],
    ['Azimuthal', 'l', '0 to (nโˆ’1)', 'Subshell (s, p, d, f)'],
    ['Magnetic', 'mโ‚—', 'โˆ’l to +l', 'Orbital orientation'],
    ['Spin', 'mโ‚›', '+ยฝ or โˆ’ยฝ', 'Direction of electron spin'],
]
story.append(plain_table(qn_data, [4*cm, 2.5*cm, 4*cm, 5.5*cm], header_color='#4a148c'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Electronic Configuration Rules", sub2_title))
for s in [
    "<b>Aufbau Principle</b>: Fill lowest energy orbitals first.",
    "<b>Pauli Exclusion Principle</b>: No two electrons have same 4 quantum numbers; max 2 electrons per orbital.",
    "<b>Hund's Rule</b>: One electron in each orbital of same subshell before pairing (maximum multiplicity).",
]:
    story.append(Paragraph("โ€ข " + s, bullet))
story.append(Paragraph("Filling order: 1s &lt; 2s &lt; 2p &lt; 3s &lt; 3p &lt; 4s &lt; 3d &lt; 4p &lt; 5s &lt; 4d...", body))
story.append(Spacer(1, 0.2*cm))
story.append(tip_box("de Broglie: ฮป = h/mv (wave nature of matter) | Heisenberg: ฮ”x ยท ฮ”p โ‰ฅ h/4ฯ€ (position & momentum cannot both be exact)"))
story.append(PageBreak())

# โ”€โ”€โ”€ BIOLOGY BOTANY โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("๐ŸŒฟ  BIOLOGY (BOTANY) - Cell: Unit of Life + Cell Cycle & Mitosis", '#1b5e20'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("PART A: CELL - THE UNIT OF LIFE", sub_title))

story.append(Paragraph("Cell Theory", sub2_title))
story.append(Paragraph("Proposed by <b>Schleiden</b> (plants) and <b>Schwann</b> (animals); Virchow added:", body))
for s in [
    "All living organisms are made of cells.",
    "Cell is the basic structural and functional unit of life.",
    "All cells arise from pre-existing cells โ€” <i>\"Omnis cellula e cellula\"</i> (Virchow).",
]:
    story.append(Paragraph("โ€ข " + s, bullet))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Prokaryotic vs Eukaryotic Cell", sub2_title))
prok_data = [
    ['Feature', 'Prokaryotic', 'Eukaryotic'],
    ['Nucleus', 'Absent (nucleoid)', 'Present (membrane-bound)'],
    ['Size', '1โ€“10 ยตm', '10โ€“100 ยตm'],
    ['Membrane-bound organelles', 'Absent', 'Present'],
    ['Ribosomes', '70S (50S + 30S)', '80S (60S + 40S)'],
    ['Cell wall', 'Peptidoglycan (bacteria)', 'Cellulose (plants); absent in animals'],
    ['Examples', 'Bacteria, Cyanobacteria', 'Plant, Animal, Fungal cells'],
]
story.append(plain_table(prok_data, [5*cm, 5.5*cm, 5.5*cm], header_color='#1b5e20'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Cell Organelles - Quick Reference", sub_title))
org_data = [
    ['Organelle', 'Key Function', 'Special Feature'],
    ['Cell membrane', 'Selectively permeable barrier', 'Fluid mosaic model (Singer & Nicolson, 1972)'],
    ['Cell wall', 'Protection, shape', 'Cellulose (plants); chitin (fungi)'],
    ['Nucleus', 'Control centre, heredity', 'Double membrane; nuclear pores'],
    ['Mitochondria', 'ATP production (respiration)', 'Own DNA & ribosomes; double membrane'],
    ['Chloroplast', 'Photosynthesis', 'Own DNA; double membrane; plants only'],
    ['Rough ER', 'Protein synthesis & transport', 'Has ribosomes on surface'],
    ['Smooth ER', 'Lipid synthesis, detox', 'No ribosomes'],
    ['Golgi Body', 'Secretion, modification', '"Post office of cell"; forms lysosomes'],
    ['Lysosomes', 'Intracellular digestion', '"Suicidal bags" (de Duve)'],
    ['Ribosomes', 'Protein synthesis', '70S prokaryotes; 80S eukaryotes'],
    ['Vacuoles', 'Storage, turgor pressure', 'Large central vacuole in plants'],
    ['Centrosome', 'Cell division', 'Absent in higher plants'],
    ['Peroxisomes', 'Oxidative reactions', 'Break down Hโ‚‚Oโ‚‚'],
]
story.append(plain_table(org_data, [3.5*cm, 5*cm, 7.5*cm], header_color='#1b5e20'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Nucleus", sub2_title))
for s in [
    "<b>Nuclear envelope</b>: double membrane with pores for RNA/protein transport.",
    "<b>Nucleolus</b>: site of rRNA synthesis.",
    "<b>Chromatin</b>: DNA + histone proteins.",
    "<b>Euchromatin</b>: loosely packed, transcriptionally active.",
    "<b>Heterochromatin</b>: densely packed, transcriptionally inactive.",
]:
    story.append(Paragraph("โ€ข " + s, bullet))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("PART B: CELL CYCLE & MITOSIS", sub_title))

story.append(Paragraph("Cell Cycle Phases", sub2_title))
cc_data = [
    ['Phase', 'What Happens'],
    ['G1 (Gap 1)', 'Cell grows; proteins synthesized; organelles increase in number'],
    ['S (Synthesis)', 'DNA replication occurs (2N DNA content โ†’ 4N)'],
    ['G2 (Gap 2)', 'Further growth; preparation for division; proteins for mitosis made'],
    ['M (Mitosis)', 'Actual nuclear and cell division'],
    ['G0', 'Quiescent phase; cells exit cycle temporarily (e.g., nerve cells)'],
]
story.append(plain_table(cc_data, [4*cm, 12*cm], header_color='#1b5e20'))
story.append(Paragraph("G1 + S + G2 = <b>Interphase</b> (longest phase of cell cycle). DNA replication occurs in S phase.", body))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Stages of Mitosis (PMAT)", sub_title))
mit_data = [
    ['Stage', 'Key Events'],
    ['Prophase', 'Chromatin condenses into chromosomes; nucleolus disappears; spindle forms; nuclear envelope breaks down'],
    ['Metaphase', 'Chromosomes align at metaphase plate (equatorial plane); spindle attaches at centromere (kinetochore). BEST stage for karyotyping.'],
    ['Anaphase', 'Centromeres split; sister chromatids pulled to opposite poles; cell elongates; V/J/L chromosome shapes'],
    ['Telophase', 'Chromosomes reach poles; nuclear envelope reforms; nucleolus reappears; chromosomes decondense'],
    ['Cytokinesis', 'Animal cells: cleavage furrow (centripetal - inward). Plant cells: cell plate (centrifugal - outward from center)'],
]
story.append(plain_table(mit_data, [3.5*cm, 12.5*cm], header_color='#1b5e20'))
story.append(Spacer(1, 0.2*cm))

story.append(Paragraph("Significance of Mitosis", sub2_title))
for s in [
    "Growth and repair of body tissues.",
    "Maintains chromosome number (2N โ†’ 2N); daughter cells genetically identical to parent.",
    "Asexual reproduction in lower organisms.",
]:
    story.append(Paragraph("โ€ข " + s, bullet))
story.append(tip_box("Memory: PMAT = Prophase โ†’ Metaphase โ†’ Anaphase โ†’ Telophase | Metaphase = best stage for karyotyping | Cytokinesis: cleavage furrow (animal), cell plate (plant)"))
story.append(PageBreak())

# โ”€โ”€โ”€ BIOLOGY ZOOLOGY โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("๐Ÿซ  BIOLOGY (ZOOLOGY) - Breathing and Exchange of Gases", '#b71c1c'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Respiratory Organs in Animals", sub2_title))
resp_data = [
    ['Animal Group', 'Respiratory Organ'],
    ['Insects', 'Tracheal system'],
    ['Fish', 'Gills'],
    ['Amphibians', 'Skin + Lungs'],
    ['Birds & Mammals', 'Lungs'],
]
story.append(plain_table(resp_data, [7*cm, 9*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Pathway of Air", sub_title))
story.append(Paragraph("Nostrils โ†’ Nasal cavity โ†’ Pharynx โ†’ Larynx โ†’ Trachea โ†’ Bronchi โ†’ Bronchioles โ†’ <b>Alveoli</b>", body))
story.append(Spacer(1, 0.1*cm))
for s in [
    "<b>Trachea</b>: C-shaped cartilage rings; keeps airway open.",
    "<b>Epiglottis</b>: prevents food from entering trachea.",
    "<b>Alveoli</b>: actual site of gas exchange; ~300 million in humans; covered by capillary network and surfactant.",
    "Right lung = 3 lobes; Left lung = 2 lobes (heart takes space on left).",
    "<b>Pleura</b>: double membrane covering lungs; pleural fluid reduces friction.",
]:
    story.append(Paragraph("โ€ข " + s, bullet))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Mechanism of Breathing", sub_title))
mech_data = [
    ['Phase', 'Diaphragm', 'Intercostal muscles', 'Thoracic volume', 'Pressure', 'Air'],
    ['Inspiration\n(Breathing in)', 'Contracts\n(moves down)', 'External muscles contract\n(ribs up & out)', 'Increases', 'Decreases', 'Rushes IN'],
    ['Expiration\n(Breathing out)', 'Relaxes\n(moves up)', 'Internal muscles contract\n(ribs down & in)', 'Decreases', 'Increases', 'Pushed OUT'],
]
story.append(plain_table(mech_data, [2.5*cm, 3*cm, 4*cm, 2.8*cm, 2.5*cm, 2.2*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Respiratory Volumes & Capacities (IMPORTANT for MCQs)", sub_title))
vol_data = [
    ['Volume / Capacity', 'Approx. Value', 'Definition'],
    ['Tidal Volume (TV)', '~500 mL', 'Air moved in a normal breath'],
    ['IRV (Inspiratory Reserve)', '~2500โ€“3000 mL', 'Extra air forcefully inhaled above TV'],
    ['ERV (Expiratory Reserve)', '~1000โ€“1100 mL', 'Extra air forcefully exhaled below TV'],
    ['Residual Volume (RV)', '~1100โ€“1200 mL', 'Air remaining after maximum expiration'],
    ['Inspiratory Capacity (IC)', '~3500 mL', 'TV + IRV'],
    ['Functional Residual Capacity (FRC)', '~2300 mL', 'ERV + RV'],
    ['Vital Capacity (VC)', '~4600 mL', 'TV + IRV + ERV'],
    ['Total Lung Capacity (TLC)', '~5800 mL', 'VC + RV'],
]
story.append(plain_table(vol_data, [4.5*cm, 3*cm, 8.5*cm], header_color='#b71c1c'))
story.append(tip_box("KEY: RV (Residual Volume) can NEVER be expired โ€” always remains in the lungs."))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Exchange of Gases - Partial Pressures", sub_title))
pp_data = [
    ['Gas', 'Alveolar Air', 'Deoxygenated Blood', 'Oxygenated Blood'],
    ['pOโ‚‚', '104 mmHg', '40 mmHg', '95 mmHg'],
    ['pCOโ‚‚', '40 mmHg', '45 mmHg', '40 mmHg'],
]
story.append(plain_table(pp_data, [4*cm, 4*cm, 4.5*cm, 3.5*cm], header_color='#b71c1c'))
story.append(Paragraph("Gas exchange occurs by <b>simple diffusion</b> along pressure gradients at the alveolar surface.", body))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Transport of Gases", sub_title))
transport_data = [
    ['Gas', 'Form', 'Percentage'],
    ['Oโ‚‚', 'As oxyhaemoglobin (Hb + Oโ‚‚)', '97%'],
    ['Oโ‚‚', 'Dissolved in plasma', '3%'],
    ['COโ‚‚', 'As bicarbonate ions (HCOโ‚ƒโป) in plasma', '70%'],
    ['COโ‚‚', 'As carbaminohaemoglobin (COโ‚‚ + Hb)', '20โ€“25%'],
    ['COโ‚‚', 'Dissolved in plasma', '7%'],
]
story.append(plain_table(transport_data, [2.5*cm, 9.5*cm, 4*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("โ€ข 1 Hb carries <b>4 Oโ‚‚ molecules</b> (4 haem groups).", bullet))
story.append(Paragraph("โ€ข <b>Bohr Effect</b>: decrease in pH (more COโ‚‚) โ†’ Hb releases Oโ‚‚ more readily.", bullet))
story.append(Paragraph("โ€ข <b>Chloride Shift (Hamburger Shift)</b>: HCOโ‚ƒโป moves out of RBC โ†’ Clโป moves in to maintain electrical neutrality.", bullet))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Regulation of Respiration", sub2_title))
story.append(Paragraph("โ€ข <b>Respiratory rhythm centre</b>: medulla oblongata (primary control).", bullet))
story.append(Paragraph("โ€ข <b>Pneumotaxic centre</b>: in pons; moderates respiratory rate.", bullet))
story.append(Paragraph("โ€ข COโ‚‚ levels (NOT Oโ‚‚) primarily regulate breathing rate.", bullet))
story.append(Paragraph("โ€ข Chemoreceptors in <b>aortic arch</b> and <b>carotid body</b> detect pCOโ‚‚ and pH changes.", bullet))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Respiratory Disorders", sub2_title))
dis_data = [
    ['Disorder', 'Key Feature'],
    ['Asthma', 'Inflammation of bronchioles; wheezing; reversible'],
    ['Emphysema', 'Destruction of alveolar walls (caused by smoking); barrel chest; irreversible'],
    ['Pneumonia', 'Alveoli filled with fluid (bacterial or viral infection)'],
    ['Silicosis', 'Occupational lung disease from silica dust exposure'],
    ['Asbestosis', 'Occupational lung disease from asbestos fibre inhalation'],
]
story.append(plain_table(dis_data, [4*cm, 12*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#bdbdbd')))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("All the best for your test on 5th July 2026! | Prepared with Orris AI", make_style('Footer', fontSize=8, textColor=colors.grey, alignment=TA_CENTER)))

# โ”€โ”€โ”€ BUILD โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
Running Command

cd /home/daytona/workspace/neet-revision && python generate_pdf.py

Your printable revision guide is ready! ๐ŸŽ‰

NEET Revision Guide

PDF Document ยท PDF

What's inside the PDF:
  • Cover page with syllabus table + 6-day study plan
  • Physics - SI units, dimensions table, significant figures, dimensional analysis tips
  • Chemistry - Mole concept formulas, atomic structure, spectral series, quantum numbers, electronic config rules
  • Biology Botany - Cell theory, prokaryote vs eukaryote, all organelles, nucleus, mitosis stages (PMAT)
  • Biology Zoology - Breathing mechanism, all respiratory volumes/capacities, gas transport %, Bohr effect, respiratory disorders
All topics are color-coded by subject and formatted for clean A4 printing. Good luck on 5th July! ๐Ÿ’ช
This is a shared conversation. Sign in to Orris to start your own chat.