Make an ppt on case reports on cardiatitis
myocarditis case report
pericarditis endocarditis case report
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty"
mkdir -p /home/daytona/workspace/carditis-ppt && echo "created"
~/carditis-ppt/build.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Case Reports on Carditis";
pres.author = "Medical Education";
// ─── PALETTE ────────────────────────────────────────────────────────────────
const BG_DARK = "1A2340"; // deep navy (title/section slides)
const BG_LIGHT = "F4F7FC"; // pale blue-white (content slides)
const ACCENT1 = "E84545"; // crimson red (heart / highlights)
const ACCENT2 = "2196C4"; // sky blue (sub-headings)
const TXT_DARK = "1A2340";
const TXT_LIGHT = "FFFFFF";
const TXT_MID = "344568";
const GOLD = "F5A623";
// ─── HELPERS ────────────────────────────────────────────────────────────────
function darkSlide(slide) {
slide.background = { color: BG_DARK };
}
function lightSlide(slide) {
slide.background = { color: BG_LIGHT };
}
// Add a coloured left-side accent bar
function accentBar(slide, color) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: color || ACCENT1 }
});
}
// Standard content slide header
function slideHeader(slide, title, color) {
slide.addText(title.toUpperCase(), {
x: 0.35, y: 0.18, w: 9.3, h: 0.55,
fontSize: 18, bold: true, color: color || ACCENT1,
charSpacing: 1.5, fontFace: "Calibri", margin: 0
});
// thin underline
slide.addShape(pres.ShapeType.line, {
x: 0.35, y: 0.75, w: 9.3, h: 0,
line: { color: ACCENT2, width: 1.5, dashType: "solid" }
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkSlide(s);
// Heart icon using a decorative shape bar
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 0.12, fill: { color: ACCENT1 }
});
s.addShape(pres.ShapeType.rect, {
x: 0, y: 5.505, w: 10, h: 0.12, fill: { color: ACCENT1 }
});
// Large title
s.addText("CARDITIS", {
x: 0.6, y: 0.9, w: 8.8, h: 1.3,
fontSize: 60, bold: true, color: TXT_LIGHT,
fontFace: "Calibri", align: "center", charSpacing: 8
});
// Subtitle
s.addText("Case Reports Across the Spectrum", {
x: 0.6, y: 2.1, w: 8.8, h: 0.7,
fontSize: 26, bold: false, color: ACCENT2,
fontFace: "Calibri", align: "center", italic: true
});
// Red divider
s.addShape(pres.ShapeType.rect, {
x: 3.5, y: 2.9, w: 3, h: 0.08, fill: { color: ACCENT1 }
});
// Tagline
s.addText("Myocarditis | Pericarditis | Endocarditis", {
x: 0.6, y: 3.1, w: 8.8, h: 0.5,
fontSize: 16, bold: false, color: GOLD,
fontFace: "Calibri", align: "center"
});
// Bottom info
s.addText("For Medical Students • June 2026", {
x: 0.6, y: 4.8, w: 8.8, h: 0.4,
fontSize: 12, color: "7A8BB0", fontFace: "Calibri", align: "center"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 2 — OVERVIEW: WHAT IS CARDITIS?
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
lightSlide(s);
accentBar(s, ACCENT1);
slideHeader(s, "What is Carditis?", ACCENT1);
// 3 boxes side by side
const boxes = [
{ label: "MYOCARDITIS", sub: "Inflammation of the\nmyocardium (heart muscle)", color: ACCENT1 },
{ label: "PERICARDITIS", sub: "Inflammation of the\npericardial sac", color: ACCENT2 },
{ label: "ENDOCARDITIS", sub: "Inflammation of the\nendocardium & valves", color: "27AE60" }
];
boxes.forEach((b, i) => {
const x = 0.4 + i * 3.15;
s.addShape(pres.ShapeType.roundRect, {
x: x, y: 0.95, w: 2.9, h: 3.9,
fill: { color: b.color }, rectRadius: 0.12
});
s.addText(b.label, {
x: x + 0.1, y: 1.1, w: 2.7, h: 0.7,
fontSize: 15, bold: true, color: TXT_LIGHT,
fontFace: "Calibri", align: "center"
});
s.addShape(pres.ShapeType.line, {
x: x + 0.4, y: 1.83, w: 2.1, h: 0,
line: { color: "FFFFFF", width: 1, dashType: "solid" }
});
s.addText(b.sub, {
x: x + 0.1, y: 1.95, w: 2.7, h: 0.9,
fontSize: 12, color: TXT_LIGHT, fontFace: "Calibri", align: "center"
});
});
// Bottom note
s.addText(
"Each layer can be affected independently or simultaneously (pancarditis). Accurate layer localisation guides diagnosis and management.",
{ x: 0.4, y: 5.0, w: 9.2, h: 0.45, fontSize: 11, color: TXT_MID, fontFace: "Calibri", italic: true }
);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 3 — MYOCARDITIS: SECTION DIVIDER
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkSlide(s);
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 4.2, h: 5.625, fill: { color: ACCENT1 }
});
s.addText("01", {
x: 0.25, y: 0.4, w: 3.7, h: 1.8,
fontSize: 110, bold: true, color: "FFFFFF40",
fontFace: "Calibri", align: "center"
});
s.addText("MYOCARDITIS", {
x: 0.2, y: 2.3, w: 3.8, h: 0.9,
fontSize: 28, bold: true, color: TXT_LIGHT,
fontFace: "Calibri", align: "center", charSpacing: 3
});
s.addText("Case Report", {
x: 0.2, y: 3.2, w: 3.8, h: 0.5,
fontSize: 16, color: TXT_LIGHT, fontFace: "Calibri", align: "center", italic: true
});
s.addText([
{ text: "Aetiology: ", options: { bold: true } },
{ text: "Viral, Autoimmune, Toxic, Drug-induced\n" },
{ text: "Incidence: ", options: { bold: true } },
{ text: "10–22 per 100,000 per year\n" },
{ text: "High-risk group: ", options: { bold: true } },
{ text: "Young adults, males" }
], {
x: 4.5, y: 1.5, w: 5.2, h: 2.5,
fontSize: 14, color: TXT_LIGHT, fontFace: "Calibri", lineSpacingMultiple: 1.4
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 4 — MYOCARDITIS CASE REPORT
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
lightSlide(s);
accentBar(s, ACCENT1);
slideHeader(s, "Case Report — Viral Myocarditis", ACCENT1);
// Case box (left)
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 0.88, w: 5.4, h: 3.8,
fill: { color: "FFF0F0" }, line: { color: ACCENT1, width: 1.5 }, rectRadius: 0.1
});
s.addText("CASE PRESENTATION", {
x: 0.5, y: 0.95, w: 5.1, h: 0.4,
fontSize: 12, bold: true, color: ACCENT1, fontFace: "Calibri"
});
s.addText([
{ text: "Patient: ", options: { bold: true } },
{ text: "22-year-old male college athlete\n" },
{ text: "History: ", options: { bold: true } },
{ text: "URI 1 week prior (fever, myalgia)\n" },
{ text: "Presenting complaint: ", options: { bold: true } },
{ text: "Chest pain, palpitations, dyspnoea on exertion\n" },
{ text: "Exam: ", options: { bold: true } },
{ text: "Tachycardia, faint S3 gallop, no friction rub\n" },
{ text: "ECG: ", options: { bold: true } },
{ text: "Diffuse ST elevation, non-specific T-wave changes\n" },
{ text: "Troponin I: ", options: { bold: true } },
{ text: "12.4 ng/mL (markedly elevated)\n" },
{ text: "Echo: ", options: { bold: true } },
{ text: "Mildly reduced LVEF 45%, no effusion\n" },
{ text: "CMR: ", options: { bold: true } },
{ text: "Late gadolinium enhancement (mid-wall)\n" },
{ text: "Serology: ", options: { bold: true } },
{ text: "Coxsackievirus B3 IgM positive" }
], {
x: 0.5, y: 1.38, w: 5.1, h: 3.1,
fontSize: 11.5, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.35
});
// Right panel: management
s.addShape(pres.ShapeType.roundRect, {
x: 6.0, y: 0.88, w: 3.65, h: 3.8,
fill: { color: "E8F4FD" }, line: { color: ACCENT2, width: 1.5 }, rectRadius: 0.1
});
s.addText("MANAGEMENT", {
x: 6.1, y: 0.95, w: 3.4, h: 0.4,
fontSize: 12, bold: true, color: ACCENT2, fontFace: "Calibri"
});
s.addText([
{ text: "• Rest & activity restriction (3–6 months)\n", options: { bullet: false } },
{ text: "• NSAIDs for pain relief\n" },
{ text: "• ACE-I / beta-blocker if EF reduced\n" },
{ text: "• No competitive sport until normalisation\n" },
{ text: "• Cardiac monitoring (Holter)\n" },
{ text: "• Immunosuppression only if biopsy-proven giant cell or autoimmune aetiology\n" },
{ text: "• Follow-up CMR at 3–6 months" }
], {
x: 6.1, y: 1.42, w: 3.4, h: 3.0,
fontSize: 11, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.4
});
// Outcome tag
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 4.8, w: 9.3, h: 0.55,
fill: { color: "27AE60" }, rectRadius: 0.08
});
s.addText("OUTCOME: Full recovery at 3 months. EF normalised to 60%. Cleared for return to sport.", {
x: 0.5, y: 4.85, w: 9.0, h: 0.4,
fontSize: 11.5, bold: true, color: TXT_LIGHT, fontFace: "Calibri"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 5 — MYOCARDITIS: DIAGNOSIS & KEY TEACHING
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
lightSlide(s);
accentBar(s, ACCENT1);
slideHeader(s, "Myocarditis — Diagnostic Workup & Teaching Points", ACCENT1);
// Left: diagnostic steps
const steps = [
["History & Exam", "Recent viral illness, chest pain, palpitations,\ndyspnoea; assess for friction rub, S3"],
["ECG", "Diffuse ST elevation, T-wave inversion, arrhythmias"],
["Biomarkers", "Troponin I/T, BNP/NT-proBNP, CRP, ESR"],
["Echo", "LV dysfunction, wall motion abnormality, effusion"],
["CMR (Gold Std)", "Lake Louise criteria: T2 signal + LGE pattern"],
["EMB", "Reserved for fulminant/unexplained cases (Dallas criteria)"],
];
steps.forEach((step, i) => {
const y = 0.92 + i * 0.73;
// number circle
s.addShape(pres.ShapeType.ellipse, {
x: 0.3, y: y, w: 0.42, h: 0.42,
fill: { color: ACCENT1 }
});
s.addText(String(i + 1), {
x: 0.3, y: y, w: 0.42, h: 0.42,
fontSize: 13, bold: true, color: TXT_LIGHT, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
s.addText(step[0], {
x: 0.85, y: y, w: 2.3, h: 0.42,
fontSize: 11.5, bold: true, color: ACCENT1, fontFace: "Calibri", valign: "middle", margin: 0
});
s.addText(step[1], {
x: 3.2, y: y, w: 3.0, h: 0.42,
fontSize: 10.5, color: TXT_MID, fontFace: "Calibri", valign: "middle", margin: 0
});
});
// Right: teaching points
s.addShape(pres.ShapeType.roundRect, {
x: 6.3, y: 0.88, w: 3.4, h: 4.4,
fill: { color: BG_DARK }, rectRadius: 0.12
});
s.addText("KEY TEACHING POINTS", {
x: 6.4, y: 0.98, w: 3.2, h: 0.45,
fontSize: 12, bold: true, color: GOLD, fontFace: "Calibri", align: "center"
});
s.addText([
{ text: "• Mimics ACS — always check for preceding viral illness\n" },
{ text: "• CMR is the non-invasive gold standard\n" },
{ text: "• Coxsackievirus B3 is the most common viral aetiology\n" },
{ text: "• COVID-19 myocarditis: incidence up to 33% of hospitalised patients\n" },
{ text: "• Vaccine-associated myocarditis: rare, self-limiting in young males\n" },
{ text: "• Activity restriction is the single most important intervention" }
], {
x: 6.4, y: 1.5, w: 3.1, h: 3.5,
fontSize: 10.5, color: TXT_LIGHT, fontFace: "Calibri", lineSpacingMultiple: 1.5
});
s.addText("Source: Fuster & Hurst's The Heart, 15e • Braunwald's Heart Disease", {
x: 0.35, y: 5.3, w: 9.3, h: 0.3,
fontSize: 9, color: "9AA0B0", fontFace: "Calibri", italic: true
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 6 — PERICARDITIS: SECTION DIVIDER
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkSlide(s);
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 4.2, h: 5.625, fill: { color: ACCENT2 }
});
s.addText("02", {
x: 0.25, y: 0.4, w: 3.7, h: 1.8,
fontSize: 110, bold: true, color: "FFFFFF40",
fontFace: "Calibri", align: "center"
});
s.addText("PERICARDITIS", {
x: 0.2, y: 2.3, w: 3.8, h: 0.9,
fontSize: 26, bold: true, color: TXT_LIGHT,
fontFace: "Calibri", align: "center", charSpacing: 3
});
s.addText("Case Report", {
x: 0.2, y: 3.2, w: 3.8, h: 0.5,
fontSize: 16, color: TXT_LIGHT, fontFace: "Calibri", align: "center", italic: true
});
s.addText([
{ text: "Aetiology: ", options: { bold: true } },
{ text: "Viral (idiopathic), autoimmune, TB, neoplastic, post-cardiac injury\n" },
{ text: "Hallmark: ", options: { bold: true } },
{ text: "Pleuritic chest pain + pericardial friction rub\n" },
{ text: "ECG classic: ", options: { bold: true } },
{ text: "Diffuse saddle-shaped ST elevation + PR depression" }
], {
x: 4.5, y: 1.5, w: 5.2, h: 2.5,
fontSize: 14, color: TXT_LIGHT, fontFace: "Calibri", lineSpacingMultiple: 1.5
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 7 — PERICARDITIS CASE REPORT
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
lightSlide(s);
accentBar(s, ACCENT2);
slideHeader(s, "Case Report — Acute Pericarditis", ACCENT2);
// Left: case
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 0.88, w: 5.4, h: 3.8,
fill: { color: "EDF4FB" }, line: { color: ACCENT2, width: 1.5 }, rectRadius: 0.1
});
s.addText("CASE PRESENTATION", {
x: 0.5, y: 0.95, w: 5.1, h: 0.4,
fontSize: 12, bold: true, color: ACCENT2, fontFace: "Calibri"
});
s.addText([
{ text: "Patient: ", options: { bold: true } },
{ text: "35-year-old male teacher\n" },
{ text: "History: ", options: { bold: true } },
{ text: "URTI 2 weeks ago; no cardiac history\n" },
{ text: "Complaint: ", options: { bold: true } },
{ text: "Sharp pleuritic chest pain, worse supine, relieved leaning forward\n" },
{ text: "Exam: ", options: { bold: true } },
{ text: "Fever 38.2°C, pericardial friction rub (3-component)\n" },
{ text: "ECG: ", options: { bold: true } },
{ text: "Diffuse saddle-shaped ST elevation; PR depression in II, III, aVF;\nPR elevation in aVR\n" },
{ text: "CXR: ", options: { bold: true } },
{ text: "Normal cardiac silhouette\n" },
{ text: "Echo: ", options: { bold: true } },
{ text: "Small pericardial effusion, no tamponade physiology\n" },
{ text: "Labs: ", options: { bold: true } },
{ text: "CRP 48 mg/L; mild troponin elevation (myopericarditis)" }
], {
x: 0.5, y: 1.38, w: 5.1, h: 3.15,
fontSize: 11, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.3
});
// Right: management
s.addShape(pres.ShapeType.roundRect, {
x: 6.0, y: 0.88, w: 3.65, h: 3.8,
fill: { color: "F0FFF4" }, line: { color: "27AE60", width: 1.5 }, rectRadius: 0.1
});
s.addText("MANAGEMENT", {
x: 6.1, y: 0.95, w: 3.4, h: 0.4,
fontSize: 12, bold: true, color: "27AE60", fontFace: "Calibri"
});
s.addText([
{ text: "1st Line:\n" },
{ text: " • Aspirin 750–1000 mg TID × 2 wks (then taper)\n" },
{ text: " • Colchicine 0.5 mg BD × 3 months\n\n" },
{ text: "If NSAID-intolerant:\n" },
{ text: " • Ibuprofen 600 mg TDS\n\n" },
{ text: "Refractory/autoimmune:\n" },
{ text: " • Low-dose corticosteroids\n" },
{ text: " • IL-1 antagonist (Anakinra) for recurrent cases\n\n" },
{ text: "Activity restriction until CRP normalises" }
], {
x: 6.1, y: 1.4, w: 3.4, h: 3.1,
fontSize: 10.5, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.35
});
// Outcome
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 4.8, w: 9.3, h: 0.55,
fill: { color: ACCENT2 }, rectRadius: 0.08
});
s.addText("OUTCOME: Resolved within 2 weeks. Colchicine reduced recurrence risk. No constrictive pericarditis at 6 months.", {
x: 0.5, y: 4.85, w: 9.0, h: 0.4,
fontSize: 11.5, bold: true, color: TXT_LIGHT, fontFace: "Calibri"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 8 — PERICARDITIS: COMPLICATIONS & ECG STAGES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
lightSlide(s);
accentBar(s, ACCENT2);
slideHeader(s, "Pericarditis — ECG Stages & Complications", ACCENT2);
// ECG Stages table
s.addText("ECG EVOLUTION IN ACUTE PERICARDITIS", {
x: 0.4, y: 0.9, w: 5.3, h: 0.4,
fontSize: 12, bold: true, color: ACCENT2, fontFace: "Calibri"
});
const stages = [
["Stage I", "Diffuse ST elevation (concave-up / saddle-shaped)\nPR depression in limb & precordial leads; PR elevation in aVR"],
["Stage II", "ST returns to baseline; PR depression normalises"],
["Stage III", "Diffuse T-wave inversion (may mimic ischaemia)"],
["Stage IV", "ECG normalises (weeks to months)"],
];
stages.forEach((row, i) => {
const y = 1.38 + i * 0.85;
const bg = i % 2 === 0 ? "DDEEFF" : "EDF4FB";
s.addShape(pres.ShapeType.rect, { x: 0.4, y: y, w: 1.2, h: 0.75, fill: { color: ACCENT2 } });
s.addText(row[0], { x: 0.4, y: y, w: 1.2, h: 0.75, fontSize: 11.5, bold: true, color: TXT_LIGHT, fontFace: "Calibri", align: "center", valign: "middle" });
s.addShape(pres.ShapeType.rect, { x: 1.6, y: y, w: 4.15, h: 0.75, fill: { color: bg } });
s.addText(row[1], { x: 1.65, y: y + 0.05, w: 4.0, h: 0.65, fontSize: 10.5, color: TXT_DARK, fontFace: "Calibri", valign: "middle" });
});
// Right: Complications
s.addShape(pres.ShapeType.roundRect, {
x: 6.1, y: 0.88, w: 3.55, h: 4.5,
fill: { color: BG_DARK }, rectRadius: 0.12
});
s.addText("COMPLICATIONS", {
x: 6.2, y: 0.98, w: 3.3, h: 0.4,
fontSize: 12, bold: true, color: GOLD, fontFace: "Calibri", align: "center"
});
s.addText([
{ text: "Pericardial Effusion\n", options: { bold: true } },
{ text: " Exudate accumulation; assess by echo\n\n" },
{ text: "Cardiac Tamponade\n", options: { bold: true } },
{ text: " Beck's Triad: hypotension + JVD + muffled heart sounds; needs urgent pericardiocentesis\n\n" },
{ text: "Constrictive Pericarditis\n", options: { bold: true } },
{ text: " Fibrous thickening → diastolic restriction; Kussmaul sign (JVP rises on inspiration); may need pericardiectomy\n\n" },
{ text: "Recurrent Pericarditis\n", options: { bold: true } },
{ text: " ~30% risk; colchicine reduces by 50%" }
], {
x: 6.2, y: 1.45, w: 3.3, h: 3.7,
fontSize: 10, color: TXT_LIGHT, fontFace: "Calibri", lineSpacingMultiple: 1.3
});
s.addText("Source: Frameworks for Internal Medicine • Goldman-Cecil Medicine", {
x: 0.35, y: 5.3, w: 9.3, h: 0.3,
fontSize: 9, color: "9AA0B0", fontFace: "Calibri", italic: true
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 9 — ENDOCARDITIS: SECTION DIVIDER
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkSlide(s);
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 4.2, h: 5.625, fill: { color: "27AE60" }
});
s.addText("03", {
x: 0.25, y: 0.4, w: 3.7, h: 1.8,
fontSize: 110, bold: true, color: "FFFFFF40",
fontFace: "Calibri", align: "center"
});
s.addText("ENDOCARDITIS", {
x: 0.2, y: 2.3, w: 3.8, h: 0.9,
fontSize: 24, bold: true, color: TXT_LIGHT,
fontFace: "Calibri", align: "center", charSpacing: 2
});
s.addText("Case Report", {
x: 0.2, y: 3.2, w: 3.8, h: 0.5,
fontSize: 16, color: TXT_LIGHT, fontFace: "Calibri", align: "center", italic: true
});
s.addText([
{ text: "Most common aetiology: ", options: { bold: true } },
{ text: "Staph. aureus (especially IVDU)\n" },
{ text: "Other key organisms: ", options: { bold: true } },
{ text: "Viridans streptococci, Enterococcus, HACEK\n" },
{ text: "Risk factors: ", options: { bold: true } },
{ text: "Valvular disease, prosthetic valves, IVDU, indwelling catheters" }
], {
x: 4.5, y: 1.5, w: 5.2, h: 2.5,
fontSize: 14, color: TXT_LIGHT, fontFace: "Calibri", lineSpacingMultiple: 1.5
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 10 — ENDOCARDITIS CASE REPORT
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
lightSlide(s);
accentBar(s, "27AE60");
slideHeader(s, "Case Report — Infective Endocarditis (IVDU)", "27AE60");
// Left: case
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 0.88, w: 5.4, h: 3.8,
fill: { color: "EDFAF1" }, line: { color: "27AE60", width: 1.5 }, rectRadius: 0.1
});
s.addText("CASE PRESENTATION", {
x: 0.5, y: 0.95, w: 5.1, h: 0.4,
fontSize: 12, bold: true, color: "27AE60", fontFace: "Calibri"
});
s.addText([
{ text: "Patient: ", options: { bold: true } },
{ text: "31-year-old male IVDU\n" },
{ text: "Presenting complaints: ", options: { bold: true } },
{ text: "Acute fever, progressive dyspnoea, malaise × 1 week\n" },
{ text: "Exam: ", options: { bold: true } },
{ text: "Fever 39.1°C, elevated JVP, new diastolic murmur (aortic regurgitation)\n" },
{ text: "Peripheral signs: ", options: { bold: true } },
{ text: "Osler's nodes (tender finger nodules), Janeway lesions (painless palmar macules), Quincke's pulse, de Musset sign\n" },
{ text: "Blood cultures: ", options: { bold: true } },
{ text: "3/3 bottles Staphylococcus aureus (MSSA)\n" },
{ text: "Echo (TOE): ", options: { bold: true } },
{ text: "10 mm vegetation on aortic valve; severe AR; abscess formation suspected\n" },
{ text: "Duke Criteria: ", options: { bold: true } },
{ text: "2 major + 3 minor = DEFINITE IE" }
], {
x: 0.5, y: 1.38, w: 5.1, h: 3.15,
fontSize: 11, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.3
});
// Right: management
s.addShape(pres.ShapeType.roundRect, {
x: 6.0, y: 0.88, w: 3.65, h: 3.8,
fill: { color: "FFF9EE" }, line: { color: GOLD, width: 1.5 }, rectRadius: 0.1
});
s.addText("MANAGEMENT", {
x: 6.1, y: 0.95, w: 3.4, h: 0.4,
fontSize: 12, bold: true, color: GOLD, fontFace: "Calibri"
});
s.addText([
{ text: "Antibiotics (IV, 4–6 weeks):\n" },
{ text: " • MSSA: Flucloxacillin 2g q4h\n" },
{ text: " • MRSA: Vancomycin + Rifampicin\n" },
{ text: " • Gentamicin synergy (selected cases)\n\n" },
{ text: "Endocarditis team approach:\n" },
{ text: " Cardiology + Cardiac surgery + Infectious disease + Microbiology\n\n" },
{ text: "Surgical indications:\n" },
{ text: " • Heart failure (most common)\n" },
{ text: " • Abscess / fistula\n" },
{ text: " • Uncontrolled infection\n" },
{ text: " • Large vegetation (>10 mm) with embolism risk" }
], {
x: 6.1, y: 1.4, w: 3.4, h: 3.1,
fontSize: 10.5, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.3
});
// Outcome
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 4.8, w: 9.3, h: 0.55,
fill: { color: "27AE60" }, rectRadius: 0.08
});
s.addText("OUTCOME: Emergency aortic valve replacement. 6 weeks IV antibiotics. Survived with biological prosthesis.", {
x: 0.5, y: 4.85, w: 9.0, h: 0.4,
fontSize: 11.5, bold: true, color: TXT_LIGHT, fontFace: "Calibri"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 11 — DUKE CRITERIA & PERIPHERAL SIGNS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
lightSlide(s);
accentBar(s, "27AE60");
slideHeader(s, "Infective Endocarditis — Duke Criteria & Peripheral Signs", "27AE60");
// Duke criteria: major
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 0.88, w: 4.4, h: 2.5,
fill: { color: "EDFAF1" }, line: { color: "27AE60", width: 1.2 }, rectRadius: 0.1
});
s.addText("MAJOR CRITERIA", {
x: 0.5, y: 0.95, w: 4.1, h: 0.38,
fontSize: 11.5, bold: true, color: "27AE60", fontFace: "Calibri"
});
s.addText([
{ text: "1. Positive blood cultures (2 separate draws, typical organisms)\n" },
{ text: "2. Positive echocardiogram:\n" },
{ text: " • Vegetation | Abscess | New valve dehiscence\n" },
{ text: "3. New valvular regurgitation" }
], {
x: 0.5, y: 1.38, w: 4.1, h: 1.8,
fontSize: 10.5, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.4
});
// Duke: minor
s.addShape(pres.ShapeType.roundRect, {
x: 0.35, y: 3.5, w: 4.4, h: 1.85,
fill: { color: "FFF5EE" }, line: { color: ACCENT1, width: 1.2 }, rectRadius: 0.1
});
s.addText("MINOR CRITERIA", {
x: 0.5, y: 3.57, w: 4.1, h: 0.38,
fontSize: 11.5, bold: true, color: ACCENT1, fontFace: "Calibri"
});
s.addText("Predisposition • Fever >38°C • Vascular phenomena • Immunologic phenomena • Microbiologic (not major)", {
x: 0.5, y: 4.0, w: 4.1, h: 1.2,
fontSize: 10, color: TXT_DARK, fontFace: "Calibri", lineSpacingMultiple: 1.4
});
// Right: peripheral signs
s.addShape(pres.ShapeType.roundRect, {
x: 5.0, y: 0.88, w: 4.65, h: 4.47,
fill: { color: BG_DARK }, rectRadius: 0.12
});
s.addText("PERIPHERAL MANIFESTATIONS", {
x: 5.1, y: 0.96, w: 4.45, h: 0.4,
fontSize: 11.5, bold: true, color: GOLD, fontFace: "Calibri", align: "center"
});
const signs = [
["Osler's nodes", "Painful, tender subcutaneous nodules on finger/toe pads\n(immune complex deposition — subacute IE)"],
["Janeway lesions", "Painless haemorrhagic macules on palms & soles\n(septic emboli — acute IE)"],
["Splinter haemorrhages", "Longitudinal dark streaks under nails (non-specific)"],
["Roth spots", "Oval retinal haemorrhages with pale centres on fundoscopy"],
["Clubbing", "Late feature in chronic/subacute cases"],
];
signs.forEach((sign, i) => {
const y = 1.45 + i * 0.75;
s.addText(sign[0] + ":", { x: 5.15, y: y, w: 4.35, h: 0.28, fontSize: 11, bold: true, color: GOLD, fontFace: "Calibri" });
s.addText(sign[1], { x: 5.15, y: y + 0.28, w: 4.35, h: 0.4, fontSize: 9.5, color: TXT_LIGHT, fontFace: "Calibri" });
});
s.addText("Source: Frameworks for Internal Medicine • Harrison's Principles 22e • Goldman-Cecil Medicine", {
x: 0.35, y: 5.3, w: 9.3, h: 0.3,
fontSize: 9, color: "9AA0B0", fontFace: "Calibri", italic: true
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 12 — SUMMARY & COMPARISON TABLE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkSlide(s);
s.addText("CARDITIS AT A GLANCE", {
x: 0.4, y: 0.18, w: 9.2, h: 0.65,
fontSize: 24, bold: true, color: TXT_LIGHT,
fontFace: "Calibri", align: "center", charSpacing: 3
});
s.addShape(pres.ShapeType.rect, {
x: 3.0, y: 0.83, w: 4.0, h: 0.07, fill: { color: ACCENT1 }
});
// Table headers
const cols = [
{ label: "FEATURE", x: 0.25, w: 1.8 },
{ label: "MYOCARDITIS", x: 2.1, w: 2.5, color: ACCENT1 },
{ label: "PERICARDITIS", x: 4.65, w: 2.5, color: ACCENT2 },
{ label: "ENDOCARDITIS", x: 7.2, w: 2.55, color: "27AE60" },
];
cols.forEach(col => {
s.addShape(pres.ShapeType.rect, {
x: col.x, y: 0.95, w: col.w, h: 0.48,
fill: { color: col.color || "2C3A5E" }
});
s.addText(col.label, {
x: col.x + 0.05, y: 0.95, w: col.w - 0.1, h: 0.48,
fontSize: 11, bold: true, color: TXT_LIGHT, fontFace: "Calibri",
align: "center", valign: "middle"
});
});
const rows = [
["Layer", "Myocardium", "Pericardium", "Endocardium/Valves"],
["Chest pain", "Dull, aching", "Sharp, pleuritic; improves leaning fwd", "Usually absent"],
["Classic sign", "S3 gallop, ↓EF", "Friction rub", "New regurgitant murmur"],
["ECG", "Non-specific ST/T; arrhythmias", "Saddle-shaped ST ↑; PR depression", "Usually normal; may show ischaemia"],
["Key test", "CMR (LGE)", "Echo + CRP", "TOE + Blood cultures"],
["Treatment", "Rest, ACE-I/BB; immunosuppression if needed", "Aspirin + Colchicine", "IV antibiotics 4–6 wks ± surgery"],
["Complication", "Dilated cardiomyopathy", "Constrictive pericarditis", "Emboli, valve destruction, HF"],
];
rows.forEach((row, i) => {
const y = 1.48 + i * 0.55;
const bg = i % 2 === 0 ? "232E4A" : "2C3A5E";
cols.forEach((col, j) => {
s.addShape(pres.ShapeType.rect, {
x: col.x, y: y, w: col.w, h: 0.5, fill: { color: bg }
});
s.addText(row[j], {
x: col.x + 0.06, y: y + 0.03, w: col.w - 0.12, h: 0.44,
fontSize: j === 0 ? 10.5 : 9.5,
bold: j === 0,
color: j === 0 ? GOLD : TXT_LIGHT,
fontFace: "Calibri", valign: "middle",
wrap: true
});
});
});
s.addText("Fuster & Hurst's The Heart 15e • Harrison's 22e • Goldman-Cecil Medicine • Braunwald's Heart Disease", {
x: 0.3, y: 5.35, w: 9.4, h: 0.25,
fontSize: 8.5, color: "5A6A8A", fontFace: "Calibri", italic: true, align: "center"
});
}
// ─── WRITE FILE ──────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/carditis-ppt/Carditis_Case_Reports.pptx" })
.then(() => console.log("DONE: /home/daytona/workspace/carditis-ppt/Carditis_Case_Reports.pptx"))
.catch(err => { console.error("ERROR:", err); process.exit(1); });
cd /home/daytona/workspace/carditis-ppt && node build.js 2>&1
~/carditis-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/carditis-ppt/build.js'
cd /home/daytona/workspace/carditis-ppt && grep -n "FFFFFF40" build.js
cd /home/daytona/workspace/carditis-ppt && sed -i 's/"FFFFFF40"/"2B4A6E"/g' build.js && node build.js 2>&1
~/carditis-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/carditis-ppt/build.js'
~/carditis-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/carditis-ppt/build.js'
cd /home/daytona/workspace/carditis-ppt && node build.js 2>&1
Carditis Case Reports
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title slide - bold navy/crimson design |
| 2 | What is Carditis? - 3 coloured boxes comparing all three types |
| 3 | Myocarditis section divider - key stats & epidemiology |
| 4 | Myocarditis case report - 22-yr-old athlete, Coxsackievirus B3; full workup + management + outcome |
| 5 | Myocarditis diagnostic workup - 6-step flowchart + key teaching points (COVID, vaccine-associated, activity restriction) |
| 6 | Pericarditis section divider - classic ECG features highlighted |
| 7 | Pericarditis case report - 35-yr-old male, viral, saddle-shaped ST elevation; aspirin + colchicine treatment |
| 8 | Pericarditis ECG stages I-IV + complications table (tamponade, constrictive pericarditis, recurrence) |
| 9 | Endocarditis section divider - organisms, risk factors |
| 10 | Endocarditis case report - 31-yr-old IVDU, MSSA, Duke criteria, TOE, aortic valve replacement |
| 11 | Duke Criteria (major + minor) + peripheral signs (Osler's nodes, Janeway lesions, Roth spots, splinter haemorrhages) |
| 12 | Summary comparison table - all three types side by side |