Create a slideshow for surgical screening camp to be conducted at our hospital
mkdir -p /home/daytona/workspace/surgical-camp-pptx
~/surgical-camp-pptx/create_pptx.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Surgical Screening Camp - XYZ Hospital";
pres.author = "XYZ Hospital";
// ─── COLOUR PALETTE ───────────────────────────────────────────────────────────
const C = {
navy: "0B2D5E", // dominant background
teal: "1A7A8A", // accent header blocks
aqua: "22C1C3", // accent lines / icons
white: "FFFFFF",
offwhite: "E8F4F8",
amber: "F5A623", // call-to-action highlight
lightgrey: "D0E8EE",
darktext: "0B2D5E",
};
// ─── HELPER: add a decorative top-left corner accent line ────────────────────
function accentLine(slide) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.08, h: 5.625,
fill: { color: C.aqua },
line: { type: "none" },
});
}
// ─── HELPER: subtle bottom bar ───────────────────────────────────────────────
function bottomBar(slide, label) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 5.25, w: 10, h: 0.375,
fill: { color: C.teal },
line: { type: "none" },
});
slide.addText(label, {
x: 0.15, y: 5.25, w: 9.7, h: 0.375,
fontSize: 9, color: C.offwhite,
valign: "middle", align: "right",
fontFace: "Calibri",
});
}
// ─── HELPER: section header block ─────────────────────────────────────────────
function sectionHeader(slide, text) {
slide.addShape(pres.ShapeType.rect, {
x: 0.12, y: 0.22, w: 9.76, h: 0.72,
fill: { color: C.teal },
line: { type: "none" },
rectRadius: 0.05,
});
slide.addText(text, {
x: 0.25, y: 0.22, w: 9.5, h: 0.72,
fontSize: 20, bold: true, color: C.white,
valign: "middle", fontFace: "Calibri",
});
}
// ─── HELPER: info card ────────────────────────────────────────────────────────
function card(slide, x, y, w, h, title, body, titleColor, bgColor) {
slide.addShape(pres.ShapeType.rect, {
x, y, w, h,
fill: { color: bgColor || C.offwhite },
line: { color: C.aqua, pt: 1.5 },
rectRadius: 0.08,
shadow: { type: "outer", color: "888888", blur: 5, offset: 2, angle: 45, opacity: 0.25 },
});
if (title) {
slide.addText(title, {
x: x + 0.12, y: y + 0.08, w: w - 0.24, h: 0.38,
fontSize: 13, bold: true, color: titleColor || C.navy,
fontFace: "Calibri", valign: "middle",
});
}
if (body) {
slide.addText(body, {
x: x + 0.12, y: y + 0.48, w: w - 0.24, h: h - 0.58,
fontSize: 11, color: C.darktext,
fontFace: "Calibri", valign: "top",
wrap: true,
});
}
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE SLIDE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
// full dark background
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.navy }, line:{type:"none"} });
// big aqua diagonal stripe (decorative)
s.addShape(pres.ShapeType.rect, {
x: 6.5, y: 0, w: 4, h: 5.625,
fill: { color: C.teal, transparency: 40 },
line: { type: "none" },
rotate: 0,
});
// thin aqua top accent
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.07, fill:{ color: C.aqua }, line:{type:"none"} });
// Red Cross / medical icon area (simple "+" symbol)
s.addShape(pres.ShapeType.rect, { x:7.6, y:1.1, w:0.8, h:0.22, fill:{ color: C.amber }, line:{type:"none"} });
s.addShape(pres.ShapeType.rect, { x:7.91, y:0.79, w:0.22, h:0.84, fill:{ color: C.amber }, line:{type:"none"} });
// hospital name
s.addText("XYZ HOSPITAL", {
x: 0.5, y: 0.55, w: 6.8, h: 0.45,
fontSize: 14, bold: true, color: C.aqua, charSpacing: 4,
fontFace: "Calibri",
});
// main title
s.addText("FREE GENERAL SURGERY\nSCREENING CAMP", {
x: 0.5, y: 1.1, w: 6.8, h: 1.9,
fontSize: 38, bold: true, color: C.white,
fontFace: "Calibri", lineSpacingMultiple: 1.15,
});
// subtitle / tagline
s.addText("Detect Early. Treat Wisely. Live Fully.", {
x: 0.5, y: 3.05, w: 6.8, h: 0.5,
fontSize: 16, italic: true, color: C.lightgrey,
fontFace: "Calibri",
});
// date / venue pill
s.addShape(pres.ShapeType.rect, {
x: 0.5, y: 3.7, w: 3.4, h: 0.52,
fill: { color: C.amber },
line: { type: "none" },
rectRadius: 0.26,
});
s.addText("📅 Date: [Date]", {
x: 0.5, y: 3.7, w: 3.4, h: 0.52,
fontSize: 13, bold: true, color: C.navy,
align: "center", valign: "middle", fontFace: "Calibri",
});
s.addShape(pres.ShapeType.rect, {
x: 4.1, y: 3.7, w: 3.1, h: 0.52,
fill: { color: C.amber },
line: { type: "none" },
rectRadius: 0.26,
});
s.addText("📍 Venue: OPD Hall", {
x: 4.1, y: 3.7, w: 3.1, h: 0.52,
fontSize: 13, bold: true, color: C.navy,
align: "center", valign: "middle", fontFace: "Calibri",
});
// free tag
s.addShape(pres.ShapeType.ellipse, { x:7.4, y:3.55, w:1.8, h:1.0, fill:{ color: "D0021B" }, line:{type:"none"} });
s.addText("FREE\nCamp", {
x: 7.4, y: 3.55, w: 1.8, h: 1.0,
fontSize: 18, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri",
});
bottomBar(s, "XYZ Hospital | www.xyzhospital.com | Helpline: 1800-XXX-XXXX");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 – WHAT IS A SURGICAL SCREENING CAMP?
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.white }, line:{type:"none"} });
accentLine(s);
sectionHeader(s, "What Is a Surgical Screening Camp?");
const points = [
{ icon: "🔍", title: "Free Medical Check-Up", desc: "A community event where our surgical experts examine you at no cost." },
{ icon: "🩺", title: "Detect Problems Early", desc: "Identify surgical conditions before they become serious or complicated." },
{ icon: "🤝", title: "Guidance & Counselling", desc: "One-on-one consultation with specialist surgeons for your concerns." },
{ icon: "💊", title: "Treatment Planning", desc: "Those who need surgery get priority scheduling and subsidised care." },
];
points.forEach((p, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.25 + col * 4.88;
const y = 1.1 + row * 1.85;
s.addShape(pres.ShapeType.rect, {
x, y, w: 4.6, h: 1.6,
fill: { color: i % 2 === 0 ? C.offwhite : "EBF7F9" },
line: { color: C.aqua, pt: 1.2 },
rectRadius: 0.1,
shadow: { type: "outer", color: "AACCDD", blur: 4, offset: 2, angle: 45, opacity: 0.3 },
});
s.addText(p.icon, { x: x + 0.12, y: y + 0.08, w: 0.6, h: 0.6, fontSize: 26 });
s.addText(p.title, { x: x + 0.75, y: y + 0.1, w: 3.7, h: 0.45, fontSize: 14, bold: true, color: C.navy, fontFace: "Calibri" });
s.addText(p.desc, { x: x + 0.12, y: y + 0.62, w: 4.3, h: 0.82, fontSize: 11, color: C.darktext, fontFace: "Calibri", wrap: true });
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 – WHY YOU SHOULD ATTEND
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.navy }, line:{type:"none"} });
// decorative circles
s.addShape(pres.ShapeType.ellipse, { x:8.0, y:-0.5, w:3.0, h:3.0, fill:{ color: C.teal, transparency:70 }, line:{type:"none"} });
s.addShape(pres.ShapeType.ellipse, { x:-0.8, y:3.8, w:2.5, h:2.5, fill:{ color: C.aqua, transparency:75 }, line:{type:"none"} });
s.addText("Why Should You Attend?", {
x: 0.3, y: 0.25, w: 9.4, h: 0.7,
fontSize: 24, bold: true, color: C.aqua, fontFace: "Calibri",
});
const reasons = [
{ num: "01", text: "Completely FREE consultation with experienced surgeons" },
{ num: "02", text: "Early detection of hernias, gallstones, appendix issues & more" },
{ num: "03", text: "No appointment needed — walk in, get checked" },
{ num: "04", text: "Free basic investigations (Blood test, USG) on the camp day" },
{ num: "05", text: "Concession on surgery charges for those diagnosed on the camp day" },
{ num: "06", text: "Confidential, compassionate care from our expert team" },
];
reasons.forEach((r, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.3 + col * 4.9;
const y = 1.1 + row * 1.35;
s.addShape(pres.ShapeType.ellipse, { x: x, y: y + 0.08, w: 0.55, h: 0.55, fill:{ color: C.amber }, line:{type:"none"} });
s.addText(r.num, { x: x, y: y + 0.08, w: 0.55, h: 0.55, fontSize: 11, bold: true, color: C.navy, align:"center", valign:"middle", fontFace:"Calibri" });
s.addText(r.text, { x: x + 0.65, y: y, w: 4.1, h: 0.7, fontSize: 12, color: C.white, fontFace: "Calibri", valign: "middle", wrap: true });
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 – CONDITIONS WE SCREEN FOR
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.white }, line:{type:"none"} });
accentLine(s);
sectionHeader(s, "Conditions We Screen For");
const conditions = [
{ icon: "🫀", name: "Hernia", detail: "Inguinal, umbilical, incisional" },
{ icon: "🪨", name: "Gallstones", detail: "Gallbladder pain & bile duct issues" },
{ icon: "🔺", name: "Appendix Problems", detail: "Chronic & recurrent appendicitis" },
{ icon: "🩹", name: "Ano-rectal Diseases", detail: "Piles, fissures, fistula" },
{ icon: "🔵", name: "Cysts & Lumps", detail: "Skin, subcutaneous & soft-tissue masses" },
{ icon: "🩻", name: "Thyroid Swellings", detail: "Goitre, nodules, thyroid enlargement" },
{ icon: "🧫", name: "Varicose Veins", detail: "Leg vein disease & ulcers" },
{ icon: "📍", name: "Abdominal Pain", detail: "Undiagnosed persistent abdominal complaints" },
];
conditions.forEach((c, i) => {
const col = i % 4;
const row = Math.floor(i / 4);
const x = 0.2 + col * 2.42;
const y = 1.05 + row * 2.1;
s.addShape(pres.ShapeType.rect, {
x, y, w: 2.22, h: 1.85,
fill: { color: row === 0 ? C.offwhite : "EBF7F9" },
line: { color: C.teal, pt: 1.2 },
rectRadius: 0.1,
shadow: { type: "outer", color: "AACCDD", blur: 3, offset: 2, angle: 45, opacity: 0.25 },
});
s.addText(c.icon, { x, y: y + 0.1, w: 2.22, h: 0.6, fontSize: 24, align: "center" });
s.addText(c.name, { x: x + 0.08, y: y + 0.72, w: 2.06, h: 0.42, fontSize: 12, bold: true, color: C.navy, align: "center", fontFace: "Calibri" });
s.addText(c.detail, { x: x + 0.06, y: y + 1.14, w: 2.1, h: 0.58, fontSize: 9.5, color: C.darktext, align: "center", fontFace: "Calibri", wrap: true });
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 – WHO SHOULD ATTEND
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.offwhite }, line:{type:"none"} });
accentLine(s);
// teal left panel
s.addShape(pres.ShapeType.rect, { x:0.08, y:0, w:4.5, h:5.625, fill:{ color: C.teal }, line:{type:"none"} });
s.addText("Who Should\nAttend?", {
x: 0.25, y: 1.0, w: 4.1, h: 2.0,
fontSize: 34, bold: true, color: C.white,
fontFace: "Calibri", lineSpacingMultiple: 1.2,
});
s.addText("This camp is for\neveryone!", {
x: 0.25, y: 3.1, w: 4.1, h: 1.0,
fontSize: 16, italic: true, color: C.lightgrey,
fontFace: "Calibri",
});
const groups = [
{ icon: "🤕", text: "Anyone with unexplained abdominal pain or swelling" },
{ icon: "👵", text: "Adults over 35 years for preventive surgical screening" },
{ icon: "👨👩👧", text: "Those with a family history of hernias or gallstones" },
{ icon: "⚠️", text: "People experiencing rectal bleeding, piles, or fissures" },
{ icon: "🏥", text: "Patients who were advised surgery but haven't followed up" },
{ icon: "😟", text: "Anyone with lumps, bumps, or swellings on the body" },
];
groups.forEach((g, i) => {
const y = 0.55 + i * 0.82;
s.addShape(pres.ShapeType.rect, {
x: 4.85, y, w: 4.9, h: 0.66,
fill: { color: C.white },
line: { color: C.aqua, pt: 1 },
rectRadius: 0.06,
});
s.addText(g.icon, { x: 4.9, y, w: 0.5, h: 0.66, fontSize: 18, valign: "middle" });
s.addText(g.text, { x: 5.45, y, w: 4.2, h: 0.66, fontSize: 11, color: C.navy, fontFace: "Calibri", valign: "middle", wrap: true });
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 – WHAT TO EXPECT ON CAMP DAY
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.white }, line:{type:"none"} });
accentLine(s);
sectionHeader(s, "What to Expect on Camp Day");
const steps = [
{ num: "1", label: "Registration", desc: "Register at the reception desk\n(Free, no prior booking needed)" },
{ num: "2", label: "Basic Vitals", desc: "Height, weight, BP &\nbasic health check" },
{ num: "3", label: "Specialist Consultation", desc: "One-on-one with\nour general surgeons" },
{ num: "4", label: "Investigations", desc: "Blood tests & ultrasound\n(selected cases, free of cost)" },
{ num: "5", label: "Report & Advice", desc: "Written summary, prescription\nand treatment plan" },
];
// draw arrow connector
for (let i = 0; i < steps.length; i++) {
const x = 0.22 + i * 1.95;
const y = 1.25;
// circle
s.addShape(pres.ShapeType.ellipse, { x: x + 0.55, y, w: 0.9, h: 0.9, fill:{ color: C.teal }, line:{type:"none"} });
s.addText(steps[i].num, { x: x + 0.55, y, w: 0.9, h: 0.9, fontSize: 20, bold: true, color: C.white, align:"center", valign:"middle", fontFace:"Calibri" });
// step card
s.addShape(pres.ShapeType.rect, {
x: x + 0.08, y: 2.35, w: 1.74, h: 2.6,
fill: { color: i % 2 === 0 ? C.offwhite : "E0F4F7" },
line: { color: C.aqua, pt: 1 },
rectRadius: 0.08,
});
s.addText(steps[i].label, { x: x + 0.12, y: 2.42, w: 1.66, h: 0.4, fontSize: 11, bold: true, color: C.navy, align:"center", fontFace:"Calibri" });
s.addText(steps[i].desc, { x: x + 0.1, y: 2.88, w: 1.7, h: 1.9, fontSize: 10, color: C.darktext, align:"center", fontFace:"Calibri", wrap: true });
// connector arrow (except last)
if (i < steps.length - 1) {
s.addShape(pres.ShapeType.rect, { x: x + 1.6, y: y + 0.37, w: 0.33, h: 0.16, fill:{ color: C.amber }, line:{type:"none"} });
}
}
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 – OUR SURGICAL TEAM
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.navy }, line:{type:"none"} });
s.addShape(pres.ShapeType.ellipse, { x:-1, y:-1, w:4, h:4, fill:{ color: C.teal, transparency:70 }, line:{type:"none"} });
s.addShape(pres.ShapeType.ellipse, { x:7.5, y:3.5, w:3.5, h:3.5, fill:{ color: C.aqua, transparency:78 }, line:{type:"none"} });
s.addText("Meet Our Surgical Team", {
x: 0.3, y: 0.2, w: 9.4, h: 0.7,
fontSize: 24, bold: true, color: C.aqua, fontFace: "Calibri",
});
s.addText("Experienced. Compassionate. Trusted.", {
x: 0.3, y: 0.85, w: 9.4, h: 0.38,
fontSize: 13, italic: true, color: C.lightgrey, fontFace: "Calibri",
});
const doctors = [
{ name: "Dr. [Name]", qual: "MS (General Surgery)", role: "Sr. Consultant Surgeon\n& Camp Director" },
{ name: "Dr. [Name]", qual: "MS, MCh (GI Surgery)", role: "Laparoscopic &\nGI Surgeon" },
{ name: "Dr. [Name]", qual: "MS (General Surgery)", role: "Proctology &\nColorectal Specialist" },
{ name: "Dr. [Name]", qual: "MS (Surgery)", role: "Trauma & Emergency\nSurgeon" },
];
doctors.forEach((d, i) => {
const x = 0.35 + i * 2.35;
const y = 1.5;
// avatar circle
s.addShape(pres.ShapeType.ellipse, { x: x + 0.4, y, w: 1.5, h: 1.5, fill:{ color: C.teal }, line:{ color: C.aqua, pt: 2 } });
s.addText("👨⚕️", { x: x + 0.4, y, w: 1.5, h: 1.5, fontSize: 30, align:"center", valign:"middle" });
s.addText(d.name, { x: x + 0.05, y: y + 1.6, w: 2.2, h: 0.38, fontSize: 12, bold: true, color: C.amber, align:"center", fontFace:"Calibri" });
s.addText(d.qual, { x: x + 0.05, y: y + 1.98, w: 2.2, h: 0.35, fontSize: 9.5, color: C.lightgrey, align:"center", fontFace:"Calibri" });
s.addText(d.role, { x: x + 0.05, y: y + 2.33, w: 2.2, h: 0.58, fontSize: 10, color: C.white, align:"center", fontFace:"Calibri", wrap: true });
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 – PATIENT TESTIMONIALS / SUCCESS STORIES
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.offwhite }, line:{type:"none"} });
accentLine(s);
sectionHeader(s, "Patient Success Stories");
const testimonials = [
{
quote: "I had been ignoring my hernia pain for 2 years. At the camp, the doctor diagnosed me instantly. Surgery was done within a week — I feel brand new!",
name: "Ramesh K., 52 yrs",
city: "Pune",
},
{
quote: "I discovered I had gallstones at the camp. I had no idea that my indigestion was this serious. Thank you XYZ Hospital for this timely intervention.",
name: "Sunita M., 44 yrs",
city: "Nashik",
},
{
quote: "The doctors were very kind and patient. My fissure was treated without any heavy surgery. The free camp changed my life.",
name: "Anil P., 39 yrs",
city: "Pune",
},
];
testimonials.forEach((t, i) => {
const x = 0.22 + i * 3.25;
const y = 1.1;
s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 3.85, fill:{ color: C.white }, line:{ color: C.teal, pt: 1.3 }, rectRadius: 0.1,
shadow: { type:"outer", color:"AACCDD", blur:5, offset:2, angle:45, opacity:0.3 } });
// big quote mark
s.addText("\u201C", { x: x + 0.08, y: y + 0.05, w: 0.6, h: 0.7, fontSize: 44, color: C.aqua, fontFace:"Georgia" });
s.addText(t.quote, { x: x + 0.12, y: y + 0.6, w: 2.76, h: 2.1, fontSize: 10.5, color: C.darktext, fontFace:"Calibri", wrap: true, italic: true });
// divider
s.addShape(pres.ShapeType.rect, { x: x + 0.12, y: y + 2.78, w: 2.76, h: 0.04, fill:{ color: C.aqua }, line:{type:"none"} });
s.addText(t.name, { x: x + 0.12, y: y + 2.9, w: 2.76, h: 0.3, fontSize: 11, bold: true, color: C.navy, fontFace:"Calibri" });
s.addText(t.city, { x: x + 0.12, y: y + 3.2, w: 2.76, h: 0.28, fontSize: 10, color: C.teal, fontFace:"Calibri" });
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 – CAMP DETAILS AT A GLANCE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.white }, line:{type:"none"} });
accentLine(s);
sectionHeader(s, "Camp Details at a Glance");
const details = [
{ icon: "📅", label: "Date", value: "[Insert Date]" },
{ icon: "⏰", label: "Timings", value: "9:00 AM – 4:00 PM" },
{ icon: "📍", label: "Venue", value: "OPD Hall, XYZ Hospital\n[Full Address]" },
{ icon: "🆓", label: "Fees", value: "Consultation: FREE\nInvestigations: FREE (selected)" },
{ icon: "📋", label: "What to Bring", value: "Previous reports / prescriptions\nAadhaar card (for registration)" },
{ icon: "📞", label: "Helpline", value: "1800-XXX-XXXX\ninfo@xyzhospital.com" },
];
details.forEach((d, i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const x = 0.2 + col * 3.27;
const y = 1.1 + row * 2.1;
s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 1.85, fill:{ color: C.offwhite }, line:{ color: C.teal, pt: 1.3 }, rectRadius: 0.09,
shadow: { type:"outer", color:"AACCDD", blur:4, offset:2, angle:45, opacity:0.25 } });
s.addText(d.icon, { x: x + 0.1, y: y + 0.1, w: 0.55, h: 0.55, fontSize: 22 });
s.addText(d.label, { x: x + 0.68, y: y + 0.12, w: 2.2, h: 0.38, fontSize: 12, bold: true, color: C.navy, fontFace:"Calibri" });
s.addText(d.value, { x: x + 0.12, y: y + 0.62, w: 2.76, h: 1.1, fontSize: 11, color: C.darktext, fontFace:"Calibri", wrap: true });
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 – REGISTER / CALL TO ACTION
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.navy }, line:{type:"none"} });
// decorative blobs
s.addShape(pres.ShapeType.ellipse, { x:6.8, y:-0.8, w:5, h:5, fill:{ color: C.teal, transparency:65 }, line:{type:"none"} });
s.addShape(pres.ShapeType.ellipse, { x:-1.5, y:3.5, w:4, h:4, fill:{ color: C.aqua, transparency:78 }, line:{type:"none"} });
s.addText("Take the First Step\nTowards Better Health!", {
x: 0.5, y: 0.5, w: 9, h: 1.5,
fontSize: 32, bold: true, color: C.white,
fontFace: "Calibri", lineSpacingMultiple: 1.2,
});
s.addText("Join us for a FREE General Surgery Screening Camp.\nNo charges. No appointment. Just your good health.", {
x: 0.5, y: 2.1, w: 9, h: 0.9,
fontSize: 15, italic: true, color: C.lightgrey,
fontFace: "Calibri", lineSpacingMultiple: 1.3,
});
// CTA buttons row
const ctas = [
{ label: "📞 Call: 1800-XXX-XXXX", bg: C.amber },
{ label: "🌐 www.xyzhospital.com", bg: C.teal },
{ label: "📧 info@xyzhospital.com", bg: C.aqua },
];
ctas.forEach((c, i) => {
const x = 0.5 + i * 3.15;
s.addShape(pres.ShapeType.rect, { x, y: 3.2, w: 2.9, h: 0.62, fill:{ color: c.bg }, line:{type:"none"}, rectRadius: 0.31 });
s.addText(c.label, { x, y: 3.2, w: 2.9, h: 0.62, fontSize: 12, bold: true, color: C.navy, align:"center", valign:"middle", fontFace:"Calibri" });
});
s.addText("Spread the word — share this with your family and neighbours!", {
x: 0.5, y: 4.1, w: 9, h: 0.45,
fontSize: 13, bold: true, color: C.amber,
align: "center", fontFace: "Calibri",
});
s.addText("XYZ Hospital | [Full Address] | Helpline: 1800-XXX-XXXX", {
x: 0.5, y: 4.65, w: 9, h: 0.35,
fontSize: 10, color: C.lightgrey,
align: "center", fontFace: "Calibri",
});
bottomBar(s, "XYZ Hospital | General Surgery Screening Camp");
}
// ─── WRITE FILE ───────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/surgical-camp-pptx/Surgical_Screening_Camp_XYZ_Hospital.pptx" })
.then(() => console.log("✅ PPTX created successfully."))
.catch(err => { console.error("❌ Error:", err); process.exit(1); });
cd /home/daytona/workspace/surgical-camp-pptx && node create_pptx.js
ls -lh /home/daytona/workspace/surgical-camp-pptx/
Surgical Screening Camp XYZ Hospital
Presentation · PPTX
| # | Slide | Design |
|---|---|---|
| 1 | Title Slide | Dark navy background, amber "FREE Camp" badge, date & venue pill buttons |
| 2 | What Is a Screening Camp? | 4-card grid explaining the camp's purpose |
| 3 | Why You Should Attend | Dark background with 6 numbered reasons |
| 4 | Conditions We Screen For | 8-icon grid: hernia, gallstones, appendix, piles, cysts, thyroid, varicose veins, abdominal pain |
| 5 | Who Should Attend | Split layout - teal panel + 6 audience cards |
| 6 | Camp Day Process | 5-step timeline: Registration → Vitals → Consultation → Investigations → Report |
| 7 | Meet Our Surgical Team | 4 doctor placeholders with avatar circles |
| 8 | Patient Success Stories | 3 testimonial cards with quote styling |
| 9 | Camp Details at a Glance | 6-card grid: Date, Timings, Venue, Fees, What to Bring, Helpline |
| 10 | Call to Action | Dark closing slide with 3 CTA buttons (Call / Web / Email) |
[Date] and [Insert Date] with the actual camp date[Full Address] with your hospital addressDr. [Name] placeholders with real doctor names & qualifications1800-XXX-XXXX with your actual helpline numberwww.xyzhospital.com and email with real contact details