Hi
Make me a ppt on hypertension
ls -la /home/daytona/workspace/
mkdir -p /home/daytona/workspace/hypertension-ppt && ls /home/daytona/workspace/
~/hypertension-ppt/create_ppt.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Hypertension";
pres.author = "Orris Medical";
// ─── COLOR PALETTE ───────────────────────────────────────────────
const C = {
navy: "0D2B55", // dominant dark
crimson: "C0392B", // accent (BP red)
sky: "2980B9", // supporting blue
light: "EBF5FB", // pale bg panels
white: "FFFFFF",
offWhite:"F4F6F7",
text: "1A2535",
muted: "5D6D7E",
};
// ─── HELPER ──────────────────────────────────────────────────────
function addSlideHeader(slide, title, accent) {
// Full-width top bar
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 1.1,
fill: { color: C.navy },
line: { color: C.navy },
});
// Accent stripe
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 1.1, w: 10, h: 0.07,
fill: { color: accent || C.crimson },
line: { color: accent || C.crimson },
});
slide.addText(title, {
x: 0.4, y: 0.1, w: 9.2, h: 0.9,
fontSize: 26, bold: true, color: C.white,
fontFace: "Calibri", valign: "middle", margin: 0,
});
}
function bullet(text, sub) {
return sub
? { text, options: { bullet: { type: "bullet", indent: 20 }, fontSize: 16, color: C.muted, breakLine: true } }
: { text, options: { bullet: { type: "bullet" }, fontSize: 18, bold: true, color: C.text, breakLine: true } };
}
// ════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
// Background gradient bands
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.navy}, line:{color:C.navy} });
s.addShape(pres.shapes.RECTANGLE, { x:0, y:3.5, w:10, h:2.125, fill:{color:"0A2347"}, line:{color:"0A2347"} });
// Red accent bar
s.addShape(pres.shapes.RECTANGLE, { x:0.5, y:1.6, w:0.12, h:2.2, fill:{color:C.crimson}, line:{color:C.crimson} });
// Title
s.addText("HYPERTENSION", {
x:0.9, y:1.5, w:8.5, h:1.1,
fontSize: 52, bold: true, color: C.white, fontFace: "Calibri",
charSpacing: 4, valign: "middle",
});
// Subtitle
s.addText("A Clinical Overview for Medical Students", {
x:0.9, y:2.65, w:8, h:0.6,
fontSize: 20, color: "A9C4E8", fontFace: "Calibri", italic: true,
});
// Bottom info strip
s.addShape(pres.shapes.RECTANGLE, { x:0, y:4.8, w:10, h:0.825, fill:{color:C.crimson}, line:{color:C.crimson} });
s.addText("Blood Pressure · Cardiovascular Risk · Diagnosis & Management", {
x:0.4, y:4.85, w:9.2, h:0.7,
fontSize: 13, color: C.white, fontFace: "Calibri", valign: "middle",
});
}
// ════════════════════════════════════════════════════════════════
// SLIDE 2 — DEFINITION & EPIDEMIOLOGY
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{color:C.offWhite} });
addSlideHeader(s, "Definition & Epidemiology");
// Left panel
s.addShape(pres.shapes.RECTANGLE, { x:0.3, y:1.3, w:4.4, h:3.9, fill:{color:C.white}, line:{color:"D5D8DC"}, shadow:{type:"outer",color:"000000",blur:6,offset:2,angle:135,opacity:0.1} });
s.addText("DEFINITION", { x:0.5, y:1.4, w:4, h:0.45, fontSize:13, bold:true, color:C.crimson, fontFace:"Calibri", charSpacing:2 });
s.addText([
{ text: "Sustained elevation of blood pressure", options:{bold:true, breakLine:true} },
{ text: "≥ 130/80 mmHg (ACC/AHA 2017)\n", options:{breakLine:true} },
{ text: "≥ 140/90 mmHg (JNC 7 / ESC 2018)\n", options:{breakLine:true} },
{ text: "\nMeasured on ≥ 2 occasions", options:{breakLine:true} },
{ text: "Classified as primary (essential) ~90–95%\nor secondary ~5–10%", options:{} },
], { x:0.5, y:1.9, w:4, h:3.1, fontSize:15, color:C.text, fontFace:"Calibri" });
// Right panel
s.addShape(pres.shapes.RECTANGLE, { x:5.1, y:1.3, w:4.6, h:3.9, fill:{color:C.white}, line:{color:"D5D8DC"}, shadow:{type:"outer",color:"000000",blur:6,offset:2,angle:135,opacity:0.1} });
s.addText("GLOBAL BURDEN", { x:5.3, y:1.4, w:4, h:0.45, fontSize:13, bold:true, color:C.sky, fontFace:"Calibri", charSpacing:2 });
const stats = [
["~1.3 billion", "adults affected worldwide"],
["30–45%", "of the adult global population"],
["#1 modifiable", "risk factor for CV disease"],
["< 50%", "patients adequately controlled"],
];
stats.forEach(([val, desc], i) => {
const y = 1.95 + i * 0.88;
s.addShape(pres.shapes.RECTANGLE, { x:5.3, y, w:4.1, h:0.72, fill:{color:C.light}, line:{color:"BFD3E6"} });
s.addText(val, { x:5.45, y:y+0.04, w:1.8, h:0.4, fontSize:18, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle" });
s.addText(desc, { x:7.2, y:y+0.06, w:2.1, h:0.55, fontSize:13, color:C.muted, fontFace:"Calibri", valign:"middle" });
});
}
// ════════════════════════════════════════════════════════════════
// SLIDE 3 — CLASSIFICATION
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{color:C.offWhite} });
addSlideHeader(s, "Classification of Blood Pressure");
const rows = [
["Category", "Systolic (mmHg)", "Diastolic (mmHg)", "Action"],
["Normal", "< 120", "and < 80", "Maintain healthy habits"],
["Elevated", "120–129", "and < 80", "Lifestyle modification"],
["Stage 1 HTN", "130–139", "or 80–89", "Lifestyle ± medication"],
["Stage 2 HTN", "≥ 140", "or ≥ 90", "Medication + lifestyle"],
["Hypertensive Crisis", "≥ 180", "and/or ≥ 120", "Immediate evaluation"],
];
const colW = [2.6, 2.1, 2.1, 3.2];
const colX = [0.3, 2.9, 5.0, 7.1];
const rowColors = ["navy", C.white, "#EBF5FB", "#FDFEFE", "#FDEDEC", "#C0392B"];
const textColors = [C.white, C.text, C.text, C.text, C.text, C.white];
rows.forEach((row, ri) => {
const y = 1.25 + ri * 0.71;
const bg = ri === 0 ? C.navy : ri === 5 ? C.crimson : (ri % 2 === 0 ? "EBF5FB" : C.white);
row.forEach((cell, ci) => {
s.addShape(pres.shapes.RECTANGLE, { x:colX[ci], y, w:colW[ci]-0.05, h:0.68, fill:{color:bg}, line:{color:"D5D8DC"} });
s.addText(cell, {
x:colX[ci]+0.08, y:y+0.05, w:colW[ci]-0.18, h:0.58,
fontSize: ri===0 ? 13 : 14, bold: ri===0, color: textColors[ri],
fontFace:"Calibri", valign:"middle",
});
});
});
s.addText("Based on ACC/AHA 2017 Guidelines", {
x:0.3, y:5.25, w:9, h:0.3, fontSize:11, color:C.muted, italic:true, fontFace:"Calibri",
});
}
// ════════════════════════════════════════════════════════════════
// SLIDE 4 — PATHOPHYSIOLOGY
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{color:C.offWhite} });
addSlideHeader(s, "Pathophysiology");
const boxes = [
{ x:0.3, y:1.35, title:"Cardiac Output ↑", body:"Increased heart rate\nIncreased stroke volume\nFluid retention (Na+/H₂O)" },
{ x:3.55, y:1.35, title:"RAAS Activation", body:"Renin → Angiotensin II\nAldosterone → Na+ retention\nVasoconstriction" },
{ x:6.8, y:1.35, title:"SNS Activation", body:"Catecholamines ↑\nVascular tone ↑\nRenal Na+ retention" },
{ x:0.3, y:3.45, title:"Vascular Remodeling", body:"Endothelial dysfunction\nArterial stiffness ↑\nIncreased SVR" },
{ x:3.55, y:3.45, title:"Secondary Causes", body:"Renal artery stenosis\nPrimary hyperaldosteronism\nPheochromocytoma, OSA" },
{ x:6.8, y:3.45, title:"Risk Amplifiers", body:"Obesity, insulin resistance\nHigh salt diet\nAge, genetics, smoking" },
];
boxes.forEach(b => {
s.addShape(pres.shapes.RECTANGLE, { x:b.x, y:b.y, w:3.1, h:1.85, fill:{color:C.navy}, line:{color:C.sky}, shadow:{type:"outer",color:"000000",blur:8,offset:2,angle:135,opacity:0.15} });
s.addText(b.title, { x:b.x+0.15, y:b.y+0.12, w:2.8, h:0.4, fontSize:14, bold:true, color:C.crimson, fontFace:"Calibri" });
s.addText(b.body, { x:b.x+0.15, y:b.y+0.55, w:2.8, h:1.2, fontSize:13, color:"A9C4E8", fontFace:"Calibri", valign:"top" });
});
// Central arrow / label
s.addShape(pres.shapes.RECTANGLE, { x:3.8, y:2.95, w:2.4, h:0.4, fill:{color:C.crimson}, line:{color:C.crimson} });
s.addText("↑ BLOOD PRESSURE", { x:3.8, y:2.95, w:2.4, h:0.4, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle" });
}
// ════════════════════════════════════════════════════════════════
// SLIDE 5 — CLINICAL EVALUATION
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{color:C.offWhite} });
addSlideHeader(s, "Clinical Evaluation & Diagnosis");
const cols = [
{ x:0.3, title:"History", color:C.navy, items:["Duration & prior readings","Family history CVD/HTN","Medications (NSAIDs, OCP, steroids)","Symptoms: headache, visual changes","Lifestyle: salt, alcohol, smoking","Review for secondary causes"] },
{ x:3.55, title:"Physical Exam", color:C.sky, items:["BP both arms (use larger reading)","Heart rate, weight, BMI","Fundoscopy: AV nicking, papilloedema","Carotid bruits, renal bruits","Peripheral pulses","Jugular venous pressure"] },
{ x:6.8, title:"Investigations", color:"1E8449", items:["Urinalysis + urine ACR","Serum creatinine, eGFR, electrolytes","Fasting lipids, glucose, HbA1c","ECG (LVH, arrhythmia)","Renal ultrasound if secondary cause suspected","Aldosterone:renin if resistant HTN"] },
];
cols.forEach(col => {
s.addShape(pres.shapes.RECTANGLE, { x:col.x, y:1.25, w:3.1, h:4.05, fill:{color:C.white}, line:{color:"D5D8DC"}, shadow:{type:"outer",color:"000000",blur:5,offset:2,angle:135,opacity:0.1} });
s.addShape(pres.shapes.RECTANGLE, { x:col.x, y:1.25, w:3.1, h:0.42, fill:{color:col.color}, line:{color:col.color} });
s.addText(col.title, { x:col.x+0.1, y:1.25, w:2.9, h:0.42, fontSize:15, bold:true, color:C.white, fontFace:"Calibri", valign:"middle" });
const items = col.items.map((t,i) => ({ text: t, options:{ bullet:true, fontSize:13, color:C.text, breakLine: i < col.items.length-1 } }));
s.addText(items, { x:col.x+0.1, y:1.75, w:2.9, h:3.4, fontFace:"Calibri", valign:"top" });
});
}
// ════════════════════════════════════════════════════════════════
// SLIDE 6 — MANAGEMENT
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{color:C.offWhite} });
addSlideHeader(s, "Management");
// Lifestyle - left
s.addShape(pres.shapes.RECTANGLE, { x:0.3, y:1.25, w:4.5, h:4.05, fill:{color:C.white}, line:{color:"D5D8DC"}, shadow:{type:"outer",color:"000000",blur:5,offset:2,angle:135,opacity:0.1} });
s.addShape(pres.shapes.RECTANGLE, { x:0.3, y:1.25, w:4.5, h:0.42, fill:{color:C.sky}, line:{color:C.sky} });
s.addText("Lifestyle Modification", { x:0.45, y:1.25, w:4.2, h:0.42, fontSize:15, bold:true, color:C.white, fontFace:"Calibri", valign:"middle" });
s.addText([
{ text:"DASH diet (↓ Na+, ↑ K+, fruits, vegetables)", options:{bullet:true, breakLine:true, fontSize:13} },
{ text:"Sodium restriction: < 2.3 g/day", options:{bullet:true, breakLine:true, fontSize:13} },
{ text:"Weight loss (−5 mmHg per 5 kg)", options:{bullet:true, breakLine:true, fontSize:13} },
{ text:"Aerobic exercise ≥ 30 min, 5×/week", options:{bullet:true, breakLine:true, fontSize:13} },
{ text:"Limit alcohol (≤ 2 drinks/day men, ≤ 1 women)", options:{bullet:true, breakLine:true, fontSize:13} },
{ text:"Smoking cessation", options:{bullet:true, breakLine:true, fontSize:13} },
{ text:"Stress reduction", options:{bullet:true, fontSize:13} },
], { x:0.45, y:1.75, w:4.2, h:3.4, color:C.text, fontFace:"Calibri", valign:"top" });
// Pharmacology - right
s.addShape(pres.shapes.RECTANGLE, { x:5.15, y:1.25, w:4.5, h:4.05, fill:{color:C.white}, line:{color:"D5D8DC"}, shadow:{type:"outer",color:"000000",blur:5,offset:2,angle:135,opacity:0.1} });
s.addShape(pres.shapes.RECTANGLE, { x:5.15, y:1.25, w:4.5, h:0.42, fill:{color:C.crimson}, line:{color:C.crimson} });
s.addText("Pharmacotherapy", { x:5.3, y:1.25, w:4.2, h:0.42, fontSize:15, bold:true, color:C.white, fontFace:"Calibri", valign:"middle" });
const drugs = [
["Thiazide diuretics", "e.g. chlorthalidone, HCTZ"],
["ACE inhibitors", "e.g. ramipril, lisinopril"],
["ARBs", "e.g. losartan, valsartan"],
["CCBs (dihydropyridine)", "e.g. amlodipine"],
["Beta-blockers", "if CAD, HF or tachyarrhythmia"],
];
drugs.forEach(([drug, note], i) => {
const y = 1.8 + i * 0.66;
s.addShape(pres.shapes.RECTANGLE, { x:5.25, y, w:4.2, h:0.55, fill:{color: i%2===0 ? C.light : C.white}, line:{color:"D5D8DC"} });
s.addText(drug, { x:5.35, y:y+0.04, w:2.1, h:0.47, fontSize:13, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle" });
s.addText(note, { x:7.45, y:y+0.04, w:2.0, h:0.47, fontSize:12, color:C.muted, fontFace:"Calibri", valign:"middle" });
});
}
// ════════════════════════════════════════════════════════════════
// SLIDE 7 — COMPLICATIONS
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.navy}, line:{color:C.navy} });
// Lighter lower half
s.addShape(pres.shapes.RECTANGLE, { x:0, y:2.8, w:10, h:2.825, fill:{color:"0A2347"}, line:{color:"0A2347"} });
addSlideHeader(s, "Complications of Untreated Hypertension");
// Override header bg already navy — re-add text in white
s.addText("COMPLICATIONS OF UNTREATED HYPERTENSION", {
x:0.4, y:0.1, w:9.2, h:0.9,
fontSize:22, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", charSpacing:1,
});
const complications = [
{ icon:"🧠", label:"Stroke", detail:"Ischaemic & haemorrhagic\nLeading cause globally" },
{ icon:"❤️", label:"Coronary Artery\nDisease", detail:"Accelerated atherosclerosis\nMI, angina" },
{ icon:"🫀", label:"Heart Failure", detail:"LVH → diastolic dysfunction\n→ systolic failure" },
{ icon:"🫘", label:"CKD", detail:"Hypertensive nephrosclerosis\nProteinuria, ESRD" },
{ icon:"👁️", label:"Retinopathy", detail:"AV nicking, flame haemorrhages\nPapilloedema in crisis" },
];
complications.forEach((c, i) => {
const x = 0.3 + i * 1.92;
s.addShape(pres.shapes.RECTANGLE, { x, y:1.3, w:1.75, h:3.9, fill:{color:"0D2B55"}, line:{color:C.sky}, shadow:{type:"outer",color:"000000",blur:8,offset:3,angle:135,opacity:0.2} });
s.addShape(pres.shapes.RECTANGLE, { x, y:1.3, w:1.75, h:0.55, fill:{color:C.crimson}, line:{color:C.crimson} });
s.addText(c.icon, { x:x+0.4, y:1.4, w:0.9, h:0.4, fontSize:20, align:"center" });
s.addText(c.label, { x:x+0.08, y:1.9, w:1.6, h:0.6, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle" });
s.addText(c.detail, { x:x+0.08, y:2.6, w:1.6, h:2.4, fontSize:12, color:"A9C4E8", fontFace:"Calibri", align:"center", valign:"top" });
});
}
// ════════════════════════════════════════════════════════════════
// SLIDE 8 — KEY TAKE-AWAYS
// ════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{color:C.offWhite} });
addSlideHeader(s, "Key Take-Aways");
const points = [
["Diagnose accurately", "Confirm on ≥ 2 separate occasions; use validated automated sphygmomanometry or ABPM."],
["Lifestyle first", "Non-pharmacological measures are effective and should accompany any drug therapy."],
["Individualise therapy","Choose agents based on comorbidities: ACEi/ARB for DM/CKD, CCB for isolated systolic, β-blocker for HF/CAD."],
["Target BP", "< 130/80 mmHg for most; < 140/90 mmHg minimum. Reassess every 3–6 months."],
["Screen for end-organ damage", "ECG, urinalysis, renal function, lipids at baseline and periodically."],
["Hypertensive crisis", "SBP ≥ 180 or DBP ≥ 120 requires prompt evaluation; distinguish urgency vs. emergency."],
];
points.forEach(([head, body], i) => {
const y = 1.3 + i * 0.69;
const col = i % 2 === 0 ? C.white : C.light;
s.addShape(pres.shapes.RECTANGLE, { x:0.3, y, w:9.4, h:0.62, fill:{color:col}, line:{color:"D5D8DC"} });
// Number badge
s.addShape(pres.shapes.RECTANGLE, { x:0.3, y, w:0.45, h:0.62, fill:{color:C.crimson}, line:{color:C.crimson} });
s.addText(String(i+1), { x:0.3, y:y+0.07, w:0.45, h:0.48, fontSize:15, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle" });
s.addText(head + " — ", { x:0.82, y:y+0.09, w:2.0, h:0.44, fontSize:13, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle" });
s.addText(body, { x:2.75, y:y+0.09, w:6.8, h:0.44, fontSize:12, color:C.muted, fontFace:"Calibri", valign:"middle" });
});
s.addText("Source: Textbook of Family Medicine 9e · ACC/AHA 2017 Hypertension Guidelines", {
x:0.3, y:5.3, w:9.4, h:0.25, fontSize:10, color:C.muted, italic:true, fontFace:"Calibri",
});
}
// ─── WRITE ───────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/hypertension-ppt/Hypertension.pptx" })
.then(() => console.log("Done"))
.catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/hypertension-ppt && node create_ppt.js
ls -lh /home/daytona/workspace/hypertension-ppt/Hypertension.pptx
Hypertension
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title slide |
| 2 | Definition & Epidemiology (ACC/AHA 2017, global burden stats) |
| 3 | BP Classification table (Normal → Hypertensive Crisis) |
| 4 | Pathophysiology (Cardiac output, RAAS, SNS, vascular remodeling) |
| 5 | Clinical Evaluation (History, Exam, Investigations — 3 columns) |
| 6 | Management (Lifestyle modification + Pharmacotherapy side by side) |
| 7 | Complications (Stroke, CAD, Heart Failure, CKD, Retinopathy) |
| 8 | Key Take-Aways (6 numbered points with source citation) |
Generate me image as well
A detailed medical infographic poster on hypertension showing a human silhouette with highlighted cardiovascular system, blood pressure gauge reading high, classification table from normal to hypertensive crisis, icons representing complications like stroke, heart failure, kidney disease, and retinopathy, with sections on lifestyle modification and drug therapy. Clean clinical style with navy blue and red color scheme.
