Make 10 slide ppt presentation matter for enteric nervous system histology(aurbach and Meissner plexus). Include the side headings of introduction, main division of nervous system, major parts of the system,how the signal travels.
ls -la /home/daytona/workspace/ 2>/dev/null | head -20; mkdir -p /home/daytona/w…
~/ens-histology-ppt/build.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Enteric Nervous System Histology";
pres.author = "Medical Education";
// ─── DESIGN TOKENS ───────────────────────────────────────────
const C = {
darkBg: "0D1B2A", // deep navy
midBg: "1B3A5C", // medium navy
accent1: "00B4D8", // teal/cyan
accent2: "90E0EF", // light cyan
gold: "F4A261", // warm amber
white: "FFFFFF",
lightGray:"D9E8F5",
bodyText: "E0F0FF",
darkText: "0D1B2A",
};
// helper: slide background
function darkSlide(pres) {
const s = pres.addSlide();
s.background = { color: C.darkBg };
return s;
}
function midSlide(pres) {
const s = pres.addSlide();
s.background = { color: C.midBg };
return s;
}
// helper: section tag pill
function addTag(slide, label, x, y) {
slide.addShape(pres.ShapeType.roundRect, {
x, y, w: 2.5, h: 0.32, fill: { color: C.accent1 }, line: { color: C.accent1 }, rectRadius: 0.08
});
slide.addText(label, { x, y, w: 2.5, h: 0.32, fontSize: 10, bold: true, color: C.darkText, align: "center", valign: "middle", margin: 0 });
}
// helper: horizontal divider line
function hline(slide, x, y, w) {
slide.addShape(pres.ShapeType.line, { x, y, w, h: 0, line: { color: C.accent1, width: 1.5 } });
}
// ─── FETCH IMAGES ─────────────────────────────────────────────
const imgUrls = [
"https://cdn.orris.care/cdss_images/7f071bdc91c1650b8541acfc52cbb091dc9a03abe77845e4d8ba61741457be98.png",
"https://cdn.orris.care/cdss_images/f66bdb540f1db9aee2c3aaeb84edf23447038ed307056e424e2f806cfa1f33ff.png",
"https://cdn.orris.care/cdss_images/450af6ec01e18f5f5cc90dab381f978c5d17db4926d867862fa988cb4ff34668.png",
];
const imgs = JSON.parse(
execSync(`node /home/daytona/skills/shared/scripts/fetch_images.js "${imgUrls[0]}" "${imgUrls[1]}" "${imgUrls[2]}"`).toString()
);
const imgNeural = imgs[0].base64; // neural control diagram (Guyton)
const imgPlexus = imgs[1].base64; // enteric plexuses cross section (Yamada)
const imgAuerbach = imgs[2].base64; // historic wholemount drawing
// ════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
// large accent bar left
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: C.accent1 }, line: { color: C.accent1 } });
// top accent rect
s.addShape(pres.ShapeType.rect, { x: 0.18, y: 0, w: 9.82, h: 0.12, fill: { color: C.accent1 }, line: { color: C.accent1 } });
s.addText("Enteric Nervous System", {
x: 0.5, y: 0.6, w: 9.0, h: 1.1,
fontSize: 40, bold: true, color: C.white, fontFace: "Calibri",
});
s.addText("Histology of the Auerbach (Myenteric) &\nMeissner (Submucosal) Plexuses", {
x: 0.5, y: 1.75, w: 9.0, h: 1.1,
fontSize: 22, bold: false, color: C.accent2, fontFace: "Calibri",
});
hline(s, 0.5, 3.0, 5.5);
s.addText("Division of Histology | Gastrointestinal Neuroscience", {
x: 0.5, y: 3.15, w: 8.0, h: 0.45,
fontSize: 13, color: C.lightGray, italic: true,
});
s.addText("Sources: Guyton & Hall • Yamada's Gastroenterology • Ganong's Physiology", {
x: 0.5, y: 4.9, w: 9.0, h: 0.4,
fontSize: 10, color: C.accent1, italic: true,
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 2 — INTRODUCTION
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "INTRODUCTION", 0.4, 0.2);
s.addText("What is the Enteric Nervous System?", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 28, bold: true, color: C.white,
});
hline(s, 0.4, 1.45, 9.2);
const bullets = [
"The ENS lies entirely within the wall of the digestive tract — from the esophagus to the anus.",
"Contains >100 million neurons, surpassing the neuron count of the entire spinal cord.",
"Functions independently of the CNS and is therefore called the \"mini-brain\" of the gut.",
"Composed of sensory neurons, interneurons, and motor neurons — a complete nervous system in the gut wall.",
"Regulates motility, secretion, absorption, and local blood flow.",
"Extrinsic sympathetic and parasympathetic inputs modulate but do not dictate ENS activity.",
];
const bulletItems = bullets.map((b, i) => ({
text: b,
options: { bullet: { code: "2022" }, color: i === 0 ? C.accent2 : C.bodyText, breakLine: i < bullets.length - 1 },
}));
s.addText(bulletItems, {
x: 0.5, y: 1.6, w: 5.8, h: 3.7,
fontSize: 13.5, fontFace: "Calibri", valign: "top",
});
// right image
s.addImage({ data: imgNeural, x: 6.5, y: 1.4, w: 3.3, h: 3.8, sizing: { type: "contain", w: 3.3, h: 3.8 } });
s.addText("Fig: Neural control of gut wall\n(Guyton & Hall, Fig. 63.4)", {
x: 6.5, y: 5.1, w: 3.3, h: 0.4, fontSize: 8.5, color: C.accent1, italic: true, align: "center",
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 3 — MAIN DIVISIONS OF THE NERVOUS SYSTEM
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "MAIN DIVISIONS", 0.4, 0.2);
s.addText("The Nervous System: Where Does the ENS Fit?", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 26, bold: true, color: C.white,
});
hline(s, 0.4, 1.45, 9.2);
// Three boxes: CNS | PNS | ENS
const boxes = [
{ label: "Central Nervous System (CNS)", color: C.midBg, pts: ["Brain", "Spinal cord", "Processes and integrates information"] },
{ label: "Peripheral Nervous System (PNS)", color: "163E6F", pts: ["Somatic NS — voluntary control", "Autonomic NS — involuntary", " · Sympathetic (fight-or-flight)", " · Parasympathetic (rest-and-digest)"] },
{ label: "Enteric Nervous System (ENS)", color: "0A3D5C", pts: ["3rd division of the ANS", "Intrinsic gut wall network", "400–600 million neurons", "Two main plexuses: Auerbach & Meissner"] },
];
boxes.forEach((box, i) => {
const x = 0.25 + i * 3.25;
s.addShape(pres.ShapeType.roundRect, {
x, y: 1.65, w: 3.0, h: 3.6,
fill: { color: box.color }, line: { color: C.accent1, width: 1.5 }, rectRadius: 0.1,
});
s.addText(box.label, {
x: x + 0.1, y: 1.75, w: 2.8, h: 0.65,
fontSize: 13, bold: true, color: C.gold, align: "center",
});
const pts = box.pts.map((p, j) => ({
text: p,
options: { bullet: { code: "25B8" }, color: C.bodyText, breakLine: j < box.pts.length - 1 },
}));
s.addText(pts, { x: x + 0.12, y: 2.5, w: 2.76, h: 2.6, fontSize: 12, valign: "top" });
});
s.addText("The ENS is uniquely capable of autonomous function — it can direct full gut reflexes without any input from the brain or spinal cord.", {
x: 0.4, y: 5.15, w: 9.2, h: 0.38,
fontSize: 11, color: C.accent2, italic: true, align: "center",
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 4 — MAJOR PARTS: OVERVIEW OF THE TWO PLEXUSES
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "MAJOR PARTS", 0.4, 0.2);
s.addText("Two Ganglionated Plexuses of the ENS", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 26, bold: true, color: C.white,
});
hline(s, 0.4, 1.45, 9.2);
// Left text panels
s.addShape(pres.ShapeType.roundRect, { x: 0.3, y: 1.6, w: 4.5, h: 1.65, fill: { color: C.midBg }, line: { color: C.gold, width: 1.5 }, rectRadius: 0.1 });
s.addText("Myenteric Plexus (Auerbach)", { x: 0.4, y: 1.65, w: 4.3, h: 0.45, fontSize: 14, bold: true, color: C.gold });
s.addText("Between the longitudinal and circular muscle layers\nLinear chain of interconnecting neurons along entire GI tract\nPrimary role: controls GI motility", {
x: 0.4, y: 2.1, w: 4.3, h: 1.0, fontSize: 11.5, color: C.bodyText, valign: "top",
});
s.addShape(pres.ShapeType.roundRect, { x: 0.3, y: 3.4, w: 4.5, h: 1.65, fill: { color: C.midBg }, line: { color: C.accent1, width: 1.5 }, rectRadius: 0.1 });
s.addText("Submucosal Plexus (Meissner)", { x: 0.4, y: 3.45, w: 4.3, h: 0.45, fontSize: 14, bold: true, color: C.accent1 });
s.addText("Between circular muscle and luminal mucosa (submucosa)\nThree interconnected layers (outer = Henle / Schabadasch plexus)\nPrimary role: secretion, absorption, local blood flow", {
x: 0.4, y: 3.9, w: 4.3, h: 1.0, fontSize: 11.5, color: C.bodyText, valign: "top",
});
// Right: cross-section diagram
s.addImage({ data: imgPlexus, x: 5.1, y: 1.5, w: 4.7, h: 3.85, sizing: { type: "contain", w: 4.7, h: 3.85 } });
s.addText("Fig: Enteric plexuses in (a) wholemount and (b) transverse section\n(Yamada's Gastroenterology, Fig. 12.2)", {
x: 5.1, y: 5.25, w: 4.7, h: 0.35, fontSize: 8.5, color: C.accent1, italic: true, align: "center",
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 5 — AUERBACH (MYENTERIC) PLEXUS: HISTOLOGY
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "AUERBACH PLEXUS", 0.4, 0.2);
s.addText("Myenteric (Auerbach) Plexus — Histology", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 26, bold: true, color: C.gold,
});
hline(s, 0.4, 1.45, 9.2);
const pts = [
["Location", "Between longitudinal and circular smooth muscle layers"],
["Extent", "Runs the entire length of the GI tract (esophagus to anus)"],
["Structure", "Linear chain of ganglia connected by internodal strands; secondary & tertiary plexus components"],
["Neurons", "Multipolar neurons with large pale nuclei; glial (enteric glia) cells present"],
["Staining", "H&E: ganglia visible as clusters of neurons; silver stains highlight nerve networks"],
["Historical note", "First drawn by Leopold Auerbach (1871), published in Henle's Textbook of Histology"],
["Function", "Controls tonic contraction, rhythmic contraction rate, peristaltic wave velocity"],
["Key NTs", "Excitatory: ACh, Substance P, Glutamate — Inhibitory: VIP, NO, ATP"],
];
pts.forEach(([label, val], i) => {
const y = 1.6 + i * 0.47;
s.addShape(pres.ShapeType.rect, { x: 0.35, y, w: 2.2, h: 0.4, fill: { color: "163E6F" }, line: { color: C.accent1 } });
s.addText(label, { x: 0.35, y, w: 2.2, h: 0.4, fontSize: 11, bold: true, color: C.gold, align: "center", valign: "middle", margin: 0 });
s.addText(val, { x: 2.6, y: y + 0.03, w: 7.1, h: 0.4, fontSize: 11, color: C.bodyText, valign: "middle" });
});
// small Auerbach drawing inset bottom right
s.addImage({ data: imgAuerbach, x: 7.8, y: 1.5, w: 1.9, h: 3.6, sizing: { type: "contain", w: 1.9, h: 3.6 } });
s.addText("Auerbach's 1871\nwholemount drawing", {
x: 7.8, y: 5.1, w: 1.9, h: 0.4, fontSize: 7.5, color: C.accent1, italic: true, align: "center",
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 6 — MEISSNER (SUBMUCOSAL) PLEXUS: HISTOLOGY
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "MEISSNER PLEXUS", 0.4, 0.2);
s.addText("Submucosal (Meissner) Plexus — Histology", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 26, bold: true, color: C.accent1,
});
hline(s, 0.4, 1.45, 9.2);
// Two column layout
const left = [
["Location", "In the submucosa, between the circular muscle and the mucosa"],
["Layers", "3 interconnected layers:\n• Outer (Henle / Schabadasch plexus)\n• Inner Meissner plexus\n• Mucous (mucosal plexus)"],
["Neurons", "Smaller ganglia than myenteric; neurons with round nuclei; fewer cells per ganglion"],
["Staining", "H&E: small discrete ganglia in submucosa; immunohistochemistry: VIP, NPY, ACh neurons"],
["Function", "Senses luminal environment; regulates secretion, absorption, mucosal blood flow"],
];
const right = [
["Sensory inputs", "Epithelial mechanoreceptors & chemoreceptors feed into this plexus"],
["Targets", "Mucosal secretory cells, enterocytes, GI neuroendocrine cells, submucosal arterioles"],
["Key NTs", "ACh (secretomotor), VIP, NPY, Substance P, CGRP"],
["Connection", "Receives projections from myenteric plexus; directly modulates submucosal arteriolar tone"],
["Clinical link", "Hirschsprung disease: absent ganglia in both plexuses of rectosigmoid segment"],
];
const addTableCol = (items, xStart) => {
items.forEach(([label, val], i) => {
const y = 1.6 + i * 0.73;
s.addShape(pres.ShapeType.rect, { x: xStart, y, w: 1.8, h: 0.62, fill: { color: "0A3D5C" }, line: { color: C.accent2 } });
s.addText(label, { x: xStart, y, w: 1.8, h: 0.62, fontSize: 10, bold: true, color: C.accent2, align: "center", valign: "middle", margin: 2 });
s.addText(val, { x: xStart + 1.85, y: y + 0.02, w: 2.8, h: 0.65, fontSize: 10, color: C.bodyText, valign: "top" });
});
};
addTableCol(left, 0.3);
addTableCol(right, 5.1);
// vertical separator
s.addShape(pres.ShapeType.line, { x: 4.85, y: 1.55, w: 0, h: 3.8, line: { color: C.accent1, width: 0.8 } });
}
// ════════════════════════════════════════════════════════════
// SLIDE 7 — COMPARISON TABLE
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "MAJOR PARTS", 0.4, 0.2);
s.addText("Auerbach vs. Meissner: Side-by-Side Comparison", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 24, bold: true, color: C.white,
});
hline(s, 0.4, 1.45, 9.2);
const headers = ["Feature", "Myenteric (Auerbach)", "Submucosal (Meissner)"];
const rows = [
["Location", "Between longitudinal & circular muscle", "Between circular muscle & mucosa (submucosa)"],
["Ganglion size", "Larger ganglia, dense network", "Smaller ganglia, 3 sub-layers"],
["Primary function", "Motility & peristalsis", "Secretion, absorption, blood flow"],
["Neuron types", "Motor (excitatory & inhibitory), interneurons", "Sensory, secretomotor, vasomotor"],
["Key NTs", "ACh, SubP, VIP, NO, ATP", "ACh, VIP, NPY, SubP, CGRP"],
["Stimulation effect", "Increased tone & contraction rate", "Modulates mucosal secretion & blood flow"],
["Extrinsic input", "Para- & sympathetic fibers synapse here", "Receives vagal preganglionic fibres"],
];
const colW = [2.3, 3.4, 3.4];
const rowH = 0.52;
const startX = 0.35;
let startY = 1.6;
// header row
headers.forEach((h, ci) => {
const x = startX + colW.slice(0, ci).reduce((a, b) => a + b, 0);
s.addShape(pres.ShapeType.rect, { x, y: startY, w: colW[ci], h: 0.45, fill: { color: C.accent1 }, line: { color: C.accent1 } });
s.addText(h, { x, y: startY, w: colW[ci], h: 0.45, fontSize: 12, bold: true, color: C.darkText, align: "center", valign: "middle", margin: 0 });
});
rows.forEach((row, ri) => {
const y = startY + 0.45 + ri * rowH;
const bg = ri % 2 === 0 ? "163E6F" : "0D2740";
row.forEach((cell, ci) => {
const x = startX + colW.slice(0, ci).reduce((a, b) => a + b, 0);
s.addShape(pres.ShapeType.rect, { x, y, w: colW[ci], h: rowH, fill: { color: bg }, line: { color: C.midBg } });
s.addText(cell, {
x: x + 0.05, y, w: colW[ci] - 0.1, h: rowH,
fontSize: ci === 0 ? 11 : 10.5,
bold: ci === 0, color: ci === 0 ? C.gold : C.bodyText,
align: ci === 0 ? "center" : "left", valign: "middle", margin: 2,
});
});
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 8 — HOW THE SIGNAL TRAVELS (part 1: sensory → integration)
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "SIGNAL PATHWAY", 0.4, 0.2);
s.addText("How the Signal Travels — Sensory Input & Integration", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 24, bold: true, color: C.white,
});
hline(s, 0.4, 1.45, 9.2);
// Step boxes with arrows
const steps = [
{ n: "1", title: "STIMULUS", text: "Mechanical stretch, chemical contents, osmotic change, or thermal stimuli detected in gut lumen / wall", color: "14213D" },
{ n: "2", title: "SENSORY NEURONS (IPANs)", text: "Intrinsic Primary Afferent Neurons in mucosa fire; signals enter Meissner plexus and myenteric plexus", color: "163E6F" },
{ n: "3", title: "INTERNEURONS", text: "Ascending & descending interneurons integrate signals within the plexuses; coordinate oral vs. anal responses", color: "0A3D5C" },
{ n: "4", title: "CNS FEEDBACK LOOPS", text: "Some afferent signals travel via vagus nerve to brain stem and via spinal cord to prevertebral ganglia for higher-level modulation", color: "0D2A3A" },
];
steps.forEach((st, i) => {
const y = 1.6 + i * 0.9;
s.addShape(pres.ShapeType.roundRect, {
x: 0.3, y, w: 9.3, h: 0.77,
fill: { color: st.color }, line: { color: C.accent1, width: 1 }, rectRadius: 0.08,
});
s.addShape(pres.ShapeType.ellipse, {
x: 0.35, y: y + 0.12, w: 0.5, h: 0.5,
fill: { color: C.accent1 }, line: { color: C.accent1 },
});
s.addText(st.n, { x: 0.35, y: y + 0.12, w: 0.5, h: 0.5, fontSize: 14, bold: true, color: C.darkText, align: "center", valign: "middle", margin: 0 });
s.addText(st.title, { x: 0.95, y: y + 0.03, w: 2.3, h: 0.38, fontSize: 11, bold: true, color: C.gold, valign: "middle" });
s.addText(st.text, { x: 0.95, y: y + 0.36, w: 8.5, h: 0.38, fontSize: 10.5, color: C.bodyText, valign: "middle" });
if (i < steps.length - 1) {
s.addShape(pres.ShapeType.line, { x: 4.8, y: y + 0.77, w: 0, h: 0.13, line: { color: C.accent1, width: 1.5 } });
}
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 9 — HOW THE SIGNAL TRAVELS (part 2: motor output)
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
addTag(s, "SIGNAL PATHWAY", 0.4, 0.2);
s.addText("How the Signal Travels — Motor Output & Peristaltic Reflex", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 23, bold: true, color: C.white,
});
hline(s, 0.4, 1.45, 9.2);
// Left: peristaltic reflex description
const leftContent = [
{ h: "Peristaltic Reflex (Law of the Intestine)", b: "Oral (upstream) stimulation → ascending excitation via ACh/SubP → circular muscle contracts\nAnal (downstream) → descending inhibition via VIP/NO → circular muscle relaxes\nResult: bolus propulsion through the gut" },
{ h: "Myenteric Plexus Motor Output", b: "Excitatory motor neurons (ACh, Substance P, Glutamate): increase tone and contraction intensity\nInhibitory motor neurons (VIP, NO, ATP): relax sphincters (pyloric, ileocecal) to permit passage" },
{ h: "Submucosal Plexus Secretomotor Output", b: "Integrates sensory input → triggers secretion from mucosal glands\nControls villous infolding and local blood flow via submucosal arterioles" },
{ h: "Extrinsic Modulation", b: "Parasympathetic (vagus/pelvic): enhances motility and secretion via ACh at nicotinic receptors on ENS ganglia\nSympathetic (prevertebral ganglia): inhibits motility, reduces secretion, constricts blood vessels via NE" },
];
leftContent.forEach((item, i) => {
const y = 1.6 + i * 0.97;
s.addShape(pres.ShapeType.roundRect, {
x: 0.3, y, w: 6.1, h: 0.88,
fill: { color: i % 2 === 0 ? "163E6F" : "0A3D5C" },
line: { color: i % 2 === 0 ? C.gold : C.accent1, width: 1 },
rectRadius: 0.08,
});
s.addText(item.h, { x: 0.4, y: y + 0.03, w: 5.9, h: 0.35, fontSize: 11.5, bold: true, color: i % 2 === 0 ? C.gold : C.accent2 });
s.addText(item.b, { x: 0.4, y: y + 0.36, w: 5.9, h: 0.5, fontSize: 9.5, color: C.bodyText, valign: "top" });
});
// Right: neurotransmitter legend box
s.addShape(pres.ShapeType.roundRect, {
x: 6.65, y: 1.55, w: 3.1, h: 3.9,
fill: { color: "14213D" }, line: { color: C.accent2, width: 1.5 }, rectRadius: 0.1,
});
s.addText("KEY NEUROTRANSMITTERS", {
x: 6.75, y: 1.6, w: 2.9, h: 0.4, fontSize: 11, bold: true, color: C.accent2, align: "center",
});
hline(s, 6.75, 2.05, 2.9);
const nts = [
["ACh", "Excitatory — motility & secretion"],
["SubP", "Excitatory — ascending contraction"],
["VIP", "Inhibitory — relaxation, vasodilation"],
["NO", "Inhibitory — sphincter relaxation"],
["ATP", "Inhibitory — smooth muscle"],
["NPY", "Vasomotor, inhibitory"],
["5-HT", "Sensory signalling trigger"],
["NE", "Sympathetic inhibition"],
];
nts.forEach(([nt, desc], i) => {
const y = 2.15 + i * 0.41;
s.addText(nt, { x: 6.75, y, w: 0.75, h: 0.37, fontSize: 10, bold: true, color: C.gold });
s.addText(desc, { x: 7.52, y, w: 2.13, h: 0.37, fontSize: 9, color: C.bodyText });
});
}
// ════════════════════════════════════════════════════════════
// SLIDE 10 — SUMMARY & CLINICAL SIGNIFICANCE
// ════════════════════════════════════════════════════════════
{
const s = darkSlide(pres);
// accent bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.12, fill: { color: C.accent1 }, line: { color: C.accent1 } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.505, w: 10, h: 0.12, fill: { color: C.accent1 }, line: { color: C.accent1 } });
addTag(s, "SUMMARY", 0.4, 0.22);
s.addText("Summary & Clinical Significance", {
x: 0.4, y: 0.65, w: 9.2, h: 0.75,
fontSize: 26, bold: true, color: C.white,
});
hline(s, 0.4, 1.45, 9.2);
// Summary 4 boxes
const sumBoxes = [
{
title: "ENS Structure", color: "14213D", border: C.gold,
pts: ["Two ganglionated plexuses: Auerbach (myenteric) & Meissner (submucosal)", "400–600 million neurons; complete mini-nervous system", "Both intrinsic + extrinsic inputs"],
},
{
title: "Auerbach Plexus", color: "0D2A3A", border: C.gold,
pts: ["Between longitudinal & circular muscle", "Controls motility, peristalsis, sphincter tone", "Excitatory NTs: ACh, SubP; Inhibitory: VIP, NO, ATP"],
},
{
title: "Meissner Plexus", color: "0A3D5C", border: C.accent1,
pts: ["In submucosa; 3 sublayers", "Controls secretion, absorption, mucosal blood flow", "Receives sensory epithelial input"],
},
{
title: "Clinical Relevance", color: "163E6F", border: C.accent2,
pts: ["Hirschsprung disease: absent ganglia → megacolon", "IBS & IBD: ENS-immune dysregulation", "Drug targets: prokinetics (metoclopramide), antiemetics"],
},
];
sumBoxes.forEach((box, i) => {
const x = 0.25 + (i % 2) * 4.85;
const y = 1.6 + Math.floor(i / 2) * 1.8;
s.addShape(pres.ShapeType.roundRect, {
x, y, w: 4.6, h: 1.65,
fill: { color: box.color }, line: { color: box.border, width: 1.5 }, rectRadius: 0.1,
});
s.addText(box.title, { x: x + 0.1, y: y + 0.05, w: 4.4, h: 0.38, fontSize: 13, bold: true, color: box.border });
const pts = box.pts.map((p, j) => ({
text: p,
options: { bullet: { code: "2022" }, color: C.bodyText, breakLine: j < box.pts.length - 1 },
}));
s.addText(pts, { x: x + 0.1, y: y + 0.46, w: 4.4, h: 1.1, fontSize: 10.5, valign: "top" });
});
s.addText("Sources: Guyton & Hall Medical Physiology • Yamada's Textbook of Gastroenterology • Ganong's Physiology • Localization in Clinical Neurology", {
x: 0.3, y: 5.2, w: 9.4, h: 0.28,
fontSize: 8.5, color: C.accent1, italic: true, align: "center",
});
}
// ─── WRITE FILE ───────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/ens-histology-ppt/ENS_Histology_Auerbach_Meissner.pptx" })
.then(() => console.log("DONE: /home/daytona/workspace/ens-histology-ppt/ENS_Histology_Auerbach_Meissner.pptx"))
.catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/ens-histology-ppt && node build.js 2>&1
cd /home/daytona/workspace/ens-histology-ppt && \ wget -q "https://cdn.orris.car…
~/ens-histology-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ens-histology-ppt/build.js'
~/ens-histology-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ens-histology-ppt/build.js'
~/ens-histology-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ens-histology-ppt/build.js'