So I'm a bams student I want to prepare training module based on this sop i want professional ppt for the competition ayurgrama 3.0 based on this information prepare ppt for me about training module

Reading File
Reading File
Running Command

cd /home/daytona/workspace/attachments/f7738795-7e9d-455f-899e-8f676022361f && python -m markitdown Professional_SOP_Campaign_Implementation_Updated.pptx 2>&1

Running Command

cd /home/daytona/workspace/attachments/f7738795-7e9d-455f-899e-8f676022361f && python3 -c " from pptx import Presentation prs = Presentation('Professional_SOP_Campaign_Implementation_Updated.pptx') for i, slide in enumerate(prs.slides): print(f'--- Slide {i+1} ---') for shape in slide.shapes: if shape.has_text_frame: for para in shape.text_frame.paragraphs: text = para.text.strip() if text: print(text) print() " 2>&1

Running Command

cd /home/daytona/workspace/attachments/f7738795-7e9d-455f-899e-8f676022361f && node -e " const JSZip = require('jszip'); const fs = require('fs'); const data = fs.readFileSync('Professional_SOP_Campaign_Implementation_Updated.pptx'); JSZip.loadAsync(data).then(zip => { const slideFiles = Object.keys(zip.files).filter(f => f.match(/ppt\/slides\/slide[0-9]+\.xml$/)).sort(); console.log('Total slides:', slideFiles.length); const promises = slideFiles.map(f => zip.files[f].async('string')); Promise.all(promises).then(contents => { contents.forEach((xml, i) => { // Extract text const texts = []; const regex = /<a:t[^>]*>([^<]+)<\/a:t>/g; let m; while ((m = regex.exec(xml)) !== null) { texts.push(m[1]); } console.log('\\n--- Slide', i+1, '---'); console.log(texts.join(' | ')); }); }); }); " 2>&1

Running Command

ls /home/daytona/workspace/ && node -e "const JSZip = require('/home/daytona/node_modules/jszip'); console.log('ok');" 2>&1 || node -e "const pptx = require('/home/daytona/node_modules/pptxgenjs'); console.log('pptxgenjs ok');" 2>&1

Running Command

find /home/daytona -name "node_modules" -type d 2>/dev/null | head -5; find /usr -name "pptxgenjs" -type d 2>/dev/null | head -5; ls /home/daytona/skills/pptx/ 2>/dev/null

Now let me extract the SOP content and then build the PPT in parallel:
Running Command

cd /home/daytona/workspace/attachments/f7738795-7e9d-455f-899e-8f676022361f && unzip -o Professional_SOP_Campaign_Implementation_Updated.pptx -d sop_extracted/ > /dev/null 2>&1 && ls sop_extracted/ppt/slides/ | head -20

Running Command

cd /home/daytona/workspace/attachments/f7738795-7e9d-455f-899e-8f676022361f/sop_extracted && for i in 1 2 3 4 5 6 7 8; do echo "=== SLIDE $i ==="; python3 -c " import xml.etree.ElementTree as ET, sys tree = ET.parse('ppt/slides/slide$i.xml') root = tree.getroot() ns = {'a': 'http://schemas.openxmlformats.org/drawingml/2006/main'} texts = [] for t in root.findall('.//a:t', ns): if t.text and t.text.strip(): texts.append(t.text.strip()) print(' | '.join(texts)) " 2>/dev/null; done

I have all the SOP content. Now I'll build a professional, competition-grade PPT for Ayurgrama 3.0.
Running Command

mkdir -p /home/daytona/workspace/ayurgrama-ppt && cat > /home/daytona/workspace/ayurgrama-ppt/build.js << 'SCRIPT' const pptxgen = require("/usr/local/share/nvm/versions/node/v25.6.0/lib/node_modules/pptxgenjs"); const pres = new pptxgen(); pres.layout = "LAYOUT_16x9"; pres.title = "Indriya Aarogya - Training Module - Ayurgrama 3.0"; // ─── PALETTE ──────────────────────────────────────────────── const DARK_GREEN = "1B4332"; // dominant - deep Ayurvedic forest green const MID_GREEN = "2D6A4F"; // supporting const LIGHT_GREEN = "52B788"; // accent / highlight const PALE_MINT = "D8F3DC"; // card background const GOLD = "C9A84C"; // accent for headings / icons const WHITE = "FFFFFF"; const OFFWHITE = "F4FFF4"; const CHARCOAL = "1C1C1C"; // ─── REUSABLE HELPERS ──────────────────────────────────────── function darkBg(slide) { slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK_GREEN } }); } function midBg(slide) { slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: MID_GREEN } }); } function lightCard(slide, x, y, w, h, color) { slide.addShape(pres.ShapeType.roundRect, { x, y, w, h, fill: { color: color || PALE_MINT }, line: { color: LIGHT_GREEN, width: 1.5 }, rectRadius: 0.12 }); } function addSectionBadge(slide, text) { // gold pill at top-left slide.addShape(pres.ShapeType.roundRect, { x: 0.35, y: 0.18, w: 2.5, h: 0.38, fill: { color: GOLD }, line: { color: GOLD }, rectRadius: 0.19 }); slide.addText(text, { x: 0.35, y: 0.18, w: 2.5, h: 0.38, fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); } function addFooter(slide) { slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.3, w: 10, h: 0.325, fill: { color: DARK_GREEN } }); slide.addText("INDRIYA AAROGYA • Ayurgrama 3.0 • AATPAS", { x: 0, y: 5.3, w: 8, h: 0.325, fontSize: 9, color: PALE_MINT, align: "left", valign: "middle", margin: [0,0,0,0.3] }); slide.addText("Training Module", { x: 8, y: 5.3, w: 2, h: 0.325, fontSize: 9, color: GOLD, align: "right", valign: "middle", margin: [0,0.3,0,0] }); } // ══════════════════════════════════════════════════════ // SLIDE 1 – TITLE // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); darkBg(s); // decorative circle accent top-right s.addShape(pres.ShapeType.ellipse, { x: 7.8, y: -1.2, w: 3.5, h: 3.5, fill: { color: MID_GREEN }, line: { color: MID_GREEN } }); s.addShape(pres.ShapeType.ellipse, { x: 8.2, y: -0.8, w: 2.6, h: 2.6, fill: { color: LIGHT_GREEN }, line: { color: LIGHT_GREEN } }); // decorative bottom-left s.addShape(pres.ShapeType.ellipse, { x: -1.2, y: 3.8, w: 3, h: 3, fill: { color: MID_GREEN }, line: { color: MID_GREEN } }); // Gold top bar s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: GOLD } }); // Ayurgrama 3.0 badge s.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 0.35, w: 2.8, h: 0.46, fill: { color: GOLD }, line: { color: GOLD }, rectRadius: 0.23 }); s.addText("🏆 AYURGRAMA 3.0", { x: 0.5, y: 0.35, w: 2.8, h: 0.46, fontSize: 11, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); // Main title s.addText("INDRIYA AAROGYA", { x: 0.5, y: 1.15, w: 9, h: 1.0, fontSize: 54, bold: true, color: WHITE, align: "left", charSpacing: 4, margin: 0 }); s.addText("Campaign Training Module", { x: 0.5, y: 2.1, w: 9, h: 0.65, fontSize: 26, color: LIGHT_GREEN, align: "left", italic: true, margin: 0 }); // Divider line s.addShape(pres.ShapeType.rect, { x: 0.5, y: 2.85, w: 4.5, h: 0.04, fill: { color: GOLD } }); // Sub-info s.addText([ { text: "Organized by ", options: { color: PALE_MINT, fontSize: 14 } }, { text: "AATPAS", options: { color: GOLD, fontSize: 14, bold: true } }, { text: " | Under Faculty Coordinator Guidance", options: { color: PALE_MINT, fontSize: 14 } }, ], { x: 0.5, y: 3.05, w: 9, h: 0.5, margin: 0 }); s.addText("Standard Operating Procedure • Student Volunteer Guide • Field Implementation", { x: 0.5, y: 3.6, w: 8, h: 0.4, fontSize: 12, color: LIGHT_GREEN, align: "left", italic: true, margin: 0 }); // Bottom bar s.addShape(pres.ShapeType.rect, { x: 0, y: 5.3, w: 10, h: 0.325, fill: { color: GOLD } }); s.addText("Prepared for Ayurgrama 3.0 Competition • BAMS Students Training Resource", { x: 0, y: 5.3, w: 10, h: 0.325, fontSize: 10, bold: true, color: DARK_GREEN, align: "center", valign: "middle", margin: 0 }); } // ══════════════════════════════════════════════════════ // SLIDE 2 – CAMPAIGN OVERVIEW / WHAT IS INDRIYA AAROGYA // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); // Light green left panel s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 3.8, h: 5.625, fill: { color: DARK_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: OFFWHITE } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 3.4, h: 5.625, fill: { color: DARK_GREEN } }); // Side label s.addText("OVERVIEW", { x: 0, y: 1.8, w: 3.4, h: 2, fontSize: 22, bold: true, color: PALE_MINT, align: "center", charSpacing: 8, rotate: 0, margin: 0 }); s.addShape(pres.ShapeType.rect, { x: 0.3, y: 2.55, w: 2.8, h: 0.04, fill: { color: GOLD } }); s.addText("Campaign Identity", { x: 0.1, y: 2.7, w: 3.2, h: 0.5, fontSize: 11, color: LIGHT_GREEN, align: "center", italic: true, margin: 0 }); // Right content s.addText("What is Indriya Aarogya?", { x: 3.7, y: 0.3, w: 6, h: 0.65, fontSize: 26, bold: true, color: DARK_GREEN, margin: 0 }); s.addShape(pres.ShapeType.rect, { x: 3.7, y: 0.95, w: 5.8, h: 0.04, fill: { color: LIGHT_GREEN } }); const items = [ ["🌿", "Ayurvedic Health Campaign", "A structured public health outreach campaign rooted in Ayurveda"], ["👁", "Sensory Health Focus", "Focused on Indriya (sensory organ) health assessment & awareness"], ["📋", "SOP-Driven", "Implemented through a detailed Standard Operating Procedure"], ["🎓", "Student-Led", "Organized by AATPAS student volunteers under faculty guidance"], ["📊", "Data Collection", "Includes survey, feedback, and documentation components"], ]; items.forEach(([icon, title, desc], i) => { const y = 1.1 + i * 0.82; lightCard(s, 3.7, y, 5.9, 0.68, i % 2 === 0 ? PALE_MINT : WHITE); s.addText(icon, { x: 3.85, y: y + 0.05, w: 0.55, h: 0.55, fontSize: 20, align: "center", valign: "middle", margin: 0 }); s.addText(title, { x: 4.45, y: y + 0.04, w: 5.0, h: 0.28, fontSize: 12, bold: true, color: DARK_GREEN, margin: 0 }); s.addText(desc, { x: 4.45, y: y + 0.32, w: 5.0, h: 0.28, fontSize: 10, color: CHARCOAL, margin: 0 }); }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 3 – CAMPAIGN OBJECTIVES // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); darkBg(s); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: OFFWHITE } }); // Header bar s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: DARK_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 1.1, w: 10, h: 0.06, fill: { color: GOLD } }); addSectionBadge(s, "OBJECTIVES"); s.addText("Campaign Objectives", { x: 3.0, y: 0.2, w: 6.5, h: 0.7, fontSize: 28, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); const objectives = [ ["01", "Standardized Implementation", "Ensure uniform execution of campaign activities across all sites"], ["02", "Awareness Creation", "Create meaningful awareness among participants about Indriya health"], ["03", "Education & Training", "Educate participants through interactive sessions and demonstrations"], ["04", "Active Participation", "Promote inclusive and active community engagement"], ["05", "Accurate Data Collection", "Collect reliable survey data and feedback for analysis"], ["06", "Quality & Uniformity", "Maintain consistent quality standards throughout the campaign"], ]; objectives.forEach(([num, title, desc], i) => { const col = i % 2; const row = Math.floor(i / 2); const x = col === 0 ? 0.3 : 5.2; const y = 1.3 + row * 1.3; s.addShape(pres.ShapeType.roundRect, { x, y, w: 4.6, h: 1.1, fill: { color: WHITE }, line: { color: LIGHT_GREEN, width: 1.5 }, rectRadius: 0.1 }); s.addShape(pres.ShapeType.ellipse, { x: x + 0.12, y: y + 0.22, w: 0.6, h: 0.6, fill: { color: DARK_GREEN }, line: { color: DARK_GREEN } }); s.addText(num, { x: x + 0.12, y: y + 0.22, w: 0.6, h: 0.6, fontSize: 13, bold: true, color: GOLD, align: "center", valign: "middle", margin: 0 }); s.addText(title, { x: x + 0.85, y: y + 0.1, w: 3.6, h: 0.38, fontSize: 12, bold: true, color: DARK_GREEN, margin: 0 }); s.addText(desc, { x: x + 0.85, y: y + 0.48, w: 3.6, h: 0.5, fontSize: 9.5, color: CHARCOAL, margin: 0, wrap: true }); }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 4 – CAMPAIGN ORGANIZATION & TEAM STRUCTURE // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: OFFWHITE } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: MID_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 1.1, w: 10, h: 0.06, fill: { color: GOLD } }); addSectionBadge(s, "ORGANIZATION"); s.addText("Campaign Organization Structure", { x: 3.0, y: 0.2, w: 6.5, h: 0.7, fontSize: 24, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); // Hierarchy blocks // Top: Organizing Committee s.addShape(pres.ShapeType.roundRect, { x: 2.8, y: 1.35, w: 4.4, h: 0.88, fill: { color: DARK_GREEN }, line: { color: GOLD, width: 2 }, rectRadius: 0.12 }); s.addText("🏛 Organizing Committee", { x: 2.8, y: 1.35, w: 4.4, h: 0.42, fontSize: 13, bold: true, color: GOLD, align: "center", valign: "middle", margin: 0 }); s.addText("AATPAS — Designated Organizing Body", { x: 2.8, y: 1.77, w: 4.4, h: 0.42, fontSize: 10, color: PALE_MINT, align: "center", valign: "middle", margin: 0 }); // Arrow down s.addShape(pres.ShapeType.rect, { x: 4.95, y: 2.24, w: 0.1, h: 0.3, fill: { color: GOLD } }); s.addShape(pres.ShapeType.isosceles, { x: 4.8, y: 2.52, w: 0.4, h: 0.2, fill: { color: GOLD }, line: { color: GOLD } }); // Middle: Faculty Coordinator s.addShape(pres.ShapeType.roundRect, { x: 2.8, y: 2.72, w: 4.4, h: 0.88, fill: { color: MID_GREEN }, line: { color: GOLD, width: 2 }, rectRadius: 0.12 }); s.addText("🎓 Faculty Coordinator", { x: 2.8, y: 2.72, w: 4.4, h: 0.42, fontSize: 13, bold: true, color: GOLD, align: "center", valign: "middle", margin: 0 }); s.addText("Provides guidance, oversight & institutional compliance", { x: 2.8, y: 3.14, w: 4.4, h: 0.42, fontSize: 10, color: PALE_MINT, align: "center", valign: "middle", margin: 0 }); // Arrow down s.addShape(pres.ShapeType.rect, { x: 4.95, y: 3.6, w: 0.1, h: 0.3, fill: { color: GOLD } }); s.addShape(pres.ShapeType.isosceles, { x: 4.8, y: 3.88, w: 0.4, h: 0.2, fill: { color: GOLD }, line: { color: GOLD } }); // Bottom row: 3 student roles const roles = [["📝", "Planning", "Logistics &\nschedule mgmt"], ["⚙", "Execution", "On-ground\nactivities"], ["📸", "Documentation", "Records &\nreporting"]]; roles.forEach(([icon, title, sub], i) => { const x = 1.0 + i * 2.85; s.addShape(pres.ShapeType.roundRect, { x, y: 4.08, w: 2.5, h: 1.1, fill: { color: PALE_MINT }, line: { color: LIGHT_GREEN, width: 1.5 }, rectRadius: 0.12 }); s.addText(icon + " " + title, { x, y: 4.1, w: 2.5, h: 0.42, fontSize: 12, bold: true, color: DARK_GREEN, align: "center", valign: "middle", margin: 0 }); s.addText(sub, { x, y: 4.52, w: 2.5, h: 0.55, fontSize: 9.5, color: CHARCOAL, align: "center", margin: 0, wrap: true }); }); // Student volunteers label s.addText("Student Volunteers", { x: 3.3, y: 3.88, w: 3.4, h: 0.22, fontSize: 9, color: CHARCOAL, align: "center", italic: true, margin: 0 }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 5 – SCHEDULE & VENUE // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: OFFWHITE } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: DARK_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 1.1, w: 10, h: 0.06, fill: { color: GOLD } }); addSectionBadge(s, "LOGISTICS"); s.addText("Campaign Schedule & Venue", { x: 3.0, y: 0.2, w: 6.5, h: 0.7, fontSize: 24, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); const points = [ ["📅", "Approved Schedule", "Campaign is conducted strictly as per the approved schedule finalized by AATPAS and faculty."], ["📍", "Venue Finalization", "Venue is confirmed and finalized well in advance to ensure logistical readiness."], ["📣", "Pre-Communication", "Date, time, and venue details are communicated to all participants and volunteers beforehand."], ["👩‍🏫", "Faculty Supervision", "All activities are conducted under direct faculty supervisor oversight."], ["📄", "Institutional SOP", "Every activity strictly follows the institutional Standard Operating Procedure."], ]; points.forEach(([icon, title, desc], i) => { const y = 1.28 + i * 0.84; s.addShape(pres.ShapeType.roundRect, { x: 0.4, y, w: 9.2, h: 0.72, fill: { color: i % 2 === 0 ? PALE_MINT : WHITE }, line: { color: LIGHT_GREEN, width: 1 }, rectRadius: 0.1 }); s.addShape(pres.ShapeType.ellipse, { x: 0.55, y: y + 0.1, w: 0.52, h: 0.52, fill: { color: DARK_GREEN }, line: { color: DARK_GREEN } }); s.addText(icon, { x: 0.55, y: y + 0.1, w: 0.52, h: 0.52, fontSize: 16, align: "center", valign: "middle", margin: 0 }); s.addText(title + ":", { x: 1.2, y: y + 0.06, w: 2.2, h: 0.3, fontSize: 11, bold: true, color: DARK_GREEN, margin: 0 }); s.addText(desc, { x: 3.45, y: y + 0.06, w: 5.9, h: 0.6, fontSize: 10, color: CHARCOAL, margin: 0, wrap: true, valign: "middle" }); s.addShape(pres.ShapeType.rect, { x: 3.35, y: y + 0.15, w: 0.04, h: 0.42, fill: { color: GOLD } }); }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 6 – STUDENT VOLUNTEER GUIDELINES // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK_GREEN } }); // right decorative panel s.addShape(pres.ShapeType.rect, { x: 6.5, y: 0, w: 3.5, h: 5.625, fill: { color: MID_GREEN } }); s.addShape(pres.ShapeType.ellipse, { x: 6.9, y: 1.0, w: 2.7, h: 2.7, fill: { color: LIGHT_GREEN }, line: { color: LIGHT_GREEN } }); s.addText("✅", { x: 6.9, y: 1.0, w: 2.7, h: 2.7, fontSize: 60, align: "center", valign: "middle", margin: 0 }); s.addText("DO's for\nVolunteers", { x: 6.8, y: 3.8, w: 3.0, h: 0.8, fontSize: 16, bold: true, color: GOLD, align: "center", margin: 0 }); addSectionBadge(s, "GUIDELINES"); s.addText("Student Volunteer Guidelines", { x: 0.35, y: 0.7, w: 6.0, h: 0.7, fontSize: 24, bold: true, color: WHITE, margin: 0 }); s.addShape(pres.ShapeType.rect, { x: 0.35, y: 1.38, w: 5.8, h: 0.04, fill: { color: GOLD } }); const guidelines = [ ["⏰", "Punctuality", "Report on time — no delays"], ["🪪", "ID Card", "Always wear your institutional ID card"], ["🤝", "Discipline", "Maintain discipline throughout the event"], ["📋", "Responsibility", "Perform assigned duties sincerely and completely"], ["💬", "Respectful Interaction", "Interact with participants and team respectfully"], ["✍", "Attendance", "Record your attendance accurately as required"], ["📘", "Follow SOP", "Adhere to SOP protocols at every stage"], ]; guidelines.forEach(([icon, title, note], i) => { const y = 1.5 + i * 0.56; s.addText(icon + " ", { x: 0.4, y, w: 0.65, h: 0.46, fontSize: 16, color: GOLD, align: "center", valign: "middle", margin: 0 }); s.addText(title + " — ", { x: 1.05, y, w: 1.7, h: 0.46, fontSize: 11, bold: true, color: LIGHT_GREEN, valign: "middle", margin: 0 }); s.addText(note, { x: 2.75, y, w: 3.55, h: 0.46, fontSize: 11, color: PALE_MINT, valign: "middle", margin: 0 }); }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 7 – CAMPAIGN ACTIVITIES // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: OFFWHITE } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: MID_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 1.1, w: 10, h: 0.06, fill: { color: GOLD } }); addSectionBadge(s, "ACTIVITIES"); s.addText("Campaign Activity Flow", { x: 3.0, y: 0.2, w: 6.5, h: 0.7, fontSize: 26, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); const activities = [ ["📝", "Registration", "Participant enrollment & ID verification"], ["📢", "Awareness Sessions", "Indriya health awareness presentations"], ["🎯", "Demonstrations", "Practical Ayurvedic wellness demos"], ["🤝", "Participant Interaction", "Q&A, counselling & engagement"], ["📊", "Indriya Assessment", "Standardized survey & sensory assessment"], ["🎮", "Educational Games", "Interactive learning through gamification"], ["🎭", "Skit / Role Play", "Awareness through performing arts"], ["🎵", "Singing & Activities", "Cultural awareness activities"], ]; activities.forEach(([icon, title, desc], i) => { const col = i % 2; const row = Math.floor(i / 2); const x = col === 0 ? 0.3 : 5.2; const y = 1.28 + row * 1.02; const bg = (row + col) % 2 === 0 ? PALE_MINT : WHITE; s.addShape(pres.ShapeType.roundRect, { x, y, w: 4.6, h: 0.85, fill: { color: bg }, line: { color: LIGHT_GREEN, width: 1.2 }, rectRadius: 0.1 }); s.addShape(pres.ShapeType.ellipse, { x: x + 0.1, y: y + 0.14, w: 0.56, h: 0.56, fill: { color: DARK_GREEN }, line: { color: DARK_GREEN } }); s.addText(icon, { x: x + 0.1, y: y + 0.14, w: 0.56, h: 0.56, fontSize: 18, align: "center", valign: "middle", margin: 0 }); s.addText(title, { x: x + 0.78, y: y + 0.06, w: 3.7, h: 0.33, fontSize: 11.5, bold: true, color: DARK_GREEN, margin: 0 }); s.addText(desc, { x: x + 0.78, y: y + 0.39, w: 3.7, h: 0.38, fontSize: 9.5, color: CHARCOAL, margin: 0 }); }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 8 – ATTENDANCE & DOCUMENTATION // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: OFFWHITE } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: DARK_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 1.1, w: 10, h: 0.06, fill: { color: GOLD } }); addSectionBadge(s, "DOCUMENTATION"); s.addText("Attendance & Documentation", { x: 3.0, y: 0.2, w: 6.5, h: 0.7, fontSize: 24, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); // 3 big feature cards const cards = [ ["📱", "Digital Attendance", "Use geotag-enabled digital attendance register where applicable for accurate record-keeping."], ["📷", "Photo & Video", "Capture photographs and videos of activities with participant consent for documentation."], ["📁", "Official Records", "Maintain complete and official campaign documentation files per institutional requirements."], ]; cards.forEach(([icon, title, desc], i) => { const x = 0.4 + i * 3.1; s.addShape(pres.ShapeType.roundRect, { x, y: 1.3, w: 2.85, h: 2.8, fill: { color: WHITE }, line: { color: LIGHT_GREEN, width: 2 }, rectRadius: 0.15 }); s.addShape(pres.ShapeType.ellipse, { x: x + 0.93, y: 1.48, w: 1.0, h: 1.0, fill: { color: DARK_GREEN }, line: { color: DARK_GREEN } }); s.addText(icon, { x: x + 0.93, y: 1.48, w: 1.0, h: 1.0, fontSize: 28, align: "center", valign: "middle", margin: 0 }); s.addText(title, { x: x + 0.1, y: 2.58, w: 2.65, h: 0.5, fontSize: 12.5, bold: true, color: DARK_GREEN, align: "center", margin: 0 }); s.addText(desc, { x: x + 0.12, y: 3.1, w: 2.6, h: 0.9, fontSize: 10, color: CHARCOAL, align: "center", wrap: true, margin: 0 }); }); // Key reminder box s.addShape(pres.ShapeType.roundRect, { x: 0.4, y: 4.3, w: 9.2, h: 0.72, fill: { color: PALE_MINT }, line: { color: GOLD, width: 2 }, rectRadius: 0.1 }); s.addText("⚠ Key Reminder:", { x: 0.55, y: 4.35, w: 2.0, h: 0.6, fontSize: 11, bold: true, color: DARK_GREEN, valign: "middle", margin: 0 }); s.addText("All documentation must be accurate, complete, and submitted as per institutional guidelines. No data manipulation is permitted.", { x: 2.6, y: 4.35, w: 6.8, h: 0.6, fontSize: 10.5, color: CHARCOAL, valign: "middle", margin: 0 }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 9 – FEEDBACK & REPORTING // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: OFFWHITE } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: MID_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 1.1, w: 10, h: 0.06, fill: { color: GOLD } }); addSectionBadge(s, "FEEDBACK"); s.addText("Feedback & Final Reporting", { x: 3.0, y: 0.2, w: 6.5, h: 0.7, fontSize: 24, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 }); // Left: feedback steps s.addText("Feedback Process", { x: 0.4, y: 1.22, w: 4.5, h: 0.45, fontSize: 15, bold: true, color: DARK_GREEN, margin: 0 }); const fbSteps = [ "Collect standardized feedback forms from all participants", "Analyze responses for quality improvement insights", "Use feedback data to enhance future campaign editions", ]; fbSteps.forEach((step, i) => { const y = 1.72 + i * 0.82; s.addShape(pres.ShapeType.ellipse, { x: 0.4, y: y + 0.1, w: 0.5, h: 0.5, fill: { color: DARK_GREEN }, line: { color: DARK_GREEN } }); s.addText((i + 1).toString(), { x: 0.4, y: y + 0.1, w: 0.5, h: 0.5, fontSize: 12, bold: true, color: GOLD, align: "center", valign: "middle", margin: 0 }); s.addShape(pres.ShapeType.roundRect, { x: 1.05, y, w: 3.6, h: 0.68, fill: { color: PALE_MINT }, line: { color: LIGHT_GREEN, width: 1 }, rectRadius: 0.08 }); s.addText(step, { x: 1.15, y, w: 3.4, h: 0.68, fontSize: 10, color: CHARCOAL, wrap: true, valign: "middle", margin: 0 }); }); // Divider s.addShape(pres.ShapeType.rect, { x: 5.0, y: 1.2, w: 0.04, h: 3.8, fill: { color: LIGHT_GREEN } }); // Right: final report components s.addText("Final Report Components", { x: 5.25, y: 1.22, w: 4.4, h: 0.45, fontSize: 15, bold: true, color: DARK_GREEN, margin: 0 }); const reportItems = [ "📌 Objectives & Methodology", "📅 Date, Time & Venue Details", "👥 Participant Details & Count", "🎯 Activities Conducted", "✅ Attendance Records", "📸 Photographs & Media", "📊 Feedback Analysis", "🏆 Outcomes & Recommendations", ]; reportItems.forEach((item, i) => { const col = i % 2; const row = Math.floor(i / 2); const x = 5.25 + col * 2.25; const y = 1.75 + row * 0.75; s.addShape(pres.ShapeType.roundRect, { x, y, w: 2.1, h: 0.6, fill: { color: WHITE }, line: { color: LIGHT_GREEN, width: 1 }, rectRadius: 0.08 }); s.addText(item, { x: x + 0.05, y, w: 2.0, h: 0.6, fontSize: 9.5, color: CHARCOAL, wrap: true, valign: "middle", margin: 0 }); }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 10 – TRAINING MODULE SUMMARY / KEY TAKEAWAYS // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); darkBg(s); s.addShape(pres.ShapeType.ellipse, { x: -1.5, y: -1.5, w: 5, h: 5, fill: { color: MID_GREEN }, line: { color: MID_GREEN } }); s.addShape(pres.ShapeType.ellipse, { x: 7.5, y: 3.5, w: 4, h: 4, fill: { color: MID_GREEN }, line: { color: MID_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: GOLD } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 5.555, w: 10, h: 0.07, fill: { color: GOLD } }); s.addText("Key Takeaways", { x: 0.5, y: 0.25, w: 9, h: 0.65, fontSize: 30, bold: true, color: GOLD, align: "center", margin: 0, charSpacing: 2 }); s.addText("Everything a volunteer needs to remember", { x: 0.5, y: 0.88, w: 9, h: 0.35, fontSize: 13, color: LIGHT_GREEN, align: "center", italic: true, margin: 0 }); s.addShape(pres.ShapeType.rect, { x: 3, y: 1.22, w: 4, h: 0.04, fill: { color: GOLD } }); const takeaways = [ ["🌿", "Follow SOP at all times"], ["⏰", "Be punctual and disciplined"], ["📋", "Document everything accurately"], ["🤝", "Interact with respect and empathy"], ["📊", "Collect & submit all data and feedback"], ["🎯", "Contribute to quality & uniformity"], ]; takeaways.forEach(([icon, text], i) => { const col = i % 2; const row = Math.floor(i / 2); const x = col === 0 ? 0.7 : 5.4; const y = 1.45 + row * 1.22; s.addShape(pres.ShapeType.roundRect, { x, y, w: 4.2, h: 0.95, fill: { color: "1E5844" }, line: { color: LIGHT_GREEN, width: 1.5 }, rectRadius: 0.12 }); s.addText(icon, { x: x + 0.12, y: y + 0.16, w: 0.6, h: 0.6, fontSize: 20, align: "center", valign: "middle", margin: 0 }); s.addText(text, { x: x + 0.85, y, w: 3.2, h: 0.95, fontSize: 12.5, bold: true, color: WHITE, valign: "middle", margin: 0 }); }); addFooter(s); } // ══════════════════════════════════════════════════════ // SLIDE 11 – CLOSING / THANK YOU // ══════════════════════════════════════════════════════ { const s = pres.addSlide(); darkBg(s); s.addShape(pres.ShapeType.ellipse, { x: 3.5, y: -0.5, w: 6, h: 6, fill: { color: MID_GREEN }, line: { color: MID_GREEN } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK_GREEN + "CC" } }); s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.12, h: 5.625, fill: { color: GOLD } }); s.addShape(pres.ShapeType.rect, { x: 9.88, y: 0, w: 0.12, h: 5.625, fill: { color: GOLD } }); s.addText("🌿", { x: 3.8, y: 0.5, w: 2.4, h: 1.1, fontSize: 55, align: "center", margin: 0 }); s.addText("Let's Make", { x: 0.5, y: 1.55, w: 9, h: 0.7, fontSize: 40, bold: true, color: WHITE, align: "center", charSpacing: 3, margin: 0 }); s.addText("INDRIYA AAROGYA", { x: 0.5, y: 2.2, w: 9, h: 0.85, fontSize: 44, bold: true, color: GOLD, align: "center", charSpacing: 5, margin: 0 }); s.addText("a Success!", { x: 0.5, y: 3.0, w: 9, h: 0.7, fontSize: 38, bold: true, color: LIGHT_GREEN, align: "center", charSpacing: 2, margin: 0 }); s.addShape(pres.ShapeType.rect, { x: 2.5, y: 3.78, w: 5, h: 0.04, fill: { color: GOLD } }); s.addText("Ayurgrama 3.0 • AATPAS • BAMS Training Module", { x: 0.5, y: 3.92, w: 9, h: 0.4, fontSize: 12, color: PALE_MINT, align: "center", italic: true, margin: 0 }); s.addText("\"Swasthya eva param dharmah\" — Health is the highest duty", { x: 0.5, y: 4.38, w: 9, h: 0.4, fontSize: 11, color: LIGHT_GREEN, align: "center", italic: true, margin: 0 }); s.addShape(pres.ShapeType.rect, { x: 0, y: 5.3, w: 10, h: 0.325, fill: { color: GOLD } }); s.addText("Thank You • All the Best for Ayurgrama 3.0!", { x: 0, y: 5.3, w: 10, h: 0.325, fontSize: 11, bold: true, color: DARK_GREEN, align: "center", valign: "middle", margin: 0 }); } // ── Write ────────────────────────────────────────────── pres.writeFile({ fileName: "/home/daytona/workspace/ayurgrama-ppt/Indriya_Aarogya_Training_Module_Ayurgrama3.pptx" }) .then(() => console.log("SUCCESS: PPT written")) .catch(e => { console.error("ERROR:", e); process.exit(1); }); SCRIPT echo "Script written"

Running Command

node --require /usr/local/share/nvm/versions/node/v25.6.0/lib/node_modules/pptxgenjs /home/daytona/workspace/ayurgrama-ppt/build.js 2>&1

The error is on line 177 - pres.ShapeType.isosceles doesn't exist. Let me fix all invalid shape types:
Running Command

node -e "const p = require('/usr/local/share/nvm/versions/node/v25.6.0/lib/node_modules/pptxgenjs'); const pres = new p(); console.log(JSON.stringify(Object.keys(pres.ShapeType)));" 2>&1 | head -5

Editing File

~/ayurgrama-ppt/build.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ayurgrama-ppt/build.js'
Running Command

node --require /usr/local/share/nvm/versions/node/v25.6.0/lib/node_modules/pptxgenjs /home/daytona/workspace/ayurgrama-ppt/build.js 2>&1

PPT generated successfully. Let me fix that one transparency warning and confirm the file:
Editing File

~/ayurgrama-ppt/build.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ayurgrama-ppt/build.js'
Running Command

node --require /usr/local/share/nvm/versions/node/v25.6.0/lib/node_modules/pptxgenjs /home/daytona/workspace/ayurgrama-ppt/build.js 2>&1 && ls -lh /home/daytona/workspace/ayurgrama-ppt/

Your presentation is ready! Here's the download link:

Indriya Aarogya Training Module Ayurgrama3

Presentation · PPTX


Here's what was built for you - a complete 11-slide professional training module PPT for Ayurgrama 3.0:
SlideContent
1Title slide - "Indriya Aarogya Campaign Training Module" with Ayurgrama 3.0 badge
2Campaign overview - what Indriya Aarogya is, its identity and purpose
36 campaign objectives in numbered card grid
4Organization hierarchy - AATPAS → Faculty Coordinator → Student Volunteer roles
5Schedule & venue logistics with 5 key process points
6Student volunteer Do's and guidelines (7 rules with icons)
7All 8 campaign activities in icon-card layout
8Attendance & documentation - 3 feature cards + key reminder
9Feedback process + final report components (split layout)
10Key takeaways summary - 6 points for volunteers to remember
11Closing slide with Sanskrit shloka and Ayurgrama 3.0 wishes
Design choices made for competition impact:
  • Deep forest green (#1B4332) + gold (#C9A84C) palette - Ayurvedic and professional
  • Dark title/closing slides, light content slides for contrast rhythm
  • Every slide has icon-driven cards instead of plain bullets
  • AATPAS branding and Ayurgrama 3.0 badge on every slide
  • Footer on all slides with campaign name and module label
This is a shared conversation. Sign in to Orris to start your own chat.