Enterprise-grade PowerPoint deck generation using evidence-based prompting, workflow enforcement, constraint-based design
Scanned 2/12/2026
Install to Claude Code
npx -y skills add DNYoussef/ai-chrome-extension --skill when-creating-presentations-use-pptx-generation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of When Creating Presentations Use Pptx Generation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/dnyoussef-when-creating-presentations-use-pptx-generation)More formats (shields.io, HTML) on the badges page.
---
name: when-creating-presentations-use-pptx-generation
version: 1.0.0
description: Enterprise-grade PowerPoint deck generation using evidence-based prompting, workflow enforcement, constraint-based design
category: utilities
tags: [presentation, pptx, slides, enterprise, documentation]
agents: [coder, researcher]
difficulty: intermediate
estimated_duration: 25-40min
success_criteria:
- Presentation generated with proper structure
- All slides follow design constraints
- Accessibility standards met (WCAG 2.1 AA)
- Data visualization effective
validation_method: accessibility_scan
dependencies:
- claude-flow@alpha
- pptxgenjs
- html2pptx (optional)
outputs:
- PowerPoint file (.pptx)
- Slide notes
- Accessibility report
triggers:
- Need professional presentation
- Board deck required
- Report generation
- Data visualization needed
---
# PPTX Generation - Enterprise Presentation Creator
## Overview
Enterprise-grade PowerPoint deck generation system using evidence-based prompting techniques, workflow enforcement, and constraint-based design for professional presentations (board decks, reports, analyses). Supports 30+ slide decks with consistent visual quality and accessibility compliance.
## When to Use
- Creating board-level presentations
- Quarterly business reviews
- Technical documentation slides
- Data-heavy reports
- Executive summaries
- Client proposals
- Training materials
## Phase 1: Research Content (8 min)
### Objective
Gather and structure presentation information
### Agent: Researcher
**Step 1.1: Content Gathering**
```javascript
const contentStructure = {
metadata: {
title: 'Presentation Title',
subtitle: 'Subtitle',
author: 'Author Name',
date: new Date(),
audience: 'executive|technical|general',
purpose: 'inform|persuade|instruct'
},
outline: [
{
section: 'Introduction',
slides: ['Title', 'Agenda', 'Executive Summary']
},
{
section: 'Main Content',
slides: ['Key Points', 'Data Analysis', 'Recommendations']
},
{
section: 'Conclusion',
slides: ['Summary', 'Next Steps', 'Q&A']
}
],
dataPoints: extractDataPoints(),
visualizations: identifyVisualizations()
};
await memory.store('pptx/content-structure', contentStructure);
```
**Step 1.2: Data Analysis**
```javascript
async function analyzeData(data) {
return {
tables: extractTables(data),
charts: identifyChartOpportunities(data),
trends: analyzeTrends(data),
insights: generateInsights(data)
};
}
```
### Validation Criteria
- [ ] Content structure defined
- [ ] Data points extracted
- [ ] Visualization types identified
- [ ] Outline complete
## Phase 2: Design Layout (7 min)
### Objective
Create presentation design following constraints
### Agent: Coder
**Step 2.1: Define Design System**
```javascript
const designSystem = {
colors: {
primary: '#2C3E50',
secondary: '#3498DB',
accent: '#E74C3C',
text: '#2C3E50',
background: '#FFFFFF'
},
fonts: {
heading: { face: 'Calibri', size: 32, bold: true },
subheading: { face: 'Calibri', size: 24, bold: true },
body: { face: 'Calibri', size: 18 },
caption: { face: 'Calibri', size: 14, italic: true }
},
layout: {
marginX: 0.5,
marginY: 0.5,
titleY: 0.5,
contentY: 1.5,
spacing: 0.3
},
accessibility: {
contrastRatio: 4.5, // WCAG 2.1 AA
altText: true,
readingOrder: true
}
};
await memory.store('pptx/design-system', designSystem);
```
**Step 2.2: Create Slide Layouts**
```javascript
const slideLayouts = {
title: {
type: 'title',
elements: [
{ type: 'text', content: '{title}', style: 'heading', position: { x: 1, y: 2.5 } },
{ type: 'text', content: '{subtitle}', style: 'subheading', position: { x: 1, y: 3.5 } }
]
},
content: {
type: 'content',
elements: [
{ type: 'text', content: '{title}', style: 'heading', position: { x: 0.5, y: 0.5 } },
{ type: 'text', content: '{body}', style: 'body', position: { x: 0.5, y: 1.5 } }
]
},
twoColumn: {
type: 'two-column',
elements: [
{ type: 'text', content: '{left}', position: { x: 0.5, y: 1.5, w: 4.5 } },
{ type: 'text', content: '{right}', position: { x: 5.5, y: 1.5, w: 4.5 } }
]
},
dataVisualization: {
type: 'chart',
elements: [
{ type: 'text', content: '{title}', style: 'heading', position: { x: 0.5, y: 0.5 } },
{ type: 'chart', chartData: '{data}', position: { x: 1, y: 1.5, w: 8, h: 4 } }
]
}
};
await memory.store('pptx/layouts', slideLayouts);
```
### Validation Criteria
- [ ] Design system defined
- [ ] Color contrast meets WCAG 2.1 AA
- [ ] Layouts created
- [ ] Accessibility constraints applied
## Phase 3: Generate Slides (12 min)
### Objective
Create PowerPoint file with all slides
### Agent: Coder
**Step 3.1: Initialize Presentation**
```javascript
const pptxgen = require('pptxgenjs');
const pres = new pptxgen();
// Apply design system
pres.layout = 'LAYOUT_WIDE';
pres.author = contentStructure.metadata.author;
pres.title = contentStructure.metadata.title;
pres.subject = contentStructure.metadata.purpose;
```
**Step 3.2: Generate Slides**
```javascript
async function generateSlides(outline, designSystem, layouts) {
for (const section of outline) {
for (const slideData of section.slides) {
const layout = selectLayout(slideData.type, layouts);
const slide = pres.addSlide();
// Add title
slide.addText(slideData.title, {
x: layout.title.x,
y: layout.title.y,
w: layout.title.w || 9,
h: layout.title.h || 0.75,
fontSize: designSystem.fonts.heading.size,
bold: designSystem.fonts.heading.bold,
color: designSystem.colors.text
});
// Add content based on slide type
if (slideData.type === 'content') {
slide.addText(slideData.content, {
x: layout.content.x,
y: layout.content.y,
w: layout.content.w || 9,
h: layout.content.h || 4,
fontSize: designSystem.fonts.body.size,
color: designSystem.colors.text,
bullet: slideData.bullet || false
});
}
// Add visualizations
if (slideData.chart) {
slide.addChart(slideData.chart.type, slideData.chart.data, {
x: layout.chart.x,
y: layout.chart.y,
w: layout.chart.w,
h: layout.chart.h,
showTitle: true,
showLegend: true
});
}
// Add accessibility
if (slideData.altText) {
slide.addNotes(slideData.altText); // Alt text for screen readers
}
}
}
return pres;
}
```
**Step 3.3: Add Data Visualizations**
```javascript
function addChart(slide, chartData, position, designSystem) {
const chartConfig = {
x: position.x,
y: position.y,
w: position.w,
h: position.h,
chartColors: [
designSystem.colors.primary,
designSystem.colors.secondary,
designSystem.colors.accent
],
showLabel: true,
showValue: true,
showLegend: true,
legendPos: 'r',
valAxisMaxVal: Math.max(...chartData.values) * 1.2
};
slide.addChart(chartData.type, chartData.data, chartConfig);
}
```
### Validation Criteria
- [ ] All slides generated
- [ ] Design system applied consistently
- [ ] Charts and visuals rendered
- [ ] Alt text added for accessibility
## Phase 4: Validate Quality (8 min)
### Objective
Ensure accessibility and quality standards
### Agent: Coder
**Step 4.1: Accessibility Scan**
```javascript
async function scanAccessibility(pres) {
const issues = [];
for (const slide of pres.slides) {
// Check color contrast
for (const element of slide.elements) {
if (element.color && element.background) {
const contrast = calculateContrastRatio(element.color, element.background);
if (contrast < 4.5) {
issues.push({
slide: slide.index,
type: 'COLOR_CONTRAST',
severity: 'HIGH',
message: `Contrast ratio ${contrast} < 4.5 (WCAG 2.1 AA)`
});
}
}
}
// Check alt text
if (slide.hasImages() && !slide.hasAltText()) {
issues.push({
slide: slide.index,
type: 'MISSING_ALT_TEXT',
severity: 'HIGH',
message: 'Images missing alt text for screen readers'
});
}
// Check reading order
if (!slide.hasReadingOrder()) {
issues.push({
slide: slide.index,
type: 'READING_ORDER',
severity: 'MEDIUM',
message: 'Reading order not defined'
});
}
}
await memory.store('pptx/accessibility-issues', issues);
return issues;
}
```
**Step 4.2: Quality Checks**
```javascript
const qualityChecks = {
consistency: checkDesignConsistency(pres),
readability: checkTextReadability(pres),
dataIntegrity: validateChartData(pres),
fileSize: checkFileSize(pres),
slideCount: pres.slides.length <= 40 // Optimal for attention
};
const passed = Object.values(qualityChecks).every(check => check.passed);
```
### Validation Criteria
- [ ] WCAG 2.1 AA compliance
- [ ] No critical accessibility issues
- [ ] Quality checks passed
- [ ] File size reasonable
## Phase 5: Export Final (5 min)
### Objective
Generate final presentation file
### Agent: Coder
**Step 5.1: Generate PPTX File**
```javascript
async function exportPresentation(pres, filename) {
await pres.writeFile({ fileName: filename });
console.log(`✅ Presentation saved: ${filename}`);
// Generate accessibility report
const report = {
filename,
slides: pres.slides.length,
accessibilityIssues: await memory.retrieve('pptx/accessibility-issues'),
qualityScore: calculateQualityScore(pres),
wcagCompliance: 'AA',
generatedAt: new Date()
};
await fs.writeFile(
filename.replace('.pptx', '-accessibility-report.json'),
JSON.stringify(report, null, 2)
);
}
```
**Step 5.2: Generate Documentation**
```markdown
# Presentation Documentation
## Metadata
- Title: ${metadata.title}
- Slides: ${slideCount}
- Generated: ${timestamp}
## Design System
- Colors: ${colors}
- Fonts: ${fonts}
- Accessibility: WCAG 2.1 AA
## Slide Breakdown
${outline.map(section => `
### ${section.name}
${section.slides.map(slide => `- ${slide.title}`).join('\n')}
`).join('\n')}
## Quality Metrics
- Accessibility Score: ${accessibilityScore}/100
- Readability Score: ${readabilityScore}/100
- Design Consistency: ${consistencyScore}/100
```
### Validation Criteria
- [ ] PPTX file generated
- [ ] Accessibility report created
- [ ] Documentation complete
- [ ] Ready for distribution
## Success Metrics
- All slides generated successfully
- WCAG 2.1 AA compliance achieved
- Quality score > 85/100
- File size < 50MB
## Skill Completion
Outputs:
1. **presentation.pptx**: Final PowerPoint file
2. **accessibility-report.json**: Compliance analysis
3. **presentation-doc.md**: Generation documentation
4. **slide-notes.txt**: Speaker notes
Complete when PPTX generated with WCAG 2.1 AA compliance.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!