Make ppt based mention topics in aploded pic
mkdir -p /home/daytona/workspace/ocp-ppt && ls /home/daytona/workspace/ocp-ppt/
~/ocp-ppt/ocp_presentation.js
const pptxgen = require("pptxgenjs");
let pres = new pptxgen();
pres.layout = 'LAYOUT_WIDE';
pres.title = 'Oral Contraceptive Pills (OCPs)';
// βββ THEME COLORS βββββββββββββββββββββββββββββββββββββββββββββββββββ
const C = {
deepPurple: "2D1B69",
purple: "5C3BC8",
lightPurple: "7B5EA7",
accent: "E91E8C",
accentLight: "F48FB1",
white: "FFFFFF",
lightGray: "F3F0FC",
darkText: "1A1035",
midText: "4A3B8C",
cardBg: "EDE8FC",
cardBg2: "FCE4F3",
cardBg3: "E8F4E8",
cardBg4: "FFF3E0",
green: "2E7D32",
orange: "E65100",
red: "C62828",
teal: "00695C",
};
// Helper: add a slide with dark-gradient background
function addBgRect(slide, color1, color2) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: "100%",
fill: { type: "solid", color: color1 },
line: { type: "none" },
});
}
// Helper: section tag (colored pill)
function addTag(slide, text, x, y, color) {
slide.addShape(pres.ShapeType.roundRect, {
x, y, w: 2.5, h: 0.32,
fill: { type: "solid", color: color },
line: { type: "none" },
rectRadius: 0.16,
});
slide.addText(text, {
x, y, w: 2.5, h: 0.32,
fontSize: 9, bold: true, color: C.white,
align: "center", valign: "middle", margin: 0,
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 1 β TITLE
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
// Deep purple bg
addBgRect(sl, C.deepPurple, C.purple);
// Decorative accent bar (left)
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: "100%",
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
// Right decorative circle
sl.addShape(pres.ShapeType.ellipse, {
x: 10.5, y: -1, w: 3.5, h: 3.5,
fill: { type: "solid", color: C.purple },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.ellipse, {
x: 11.2, y: 4.2, w: 2.5, h: 2.5,
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
// Pill icon (decorative circles to simulate pill)
sl.addShape(pres.ShapeType.ellipse, {
x: 0.9, y: 1.2, w: 1.1, h: 1.1,
fill: { type: "solid", color: C.accentLight },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.ellipse, {
x: 1.6, y: 1.55, w: 0.55, h: 0.55,
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
sl.addText("ORAL CONTRACEPTIVE PILLS", {
x: 0.4, y: 0.6, w: 9.5, h: 0.6,
fontSize: 13, bold: true, color: C.accentLight,
charSpacing: 4, align: "left",
});
sl.addText("OCPs", {
x: 0.4, y: 1.15, w: 9.0, h: 2.0,
fontSize: 72, bold: true, color: C.white,
align: "left",
});
sl.addText("Classification β’ Mechanism of Action\nContraindications β’ Adverse Effects", {
x: 0.4, y: 3.1, w: 9.0, h: 0.9,
fontSize: 18, color: C.accentLight,
align: "left",
});
sl.addText("Pharmacology | Reproductive Medicine", {
x: 0.4, y: 4.2, w: 6, h: 0.4,
fontSize: 11, color: "9B8EC4",
align: "left",
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 2 β CLASSIFICATION OF OCPs
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
addBgRect(sl, C.lightGray, C.lightGray);
// Header bar
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: 1.0,
fill: { type: "solid", color: C.deepPurple },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0.88, w: "100%", h: 0.12,
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
sl.addText("CLASSIFICATION OF OCPs", {
x: 0.4, y: 0.1, w: 12, h: 0.75,
fontSize: 24, bold: true, color: C.white,
align: "left",
});
addTag(sl, "SLIDE 02", 10.5, 0.28, C.accent);
// ββ Card: Combined (COCPs) βββββββββββββββββββββββββββββ
sl.addShape(pres.ShapeType.roundRect, {
x: 0.3, y: 1.15, w: 5.9, h: 2.55,
fill: { type: "solid", color: C.white },
line: { color: C.purple, pt: 1.5 },
rectRadius: 0.15,
shadow: { type: "outer", blur: 8, offset: 3, angle: 45, color: "BBAADD", opacity: 0.25 },
});
sl.addShape(pres.ShapeType.rect, {
x: 0.3, y: 1.15, w: 0.22, h: 2.55,
fill: { type: "solid", color: C.purple },
line: { type: "none" },
});
sl.addText("1. Combined Oral Contraceptive Pills (COCPs)", {
x: 0.62, y: 1.2, w: 5.4, h: 0.4,
fontSize: 12, bold: true, color: C.deepPurple,
});
sl.addText([
{ text: "β’ Contain: ", options: { bold: true, color: C.midText } },
{ text: "Estrogen (ethinyl estradiol) + Progestin\n", options: { color: C.darkText } },
{ text: "β’ Monophasic: ", options: { bold: true, color: C.midText } },
{ text: "Constant hormone levels throughout cycle\n", options: { color: C.darkText } },
{ text: "β’ Biphasic: ", options: { bold: true, color: C.midText } },
{ text: "2 different dose levels per cycle\n", options: { color: C.darkText } },
{ text: "β’ Triphasic: ", options: { bold: true, color: C.midText } },
{ text: "3 varying dose levels per cycle\n", options: { color: C.darkText } },
{ text: "β’ Extended/Continuous: ", options: { bold: true, color: C.midText } },
{ text: "Progestin withdrawal every 3 months", options: { color: C.darkText } },
], {
x: 0.62, y: 1.62, w: 5.45, h: 2.0,
fontSize: 11, lineSpacingMultiple: 1.3,
});
// ββ Card: Progestin-Only βββββββββββββββββββββββββββββ
sl.addShape(pres.ShapeType.roundRect, {
x: 6.6, y: 1.15, w: 5.9, h: 2.55,
fill: { type: "solid", color: C.white },
line: { color: C.accent, pt: 1.5 },
rectRadius: 0.15,
shadow: { type: "outer", blur: 8, offset: 3, angle: 45, color: "BBAADD", opacity: 0.25 },
});
sl.addShape(pres.ShapeType.rect, {
x: 6.6, y: 1.15, w: 0.22, h: 2.55,
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
sl.addText("2. Progestin-Only Pills (Mini-pills)", {
x: 6.92, y: 1.2, w: 5.4, h: 0.4,
fontSize: 12, bold: true, color: C.deepPurple,
});
sl.addText([
{ text: "β’ Contain: ", options: { bold: true, color: C.midText } },
{ text: "Progestin only (no estrogen)\n", options: { color: C.darkText } },
{ text: "β’ Examples: ", options: { bold: true, color: C.midText } },
{ text: "Norethindrone 350 ΞΌg daily\n", options: { color: C.darkText } },
{ text: "β’ Taken daily without interruption\n", options: { color: C.darkText } },
{ text: "β’ Indication: ", options: { bold: true, color: C.midText } },
{ text: "Breastfeeding women, estrogen CI\n", options: { color: C.darkText } },
{ text: "β’ Efficacy: ~99% (theoretical)", options: { color: C.darkText } },
], {
x: 6.92, y: 1.62, w: 5.45, h: 2.0,
fontSize: 11, lineSpacingMultiple: 1.3,
});
// ββ Estrogen content note βββββββββββββββββββββββββββββ
sl.addShape(pres.ShapeType.roundRect, {
x: 0.3, y: 3.85, w: 12.2, h: 1.5,
fill: { type: "solid", color: "EDE8FC" },
line: { color: C.purple, pt: 1 },
rectRadius: 0.12,
});
sl.addText("KEY COMPONENTS", {
x: 0.5, y: 3.92, w: 3, h: 0.3,
fontSize: 9, bold: true, color: C.purple, charSpacing: 2,
});
sl.addText([
{ text: "Estrogen: ", options: { bold: true, color: C.accent } },
{ text: "Ethinyl estradiol (EE) β 20 to 50 ΞΌg per pill ", options: { color: C.darkText } },
{ text: "Progestins: ", options: { bold: true, color: C.purple } },
{ text: "Norethindrone, Levonorgestrel, Desogestrel, Norgestimate, Drospirenone\n", options: { color: C.darkText } },
{ text: "Route: ", options: { bold: true, color: C.teal } },
{ text: "Oral (standard) | Transdermal patch | Intravaginal ring | Subdermal implant | Depot injection", options: { color: C.darkText } },
], {
x: 0.5, y: 4.22, w: 12.0, h: 1.0,
fontSize: 10.5, lineSpacingMultiple: 1.3,
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 3 β MECHANISM OF ACTION (MOA)
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
addBgRect(sl, "1A1035", "1A1035");
// Header
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.2, h: "100%",
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
sl.addText("MECHANISM OF ACTION", {
x: 0.4, y: 0.15, w: 9, h: 0.55,
fontSize: 26, bold: true, color: C.white,
charSpacing: 1,
});
addTag(sl, "SLIDE 03", 11.3, 0.22, C.purple);
sl.addText("How OCPs prevent pregnancy", {
x: 0.4, y: 0.68, w: 8, h: 0.3,
fontSize: 12, color: "9B8EC4",
});
// MOA Cards (4 mechanisms)
const moas = [
{
num: "01",
title: "Inhibition of Ovulation",
color: C.purple,
body: "Primary mechanism. Estrogen suppresses FSH β no follicle development. Progestin suppresses LH surge β prevents ovulation. Progestin reduces GnRH pulse frequency from hypothalamus.",
},
{
num: "02",
title: "Cervical Mucus Changes",
color: C.accent,
body: "Progestin thickens cervical mucus β impairs sperm penetration and transport. Creates hostile environment for sperm migration into uterus.",
},
{
num: "03",
title: "Endometrial Changes",
color: C.teal,
body: "Progestin causes endometrial atrophy β hostile to implantation. Glandular changes reduce receptivity for a fertilized ovum. Backup mechanism.",
},
{
num: "04",
title: "Tubal Motility",
color: C.orange,
body: "Progestin alters fallopian tube peristalsis and secretion. May impair transport of ovum and sperm, reducing chance of fertilization.",
},
];
const cols = [0.3, 6.7];
const rows = [1.15, 3.2];
moas.forEach((m, i) => {
const x = cols[i % 2];
const y = rows[Math.floor(i / 2)];
sl.addShape(pres.ShapeType.roundRect, {
x, y, w: 5.9, h: 1.85,
fill: { type: "solid", color: "2A1F5A" },
line: { color: m.color, pt: 1.5 },
rectRadius: 0.15,
});
// Number badge
sl.addShape(pres.ShapeType.ellipse, {
x: x + 0.18, y: y + 0.12, w: 0.55, h: 0.55,
fill: { type: "solid", color: m.color },
line: { type: "none" },
});
sl.addText(m.num, {
x: x + 0.18, y: y + 0.12, w: 0.55, h: 0.55,
fontSize: 10, bold: true, color: C.white,
align: "center", valign: "middle", margin: 0,
});
sl.addText(m.title, {
x: x + 0.85, y: y + 0.13, w: 4.85, h: 0.4,
fontSize: 12, bold: true, color: m.color,
});
sl.addText(m.body, {
x: x + 0.22, y: y + 0.6, w: 5.45, h: 1.15,
fontSize: 10.5, color: "D0C8F0",
lineSpacingMultiple: 1.35,
});
});
// Bottom note
sl.addShape(pres.ShapeType.rect, {
x: 0.3, y: 5.1, w: 12.2, h: 0.38,
fill: { type: "solid", color: "2A1F5A" },
line: { type: "none" },
});
sl.addText("β
Inhibition of ovulation is the primary and most reliable mechanism of action. Backup mechanisms provide additional protection.", {
x: 0.4, y: 5.12, w: 12.0, h: 0.34,
fontSize: 10, color: C.accentLight, italic: true,
align: "center",
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 4 β CONTRAINDICATIONS
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
addBgRect(sl, C.lightGray, C.lightGray);
// Header
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: 1.0,
fill: { type: "solid", color: C.red },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0.88, w: "100%", h: 0.12,
fill: { type: "solid", color: C.orange },
line: { type: "none" },
});
sl.addText("CONTRAINDICATIONS", {
x: 0.4, y: 0.1, w: 9, h: 0.75,
fontSize: 26, bold: true, color: C.white,
});
addTag(sl, "SLIDE 04", 11.3, 0.28, C.orange);
// Absolute CI label
sl.addShape(pres.ShapeType.roundRect, {
x: 0.3, y: 1.08, w: 3.0, h: 0.38,
fill: { type: "solid", color: C.red },
line: { type: "none" },
rectRadius: 0.18,
});
sl.addText("ABSOLUTE (WHO 4)", {
x: 0.3, y: 1.08, w: 3.0, h: 0.38,
fontSize: 10, bold: true, color: C.white,
align: "center", valign: "middle", margin: 0,
});
// Relative CI label
sl.addShape(pres.ShapeType.roundRect, {
x: 6.6, y: 1.08, w: 3.0, h: 0.38,
fill: { type: "solid", color: C.orange },
line: { type: "none" },
rectRadius: 0.18,
});
sl.addText("RELATIVE (WHO 3)", {
x: 6.6, y: 1.08, w: 3.0, h: 0.38,
fontSize: 10, bold: true, color: C.white,
align: "center", valign: "middle", margin: 0,
});
// Absolute CI box
sl.addShape(pres.ShapeType.roundRect, {
x: 0.3, y: 1.55, w: 5.9, h: 3.8,
fill: { type: "solid", color: C.white },
line: { color: C.red, pt: 2 },
rectRadius: 0.15,
});
const absoluteCIs = [
"Pregnancy (known or suspected)",
"History of DVT / pulmonary embolism (VTE)",
"Ischemic heart disease or stroke",
"Breast cancer (current or recent)",
"Liver disease (hepatic adenoma, cirrhosis)",
"Uncontrolled hypertension (β₯ 160/100 mmHg)",
"Migraine with aura",
"Thrombophilia (Factor V Leiden, etc.)",
"Smokers aged > 35 years",
"Undiagnosed abnormal uterine bleeding",
];
sl.addText(absoluteCIs.map((t, i) => ({
text: `β ${t}` + (i < absoluteCIs.length - 1 ? "\n" : ""),
options: { color: C.red, bold: i === 0 }
})), {
x: 0.5, y: 1.65, w: 5.55, h: 3.6,
fontSize: 11, lineSpacingMultiple: 1.3, color: C.darkText,
});
// Relative CI box
sl.addShape(pres.ShapeType.roundRect, {
x: 6.6, y: 1.55, w: 5.9, h: 3.8,
fill: { type: "solid", color: C.white },
line: { color: C.orange, pt: 2 },
rectRadius: 0.15,
});
const relativeCIs = [
"Controlled hypertension",
"Breastfeeding < 6 weeks postpartum",
"Diabetes mellitus with vascular complications",
"Gallbladder disease",
"History of cholestasis with prior OCP use",
"Severe hyperlipidemia",
"Smoking < 35 years of age",
"Postpartum < 21 days (non-breastfeeding)",
"Use of enzyme-inducing drugs (rifampicin, etc.)",
];
sl.addText(relativeCIs.map((t, i) => ({
text: `β ${t}` + (i < relativeCIs.length - 1 ? "\n" : ""),
options: { color: C.orange }
})), {
x: 6.8, y: 1.65, w: 5.55, h: 3.6,
fontSize: 11, lineSpacingMultiple: 1.3, color: C.darkText,
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 5 β ADVERSE EFFECTS
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
addBgRect(sl, "0D1B2A", "0D1B2A");
// Header
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.2, h: "100%",
fill: { type: "solid", color: C.accentLight },
line: { type: "none" },
});
sl.addText("ADVERSE EFFECTS OF OCPs", {
x: 0.4, y: 0.15, w: 10, h: 0.55,
fontSize: 26, bold: true, color: C.white, charSpacing: 1,
});
addTag(sl, "SLIDE 05", 11.3, 0.22, C.teal);
sl.addText("Side effects and complications to monitor", {
x: 0.4, y: 0.68, w: 8, h: 0.3,
fontSize: 12, color: "7ECCC5",
});
// 6 adverse-effect cards
const aeCards = [
{ title: "Thromboembolic", color: C.red, icon: "π©Έ",
points: ["DVT, PE (β risk 3-4x)", "Arterial thrombosis (rare)", "Stroke (esp. with aura/migraine)", "Risk β with factor V Leiden"] },
{ title: "Cardiovascular", color: C.orange, icon: "β€οΈ",
points: ["Hypertension (mild BP rise)", "MI risk (esp. in smokers > 35)", "Dysrhythmias (rare)", "Fluid retention, edema"] },
{ title: "Hormonal / Metabolic", color: C.purple, icon: "βοΈ",
points: ["Nausea, breast tenderness", "Weight gain (fluid retention)", "Glucose intolerance", "Altered lipid profile"] },
{ title: "Hepatic", color: C.teal, icon: "π«",
points: ["Cholestatic jaundice", "Benign hepatic adenoma", "Gallstone formation β", "Altered liver enzymes"] },
{ title: "CNS / Neurological", color: "7B61FF", icon: "π§ ",
points: ["Headache / migraine worsening", "Mood changes, depression", "Decreased libido", "Chloasma (melasma)"] },
{ title: "Reproductive / Other", color: C.accentLight, icon: "π¬",
points: ["Breakthrough bleeding (spotting)", "Amenorrhea post-pill", "Decreased milk production", "Cervical ectropion"] },
];
const cardW = 4.0;
const cardH = 1.85;
const positions = [
{ x: 0.3, y: 1.1 }, { x: 4.65, y: 1.1 }, { x: 9.0, y: 1.1 },
{ x: 0.3, y: 3.1 }, { x: 4.65, y: 3.1 }, { x: 9.0, y: 3.1 },
];
aeCards.forEach((card, i) => {
const { x, y } = positions[i];
sl.addShape(pres.ShapeType.roundRect, {
x, y, w: cardW, h: cardH,
fill: { type: "solid", color: "1A2E40" },
line: { color: card.color, pt: 1.5 },
rectRadius: 0.15,
});
// Title stripe
sl.addShape(pres.ShapeType.rect, {
x, y, w: cardW, h: 0.38,
fill: { type: "solid", color: card.color },
line: { type: "none" },
});
sl.addText(`${card.title}`, {
x: x + 0.12, y: y + 0.02, w: cardW - 0.15, h: 0.34,
fontSize: 11, bold: true, color: C.white,
align: "left", valign: "middle", margin: 0,
});
// Points
sl.addText(card.points.map((p, pi) => ({
text: `β’ ${p}` + (pi < card.points.length - 1 ? "\n" : ""),
options: { color: "D0ECF8" },
})), {
x: x + 0.15, y: y + 0.44, w: cardW - 0.2, h: cardH - 0.5,
fontSize: 10, lineSpacingMultiple: 1.3,
});
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 6 β BENEFITS & CLINICAL USES
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
addBgRect(sl, C.lightGray, C.lightGray);
// Header
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: 1.0,
fill: { type: "solid", color: C.teal },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0.88, w: "100%", h: 0.12,
fill: { type: "solid", color: C.purple },
line: { type: "none" },
});
sl.addText("BENEFITS & NON-CONTRACEPTIVE USES", {
x: 0.4, y: 0.1, w: 11, h: 0.75,
fontSize: 23, bold: true, color: C.white,
});
addTag(sl, "SLIDE 06", 11.3, 0.28, C.purple);
const benefits = [
{ title: "Dysmenorrhea Relief", body: "Reduces prostaglandin production β less painful periods. One of the most common indications for OCP beyond contraception.", color: C.teal },
{ title: "Endometriosis", body: "Suppresses endometrial growth, reducing pelvic pain, dyspareunia, and lesion progression in endometriosis patients.", color: C.purple },
{ title: "PCOS Management", body: "Reduces androgen levels β improves hirsutism, acne, and irregular periods in polycystic ovary syndrome.", color: C.accent },
{ title: "Reduced Cancer Risk", body: "Long-term use associated with reduced risk of ovarian and endometrial cancers (up to 50% reduction with prolonged use).", color: C.green },
{ title: "Acne & Hirsutism", body: "Anti-androgenic progestins (drospirenone, norgestimate) reduce sebum production and androgen-driven hair growth.", color: C.orange },
{ title: "Menstrual Regulation", body: "Predictable withdrawal bleeding; used to manage irregular cycles, heavy menstrual bleeding, and premenstrual syndrome.", color: "1565C0" },
];
const bpos = [
{ x: 0.3, y: 1.1 }, { x: 4.55, y: 1.1 }, { x: 8.8, y: 1.1 },
{ x: 0.3, y: 3.1 }, { x: 4.55, y: 3.1 }, { x: 8.8, y: 3.1 },
];
benefits.forEach((b, i) => {
const { x, y } = bpos[i];
sl.addShape(pres.ShapeType.roundRect, {
x, y, w: 3.9, h: 1.85,
fill: { type: "solid", color: C.white },
line: { color: b.color, pt: 2 },
rectRadius: 0.15,
shadow: { type: "outer", blur: 6, offset: 2, angle: 45, color: "BBBBBB", opacity: 0.2 },
});
sl.addShape(pres.ShapeType.rect, {
x, y, w: 3.9, h: 0.36,
fill: { type: "solid", color: b.color },
line: { type: "none" },
});
sl.addText(b.title, {
x: x + 0.1, y: y + 0.02, w: 3.7, h: 0.32,
fontSize: 11, bold: true, color: C.white,
valign: "middle", margin: 0,
});
sl.addText(b.body, {
x: x + 0.12, y: y + 0.44, w: 3.7, h: 1.3,
fontSize: 10.5, color: C.darkText,
lineSpacingMultiple: 1.3,
});
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 7 β SUMMARY TABLE
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
addBgRect(sl, C.deepPurple, C.deepPurple);
sl.addText("QUICK REFERENCE SUMMARY", {
x: 0.4, y: 0.12, w: 10, h: 0.55,
fontSize: 24, bold: true, color: C.white, charSpacing: 2,
});
addTag(sl, "SLIDE 07", 11.3, 0.22, C.accent);
const rows = [
["Category", "Combined OCP (COCP)", "Progestin-Only (Mini-pill)"],
["Components", "Estrogen + Progestin", "Progestin only"],
["Primary MOA", "Inhibits ovulation (FSH+LH suppression)", "Cervical mucus thickening"],
["Efficacy (perfect use)", "~99.7%", "~99.5%"],
["Key CI", "VTE, breast cancer, migraine+aura, pregnancy", "Active liver disease"],
["Breastfeeding", "NOT preferred (β milk)", "Preferred choice"],
["Main ADR", "Nausea, DVT, HTN, breakthrough bleeding", "Irregular spotting, amenorrhea"],
];
const colWidths = [2.2, 5.0, 5.0];
const rowH = 0.62;
const tableX = 0.3;
let tableY = 0.85;
rows.forEach((row, ri) => {
let cx = tableX;
row.forEach((cell, ci) => {
const isHeader = ri === 0;
const isRowLabel = ci === 0 && ri > 0;
sl.addShape(pres.ShapeType.rect, {
x: cx, y: tableY, w: colWidths[ci], h: rowH,
fill: { type: "solid", color: isHeader ? C.accent : isRowLabel ? "3D2480" : (ri % 2 === 0 ? "2A1F5A" : "231A4F") },
line: { color: "5C3BC8", pt: 0.5 },
});
sl.addText(cell, {
x: cx + 0.08, y: tableY + 0.04, w: colWidths[ci] - 0.12, h: rowH - 0.08,
fontSize: isHeader ? 11 : 10.5,
bold: isHeader || isRowLabel,
color: isHeader ? C.white : (isRowLabel ? C.accentLight : "D0C8F0"),
valign: "middle",
lineSpacingMultiple: 1.2,
});
cx += colWidths[ci];
});
tableY += rowH;
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 8 β CLOSING SLIDE
// ββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
let sl = pres.addSlide();
addBgRect(sl, C.deepPurple, C.deepPurple);
sl.addShape(pres.ShapeType.ellipse, {
x: -1, y: -1, w: 5, h: 5,
fill: { type: "solid", color: C.purple },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.ellipse, {
x: 9.5, y: 3.2, w: 4, h: 4,
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: "100%",
fill: { type: "solid", color: C.deepPurple },
line: { type: "none" },
transparency: 30,
});
sl.addText("KEY TAKEAWAYS", {
x: 1, y: 0.5, w: 11, h: 0.5,
fontSize: 13, bold: true, color: C.accentLight,
align: "center", charSpacing: 4,
});
const takeaways = [
"OCPs are classified as Combined (estrogen + progestin) or Progestin-Only (mini-pills)",
"Primary MOA: Inhibition of ovulation via FSH/LH suppression at hypothalamus-pituitary axis",
"Absolute contraindications include VTE history, estrogen-sensitive cancers, pregnancy, migraine with aura",
"Key adverse effects: thromboembolic events, hypertension, nausea, breakthrough bleeding",
"Non-contraceptive benefits: dysmenorrhea, PCOS, endometriosis, acne, reduced ovarian/endometrial cancer risk",
];
sl.addText(takeaways.map((t, i) => ({
text: `${i + 1}. ${t}` + (i < takeaways.length - 1 ? "\n" : ""),
options: { color: i % 2 === 0 ? C.white : C.accentLight },
})), {
x: 0.8, y: 1.2, w: 11.5, h: 3.8,
fontSize: 13, lineSpacingMultiple: 1.7,
align: "left",
});
sl.addText("Reference: Goodman & Gilman's Pharmacological Basis of Therapeutics | Berek & Novak's Gynecology", {
x: 0.5, y: 5.05, w: 12, h: 0.35,
fontSize: 9, color: "6A5E9C", italic: true, align: "center",
});
}
// ββ Write file βββββββββββββββββββββββββββββββββββββββ
pres.writeFile({ fileName: "/home/daytona/workspace/ocp-ppt/OCPs_Classification_MOA_Contraindications.pptx" })
.then(() => console.log("β
PPTX created successfully"))
.catch(e => console.error("β Error:", e));
cd /home/daytona/workspace/ocp-ppt && node ocp_presentation.js
ls -lh /home/daytona/workspace/ocp-ppt/OCPs_Classification_MOA_Contraindicationsβ¦
OCPs Classification MOA Contraindications
Presentation Β· PPTX
| Slide | Content |
|---|---|
| 1 | Title Slide - Oral Contraceptive Pills (OCPs) |
| 2 | Classification - Combined OCPs (COCPs) vs. Progestin-Only (Mini-pills), with types (monophasic/biphasic/triphasic), components, and routes |
| 3 | Mechanism of Action - 4 mechanisms: Inhibition of ovulation, cervical mucus changes, endometrial changes, tubal motility |
| 4 | Contraindications - Absolute (WHO 4) vs. Relative (WHO 3) side-by-side comparison |
| 5 | Adverse Effects - 6 categories: thromboembolic, cardiovascular, hormonal/metabolic, hepatic, CNS/neurological, reproductive |
| 6 | Benefits & Non-Contraceptive Uses - Dysmenorrhea, PCOS, endometriosis, acne, cancer risk reduction |
| 7 | Quick Reference Summary Table - COCP vs. Mini-pill comparison |
| 8 | Key Takeaways - 5 concise clinical points |
Add last slide Thank you virat kohli photo holding Ipl trophy π
Virat Kohli IPL trophy photo 2024 RCB winner celebration
cd /home/daytona/workspace/ocp-ppt && curl -L -o virat_ipl.jpg "https://cdn.gultβ¦
~/ocp-ppt/add_thankyou_slide.js
const pptxgen = require("pptxgenjs");
const fs = require("fs");
const path = require("path");
// Read the existing pptx
const pptxPath = "/home/daytona/workspace/ocp-ppt/OCPs_Classification_MOA_Contraindications.pptx";
// We'll use pptxgenjs to open and append
// pptxgenjs doesn't support opening existing files directly, so we re-run the
// full generation + new slide approach via a separate script that appends.
// Instead, use the load() method supported in pptxgenjs v3+
const pres = new pptxgen();
// Load existing file
pres.load(pptxPath).then(() => {
// ββ Thank You Slide ββββββββββββββββββββββββββββββββββββββββββββββ
const C = {
deepPurple: "2D1B69",
purple: "5C3BC8",
accent: "E91E8C",
accentLight: "F48FB1",
white: "FFFFFF",
gold: "FFD700",
darkText: "1A1035",
};
let sl = pres.addSlide();
// Background
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: "100%",
fill: { type: "solid", color: C.deepPurple },
line: { type: "none" },
});
// Decorative circles
sl.addShape(pres.ShapeType.ellipse, {
x: -0.8, y: -0.8, w: 3.5, h: 3.5,
fill: { type: "solid", color: C.purple },
line: { type: "none" },
});
sl.addShape(pres.ShapeType.ellipse, {
x: 10.2, y: 3.8, w: 3.5, h: 3.5,
fill: { type: "solid", color: C.accent },
line: { type: "none" },
});
// Gold accent strip at bottom
sl.addShape(pres.ShapeType.rect, {
x: 0, y: 5.25, w: "100%", h: 0.25,
fill: { type: "solid", color: C.gold },
line: { type: "none" },
});
// Virat Kohli image (left side)
const imgData = fs.readFileSync("/home/daytona/workspace/ocp-ppt/virat_ipl.jpg").toString("base64");
sl.addImage({
data: "image/jpeg;base64," + imgData,
x: 0.3, y: 0.55, w: 5.2, h: 4.6,
});
// Gold border frame around image
sl.addShape(pres.ShapeType.rect, {
x: 0.3, y: 0.55, w: 5.2, h: 4.6,
fill: { type: "none" },
line: { color: C.gold, pt: 3 },
});
// Trophy emoji / label
sl.addText("π IPL 2025 CHAMPION", {
x: 0.3, y: 5.0, w: 5.2, h: 0.35,
fontSize: 11, bold: true, color: C.gold,
align: "center", valign: "middle",
});
// Right side: THANK YOU text
sl.addText("THANK", {
x: 6.0, y: 0.5, w: 7.0, h: 1.1,
fontSize: 72, bold: true, color: C.white,
align: "left",
});
sl.addText("YOU!", {
x: 6.0, y: 1.45, w: 7.0, h: 1.1,
fontSize: 72, bold: true, color: C.accent,
align: "left",
});
// Divider line
sl.addShape(pres.ShapeType.line, {
x: 6.0, y: 2.65, w: 6.5, h: 0,
line: { color: C.gold, pt: 2.5 },
});
// Quote
sl.addText('"Champions keep playing until they get it right."', {
x: 6.0, y: 2.85, w: 6.8, h: 0.7,
fontSize: 13, italic: true, color: C.accentLight,
align: "left",
lineSpacingMultiple: 1.3,
});
sl.addText("β Virat Kohli | RCB Captain", {
x: 6.0, y: 3.55, w: 6.8, h: 0.35,
fontSize: 11, color: C.gold,
align: "left",
});
// Bottom text
sl.addText("Presented by: Pharmacology Team β’ Topic: Oral Contraceptive Pills (OCPs)", {
x: 6.0, y: 4.25, w: 6.8, h: 0.4,
fontSize: 10, color: "9B8EC4", italic: true,
align: "left",
});
// Trophy icon row
sl.addText("π π π π΄", {
x: 6.0, y: 4.75, w: 6.8, h: 0.45,
fontSize: 22, align: "left",
});
// Save
return pres.writeFile({ fileName: pptxPath });
}).then(() => {
console.log("β
Thank You slide added successfully!");
}).catch(err => {
console.error("β Error:", err);
});
cd /home/daytona/workspace/ocp-ppt && node add_thankyou_slide.js 2>&1
~/ocp-ppt/ocp_presentation.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ocp-ppt/ocp_presentation.js'
cd /home/daytona/workspace/ocp-ppt && node ocp_presentation.js 2>&1
ls -lh /home/daytona/workspace/ocp-ppt/OCPs_Classification_MOA_Contraindicationsβ¦
OCPs Classification MOA Contraindications
Presentation Β· PPTX
Remove quotes & below
~/ocp-ppt/ocp_presentation.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ocp-ppt/ocp_presentation.js'
~/ocp-ppt/ocp_presentation.js
Error: String not found in file: ' // Gold divider
sl.addShape(pres.ShapeType.line, {
x: 6.1, y: 2.68, w: 6.4, h: 0,
line: { color: "FFD700", pt: 2.5 },
});
// Quote
'cd /home/daytona/workspace/ocp-ppt && node ocp_presentation.js 2>&1
OCPs Classification MOA Contraindications
Presentation Β· PPTX