Can you create health education
What health topic should the content cover? · What format do you want? · Who is the target audience?
Breast cancer
What format do you want for the breast cancer health education content? · Who is the target audience?
ls /home/daytona/workspace/ && mkdir -p /home/daytona/workspace/breast-cancer-edu
~/breast-cancer-edu/create_pptx.js
const pptxgen = require("pptxgenjs");
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.author = "Health Education";
pres.title = "Breast Cancer Awareness";
// ─── COLOR PALETTE ───────────────────────────────────────────────
const ROSE = "C0395A"; // dominant – warm, awareness pink-red
const CREAM = "FDF5F7"; // light background
const DARK = "1A0A0F"; // near-black for text
const ACCENT = "F4A7B9"; // soft blush accent
const WHITE = "FFFFFF";
const GRAY = "5C4B52"; // secondary text
// ─── HELPER: banner bar ──────────────────────────────────────────
function addBanner(slide, text, y = 0, h = 0.75) {
slide.addShape(pres.ShapeType.rect, { x: 0, y, w: 10, h, fill: { color: ROSE } });
slide.addText(text, { x: 0, y, w: 10, h, fontSize: 11, bold: true, color: WHITE, align: "right", valign: "middle", margin: [0, 0.2, 0, 0] });
}
// ─── HELPER: section header bar ─────────────────────────────────
function addSectionHeader(slide, title, y = 1.0) {
slide.addShape(pres.ShapeType.rect, { x: 0.4, y, w: 9.2, h: 0.55, fill: { color: ACCENT }, line: { color: ROSE, width: 1.5 } });
slide.addText(title, { x: 0.5, y: y + 0.03, w: 9, h: 0.5, fontSize: 16, bold: true, color: ROSE, valign: "middle", margin: 0 });
}
// ─── HELPER: icon circle bullet ──────────────────────────────────
function addIconBullet(slide, emoji, label, body, x, y, w = 4.3, h = 1.4) {
slide.addShape(pres.ShapeType.ellipse, { x, y, w: 0.52, h: 0.52, fill: { color: ROSE } });
slide.addText(emoji, { x, y: y + 0.04, w: 0.52, h: 0.44, fontSize: 13, align: "center", valign: "middle", margin: 0 });
slide.addText(label, { x: x + 0.62, y, w: w - 0.62, h: 0.28, fontSize: 11, bold: true, color: ROSE, valign: "top", margin: 0 });
slide.addText(body, { x: x + 0.62, y: y + 0.28, w: w - 0.62, h: h - 0.28, fontSize: 9.5, color: GRAY, valign: "top", margin: 0 });
}
// ─── SLIDE 1 : TITLE ─────────────────────────────────────────────
{
let s = pres.addSlide();
// full dark background
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "2B0A16" } });
// decorative ribbon strip
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.35, h: 5.625, fill: { color: ROSE } });
s.addShape(pres.ShapeType.rect, { x: 0.45, y: 0, w: 0.12, h: 5.625, fill: { color: ACCENT } });
// ribbon bow icon (unicode ribbon)
s.addText("🎗️", { x: 1, y: 0.6, w: 1.4, h: 1.4, fontSize: 62, align: "center" });
// main title
s.addText("BREAST CANCER", { x: 2.6, y: 0.85, w: 7, h: 1.1, fontSize: 44, bold: true, color: WHITE, align: "left", charSpacing: 4, margin: 0 });
s.addText("AWARENESS & EDUCATION", { x: 2.6, y: 1.9, w: 7, h: 0.65, fontSize: 20, bold: false, color: ACCENT, align: "left", charSpacing: 2, margin: 0 });
// divider line
s.addShape(pres.ShapeType.rect, { x: 2.6, y: 2.65, w: 6.5, h: 0.04, fill: { color: ROSE } });
// subtitle text
s.addText("Know the facts · Detect early · Save lives", { x: 2.6, y: 2.8, w: 6.5, h: 0.5, fontSize: 13, italic: true, color: ACCENT, align: "left", margin: 0 });
// audience note
s.addText("A guide for the general public", { x: 2.6, y: 3.5, w: 6.5, h: 0.4, fontSize: 11, color: "A07080", align: "left", margin: 0 });
// bottom bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: ROSE } });
s.addText("Health Education Presentation | 2026", { x: 0, y: 5.27, w: 10, h: 0.33, fontSize: 9, color: WHITE, align: "center", valign: "middle", margin: 0 });
}
// ─── SLIDE 2 : WHAT IS BREAST CANCER ────────────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: CREAM } });
addBanner(s, "Slide 2 of 10");
s.addText("What Is Breast Cancer?", { x: 0.4, y: 0.2, w: 9, h: 0.6, fontSize: 26, bold: true, color: ROSE, margin: 0 });
// large definition box
s.addShape(pres.ShapeType.rect, { x: 0.4, y: 0.95, w: 9.2, h: 1.35, fill: { color: ROSE } });
s.addText(
"Breast cancer occurs when cells in the breast grow out of control and form a tumour. " +
"It is the most common cancer in women worldwide and can, rarely, also affect men.",
{ x: 0.6, y: 1.0, w: 8.8, h: 1.2, fontSize: 13, color: WHITE, valign: "middle", margin: 0 }
);
// three info boxes
const boxes = [
{ title: "Where it starts", body: "Usually in the milk-producing ducts (ductal carcinoma) or lobules (lobular carcinoma) of the breast." },
{ title: "How common", body: "More than 50% of cases are diagnosed in women aged 65 and over. Under 30 accounts for <1% of all cases." },
{ title: "Is it curable?", body: "When detected early, breast cancer is highly treatable. Survival rates are best at Stage I and II." },
];
boxes.forEach((b, i) => {
let x = 0.4 + i * 3.1;
s.addShape(pres.ShapeType.rect, { x, y: 2.5, w: 2.9, h: 2.7, fill: { color: WHITE }, line: { color: ACCENT, width: 1.5 } });
s.addShape(pres.ShapeType.rect, { x, y: 2.5, w: 2.9, h: 0.45, fill: { color: ACCENT } });
s.addText(b.title, { x: x + 0.1, y: 2.52, w: 2.7, h: 0.41, fontSize: 11, bold: true, color: ROSE, valign: "middle", margin: 0 });
s.addText(b.body, { x: x + 0.15, y: 3.05, w: 2.6, h: 2.0, fontSize: 10, color: GRAY, valign: "top", margin: 0 });
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: ROSE } });
}
// ─── SLIDE 3 : RISK FACTORS ──────────────────────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: WHITE } });
// left accent column
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 3.2, h: 5.625, fill: { color: ROSE } });
s.addText("RISK\nFACTORS", { x: 0.1, y: 1.0, w: 3.0, h: 2.0, fontSize: 32, bold: true, color: WHITE, align: "center", valign: "middle", lineSpacingMultiple: 1.1 });
s.addText("Understanding your risk\nhelps you take action early.", { x: 0.15, y: 3.2, w: 2.9, h: 1.0, fontSize: 10, italic: true, color: ACCENT, align: "center", valign: "top" });
// top label
s.addText("Risk Factors for Breast Cancer", { x: 3.4, y: 0.15, w: 6.4, h: 0.5, fontSize: 20, bold: true, color: ROSE, margin: 0 });
// risk items
const risks = [
["👩", "Being female", "The strongest risk factor — female gender accounts for the vast majority of cases."],
["🎂", "Increasing age", "Over 50% of breast cancers occur in women ≥65 years of age."],
["🧬", "Family history / BRCA", "Having a first-degree relative with breast cancer or carrying BRCA1/BRCA2 gene mutations raises risk significantly."],
["👶", "Reproductive factors", "Delayed childbearing (after age 30), never breastfeeding, early menarche, or late menopause."],
["🔬", "Previous benign biopsy", "Atypical hyperplasia on prior breast biopsy increases risk."],
["☢️", "Chest radiation", "Previous chest irradiation (e.g. for Hodgkin lymphoma) is a known risk factor."],
];
risks.forEach((r, i) => {
let row = Math.floor(i / 2);
let col = i % 2;
let x = 3.4 + col * 3.15;
let y = 0.8 + row * 1.5;
s.addShape(pres.ShapeType.rect, { x, y, w: 2.95, h: 1.35, fill: { color: CREAM }, line: { color: ACCENT, width: 1 } });
s.addText(r[0], { x, y: y + 0.1, w: 0.55, h: 0.55, fontSize: 18, align: "center" });
s.addText(r[1], { x: x + 0.58, y: y + 0.1, w: 2.3, h: 0.3, fontSize: 9.5, bold: true, color: ROSE, margin: 0 });
s.addText(r[2], { x: x + 0.58, y: y + 0.42, w: 2.3, h: 0.85, fontSize: 8.5, color: GRAY, valign: "top", margin: 0 });
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: ROSE } });
}
// ─── SLIDE 4 : WARNING SIGNS ─────────────────────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "FEF0F3" } });
addBanner(s, "Slide 4 of 10");
s.addText("⚠️ Warning Signs & Symptoms", { x: 0.4, y: 0.2, w: 9, h: 0.6, fontSize: 24, bold: true, color: ROSE, margin: 0 });
s.addText("Cancers are often asymptomatic early on — that is why screening matters. But these signs should prompt immediate medical review:", {
x: 0.4, y: 0.85, w: 9.2, h: 0.45, fontSize: 10.5, color: GRAY, margin: 0
});
const signs = [
["🔵", "New lump or thickening", "A painless lump in the breast or armpit is the most common presenting sign."],
["🔵", "Change in breast size/shape", "Unexplained change in the size or contour of one breast."],
["🔵", "Skin dimpling", "Puckering or dimpling of the skin over the breast."],
["🔵", "Nipple changes", "Inversion, retraction, ulceration, or bleeding from the nipple."],
["🔵", "Nipple discharge", "Spontaneous discharge, especially if blood-stained, requires investigation."],
["🔵", "Redness or rash", "Persistent redness, warmth, or rash over the breast (may suggest inflammatory breast cancer)."],
["🔵", "Axillary swelling", "Enlarged lymph nodes in the armpit area."],
["🔵", "Upper outer quadrant mass", "~50% of breast cancers originate in the upper outer quadrant — pay special attention here."],
];
signs.forEach((sg, i) => {
let col = Math.floor(i / 4);
let row = i % 4;
let x = 0.4 + col * 4.65;
let y = 1.45 + row * 0.98;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.45, h: 0.88, fill: { color: WHITE }, line: { color: ACCENT, width: 1 } });
s.addText("●", { x: x + 0.1, y: y + 0.1, w: 0.3, h: 0.3, fontSize: 13, color: ROSE, margin: 0 });
s.addText(sg[1], { x: x + 0.45, y: y + 0.08, w: 3.9, h: 0.28, fontSize: 10, bold: true, color: DARK, margin: 0 });
s.addText(sg[2], { x: x + 0.45, y: y + 0.38, w: 3.9, h: 0.44, fontSize: 8.8, color: GRAY, valign: "top", margin: 0 });
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: ROSE } });
}
// ─── SLIDE 5 : TYPES OF BREAST CANCER ───────────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: WHITE } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: ROSE } });
s.addText("Types of Breast Cancer", { x: 0.4, y: 0.2, w: 9, h: 0.65, fontSize: 26, bold: true, color: WHITE, margin: 0 });
addBanner(s, "Slide 5 of 10", 0, 0);
const types = [
{ name: "Invasive Ductal\nCarcinoma (IDC)", pct: "~70–80%", desc: "Most common type. Cancer starts in milk ducts and invades surrounding tissue." },
{ name: "Invasive Lobular\nCarcinoma (ILC)", pct: "~10–15%", desc: "Starts in milk-producing lobules. Can be harder to detect on mammography." },
{ name: "Ductal Carcinoma\nIn Situ (DCIS)", pct: "Non-invasive", desc: "Early-stage, confined to ducts. Highly treatable; may progress if untreated." },
{ name: "Inflammatory\nBreast Cancer", pct: "~1–3%", desc: "Rapid onset with skin redness, warmth, and swelling. Aggressive; needs prompt treatment." },
{ name: "Triple-Negative\nBreast Cancer", pct: "~15–20%", desc: "Lacks ER, PR, and HER2 receptors. Harder to treat; chemo is the main approach." },
{ name: "HER2-Positive\nBreast Cancer", pct: "~15–20%", desc: "Overexpresses HER2 protein. Targeted therapies (e.g. trastuzumab) are very effective." },
];
types.forEach((t, i) => {
let col = i % 3;
let row = Math.floor(i / 3);
let x = 0.3 + col * 3.2;
let y = 1.25 + row * 2.05;
s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 1.85, fill: { color: CREAM }, line: { color: ROSE, width: 1.5 } });
s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 0.38, fill: { color: "F7C5D2" } });
s.addText(t.pct, { x: x + 0.05, y: y + 0.04, w: 2.9, h: 0.32, fontSize: 9, bold: true, color: ROSE, align: "right", margin: 0 });
s.addText(t.name, { x: x + 0.12, y: y + 0.44, w: 2.8, h: 0.62, fontSize: 10.5, bold: true, color: DARK, valign: "top", margin: 0, lineSpacingMultiple: 1.1 });
s.addText(t.desc, { x: x + 0.12, y: y + 1.08, w: 2.8, h: 0.72, fontSize: 8.8, color: GRAY, valign: "top", margin: 0 });
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: ROSE } });
}
// ─── SLIDE 6 : SCREENING & EARLY DETECTION ──────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "2B0A16" } });
// subtle pattern strip
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: ROSE } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.545, w: 10, h: 0.08, fill: { color: ROSE } });
s.addText("Screening & Early Detection", { x: 0.5, y: 0.2, w: 9, h: 0.65, fontSize: 26, bold: true, color: WHITE, margin: 0 });
s.addText("Mammography screening reduces breast cancer mortality by 15–30%.", {
x: 0.5, y: 0.85, w: 9, h: 0.4, fontSize: 12, color: ACCENT, italic: true, margin: 0
});
const methods = [
{ icon: "🔬", title: "Breast Self-Exam (BSE)", desc: "All women should perform BSE monthly. Breast cancers are more frequently found by women themselves than by a physician. Begin in your 20s." },
{ icon: "👩⚕️", title: "Clinical Breast Exam", desc: "A healthcare provider examines the breasts. Recommended at least every 3 years for women in their 20s–30s, and annually from age 40+." },
{ icon: "📷", title: "Mammography", desc: "Most sensitive method. Biennial screening for women 50–74 years is recommended (USPSTF). Women 40–49 should discuss individual risk with their doctor." },
{ icon: "🧪", title: "Genetic Testing", desc: "BRCA1/BRCA2 testing for women with a family history of breast, ovarian, tubal, or peritoneal cancer. Refer for genetic counselling if at risk." },
];
methods.forEach((m, i) => {
let x = 0.3 + (i % 2) * 4.85;
let y = 1.45 + Math.floor(i / 2) * 1.95;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.55, h: 1.75, fill: { color: "3D0F1E" }, line: { color: ROSE, width: 1 } });
s.addText(m.icon, { x: x + 0.1, y: y + 0.1, w: 0.65, h: 0.65, fontSize: 22, align: "center" });
s.addText(m.title, { x: x + 0.82, y: y + 0.1, w: 3.6, h: 0.38, fontSize: 11, bold: true, color: ACCENT, margin: 0 });
s.addText(m.desc, { x: x + 0.82, y: y + 0.5, w: 3.6, h: 1.15, fontSize: 9.2, color: "D4A0B0", valign: "top", margin: 0 });
});
}
// ─── SLIDE 7 : STAGES OF BREAST CANCER ──────────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: CREAM } });
addBanner(s, "Slide 7 of 10");
s.addText("Stages of Breast Cancer", { x: 0.4, y: 0.2, w: 9, h: 0.6, fontSize: 24, bold: true, color: ROSE, margin: 0 });
const stages = [
{ stage: "0", label: "In Situ", color: "A8D5A2", desc: "Non-invasive. Abnormal cells confined to ducts/lobules. Highly curable (DCIS/LCIS)." },
{ stage: "I", label: "Early", color: "F4C542", desc: "Tumour ≤2 cm, no or minimal lymph node involvement. Excellent prognosis." },
{ stage: "II", label: "Localised", color: "F4A742", desc: "Tumour 2–5 cm or spread to 1–3 axillary lymph nodes. Good outcomes with treatment." },
{ stage: "III", label: "Locally Advanced", color: "E8724A", desc: "Tumour >5 cm, or spread to multiple lymph nodes, chest wall, or skin. Needs multimodal treatment." },
{ stage: "IV", label: "Metastatic", color: ROSE, desc: "Cancer has spread to distant organs (bone, lung, liver, brain). Treatment focuses on prolonging life and quality." },
];
// progress bar
stages.forEach((st, i) => {
let x = 0.3 + i * 1.88;
// circle
s.addShape(pres.ShapeType.ellipse, { x: x + 0.44, y: 1.1, w: 1.0, h: 1.0, fill: { color: st.color } });
s.addText("Stage\n" + st.stage, { x: x + 0.44, y: 1.1, w: 1.0, h: 1.0, fontSize: 11, bold: true, color: WHITE, align: "center", valign: "middle", lineSpacingMultiple: 1.0 });
// connector arrow (not last)
if (i < 4) {
s.addShape(pres.ShapeType.rect, { x: x + 1.44, y: 1.56, w: 0.44, h: 0.08, fill: { color: GRAY } });
}
// label
s.addText(st.label, { x, y: 2.2, w: 1.88, h: 0.3, fontSize: 9, bold: true, color: ROSE, align: "center" });
// description card
s.addShape(pres.ShapeType.rect, { x: x + 0.05, y: 2.6, w: 1.78, h: 2.6, fill: { color: WHITE }, line: { color: st.color, width: 1.5 } });
s.addText(st.desc, { x: x + 0.12, y: 2.7, w: 1.6, h: 2.4, fontSize: 8.5, color: GRAY, valign: "top", margin: 0 });
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: ROSE } });
}
// ─── SLIDE 8 : DIAGNOSIS ─────────────────────────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: WHITE } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: ROSE } });
s.addText("Diagnosis — How Is It Confirmed?", { x: 0.4, y: 0.22, w: 9, h: 0.65, fontSize: 22, bold: true, color: WHITE, margin: 0 });
const diag = [
{ icon: "📡", title: "Mammography / Ultrasound", body: "First-line imaging. Detects tumours as small as a few mm. Ultrasound is useful in younger women with dense breasts." },
{ icon: "🧲", title: "MRI", body: "Used for high-risk women, pre-surgery staging, and evaluating implants. Higher sensitivity than mammography." },
{ icon: "🔬", title: "Core Needle Biopsy (CNB)", body: "Gold standard for tissue diagnosis. A needle removes a small tissue sample for pathological analysis." },
{ icon: "🧬", title: "Receptor Testing", body: "Tumour tissue tested for ER, PR, and HER2 status — determines treatment type and guides prognosis." },
{ icon: "🩻", title: "Sentinel Node Biopsy", body: "First lymph node examined to determine if cancer has spread to axillary nodes. Avoids full axillary dissection." },
{ icon: "📊", title: "Genomic Tests", body: "Tests like Oncotype DX predict risk of recurrence and help decide whether chemotherapy is needed after surgery." },
];
diag.forEach((d, i) => {
let col = i % 3;
let row = Math.floor(i / 3);
let x = 0.3 + col * 3.2;
let y = 1.25 + row * 2.1;
s.addShape(pres.ShapeType.rect, { x, y, w: 3.05, h: 1.9, fill: { color: CREAM }, line: { color: ACCENT, width: 1 } });
s.addText(d.icon, { x: x + 0.1, y: y + 0.15, w: 0.65, h: 0.65, fontSize: 22, align: "center" });
s.addText(d.title, { x: x + 0.78, y: y + 0.15, w: 2.15, h: 0.45, fontSize: 9.5, bold: true, color: ROSE, valign: "top", margin: 0 });
s.addText(d.body, { x: x + 0.78, y: y + 0.62, w: 2.15, h: 1.1, fontSize: 8.8, color: GRAY, valign: "top", margin: 0 });
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: ROSE } });
}
// ─── SLIDE 9 : TREATMENT OPTIONS ────────────────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "2B0A16" } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: ROSE } });
s.addText("Treatment Options", { x: 0.4, y: 0.15, w: 9, h: 0.65, fontSize: 26, bold: true, color: WHITE, margin: 0 });
s.addText("Treatment depends on the stage, type, receptor status, and the patient's overall health.", {
x: 0.4, y: 0.78, w: 9, h: 0.38, fontSize: 10.5, color: ACCENT, italic: true, margin: 0
});
const treats = [
{ icon: "🔪", title: "Surgery", items: ["Lumpectomy (breast-conserving)", "Mastectomy (full breast removal)", "Sentinel/axillary node dissection"] },
{ icon: "☢️", title: "Radiation Therapy", items: ["Usually after lumpectomy", "Targets residual cancer cells", "Reduces local recurrence risk"] },
{ icon: "💊", title: "Chemotherapy", items: ["Pre-op (neoadjuvant) to shrink tumour", "Post-op (adjuvant) to prevent recurrence", "Backbone for triple-negative cancer"] },
{ icon: "🎯", title: "Targeted Therapy", items: ["Trastuzumab (Herceptin) for HER2+", "CDK4/6 inhibitors for HR+ disease", "PARP inhibitors for BRCA mutations"] },
{ icon: "🧬", title: "Hormone Therapy", items: ["Tamoxifen for ER/PR+ cancers", "Aromatase inhibitors (postmenopausal)", "Reduces risk of recurrence by ~40%"] },
{ icon: "🛡️", title: "Immunotherapy", items: ["Pembrolizumab for triple-negative", "Combined with chemo in early-stage", "Growing role in advanced disease"] },
];
treats.forEach((t, i) => {
let col = i % 3;
let row = Math.floor(i / 3);
let x = 0.25 + col * 3.18;
let y = 1.28 + row * 2.05;
s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 1.85, fill: { color: "3D0F1E" }, line: { color: ROSE, width: 1 } });
s.addText(t.icon + " " + t.title, { x: x + 0.12, y: y + 0.1, w: 2.8, h: 0.38, fontSize: 11, bold: true, color: ACCENT, margin: 0 });
s.addShape(pres.ShapeType.rect, { x: x + 0.12, y: y + 0.52, w: 2.75, h: 0.03, fill: { color: ROSE } });
s.addText(
t.items.map(it => "• " + it).join("\n"),
{ x: x + 0.12, y: y + 0.62, w: 2.8, h: 1.12, fontSize: 8.8, color: "D4A0B0", valign: "top", margin: 0 }
);
});
}
// ─── SLIDE 10 : PREVENTION & CALL TO ACTION ──────────────────────
{
let s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: ROSE } });
// white content area
s.addShape(pres.ShapeType.rect, { x: 0.4, y: 1.0, w: 9.2, h: 4.2, fill: { color: WHITE } });
s.addText("🎗️ Prevention & What You Can Do", { x: 0.4, y: 0.1, w: 9.2, h: 0.75, fontSize: 22, bold: true, color: WHITE, margin: 0 });
const tips = [
{ icon: "✅", text: "Maintain a healthy weight and exercise regularly — obesity is a modifiable risk factor." },
{ icon: "🍷", text: "Limit alcohol intake — even moderate consumption modestly raises risk." },
{ icon: "🤱", text: "Breastfeed if possible — breastfeeding has a mild protective effect." },
{ icon: "💊", text: "Discuss hormone therapy risks with your doctor — postmenopausal HRT may raise risk." },
{ icon: "🧬", text: "Know your family history — if first-degree relatives had breast/ovarian cancer, seek genetic counselling." },
{ icon: "📅", text: "Keep up with recommended screening — mammograms save lives through early detection." },
];
tips.forEach((tip, i) => {
let row = Math.floor(i / 2);
let col = i % 2;
let x = 0.6 + col * 4.6;
let y = 1.15 + row * 1.08;
s.addShape(pres.ShapeType.ellipse, { x, y: y + 0.1, w: 0.42, h: 0.42, fill: { color: ROSE } });
s.addText(tip.icon, { x, y: y + 0.1, w: 0.42, h: 0.42, fontSize: 11, align: "center", valign: "middle" });
s.addText(tip.text, { x: x + 0.52, y, w: 4.0, h: 0.9, fontSize: 9.5, color: DARK, valign: "middle", margin: 0 });
});
// CTA box
s.addShape(pres.ShapeType.rect, { x: 0.6, y: 4.35, w: 8.8, h: 0.55, fill: { color: ROSE } });
s.addText("If you notice any changes in your breast — see a doctor promptly. Early detection saves lives. 🎗️", {
x: 0.6, y: 4.37, w: 8.8, h: 0.52, fontSize: 11, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0
});
}
// ─── WRITE FILE ───────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/breast-cancer-edu/Breast_Cancer_Health_Education.pptx" })
.then(() => console.log("DONE: Breast_Cancer_Health_Education.pptx created"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });