Create a ppt on Vinson Plummer syndrome that I can present it to 3rd bds students with all introduction clinical features and radiographs and histological slides
Plummer Vinson syndrome clinical features radiograph histology dental students
https://www.ncbi.nlm.nih.gov/books/NBK538306
Plummer Vinson syndrome barium swallow radiograph image esophageal web histology slide
node /home/daytona/skills/shared/scripts/fetch_images.js "https://prod-images-st…
mkdir -p /home/daytona/workspace/pvs-presentation && ls /home/daytona/workspace/…
~/pvs-presentation/build.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// ─── Fetch images ──────────────────────────────────────────────────────────
const imageUrls = [
"https://prod-images-static.radiopaedia.org/images/1112990/29dcd7db9c136ee7a549fa951c510e_gallery.jpg", // 0 barium swallow esophageal web
"https://prod-images-static.radiopaedia.org/images/693/7ec4bb54ec14be01684675be41ec83_gallery.jpeg", // 1 another barium view
"https://assets.cureus.com/uploads/figure/file/89777/article_river_00dbf0e0197a11ea9700e185ee98ff3a-Screen-Shot-2019-12-07-at-11.10.40-PM.png", // 2 clinical image
];
const imgs = JSON.parse(execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js ${imageUrls.map(u => `"${u}"`).join(" ")}`
).toString());
// ─── Color palette ─────────────────────────────────────────────────────────
const DARK_BG = "1A1A2E"; // deep navy
const MID_BG = "16213E"; // darker navy
const ACCENT = "E94560"; // vivid red-pink
const ACCENT2 = "F5A623"; // amber / gold
const WHITE = "FFFFFF";
const LIGHT = "D0E8FF"; // pale blue
const SUBTLE = "7A8FA6"; // muted blue-grey
// ─── Helpers ───────────────────────────────────────────────────────────────
function addBackground(slide, color) {
slide.background = { color: color || DARK_BG };
}
function titleBar(slide, text, y = 0, h = 0.65) {
slide.addShape("rect", { x: 0, y, w: 10, h, fill: { color: ACCENT }, line: { color: ACCENT } });
slide.addText(text, {
x: 0.15, y: y + 0.04, w: 9.7, h: h - 0.08,
fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", margin: 0,
});
}
function sectionLabel(slide, text, x, y, w = 4.5, h = 0.38) {
slide.addShape("rect", { x, y, w, h, fill: { color: ACCENT2 }, line: { color: ACCENT2 }, rounding: true });
slide.addText(text, { x, y, w, h, fontSize: 12, bold: true, color: "1A1A2E", fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
}
function bullets(slide, items, x, y, w, h, opts = {}) {
const rows = items.map((item, i) => ({
text: item,
options: { bullet: { code: "25CF", color: ACCENT2 }, fontSize: opts.fontSize || 15, color: WHITE, fontFace: "Calibri", breakLine: i < items.length - 1 },
}));
slide.addText(rows, { x, y, w, h, valign: "top", ...opts });
}
// ─── Build presentation ────────────────────────────────────────────────────
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Plummer-Vinson Syndrome";
pres.author = "3rd BDS Lecture";
// ══════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
// decorative accent strip left
s.addShape("rect", { x: 0, y: 0, w: 0.25, h: 5.625, fill: { color: ACCENT }, line: { color: ACCENT } });
s.addShape("rect", { x: 0.25, y: 0, w: 0.08, h: 5.625, fill: { color: ACCENT2 }, line: { color: ACCENT2 } });
// Main title
s.addText("PLUMMER-VINSON SYNDROME", {
x: 0.6, y: 1.4, w: 8.8, h: 1.0,
fontSize: 38, bold: true, color: WHITE, fontFace: "Calibri",
charSpacing: 3,
});
// Also known as
s.addText("Paterson-Brown-Kelly Syndrome | Sideropenic Dysphagia", {
x: 0.6, y: 2.5, w: 8.8, h: 0.45,
fontSize: 16, color: ACCENT2, fontFace: "Calibri", italic: true,
});
// Red divider line
s.addShape("line", { x: 0.6, y: 3.0, w: 8.8, h: 0, line: { color: ACCENT, width: 2 } });
// Subtitle info
s.addText("A Presentation for 3rd BDS Students\nDepartment of Oral Medicine & Radiology", {
x: 0.6, y: 3.15, w: 8.8, h: 0.75,
fontSize: 14, color: LIGHT, fontFace: "Calibri",
});
// Bottom tag
s.addText("Iron Deficiency Anemia • Esophageal Webs • Dysphagia", {
x: 0.6, y: 4.9, w: 8.8, h: 0.4,
fontSize: 12, color: SUBTLE, fontFace: "Calibri", italic: true,
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 2 — OVERVIEW / TABLE OF CONTENTS
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "OVERVIEW");
const topics = [
"01 Introduction & History",
"02 Synonyms & Epidemiology",
"03 Etiopathogenesis",
"04 Clinical Features",
"05 Oral Manifestations",
"06 Investigations & Radiographs",
"07 Histopathology",
"08 Differential Diagnosis",
"09 Malignant Potential",
"10 Management & Prognosis",
];
topics.forEach((t, i) => {
const col = i < 5 ? 0 : 1;
const row = i < 5 ? i : i - 5;
const x = col === 0 ? 0.5 : 5.3;
const y = 0.85 + row * 0.85;
s.addShape("rect", { x, y, w: 4.5, h: 0.7, fill: { color: i % 2 === 0 ? MID_BG : "0F3460" }, line: { color: ACCENT, width: 1 }, rounding: true });
s.addText(t, { x: x + 0.12, y, w: 4.3, h: 0.7, fontSize: 14, color: i % 2 === 0 ? WHITE : LIGHT, fontFace: "Calibri", valign: "middle", bold: i % 2 === 0 });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 3 — INTRODUCTION & HISTORY
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "INTRODUCTION & HISTORY");
s.addText("What is Plummer-Vinson Syndrome?", {
x: 0.4, y: 0.75, w: 9.2, h: 0.4,
fontSize: 17, bold: true, color: ACCENT2, fontFace: "Calibri",
});
s.addText(
"A rare condition characterized by the classic triad of:\n" +
"post-cricoid dysphagia, iron-deficiency anemia, and upper esophageal webs.",
{
x: 0.4, y: 1.15, w: 9.2, h: 0.75,
fontSize: 14, color: WHITE, fontFace: "Calibri",
}
);
// Timeline boxes
const history = [
{ year: "1908–1912", name: "Henry Stanley Plummer", desc: "Mayo Clinic — described esophageal spasm & iron deficiency cases" },
{ year: "1919", name: "Paterson & Brown-Kelly", desc: "British laryngologists — independently published the syndrome features" },
{ year: "1921", name: "Porter Paisley Vinson", desc: "Mayo Clinic — formally described the triad; eponym coined" },
{ year: "1926", name: "Arthur Hurst", desc: "British gastroenterologist — coined the term 'Plummer-Vinson Syndrome'" },
];
history.forEach((h, i) => {
const x = 0.3 + i * 2.35;
s.addShape("rect", { x, y: 2.0, w: 2.2, h: 3.2, fill: { color: i % 2 === 0 ? "0F3460" : MID_BG }, line: { color: ACCENT, width: 1.5 }, rounding: true });
s.addShape("rect", { x, y: 2.0, w: 2.2, h: 0.45, fill: { color: ACCENT }, line: { color: ACCENT }, rounding: true });
s.addText(h.year, { x, y: 2.0, w: 2.2, h: 0.45, fontSize: 13, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
s.addText(h.name, { x: x + 0.1, y: 2.52, w: 2.0, h: 0.55, fontSize: 11, bold: true, color: ACCENT2, fontFace: "Calibri", align: "center" });
s.addText(h.desc, { x: x + 0.1, y: 3.1, w: 2.0, h: 1.0, fontSize: 10, color: LIGHT, fontFace: "Calibri", align: "center" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 4 — SYNONYMS & EPIDEMIOLOGY
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "SYNONYMS & EPIDEMIOLOGY");
// Left column - Synonyms
sectionLabel(s, "OTHER NAMES", 0.3, 0.75);
const synonyms = [
"Paterson-Kelly Syndrome (UK)",
"Paterson-Brown-Kelly Syndrome",
"Brown-Kelly-Paterson Syndrome",
"Sideropenic Dysphagia (Scandinavia)",
"Waldenstrom & Kjellberg Syndrome",
];
bullets(s, synonyms, 0.3, 1.2, 4.4, 2.8, { fontSize: 13 });
// Right column - Epidemiology
sectionLabel(s, "EPIDEMIOLOGY", 5.3, 0.75);
const epi = [
"Predominantly women (80–95% of cases)",
"Age group: 40–70 years (4th decade peak)",
"Post-menopausal women most affected",
"Previously common in Northern Europe",
"Now prevalent in India & Middle East",
"Associated with iron deficiency prevalence",
"Becoming increasingly rare with iron supplements",
];
bullets(s, epi, 5.3, 1.2, 4.4, 3.5, { fontSize: 12 });
// Divider
s.addShape("line", { x: 4.95, y: 0.75, w: 0, h: 4.5, line: { color: ACCENT, width: 1.5 } });
}
// ══════════════════════════════════════════════════════════════
// SLIDE 5 — ETIOPATHOGENESIS
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "ETIOPATHOGENESIS");
s.addText("Exact pathogenesis remains UNKNOWN — strongly linked to iron deficiency anemia", {
x: 0.4, y: 0.72, w: 9.2, h: 0.4,
fontSize: 13, color: ACCENT2, fontFace: "Calibri", italic: true, bold: true,
});
const factors = [
{
title: "Iron Deficiency",
points: ["Iron is essential for iron-containing enzymes", "Deficiency → mucosal and muscular degeneration", "Cytochrome C oxidase depletion in mucosa"],
color: ACCENT,
},
{
title: "Genetic Predisposition",
points: ["HLA-DR association suggested", "Familial clustering reported", "Autoimmune component proposed"],
color: "0096C7",
},
{
title: "Nutritional Deficiency",
points: ["Riboflavin (B2) deficiency co-factor", "Pyridoxine (B6) deficiency", "Poor dietary intake — common in developing countries"],
color: "2EC4B6",
},
{
title: "Resulting Changes",
points: ["Atrophy of esophageal mucosa", "Degeneration of muscle fibers", "Web formation (fibrous tissue + mucosa)", "Epithelial atrophy → premalignant change"],
color: ACCENT2,
},
];
factors.forEach((f, i) => {
const x = 0.3 + (i % 2) * 4.85;
const y = 1.2 + Math.floor(i / 2) * 2.05;
s.addShape("rect", { x, y, w: 4.5, h: 1.9, fill: { color: MID_BG }, line: { color: f.color, width: 2 }, rounding: true });
s.addShape("rect", { x, y, w: 4.5, h: 0.38, fill: { color: f.color }, line: { color: f.color }, rounding: true });
s.addText(f.title, { x, y, w: 4.5, h: 0.38, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
const pts = f.points.map((p, pi) => ({
text: p,
options: { bullet: { code: "25B8", color: f.color }, fontSize: 11, color: LIGHT, fontFace: "Calibri", breakLine: pi < f.points.length - 1 },
}));
s.addText(pts, { x: x + 0.15, y: y + 0.42, w: 4.2, h: 1.4, valign: "top" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 6 — CLASSIC TRIAD (visual)
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "THE CLASSIC TRIAD");
const triadItems = [
{ num: "1", label: "Iron Deficiency\nAnemia", detail: "Microcytic hypochromic anemia\nHb may drop as low as 4 g/dL\nWeakness, fatigue, pallor", color: ACCENT },
{ num: "2", label: "Esophageal Webs", detail: "Thin mucosal folds in proximal esophagus\nPost-cricoid / upper esophagus\nSingle or multiple webs", color: ACCENT2 },
{ num: "3", label: "Post-cricoid\nDysphagia", detail: "Painless, intermittent initially\nSolids > liquids\nSymptoms when lumen <12 mm", color: "2EC4B6" },
];
// Central circle
s.addShape("ellipse", { x: 3.65, y: 1.85, w: 2.7, h: 2.7, fill: { color: "0F3460" }, line: { color: WHITE, width: 1 } });
s.addText("PVS\nTRIAD", { x: 3.65, y: 2.55, w: 2.7, h: 1.3, fontSize: 22, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
// Three cards
const positions = [
{ x: 0.2, y: 1.5 },
{ x: 0.2, y: 3.5 },
{ x: 6.85, y: 2.5 },
];
triadItems.forEach((t, i) => {
const { x, y } = positions[i];
s.addShape("rect", { x, y, w: 3.2, h: 1.65, fill: { color: MID_BG }, line: { color: t.color, width: 2 }, rounding: true });
s.addShape("ellipse", { x: x + 0.08, y: y + 0.08, w: 0.5, h: 0.5, fill: { color: t.color }, line: { color: t.color } });
s.addText(t.num, { x: x + 0.08, y: y + 0.08, w: 0.5, h: 0.5, fontSize: 14, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
s.addText(t.label, { x: x + 0.65, y: y + 0.08, w: 2.45, h: 0.55, fontSize: 12, bold: true, color: t.color, fontFace: "Calibri", valign: "middle" });
s.addText(t.detail, { x: x + 0.12, y: y + 0.65, w: 2.95, h: 0.9, fontSize: 10, color: LIGHT, fontFace: "Calibri" });
// Connector line to center
if (i === 0) s.addShape("line", { x: 3.4, y: 2.3, w: -0.5, h: 0.5, line: { color: t.color, width: 1.5, dashType: "dash" } });
if (i === 1) s.addShape("line", { x: 3.4, y: 3.55, w: -0.5, h: -0.5, line: { color: t.color, width: 1.5, dashType: "dash" } });
if (i === 2) s.addShape("line", { x: 6.35, y: 3.2, w: 0.5, h: 0, line: { color: t.color, width: 1.5, dashType: "dash" } });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 7 — CLINICAL FEATURES
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "CLINICAL FEATURES");
const left = [
{ heading: "Dysphagia", items: ["Painless, slowly progressive", "Initially solids, then semi-solids", "Cervical — felt in throat/neck", "Grade I: occasional on solids", "Grade II: semi-solid diet only"] },
{ heading: "Anemia Features", items: ["Weakness and fatigue", "Pallor", "Dyspnea on exertion", "Tachycardia", "Koilonychia (spoon nails)"] },
];
const right = [
{ heading: "Additional Features", items: ["Glossitis — atrophic smooth tongue", "Angular cheilitis (fissuring)", "Pharyngitis & esophagitis", "Achlorhydria (gastric)", "Splenomegaly (occasional)", "Thyroid enlargement (goiter)"] },
{ heading: "Dental Relevance", items: ["Loss of teeth (edentia)", "Burning mouth / glossodynia", "Atrophic oral mucosa", "Weight loss in advanced cases"] },
];
left.forEach((grp, i) => {
const y = 0.72 + i * 2.45;
sectionLabel(s, grp.heading, 0.3, y, 4.5, 0.38);
bullets(s, grp.items, 0.3, y + 0.42, 4.5, 1.85, { fontSize: 12 });
});
right.forEach((grp, i) => {
const y = 0.72 + i * 2.45;
sectionLabel(s, grp.heading, 5.2, y, 4.5, 0.38);
bullets(s, grp.items, 5.2, y + 0.42, 4.5, 1.85, { fontSize: 12 });
});
s.addShape("line", { x: 4.95, y: 0.72, w: 0, h: 4.7, line: { color: SUBTLE, width: 1 } });
}
// ══════════════════════════════════════════════════════════════
// SLIDE 8 — ORAL MANIFESTATIONS (dental focus)
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "ORAL MANIFESTATIONS — DENTAL RELEVANCE");
s.addText("Dental surgeons play a KEY role in early detection of PVS through oral examination", {
x: 0.4, y: 0.72, w: 9.2, h: 0.38,
fontSize: 13, color: ACCENT2, fontFace: "Calibri", italic: true, bold: true,
});
const findings = [
{ title: "Atrophic Glossitis", desc: "Depapillation of tongue\nSmooth, beefy-red appearance\nGlossodynia (burning sensation)\nDifficulty in mastication", icon: "👅" },
{ title: "Angular Cheilitis", desc: "Fissuring at corners of mouth\nErythematous lesions\nCrusting and scaling\nRecurrent and chronic", icon: "💋" },
{ title: "Atrophic Oral Mucosa", desc: "Thinning of mucosal lining\nPale erythematous mucosa\nDecreased salivation\nSusceptible to trauma", icon: "🦷" },
{ title: "Edentia", desc: "Premature tooth loss\nReduced masticatory efficiency\nContributes to nutritional worsening\nAlveolar bone changes", icon: "🦴" },
];
findings.forEach((f, i) => {
const x = 0.3 + (i % 2) * 4.85;
const y = 1.2 + Math.floor(i / 2) * 2.1;
s.addShape("rect", { x, y, w: 4.5, h: 2.0, fill: { color: i % 2 === 0 ? "0F3460" : MID_BG }, line: { color: ACCENT, width: 1.5 }, rounding: true });
s.addText(f.title, { x: x + 0.15, y: y + 0.1, w: 4.2, h: 0.4, fontSize: 13, bold: true, color: ACCENT2, fontFace: "Calibri" });
s.addText(f.desc, { x: x + 0.15, y: y + 0.52, w: 4.2, h: 1.3, fontSize: 11, color: LIGHT, fontFace: "Calibri" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 9 — INVESTIGATIONS
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "INVESTIGATIONS");
const invxs = [
{
title: "Hematological",
color: ACCENT,
items: ["CBC — Hb often <10 g/dL", "Peripheral smear — microcytic hypochromic RBCs", "Serum ferritin — low (<12 µg/L)", "Serum iron — low", "TIBC — elevated", "Transferrin saturation — reduced"],
},
{
title: "Endoscopy",
color: ACCENT2,
items: ["Gold standard for web visualization", "Thin, shelf-like mucosal folds seen", "Post-cricoid region (17–18 cm)", "Can unintentionally rupture webs", "Biopsy if malignancy suspected"],
},
{
title: "Barium Swallow / Fluoroscopy",
color: "2EC4B6",
items: ["Best for web imaging (videofluoroscopy)", "Thin filling defect in proximal esophagus", "Eccentric or central lumen narrowing", "Lateral views most diagnostic", "Constriction at post-cricoid region"],
},
{
title: "Other Tests",
color: "0096C7",
items: ["Thyroid function tests", "Stool for occult blood", "Celiac screen (associated condition)", "Autoimmune panel", "Achlorhydric gastric secretion test"],
},
];
invxs.forEach((inv, i) => {
const x = 0.3 + (i % 2) * 4.85;
const y = 0.75 + Math.floor(i / 2) * 2.35;
s.addShape("rect", { x, y, w: 4.5, h: 2.2, fill: { color: MID_BG }, line: { color: inv.color, width: 2 }, rounding: true });
s.addShape("rect", { x, y, w: 4.5, h: 0.38, fill: { color: inv.color }, line: { color: inv.color }, rounding: true });
s.addText(inv.title, { x: x + 0.1, y, w: 4.3, h: 0.38, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
const pts = inv.items.map((p, pi) => ({
text: p,
options: { bullet: { code: "25B8", color: inv.color }, fontSize: 11, color: LIGHT, fontFace: "Calibri", breakLine: pi < inv.items.length - 1 },
}));
s.addText(pts, { x: x + 0.15, y: y + 0.42, w: 4.2, h: 1.7, valign: "top" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 10 — RADIOGRAPHS with images
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "RADIOGRAPHIC FEATURES — BARIUM SWALLOW");
s.addText("KEY IMAGING: Barium Swallow / Videofluoroscopy", {
x: 0.4, y: 0.72, w: 9.2, h: 0.35,
fontSize: 13, bold: true, color: ACCENT2, fontFace: "Calibri",
});
// Left: text description
const radFindings = [
"Thin, shelf-like filling defect in proximal esophagus",
"Post-cricoid region most affected (17–18 cm from incisors)",
"Central or eccentric narrowing of lumen",
"Webs visible on lateral projection",
"May show single or multiple webs",
"Videofluoroscopy — most sensitive technique",
"Upper GI endoscopy confirms webs but may rupture them",
];
bullets(s, radFindings, 0.3, 1.12, 4.2, 4.1, { fontSize: 12 });
// Right: images
if (imgs[0] && !imgs[0].error) {
s.addImage({ data: imgs[0].base64, x: 5.0, y: 0.85, w: 2.3, h: 2.2 });
s.addText("Barium swallow — esophageal web", { x: 5.0, y: 3.08, w: 2.3, h: 0.32, fontSize: 9, color: SUBTLE, fontFace: "Calibri", align: "center", italic: true });
}
if (imgs[1] && !imgs[1].error) {
s.addImage({ data: imgs[1].base64, x: 7.45, y: 0.85, w: 2.3, h: 2.2 });
s.addText("Post-cricoid web — lateral view", { x: 7.45, y: 3.08, w: 2.3, h: 0.32, fontSize: 9, color: SUBTLE, fontFace: "Calibri", align: "center", italic: true });
}
// X-ray note box
s.addShape("rect", { x: 4.9, y: 3.5, w: 4.85, h: 1.9, fill: { color: "0F3460" }, line: { color: ACCENT, width: 1.5 }, rounding: true });
s.addText("Clinical Note", { x: 5.1, y: 3.55, w: 4.5, h: 0.35, fontSize: 12, bold: true, color: ACCENT2, fontFace: "Calibri" });
s.addText(
"Dysphagia becomes symptomatic when the esophageal lumen narrows to <12 mm. " +
"Barium esophagram is non-invasive and ideal for initial assessment.",
{ x: 5.1, y: 3.9, w: 4.5, h: 1.35, fontSize: 11, color: LIGHT, fontFace: "Calibri" }
);
}
// ══════════════════════════════════════════════════════════════
// SLIDE 11 — HISTOPATHOLOGY
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "HISTOPATHOLOGY");
// Clinical image if available
if (imgs[2] && !imgs[2].error) {
s.addImage({ data: imgs[2].base64, x: 6.8, y: 0.75, w: 2.9, h: 2.5 });
s.addText("Esophageal web — endoscopic view", { x: 6.8, y: 3.27, w: 2.9, h: 0.28, fontSize: 9, color: SUBTLE, fontFace: "Calibri", align: "center", italic: true });
}
s.addText("Histological Features of Esophageal Webs:", {
x: 0.4, y: 0.72, w: 6.2, h: 0.35,
fontSize: 14, bold: true, color: ACCENT2, fontFace: "Calibri",
});
const histoFeatures = [
{ title: "Fibrosis", desc: "Submucosal fibrous tissue deposition", color: ACCENT },
{ title: "Epithelial Atrophy", desc: "Thinning of squamous epithelium, loss of normal thickness", color: ACCENT2 },
{ title: "Epithelial Hyperplasia", desc: "Paradoxical areas of hyperplasia in surrounding mucosa", color: "2EC4B6" },
{ title: "Hyperkeratosis", desc: "Excess keratin production on surface epithelium", color: "0096C7" },
{ title: "Basal Cell Hyperplasia", desc: "Increased mitotic activity in basal layer (premalignant indicator)", color: "E63946" },
{ title: "Chronic Inflammation", desc: "Lymphocytic and plasma cell infiltrate in submucosa", color: "8338EC" },
];
histoFeatures.forEach((feat, i) => {
const col = i < 3 ? 0 : 1;
const row = i % 3;
const x = col === 0 ? 0.3 : 3.5;
const y = 1.15 + row * 1.45;
s.addShape("rect", { x, y, w: 3.05, h: 1.3, fill: { color: MID_BG }, line: { color: feat.color, width: 2 }, rounding: true });
s.addShape("rect", { x, y, w: 1.5, h: 0.32, fill: { color: feat.color }, line: { color: feat.color }, rounding: true });
s.addText(feat.title, { x: x + 0.05, y, w: 1.45, h: 0.32, fontSize: 10, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", margin: 0 });
s.addText(feat.desc, { x: x + 0.12, y: y + 0.36, w: 2.8, h: 0.8, fontSize: 10, color: LIGHT, fontFace: "Calibri", valign: "top" });
});
// Note on premalignant potential
s.addShape("rect", { x: 6.7, y: 3.65, w: 3.0, h: 1.65, fill: { color: "3D0000" }, line: { color: ACCENT, width: 2 }, rounding: true });
s.addText("⚠ Premalignant!", { x: 6.85, y: 3.72, w: 2.7, h: 0.38, fontSize: 13, bold: true, color: ACCENT, fontFace: "Calibri" });
s.addText("Basal cell hyperplasia + chronic epithelial atrophy create conditions for malignant transformation to squamous cell carcinoma.", {
x: 6.85, y: 4.12, w: 2.7, h: 1.1, fontSize: 10, color: LIGHT, fontFace: "Calibri",
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 12 — DIFFERENTIAL DIAGNOSIS
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "DIFFERENTIAL DIAGNOSIS");
const diffs = [
{
condition: "Pernicious Anemia",
similarity: "Anemia, glossitis, dysphagia",
distinction: "Megaloblastic (macrocytic) anemia\nB12 deficiency — intrinsic factor absent\nNeurological symptoms\nGastric fundus failure",
color: ACCENT,
},
{
condition: "Folic Acid Deficiency",
similarity: "Megaloblastic anemia, glossitis, cheilosis",
distinction: "Macrocytic anemia\nNo neurological symptoms\nNo achlorhydria\nTreated with folic acid",
color: ACCENT2,
},
{
condition: "Esophageal Carcinoma",
similarity: "Progressive dysphagia",
distinction: "Dysphagia to liquids + solids\nRapid weight loss\nOlder patients\nImaging shows irregular lesion",
color: "E63946",
},
{
condition: "Esophageal Stricture",
similarity: "Dysphagia, filling defect on barium",
distinction: "Usually from GERD/peptic injury\nLong segment narrowing\nNo iron deficiency\nNo webs on endoscopy",
color: "2EC4B6",
},
];
diffs.forEach((d, i) => {
const x = 0.25 + (i % 2) * 4.85;
const y = 0.72 + Math.floor(i / 2) * 2.35;
s.addShape("rect", { x, y, w: 4.55, h: 2.2, fill: { color: MID_BG }, line: { color: d.color, width: 2 }, rounding: true });
s.addShape("rect", { x, y, w: 4.55, h: 0.4, fill: { color: d.color }, line: { color: d.color }, rounding: true });
s.addText(d.condition, { x: x + 0.1, y, w: 4.3, h: 0.4, fontSize: 13, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", margin: 0 });
s.addText("Similarity:", { x: x + 0.1, y: y + 0.45, w: 4.3, h: 0.28, fontSize: 10, bold: true, color: ACCENT2, fontFace: "Calibri" });
s.addText(d.similarity, { x: x + 0.1, y: y + 0.73, w: 4.3, h: 0.3, fontSize: 10, color: LIGHT, fontFace: "Calibri", italic: true });
s.addText("Key Distinction:", { x: x + 0.1, y: y + 1.05, w: 4.3, h: 0.25, fontSize: 10, bold: true, color: ACCENT, fontFace: "Calibri" });
s.addText(d.distinction, { x: x + 0.1, y: y + 1.3, w: 4.3, h: 0.8, fontSize: 10, color: LIGHT, fontFace: "Calibri" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 13 — MALIGNANT POTENTIAL
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, "2D0000"); // dark red background for emphasis
titleBar(s, "⚠ MALIGNANT POTENTIAL — PREMALIGNANT CONDITION", 0, 0.65);
s.addText("PVS is a PRECANCEROUS CONDITION — carries significant risk of carcinoma", {
x: 0.4, y: 0.72, w: 9.2, h: 0.38,
fontSize: 14, bold: true, color: ACCENT, fontFace: "Calibri",
});
// Stats box
s.addShape("rect", { x: 0.3, y: 1.18, w: 4.4, h: 1.55, fill: { color: "4D0000" }, line: { color: ACCENT, width: 2 }, rounding: true });
s.addText("Reported Risk", { x: 0.4, y: 1.25, w: 4.2, h: 0.35, fontSize: 13, bold: true, color: ACCENT, fontFace: "Calibri" });
s.addText(
"4–16% risk of squamous cell carcinoma\nPost-cricoid and proximal esophagus\nPharyngeal carcinoma also reported\nMay present as tongue carcinoma",
{ x: 0.4, y: 1.62, w: 4.2, h: 1.0, fontSize: 12, color: LIGHT, fontFace: "Calibri" }
);
// Mechanism box
s.addShape("rect", { x: 5.3, y: 1.18, w: 4.4, h: 1.55, fill: { color: "4D0000" }, line: { color: ACCENT2, width: 2 }, rounding: true });
s.addText("Mechanism of Malignancy", { x: 5.4, y: 1.25, w: 4.2, h: 0.35, fontSize: 13, bold: true, color: ACCENT2, fontFace: "Calibri" });
s.addText(
"Chronic iron deficiency → mucosal atrophy\nEpithelial atrophy → dysplasia\nRepair mechanisms impaired\nChronic inflammation → oxidative stress\nProgression: Atrophy → Dysplasia → Ca in situ → SCC",
{ x: 5.4, y: 1.62, w: 4.2, h: 1.1, fontSize: 11, color: LIGHT, fontFace: "Calibri" }
);
// Follow-up importance
s.addShape("rect", { x: 0.3, y: 2.85, w: 9.4, h: 0.65, fill: { color: ACCENT }, line: { color: ACCENT }, rounding: true });
s.addText("Periodic endoscopic surveillance is MANDATORY — annual follow-up recommended", {
x: 0.4, y: 2.9, w: 9.2, h: 0.55, fontSize: 14, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle",
});
// Related cancers
const cancers = [
{ site: "Post-cricoid\nCarcinoma", detail: "Most common\nassociated SCC" },
{ site: "Esophageal\nSCC", detail: "Proximal third\nmost affected" },
{ site: "Pharyngeal\nCarcinoma", detail: "Hypopharynx\nmost common site" },
{ site: "Tongue\nCarcinoma", detail: "Rare but\ndocumented" },
];
cancers.forEach((c, i) => {
const x = 0.3 + i * 2.38;
s.addShape("rect", { x, y: 3.6, w: 2.2, h: 1.75, fill: { color: "4D0000" }, line: { color: ACCENT2, width: 1.5 }, rounding: true });
s.addText(c.site, { x: x + 0.1, y: 3.65, w: 2.0, h: 0.65, fontSize: 12, bold: true, color: ACCENT2, fontFace: "Calibri", align: "center" });
s.addText(c.detail, { x: x + 0.1, y: 4.32, w: 2.0, h: 0.9, fontSize: 11, color: LIGHT, fontFace: "Calibri", align: "center" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 14 — MANAGEMENT
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "MANAGEMENT & TREATMENT");
const steps = [
{
step: "01",
title: "Iron Supplementation",
desc: "Elemental iron 150–200 mg/day\nFerrous sulfate 325 mg (60 mg iron) TDS\nIV Fe-dextran for severe cases\nMost features resolve with iron alone\nCorrects anemia & mucosal changes",
color: ACCENT,
},
{
step: "02",
title: "Endoscopic Dilation",
desc: "For dysphagia not responding to iron\nMechanical disruption of webs\nBalloon dilation (fluoroscopy-guided)\nSurgical dilation if needed\nRegular dilation sessions required",
color: ACCENT2,
},
{
step: "03",
title: "Dietary Management",
desc: "High iron diet (red meat, leafy greens)\nVitamin C to enhance iron absorption\nVitamin B supplementation (B2, B6)\nAvoid tea/coffee with iron-rich meals",
color: "2EC4B6",
},
{
step: "04",
title: "Surveillance & Follow-up",
desc: "Periodic endoscopic surveillance\nAnnual follow-up for malignancy\nBiopsy if suspicious lesions found\nMultidisciplinary team approach\nDentist involvement for oral care",
color: "0096C7",
},
];
steps.forEach((step, i) => {
const x = 0.2 + (i % 2) * 4.9;
const y = 0.72 + Math.floor(i / 2) * 2.45;
s.addShape("rect", { x, y, w: 4.65, h: 2.3, fill: { color: MID_BG }, line: { color: step.color, width: 2 }, rounding: true });
s.addShape("ellipse", { x: x + 0.1, y: y + 0.1, w: 0.55, h: 0.55, fill: { color: step.color }, line: { color: step.color } });
s.addText(step.step, { x: x + 0.1, y: y + 0.1, w: 0.55, h: 0.55, fontSize: 14, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
s.addText(step.title, { x: x + 0.72, y: y + 0.15, w: 3.8, h: 0.45, fontSize: 13, bold: true, color: step.color, fontFace: "Calibri", valign: "middle" });
s.addText(step.desc, { x: x + 0.2, y: y + 0.65, w: 4.3, h: 1.55, fontSize: 11, color: LIGHT, fontFace: "Calibri" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 15 — SUMMARY
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, DARK_BG);
titleBar(s, "SUMMARY — KEY TAKE-HOME POINTS");
const summaryPoints = [
{ pt: "Classic Triad", detail: "Iron deficiency anemia + Esophageal webs + Post-cricoid dysphagia" },
{ pt: "Demographics", detail: "Post-menopausal women (80–95%), 40–70 years, increasingly rare in developed countries" },
{ pt: "Oral Signs", detail: "Atrophic glossitis, angular cheilitis, atrophic mucosa — dental surgeons can detect early" },
{ pt: "Imaging", detail: "Barium swallow (videofluoroscopy) is key — thin shelf-like defect in proximal esophagus" },
{ pt: "Histology", detail: "Fibrosis + epithelial atrophy + hyperkeratosis + basal cell hyperplasia + chronic inflammation" },
{ pt: "Risk", detail: "4–16% risk of squamous cell carcinoma — MANDATORY annual surveillance" },
{ pt: "Treatment", detail: "Iron supplementation resolves most features; endoscopic dilation for persistent dysphagia" },
];
summaryPoints.forEach((pt, i) => {
const y = 0.72 + i * 0.7;
s.addShape("rect", { x: 0.3, y, w: 1.55, h: 0.58, fill: { color: ACCENT }, line: { color: ACCENT }, rounding: true });
s.addText(pt.pt, { x: 0.3, y, w: 1.55, h: 0.58, fontSize: 10, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
s.addShape("rect", { x: 1.95, y, w: 7.75, h: 0.58, fill: { color: i % 2 === 0 ? "0F3460" : MID_BG }, line: { color: SUBTLE, width: 0.5 }, rounding: true });
s.addText(pt.detail, { x: 2.05, y, w: 7.6, h: 0.58, fontSize: 11, color: WHITE, fontFace: "Calibri", valign: "middle" });
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 16 — THANK YOU
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addBackground(s, MID_BG);
s.addShape("rect", { x: 0, y: 0, w: 10, h: 0.3, fill: { color: ACCENT }, line: { color: ACCENT } });
s.addShape("rect", { x: 0, y: 5.325, w: 10, h: 0.3, fill: { color: ACCENT }, line: { color: ACCENT } });
s.addText("THANK YOU", {
x: 1, y: 1.2, w: 8, h: 1.2,
fontSize: 56, bold: true, color: WHITE, fontFace: "Calibri", align: "center", charSpacing: 10,
});
s.addShape("line", { x: 2.5, y: 2.45, w: 5, h: 0, line: { color: ACCENT, width: 3 } });
s.addText("Plummer-Vinson Syndrome", {
x: 1, y: 2.6, w: 8, h: 0.5,
fontSize: 20, color: ACCENT2, fontFace: "Calibri", align: "center", italic: true,
});
s.addText("Department of Oral Medicine & Radiology\n3rd BDS | Oral Medicine", {
x: 1, y: 3.2, w: 8, h: 0.75,
fontSize: 14, color: LIGHT, fontFace: "Calibri", align: "center",
});
// Key message box
s.addShape("rect", { x: 1.5, y: 4.0, w: 7, h: 0.95, fill: { color: "0F3460" }, line: { color: ACCENT2, width: 2 }, rounding: true });
s.addText(
'"Early oral examination can detect PVS — the dental surgeon is on the front line."',
{ x: 1.6, y: 4.05, w: 6.8, h: 0.85, fontSize: 13, color: ACCENT2, fontFace: "Calibri", align: "center", valign: "middle", italic: true }
);
}
// ─── Write file ───────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/pvs-presentation/Plummer_Vinson_Syndrome.pptx" })
.then(() => console.log("DONE: /home/daytona/workspace/pvs-presentation/Plummer_Vinson_Syndrome.pptx"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });
cd /home/daytona/workspace/pvs-presentation && node build.js 2>&1
ls -lh /home/daytona/workspace/pvs-presentation/Plummer_Vinson_Syndrome.pptx
Plummer Vinson Syndrome
Presentation · PPTX
| # | Slide |
|---|---|
| 1 | Title slide — bold professional opener with alternate names |
| 2 | Overview / Table of Contents — 10 topic blocks |
| 3 | Introduction & History — 4-era timeline (Plummer 1908 → Hurst 1926) |
| 4 | Synonyms & Epidemiology — all names, demographics, geographic prevalence |
| 5 | Etiopathogenesis — iron deficiency, genetic, nutritional, and mucosal change factors |
| 6 | Classic Triad — visual 3-card layout with the central PVS triad circle |
| 7 | Clinical Features — dysphagia grading, anemia signs, koilonychia, glossitis, angular cheilitis, goiter, splenomegaly |
| 8 | Oral Manifestations — dental-focused: atrophic glossitis, angular cheilitis, edentia, atrophic mucosa |
| 9 | Investigations — hematology (Hb, ferritin, TIBC), endoscopy, barium swallow, other tests |
| 10 | Radiographic Features — with 2 actual barium swallow images from Radiopaedia showing esophageal webs |
| 11 | Histopathology — all 6 features (fibrosis, epithelial atrophy, hyperkeratosis, basal cell hyperplasia, chronic inflammation) + endoscopic image |
| 12 | Differential Diagnosis — vs. Pernicious anemia, Folic acid deficiency, Esophageal Ca, Stricture |
| 13 | Malignant Potential (dark red slide for emphasis) — 4–16% SCC risk, sites, mechanism, surveillance |
| 14 | Management — iron replacement, endoscopic dilation, dietary advice, follow-up |
| 15 | Summary — 7 key take-home points in a clean table layout |
| 16 | Thank You slide — with the dental relevance quote |