Pterygium explain as a short answer with diagram
Medical diagram of pterygium of the eye. Show a front-facing eye illustration with a labeled triangular fibrovascular growth (pterygium) growing from the nasal side of the conjunctiva across the limbus onto the cornea. Label the following parts clearly: Cap (avascular advancing edge), Head (apex on cornea), Body (wide vascularized base on conjunctiva), Limbus, Cornea, Conjunctiva, Iris, Pupil, and Stocker line (iron line in corneal epithelium anterior to head). Use a clean educational medical illustration style with a white background.


| Part | Description |
|---|---|
| Cap | Avascular, halo-like zone at the advancing edge on the cornea |
| Head | Apex resting on the cornea, invades Bowman layer |
| Body | Broad, vascularized base lying on the bulbar conjunctiva |
| Feature | True Pterygium | Pseudopterygium |
|---|---|---|
| Cause | UV/degenerative | Acute inflammation (chemical burn, ulcer, trauma) |
| Location | Horizontal (3 or 9 o'clock) | Any position |
| Corneal attachment | Entire extent | Only at apex (head) |
| Probe test | Cannot pass probe beneath body | Probe can pass beneath body |
| Stage | Management |
|---|---|
| Asymptomatic/small | Lubricants, UV protection (sunglasses), observation |
| Inflamed | Topical vasoconstrictors/NSAIDs |
| Surgical | Indicated for progression toward visual axis, significant astigmatism, or cosmesis |
Key tip (Kanski): Recurrence risk is reduced by conjunctival autograft or intraoperative mitomycin C application.
Make a one-page reference card on pterygium diagnosis and treatment
ls /home/daytona/workspace/
mkdir -p /home/daytona/workspace/pterygium-refcard
~/pterygium-refcard/build.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// ── Fetch the clinical eye photo ──────────────────────────────────────────────
const IMG_URL = "https://cdn.orris.care/cdss_images/c2dc4546527a58c88b80302ff664398e382a5f0c222fa6067f04635217a14213.png";
const DIAG_URL = "https://cdn.orris.care/image-gen/ec806156299848c5965ec12c54f8de7a.png";
const imgs = JSON.parse(
execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js "${IMG_URL}" "${DIAG_URL}"`
).toString()
);
const clinicalImg = imgs[0].base64;
const diagImg = imgs[1].base64;
// ── Palette ───────────────────────────────────────────────────────────────────
const C = {
navy: "0D2B4E", // dominant dark
teal: "0A7B8C", // accent
tealLight: "0D9AAD",
amber: "D97B2B", // warm accent for warnings
white: "FFFFFF",
offWhite: "F4F8FB",
lightGrey: "E3EDF4",
midGrey: "7A93A8",
dark: "1A2E40",
red: "C0392B",
green: "1A7A4A",
};
const pres = new pptxgen();
// A4 landscape: 11.69" x 8.27"
pres.defineLayout({ name: "A4L", width: 11.69, height: 8.27 });
pres.layout = "A4L";
pres.title = "Pterygium Quick Reference Card";
const slide = pres.addSlide();
// ── BACKGROUND ────────────────────────────────────────────────────────────────
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 11.69, h: 8.27,
fill: { color: C.offWhite },
line: { color: C.offWhite },
});
// ── TOP HEADER BAR ────────────────────────────────────────────────────────────
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 11.69, h: 0.72,
fill: { color: C.navy },
line: { color: C.navy },
});
// Eye icon circle accent in header
slide.addShape(pres.ShapeType.ellipse, {
x: 0.22, y: 0.10, w: 0.50, h: 0.50,
fill: { color: C.teal },
line: { color: C.tealLight, width: 1.5 },
});
slide.addText("👁", { x: 0.22, y: 0.10, w: 0.50, h: 0.50, fontSize: 18, align: "center", valign: "middle", margin: 0 });
slide.addText("PTERYGIUM", {
x: 0.82, y: 0, w: 5, h: 0.72,
fontSize: 22, bold: true, color: C.white, valign: "middle", margin: 0, charSpacing: 3,
});
slide.addText("Quick Reference Card · Ophthalmology", {
x: 5.5, y: 0, w: 5.5, h: 0.72,
fontSize: 10, color: "A8C8D8", italic: true, align: "right", valign: "middle", margin: 0,
});
// Teal accent line below header
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0.72, w: 11.69, h: 0.055,
fill: { color: C.teal },
line: { color: C.teal },
});
// ── COLUMN LAYOUT: 3 columns ──────────────────────────────────────────────────
// Col 1: x=0.18 w=3.15
// Col 2: x=3.55 w=3.15
// Col 3: x=7.0 w=4.5 (wider for image + treatment)
const COL1_X = 0.18;
const COL2_X = 3.60;
const COL3_X = 7.08;
const COL_W = 3.15;
const COL3_W = 4.40;
const SECTION_Y_START = 0.88;
// ── Helper: section header ────────────────────────────────────────────────────
function sectionHeader(slide, x, y, w, label, color) {
color = color || C.teal;
slide.addShape(pres.ShapeType.rect, {
x, y, w, h: 0.26,
fill: { color },
line: { color },
rectRadius: 0.03,
});
slide.addText(label.toUpperCase(), {
x, y, w, h: 0.26,
fontSize: 8.5, bold: true, color: C.white,
align: "center", valign: "middle", margin: 0, charSpacing: 1.5,
});
}
// ── helper: small label pill ─────────────────────────────────────────────────
function pill(slide, x, y, label, bg, fg) {
bg = bg || C.teal; fg = fg || C.white;
const w = 1.0;
slide.addShape(pres.ShapeType.rect, { x, y, w, h: 0.21, fill: { color: bg }, line: { color: bg }, rectRadius: 0.08 });
slide.addText(label, { x, y, w, h: 0.21, fontSize: 7, bold: true, color: fg, align: "center", valign: "middle", margin: 0 });
}
// ══════════════════════════════════════════════════════════════════════════════
// COLUMN 1 — Definition, Anatomy, Risk Factors
// ══════════════════════════════════════════════════════════════════════════════
let y = SECTION_Y_START;
// DEFINITION
sectionHeader(slide, COL1_X, y, COL_W, "Definition");
y += 0.30;
slide.addShape(pres.ShapeType.rect, {
x: COL1_X, y, w: COL_W, h: 0.82,
fill: { color: C.white }, line: { color: C.lightGrey, width: 0.8 }, rectRadius: 0.05,
});
slide.addText(
"A triangular fibrovascular sub-epithelial ingrowth of degenerative bulbar conjunctival tissue, crossing the limbus onto the cornea.",
{ x: COL1_X + 0.08, y: y + 0.06, w: COL_W - 0.16, h: 0.70, fontSize: 8, color: C.dark, valign: "top" }
);
y += 0.88;
// ANATOMY — Parts
y += 0.10;
sectionHeader(slide, COL1_X, y, COL_W, "Anatomical Parts");
y += 0.30;
const parts = [
["CAP", C.teal, "Avascular, halo-like advancing edge on cornea"],
["HEAD", C.navy, "Apex on cornea; invades Bowman layer"],
["BODY", "1A5A6A","Broad, vascularized base on conjunctiva"],
];
parts.forEach(([lbl, col, desc]) => {
slide.addShape(pres.ShapeType.rect, {
x: COL1_X, y, w: 0.55, h: 0.24,
fill: { color: col }, line: { color: col }, rectRadius: 0.04,
});
slide.addText(lbl, { x: COL1_X, y, w: 0.55, h: 0.24, fontSize: 7, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });
slide.addText(desc, { x: COL1_X + 0.60, y: y + 0.02, w: COL_W - 0.65, h: 0.22, fontSize: 7.2, color: C.dark });
y += 0.28;
});
// Stocker line note
slide.addShape(pres.ShapeType.rect, {
x: COL1_X, y: y + 0.04, w: COL_W, h: 0.28,
fill: { color: "FFF3E0" }, line: { color: C.amber, width: 0.8 }, rectRadius: 0.04,
});
slide.addText(
[
{ text: "Stocker line: ", options: { bold: true, color: C.amber } },
{ text: "Iron deposits in corneal epithelium anterior to head", options: { color: C.dark } },
],
{ x: COL1_X + 0.08, y: y + 0.06, w: COL_W - 0.16, h: 0.24, fontSize: 7.2 }
);
y += 0.40;
// RISK FACTORS
y += 0.10;
sectionHeader(slide, COL1_X, y, COL_W, "Risk Factors");
y += 0.30;
const risks = [
"☀ Chronic UV exposure (most important)",
"🌏 Tropical / sunny climates",
"💨 Dust, wind, dry environments",
"💧 Chronic surface dryness",
"🧬 Familial tendency",
];
risks.forEach((r, i) => {
slide.addText(r, {
x: COL1_X + 0.08, y, w: COL_W - 0.16, h: 0.22,
fontSize: 7.5, color: C.dark,
fill: { color: i % 2 === 0 ? C.white : C.lightGrey },
});
y += 0.22;
});
// ══════════════════════════════════════════════════════════════════════════════
// COLUMN 2 — Symptoms, Signs, Pseudo vs True, DDx
// ══════════════════════════════════════════════════════════════════════════════
y = SECTION_Y_START;
sectionHeader(slide, COL2_X, y, COL_W, "Symptoms");
y += 0.30;
const sx = [
["Small lesions", "Often asymptomatic"],
["Irritation / grittiness", "Dellen effect (tear film disruption)"],
["Redness", "Episodic inflammation"],
["Blurred vision", "If visual axis involved"],
["Astigmatism", "Irregular corneal surface"],
["Cosmetic concern", ""],
];
sx.forEach(([a, b], i) => {
slide.addShape(pres.ShapeType.rect, {
x: COL2_X, y, w: COL_W, h: 0.22,
fill: { color: i % 2 === 0 ? C.white : C.lightGrey }, line: { color: C.lightGrey, width: 0.5 },
});
slide.addText(a, { x: COL2_X + 0.08, y: y + 0.02, w: 1.30, h: 0.18, fontSize: 7.2, bold: true, color: C.dark });
if (b) slide.addText(b, { x: COL2_X + 1.42, y: y + 0.02, w: 1.65, h: 0.18, fontSize: 7, color: C.midGrey });
y += 0.22;
});
// TRUE vs PSEUDO TABLE
y += 0.12;
sectionHeader(slide, COL2_X, y, COL_W, "True vs Pseudopterygium", C.navy);
y += 0.30;
// Table header
slide.addShape(pres.ShapeType.rect, {
x: COL2_X, y, w: COL_W, h: 0.22,
fill: { color: C.dark }, line: { color: C.dark },
});
["Feature", "True", "Pseudo"].forEach((h, i) => {
const xs = [COL2_X + 0.06, COL2_X + 1.05, COL2_X + 2.10];
slide.addText(h, { x: xs[i], y, w: i === 0 ? 0.95 : 0.95, h: 0.22, fontSize: 7, bold: true, color: C.white, valign: "middle", margin: 0 });
});
y += 0.22;
const tbl = [
["Cause", "UV / degen.", "Injury/burn"],
["Location", "Horiz (3/9)", "Any"],
["Apex fix", "Entire length", "Apex only"],
["Probe test","Cannot pass", "Can pass"],
];
tbl.forEach(([f, t, p], i) => {
slide.addShape(pres.ShapeType.rect, {
x: COL2_X, y, w: COL_W, h: 0.22,
fill: { color: i % 2 === 0 ? C.white : C.lightGrey }, line: { color: C.lightGrey, width: 0.5 },
});
[[f, COL2_X + 0.06, 0.90], [t, COL2_X + 1.02, 0.90], [p, COL2_X + 2.06, 1.0]].forEach(([txt, tx, tw]) => {
slide.addText(txt, { x: tx, y: y + 0.02, w: tw, h: 0.18, fontSize: 7, color: C.dark });
});
y += 0.22;
});
// DDx box
y += 0.12;
sectionHeader(slide, COL2_X, y, COL_W, "Differential Diagnosis", C.red);
y += 0.30;
const ddx = [
"Pinguecula — does NOT cross limbus onto cornea",
"Conjunctival intraepithelial neoplasia (CIN)",
"Limbal dermoid — congenital, inferotemporal",
"Conjunctival papilloma / nevus / melanoma",
"Peripheral hypertrophic subepithelial degeneration",
];
ddx.forEach((d, i) => {
slide.addText("• " + d, {
x: COL2_X + 0.06, y, w: COL_W - 0.12, h: 0.22,
fontSize: 7, color: C.dark,
fill: { color: i % 2 === 0 ? C.white : C.lightGrey },
});
y += 0.22;
});
// ══════════════════════════════════════════════════════════════════════════════
// COLUMN 3 — Clinical Photo, Grading, Treatment, Key Points
// ══════════════════════════════════════════════════════════════════════════════
y = SECTION_Y_START;
// CLINICAL IMAGE
sectionHeader(slide, COL3_X, y, COL3_W, "Clinical Appearance");
y += 0.30;
slide.addImage({
data: clinicalImg,
x: COL3_X + 0.55, y, w: 3.35, h: 1.70,
sizing: { type: "contain", w: 3.35, h: 1.70 },
});
slide.addText("Nasal pterygium with fibrovascular body and head on cornea", {
x: COL3_X, y: y + 1.72, w: COL3_W, h: 0.20,
fontSize: 6.5, italic: true, color: C.midGrey, align: "center",
});
y += 1.98;
// GRADING
y += 0.08;
sectionHeader(slide, COL3_X, y, COL3_W, "Grading (T1–T3 Koranyi / extent)", C.tealLight);
y += 0.30;
const grades = [
["T1", C.green, "Thin, transparent — scleral vessels visible beneath"],
["T2", C.amber, "Intermediate — partial obscuring of scleral vessels"],
["T3", C.red, "Thick, fleshy — scleral vessels fully obscured"],
];
grades.forEach(([g, c, desc]) => {
slide.addShape(pres.ShapeType.rect, { x: COL3_X, y, w: 0.30, h: 0.23, fill: { color: c }, line: { color: c }, rectRadius: 0.04 });
slide.addText(g, { x: COL3_X, y, w: 0.30, h: 0.23, fontSize: 8, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });
slide.addText(desc, { x: COL3_X + 0.36, y: y + 0.02, w: COL3_W - 0.40, h: 0.20, fontSize: 7.2, color: C.dark });
y += 0.26;
});
// TREATMENT
y += 0.10;
sectionHeader(slide, COL3_X, y, COL3_W, "Management");
y += 0.30;
// Conservative row
slide.addShape(pres.ShapeType.rect, {
x: COL3_X, y, w: COL3_W, h: 0.24,
fill: { color: "EAF7EE" }, line: { color: C.green, width: 0.8 }, rectRadius: 0.04,
});
slide.addText([
{ text: "Conservative: ", options: { bold: true, color: C.green } },
{ text: "Lubricants, UV-blocking sunglasses, observation. Topical vasoconstrictors / NSAIDs if inflamed.", options: { color: C.dark } },
], { x: COL3_X + 0.08, y: y + 0.02, w: COL3_W - 0.14, h: 0.22, fontSize: 7.2 });
y += 0.30;
// Surgery indications
slide.addText("Surgical Indications:", { x: COL3_X + 0.06, y, w: COL3_W, h: 0.20, fontSize: 7.5, bold: true, color: C.navy });
y += 0.22;
const surInd = ["Progression toward visual axis", "Significant astigmatism", "Cosmesis / contact lens intolerance", "Recurrent inflammation"];
surInd.forEach((s, i) => {
slide.addText("▸ " + s, { x: COL3_X + 0.10, y, w: COL3_W - 0.14, h: 0.19, fontSize: 7, color: C.dark, fill: { color: i % 2 === 0 ? C.white : C.lightGrey } });
y += 0.19;
});
y += 0.06;
// Surgery options table
const surgOps = [
["Bare sclera excision", "~80%", C.red, "Alone — NOT recommended"],
["Conjunctival autograft", "< 15%", C.green, "Gold standard (superior limbal donor)"],
["+ Mitomycin C (MMC)", "< 5%", C.green, "Adjuvant — reduces recurrence further"],
["Amniotic membrane graft", "Low", C.teal, "Alternative if insufficient conjunctiva"],
["Peripheral lamellar keratoplasty","—", C.navy, "Deep / aggressive lesions"],
];
// Table header
slide.addShape(pres.ShapeType.rect, { x: COL3_X, y, w: COL3_W, h: 0.22, fill: { color: C.dark }, line: { color: C.dark } });
[["Technique", 1.60], ["Recur.", 0.48], ["Notes", 2.18]].reduce((acc, [h, w]) => {
slide.addText(h, { x: acc, y, w, h: 0.22, fontSize: 6.8, bold: true, color: C.white, valign: "middle", margin: 0 });
return acc + w + 0.03;
}, COL3_X + 0.05);
y += 0.22;
surgOps.forEach(([name, recur, col, note], i) => {
slide.addShape(pres.ShapeType.rect, { x: COL3_X, y, w: COL3_W, h: 0.22, fill: { color: i % 2 === 0 ? C.white : C.lightGrey }, line: { color: C.lightGrey, width: 0.5 } });
slide.addText(name, { x: COL3_X + 0.05, y: y + 0.02, w: 1.58, h: 0.18, fontSize: 7, color: C.dark });
slide.addShape(pres.ShapeType.rect, { x: COL3_X + 1.65, y: y + 0.03, w: 0.46, h: 0.16, fill: { color: col }, line: { color: col }, rectRadius: 0.04 });
slide.addText(recur, { x: COL3_X + 1.65, y: y + 0.03, w: 0.46, h: 0.16, fontSize: 6.5, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });
slide.addText(note, { x: COL3_X + 2.16, y: y + 0.02, w: 2.18, h: 0.18, fontSize: 6.5, color: C.midGrey });
y += 0.22;
});
// KEY POINTS
y += 0.10;
slide.addShape(pres.ShapeType.rect, {
x: COL3_X, y, w: COL3_W, h: 0.26,
fill: { color: C.amber }, line: { color: C.amber }, rectRadius: 0.04,
});
slide.addText("⚠ KEY POINTS", { x: COL3_X, y, w: COL3_W, h: 0.26, fontSize: 8, bold: true, color: C.white, align: "center", valign: "middle", margin: 0, charSpacing: 1 });
y += 0.28;
const keys = [
"Atypical pterygia → biopsy to rule out CIN",
"Pseudopterygium: probe passes beneath body; true does not",
"Bare sclera alone = 80% recurrence — always add graft/MMC",
"Post-op: recurrence risk highest in young patients",
];
keys.forEach((k, i) => {
slide.addShape(pres.ShapeType.rect, { x: COL3_X, y, w: COL3_W, h: 0.22, fill: { color: i % 2 === 0 ? "FFF8EC" : "FFF3DC" }, line: { color: C.lightGrey, width: 0.5 } });
slide.addText("• " + k, { x: COL3_X + 0.08, y: y + 0.02, w: COL3_W - 0.12, h: 0.20, fontSize: 7, color: C.dark });
y += 0.22;
});
// ── DIVIDERS between columns ──────────────────────────────────────────────────
[COL2_X - 0.12, COL3_X - 0.12].forEach(dx => {
slide.addShape(pres.ShapeType.line, {
x: dx, y: 0.80, w: 0, h: 7.35,
line: { color: C.lightGrey, width: 0.8, dashType: "dash" },
});
});
// ── FOOTER ────────────────────────────────────────────────────────────────────
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 8.10, w: 11.69, h: 0.17,
fill: { color: C.navy }, line: { color: C.navy },
});
slide.addText(
"Sources: Kanski's Clinical Ophthalmology 10e · Wills Eye Manual 8e · Rosen's Emergency Medicine · For educational use only",
{ x: 0.2, y: 8.10, w: 11.29, h: 0.17, fontSize: 5.5, color: "A8C8D8", valign: "middle", margin: 0 }
);
// ── WRITE ─────────────────────────────────────────────────────────────────────
const outPath = "/home/daytona/workspace/pterygium-refcard/Pterygium_Reference_Card.pptx";
pres.writeFile({ fileName: outPath }).then(() => {
console.log("DONE:", outPath);
}).catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/pterygium-refcard && node build.js 2>&1
~/pterygium-refcard/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/pterygium-refcard/build.js'
cd /home/daytona/workspace/pterygium-refcard && node build.js 2>&1
cd /home/daytona/workspace/pterygium-refcard && python /home/daytona/skills/pptx…
ls -lh /home/daytona/workspace/pterygium-refcard/Pterygium_Reference_Card.pptx
Pterygium Reference Card
Presentation · PPTX
| Column 1 | Column 2 | Column 3 |
|---|---|---|
| Definition | Symptoms | Clinical photo (from Wills Eye Manual) |
| Anatomical parts (Cap / Head / Body) with Stocker line callout | True vs Pseudopterygium comparison table | Grading T1-T2-T3 (Koranyi) |
| Risk factors | Differential diagnosis | Management: conservative + surgical indications |
| Surgery table with recurrence rates (bare sclera vs autograft vs MMC) | ||
| Key clinical pearls (atypical = biopsy, probe test, bare sclera = 80% recurrence) |