
Slides Build
- 130 installs
- 9 repo stars
- Updated March 15, 2026
- mpuig/agent-slides
slides-build is an agent skill that builds complete PowerPoint decks from a brief using extracted template contracts, python-pptx operations, and mandatory preflight, dry-run, render, and QA gates for developers who need
About
slides-build is one of 7 composable skills in mpuig/agent-slides for generating professional PowerPoint decks via a purpose-built CLI and Python API wrapping python-pptx. Install with npx skills add https://github.com/mpuig/agent-slides; skills call uvx --from agent-slides slides under the hood and require Python 3.12+ and uv. The /slides-build workflow requires prior /slides-extract output including resolved_manifest.json, base_template.pptx, and design-profile.json. It generates slides.json with a storytelling plan and declarative ops, runs slides preflight, dry-run render, full render to output.pptx, and QA lint checking 25 ranked common mistakes. Font contracts lock action titles at 24pt bold and KPI numbers at 28-36pt. The parent repo has 6 GitHub stars and documents a full pipeline from extract through audit, critique, and polish. Developers reach for slides-build when an agent must turn a strategy brief into a validated .pptx without manual slide formatting.
- Builds decks from brief + resolved_manifest.json via slides.json declarative ops
- Mandatory pipeline: preflight → dry-run → render → QA with 25 ranked mistake checklist
- uvx --from agent-slides slides render uses python-pptx with design-profile.json lint
- Font contract: 24pt action titles, 28-36pt KPI numbers, 9pt source lines
- One of 7 composable agent-slides skills; parent repo has 6 GitHub stars
Slides Build by the numbers
- 130 all-time installs (skills.sh)
- +6 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #301 of 688 Office & Documents skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mpuig/agent-slides --skill slides-buildAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 130 |
|---|---|
| repo stars | ★ 9 |
| Last updated | March 15, 2026 |
| Repository | mpuig/agent-slides ↗ |
How do agents generate PowerPoint decks from a brief?
Run /slides-build to generate slides.json ops from a brief, preflight template contracts, render output.pptx via uvx agent-slides, and pass QA lint gates.
Who is it for?
Developers or PMs using Claude Code, Cursor, or Codex who need agent-generated executive decks from extracted .pptx template contracts with automated QA.
Skip if: Google Slides or Keynote-only workflows or decks built without prior /slides-extract template contract artifacts.
When should I use this skill?
User asks to build slides, create a PowerPoint deck, generate a presentation from a brief, or run /slides-build after template extraction.
What you get
slides.json plan and ops, output.pptx deck, qa.json lint report, and validated resolved_manifest.json template contracts.
- output.pptx deck
- slides.json ops document
- qa.json lint report
By the numbers
- One of 7 composable skills in the agent-slides repository
- QA gate reviews 25 ranked common presentation mistakes
- Requires Python 3.12+ and uv for uvx --from agent-slides CLI calls
Files
Slides Build
You are a presentation strategist and slide engineer. Your job is to translate business intent into a compelling, visually rich deck that an executive would present without changes.
Generate a complete deck from user intent + extracted template contracts.
When to Use
- User wants to create a new presentation
- User provides a brief, topic, or content outline
Prerequisites
/slides-extract must have run first. These artifacts must exist in the project directory (e.g., output/<project>/):
resolved_manifest.json— merged template contract (primary reference)base_template.pptx— clean templatedesign-profile.json— rendering and lint configcontent_layout.json,archetypes.json,template_layout.json— also generated but merged into resolved manifest
Before rendering, always run slides preflight to verify that the project directory, profile paths, icon pack, asset roots, and optional dependencies are all valid.
References
| File | When to load | Content |
|---|---|---|
references/storytelling.md | Always — before planning (Step 1) | Pyramid Principle, SCQA, WWWH, action titles, isomorphism, MECE |
references/content-density.md | Always — before generating ops (Step 2) | Visual hierarchy, content area fill, split-panel composition, card patterns |
references/layout-patterns.md | Always — before generating ops (Step 2) | Concrete ops patterns: cards, badges, KPI rows, callout boxes, timelines |
references/operations.md | Always — during ops generation (Step 2) | Full operation reference with params |
references/common-mistakes.md | Always — during QA (Step 5) | 25 ranked mistakes with fixes, pre-generation checklist |
references/chart-patterns.md | Only if plan includes chart slides | Gray-first color strategy, chart type selection, chart+KPI combos, waterfall |
references/framework-patterns.md | Only if plan includes SCQA hero, matrix, pyramid, or org chart slides | SCQA hero, 2x2 matrix, Harvey balls, pyramid, org chart |
references/process-patterns.md | Only if plan includes process flow, timeline, or Gantt slides | Chevron flow, stage gates, Gantt bars, multi-track workstreams |
Loading strategy: Always load storytelling + content-density + layout-patterns + operations before generating ops. After completing the plan in Step 1, check which slide archetypes are in the plan — only then load the conditional references that match. Load common-mistakes during QA. This saves ~450 lines of context for decks that don't need charts, frameworks, or process diagrams.
Process
Step 1) Input intake
Read `references/storytelling.md` before planning. Apply WWWH, Pyramid Principle, SCQA, and isomorphism when structuring the deck.
Capture/confirm these fields:
- Audience
- Decision objective
- Core recommendation
- Scope constraints (time, geography, budget, BU)
- Target slide count
If any of the first 4 are missing, ask concise clarifying questions (max 5).
Font size contract (lock during planning):
| Element | Size | Weight | Color |
|---|---|---|---|
| Action title | 24pt | Bold | Dark (333333) |
| Subheader / card title | 14-16pt | Bold | Brand (primary_color_hex) or 29BA74 |
| Body text | 14pt | Regular | 333333 or 575757 |
| Label / caption | 12pt | Regular | 575757 |
| Source line | 9pt | Regular | 999999 or 666666 |
| KPI number | 28-36pt | Bold | 29BA74 |
Lock these sizes before generating ops. Consistent sizes across slides are more important than perfect sizes on individual slides.
Slide count convention: N slides = N content slides. Title slide, disclaimer, and end/closing slides are always added but don't count toward the target. Example: "15 slides" = 15 content + title + disclaimer + end = 18 total.
Step 2) Generate slides.json
Generate slides.json from user intent + resolved_manifest.json.
- Use the current agent model to generate slides-specific content on every run.
- Never hardcode topic content.
- Before generating ops, read
resolved_manifest.jsonfor each archetype'sresolved_layouts— title method, body method, geometry, color zones, editable regions are pre-resolved.
Comprehension gate
After reading resolved_manifest.json, confirm you can answer:
- Which layout will each archetype use? Name the layout for at least the first 5 archetypes. (Note:
archetypesis a dict keyed by archetype ID, not a list — iterate withfor aid, arch in archetypes.items()) - Which layouts are split-panel? What are the editable regions?
- What is the
primary_color_hexfrom the design profile?
If any answer is unclear, re-read before generating ops.
Conditional reference loading
After completing the plan, scan SlidePlan.visual_hint and archetype_id values to decide which additional references to load:
- Charts (
add_bar_chart,add_pie_chart, KPI+chart combos) → loadreferences/chart-patterns.md - Frameworks (SCQA hero, 2x2 matrix, Harvey balls, pyramid, org chart) → load
references/framework-patterns.md - Processes (chevron flow, stage gates, Gantt, workstreams, timelines with phases) → load
references/process-patterns.md
Skip references that don't match any planned slide. This keeps context lean for simple text+shape decks.
slides.json structure:
{
"plan": {
"deck_title": "...",
"brief": "...",
"audience": "...",
"objective": "...",
"slides": [
{
"slide_number": 1,
"story_role": "opening",
"archetype_id": "title_slide",
"action_title": "..."
}
]
},
"ops": {
"operations": [
{"op": "add_slide", "layout_name": "..."},
{"op": "set_semantic_text", "slide_index": 0, "role": "title", "text": "..."}
]
}
}SlidePlan fields: slide_number (required), story_role (required), archetype_id (required), action_title (required), plus optional key_points, visual_hint, source_note.
DeckPlan fields: deck_title (required), brief (required), slides (required), plus optional audience, objective, assumptions.
Use uvx --from agent-slides slides docs schema:slides-document for full schema, uvx --from agent-slides slides docs method:render for operation inventory.
Ops Generation Rules
Read `references/content-density.md` and `references/layout-patterns.md` before writing ops.
Placeholder awareness:
- Check if the layout has a
TITLE (1)placeholder before usingset_semantic_text role=title. Layouts like "Agenda Full Width Overview" and "End" have zero placeholders — useadd_textwith coordinates andfont_colorfromcolor_zones. - Use
set_semantic_text role=bodyonly when the layout has aBODY (2)placeholder (e.g., "Title and Text"). Otherwise useadd_text. - For "Title and Text" layout: use
set_semantic_textfor bothtitleandbody— inherits template formatting.
Speaker notes (mandatory for key slides):
- Use
add_noteson exec summary, recommendation, and data-heavy slides.
Visual hierarchy (mandatory for rich slides):
- Each content slide: 3+
add_textops — heading (18-22pt bold), body (15-16pt), secondary (14pt gray575757). - Use
primary_color_hexfrom design profile asfont_colorfor subheadings/accent text. - Use
font_color: "575757"for captions and supporting details.
Split-panel composition:
- Left panel (colored): big accent text (24-36pt bold, white), callout numbers, category labels.
- Right panel: repeating header+body pairs — header 20-22pt bold, body 15pt.
- Place action title as first
add_texton right panel atT=0.7.
Callout numbers:
- Big callout numbers (36pt bold) in colored panels with label underneath (18pt).
Shape ops for visual structure (mandatory for rich slides):
add_rounded_rectangle: card backgrounds (place BEFORE text ops).add_rectangle: thin accent bars (height ~0.06").add_oval(equal w/h): number badges.add_line_shape: dividers, timeline connectors, separators.add_rounded_rectanglewithborder_color: insight callout boxes.- See
references/layout-patterns.mdfor patterns.
Icons:
- Use
add_iconon card/column layouts. Place atsize: 0.75on cards,size: 0.55as accents. - Use
color: "FFFFFF"on dark backgrounds, omit for theme colors on light. - Built-in:
generic_circle,generic_square. Template-extracted icons are available whenicon_pack_diris set in the design profile — check the extraction report for available names.
Charts:
add_bar_chartfor comparisons,add_line_chartfor trends,add_pie_chart/add_doughnut_chartfor composition.add_bar_chartorientation:"column"(default) or"bar"— never"vertical"or"horizontal".- Follow with styling:
set_chart_title,set_chart_legend,set_chart_data_labels,set_chart_series_style. set_chart_data_labelsacceptsnumber_format.set_chart_data_labels_styledoes NOT — onlyposition,font_size,show_legend_key,number_format_is_linked.- Set
fill_color_hexper series to match template palette. - Series format:
[["Series Name", [v1, v2, ...]], ...].
Tables:
add_tablewithrowsas 2D string array. Height ~0.5-0.6in/row.- Leave 0.5" between table bottom and footer text.
Source lines:
- Every data slide:
font_size: 9,font_color: "666666"or"999999", attop: 6.8.
Body placeholder clearing (mandatory):
- On "Title and Text" layouts using
add_textinstead ofset_semantic_text role=body: MUST add{"op": "set_semantic_text", "slide_index": N, "role": "body", "text": " "}.
Font color vs. background contrast (mandatory):
- Never
font_color: "FFFFFF"on light backgrounds (F2F2F2,FFFFFF). - Check
color_zones[].bg_colorbefore choosing colors.
Structural slides (mandatory):
- Include
disclaimerslide (second-to-last). Layout already has legal text — justadd_slide. end_slide(last) — minimal: deck title and brief line.- Agenda layouts with fixed labels — don't duplicate via
add_text.
Document properties:
set_core_propertieswithtitle,author,subject.
Step 3) Preflight (required)
Run a project preflight before any render attempt:
uvx --from agent-slides slides preflight --project-dir . --profile design-profile.json --compactIf preflight reports missing artifacts, broken profile paths, or dependency issues, fix those before continuing.
Step 4) Dry-run (required)
uvx --from agent-slides slides render --slides-json @slides.json --profile design-profile.json --dry-run --compactStep 5) Render
uvx --from agent-slides slides render --slides-json @slides.json --profile design-profile.json --output output.pptx --compactStep 6) QA gate (required)
Read `references/common-mistakes.md` and review the pre-generation checklist.
uvx --from agent-slides slides qa output.pptx --profile design-profile.json \
--slides-json @slides.json --out qa.json --compactReview the output against the 25 ranked common mistakes. Note both issues found AND positive findings (things the deck does well).
Placeholder Rules
- Never use `set_placeholder_text` with guessed indices. Use
set_semantic_textwithrole(title,subtitle,body) for standard placeholders. - Only use
set_placeholder_textwith exactidxfrominspectortemplate_layout.json.
Split-Panel Layout Rules
For layouts where the title placeholder sits in a side panel (not at the top):
1. Set set_semantic_text title to " " to clear the placeholder. 2. Place the slide title as add_text at the top of the RIGHT panel (T=0.7). 3. Place left-panel content only in editable_above / editable_below areas. 4. Use color_zones[].text_color for font_color on all add_text ops.
Check resolved_manifest.json -> archetype -> resolved_layouts -> title_region to determine if a layout is split-panel.
Anti-patterns (what NOT to do)
- Don't generate ops without reading
resolved_manifest.jsonfirst — layout names, geometry, and color zones must come from the contract - Don't guess placeholder indices — use
set_semantic_textwithroleor exactidxfrom inspect - Don't use
font_color: "FFFFFF"on light backgrounds or"333333"on dark backgrounds - Don't duplicate fixed labels on agenda or structural layouts
- Don't skip the dry-run — it catches schema/op errors before rendering
- Don't add visual elements to title, disclaimer, or end slides
Error Handling
On any slides error, run uvx --from agent-slides slides docs method:preflight, uvx --from agent-slides slides docs method:render, or uvx --from agent-slides slides docs schema:slides-document to verify the current contract before retrying.
Acceptance Criteria
1. Output PPTX exists. 2. qa.json reports "ok": true. 3. No unresolved-token or contract-critical issues. 4. slides preflight reports "ok": true before render. 5. All content slides have action titles (complete sentences).
Chart Patterns (slides ops)
Concrete patterns for building data visualization slides. Start from the argument, not the data shape — choose the chart where the visual proves the specific claim.
---
Chart Color Strategy: Gray-First, Highlight-Green
Default approach for all charts: Start in gray monochrome, then highlight only the key data point in green. This focuses attention on the argument.
| Purpose | Color approach |
|---|---|
| Default | All bars/slices in gray (6E6F73, B0B0B0) |
| Highlight | Key data point in 29BA74; keep others gray |
| Multiple series | Brand palette in order: 03522D, 197A56, 29BA74, 3EAD92, D4DF33, 295E7E |
Rules: 1. Use full palette only when ALL series are equally important 2. For "our company vs. peers" — our bar in green, peers in gray 3. For "before vs. after" — after in green, before in gray 4. For pie/doughnut — highlight the key segment in green, others in gray shades
---
Chart Type Selection Guide
| If your argument is... | Chart type | Key element |
|---|---|---|
| "X is growing fast" | add_line_chart | Annotate the inflection point |
| "We're bigger than competitors" | add_bar_chart orientation="bar" | Highlight our bar in green |
| "Three segments make up 80%" | add_doughnut_chart | Group rest into "Other" |
| "Volume up but rate declining" | add_combo_chart_overlay | Bars for volume, line for rate |
| "Category X outperforms" | add_bar_chart | Sort by value, highlight winner |
| "Investment vs. returns over time" | add_bar_chart (grouped) | Two series, gray vs. green |
| "Composition shifts over time" | add_bar_chart (stacked, via series) | Stack segments by color |
---
Chart Formatting Rules
1. Action title states what the data proves, not what it shows 2. Start gray, highlight green — only full palette for multiple series 3. Remove chart junk: hide gridlines, minimize axis lines 4. Label directly on bars/lines (set_chart_data_labels) rather than requiring legend lookup 5. One chart per slide (unless comparing two closely related views) 6. Include callout box annotating the key insight 7. Round numbers: ~$2.5B not $2,487,392,104 8. Sort bars by value (largest to smallest) unless chronological 9. ALWAYS set explicit axis font sizes — PowerPoint defaults are too large for most layouts. After every chart, add:
{"op": "set_chart_axis_options", "slide_index": N, "chart_index": 0, "axis": "category", "font_size": 9}
{"op": "set_chart_axis_options", "slide_index": N, "chart_index": 0, "axis": "value", "font_size": 9}Use font_size: 9 for standard charts; font_size: 8 when the chart shares the slide with a callout or table. 10. ALWAYS set legend font size and position — legend must not overlap the chart. First shrink the plot area to make room, then set legend with include_in_layout: true:
{"op": "set_chart_plot_style", "slide_index": N, "chart_index": 0, "plot_area_h": 0.78}
{"op": "set_chart_legend", "slide_index": N, "chart_index": 0, "position": "bottom", "font_size": 9, "include_in_layout": true}plot_area_h: 0.78 reserves ~22% of chart height for the bottom legend. Adjust lower (e.g., 0.72) for 3+ series legends. 11. ALWAYS set explicit table font sizes — PowerPoint defaults are too large for data tables. Use font_size on add_table:
{"op": "add_table", "slide_index": N, "rows": [...], "left": 0.7, "top": 2.0, "width": 11.9, "height": 3.0, "font_size": 11}Use font_size: 11 for standard tables; font_size: 10 for dense tables (>5 rows). For per-cell overrides, use update_table_cell with font_size.
---
Combined Chart + KPI + Callout Slide
The highest-impact data slide pattern. Chart in top half, KPI tiles below, callout at bottom.
Education: Use when a single chart needs both summary metrics and a narrative takeaway. The KPIs anchor the headline numbers; the callout states the "so what" for executives who won't study the chart.
[
{"op": "add_slide", "layout_name": "Title and Text"},
{"op": "set_semantic_text", "slide_index": 5, "role": "title", "text": "Digital revenue outpaced traditional by 3x, exceeding all targets"},
{"op": "set_semantic_text", "slide_index": 5, "role": "body", "text": " "},
{"op": "add_bar_chart", "slide_index": 5, "categories": ["Q1", "Q2", "Q3", "Q4"],
"series": [["Digital ($M)", [120, 145, 168, 195]], ["Traditional ($M)", [280, 275, 260, 250]]],
"left": 0.7, "top": 1.5, "width": 11.9, "height": 2.8},
{"op": "set_chart_series_style", "slide_index": 5, "chart_index": 0, "series_index": 0, "fill_color_hex": "29BA74"},
{"op": "set_chart_series_style", "slide_index": 5, "chart_index": 0, "series_index": 1, "fill_color_hex": "B0B0B0"},
{"op": "set_chart_data_labels", "slide_index": 5, "chart_index": 0, "enabled": true, "show_value": true},
{"op": "set_chart_legend", "slide_index": 5, "chart_index": 0, "visible": true, "position": "bottom"},
{"op": "add_text", "slide_index": 5, "text": "$195M", "left": 0.7, "top": 4.6, "width": 3.5, "height": 0.5, "font_size": 28, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 5, "text": "Q4 Digital Revenue", "left": 0.7, "top": 5.1, "width": 3.5, "height": 0.3, "font_size": 12, "font_color": "575757"},
{"op": "add_line_shape", "slide_index": 5, "x1": 4.4, "y1": 4.7, "x2": 4.4, "y2": 5.3, "color": "CCCCCC", "line_width": 0.5},
{"op": "add_text", "slide_index": 5, "text": "+62%", "left": 4.7, "top": 4.6, "width": 3.5, "height": 0.5, "font_size": 28, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 5, "text": "YoY Growth", "left": 4.7, "top": 5.1, "width": 3.5, "height": 0.3, "font_size": 12, "font_color": "575757"},
{"op": "add_line_shape", "slide_index": 5, "x1": 8.4, "y1": 4.7, "x2": 8.4, "y2": 5.3, "color": "CCCCCC", "line_width": 0.5},
{"op": "add_text", "slide_index": 5, "text": "3.1x", "left": 8.7, "top": 4.6, "width": 3.5, "height": 0.5, "font_size": 28, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 5, "text": "vs Target", "left": 8.7, "top": 5.1, "width": 3.5, "height": 0.3, "font_size": 12, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 5, "left": 0.7, "top": 5.7, "width": 11.9, "height": 0.7, "fill_color": "F0FAF5", "corner_radius": 5000, "border_color": "29BA74", "border_width": 1.5},
{"op": "add_text", "slide_index": 5, "text": "Key insight: Digital revenue will surpass traditional by Q2 2027 at current trajectory", "left": 0.9, "top": 5.8, "width": 11.5, "height": 0.5, "font_size": 14, "bold": true, "font_color": "03522D"},
{"op": "add_text", "slide_index": 5, "text": "Source: Company financials, Q4 2026", "left": 0.7, "top": 6.6, "width": 10.0, "height": 0.3, "font_size": 9, "font_color": "999999"}
]---
Simulated Horizontal Bar Chart (Shape-Based)
Use when a native chart is overkill — e.g., simple ranked comparisons. Shape bars give full visual control.
Education: Shape-based bars let you highlight specific bars, add inline labels, and control rounding. Use when the argument is about ranking, not precise values.
[
{"op": "add_text", "slide_index": 6, "text": "Enterprise", "left": 0.7, "top": 2.1, "width": 2.2, "height": 0.45, "font_size": 13, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 3.0, "top": 2.15, "width": 9.5, "height": 0.35, "fill_color": "E0E0E0", "corner_radius": 8000},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 3.0, "top": 2.15, "width": 4.3, "height": 0.35, "fill_color": "29BA74", "corner_radius": 8000},
{"op": "add_text", "slide_index": 6, "text": "45%", "left": 7.4, "top": 2.1, "width": 0.8, "height": 0.45, "font_size": 13, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 6, "text": "Mid-Market", "left": 0.7, "top": 2.65, "width": 2.2, "height": 0.45, "font_size": 13, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 3.0, "top": 2.7, "width": 9.5, "height": 0.35, "fill_color": "E0E0E0", "corner_radius": 8000},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 3.0, "top": 2.7, "width": 3.6, "height": 0.35, "fill_color": "6E6F73", "corner_radius": 8000},
{"op": "add_text", "slide_index": 6, "text": "38%", "left": 6.7, "top": 2.65, "width": 0.8, "height": 0.45, "font_size": 13, "bold": true, "font_color": "6E6F73"}
]Repeat for each bar. Use 29BA74 for the highlighted bar, 6E6F73 for others.
---
Waterfall Bridge (Shape-Based)
Use for showing how a starting value changes through increments/decrements to reach an end value.
Education: Use when the argument is about what drove the change between two states. Positive deltas in green, negative in gray/red-toned. The connecting line shows the running total.
[
{"op": "add_rectangle", "slide_index": 7, "left": 0.7, "top": 2.5, "width": 1.5, "height": 2.5, "fill_color": "6E6F73"},
{"op": "add_text", "slide_index": 7, "text": "$100M\nStart", "left": 0.7, "top": 2.0, "width": 1.5, "height": 0.45, "font_size": 12, "bold": true, "font_color": "575757"},
{"op": "add_rectangle", "slide_index": 7, "left": 2.5, "top": 2.0, "width": 1.5, "height": 0.5, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 7, "text": "+$20M\nDigital", "left": 2.5, "top": 1.5, "width": 1.5, "height": 0.45, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_rectangle", "slide_index": 7, "left": 4.3, "top": 2.0, "width": 1.5, "height": 0.3, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 7, "text": "+$15M\nPricing", "left": 4.3, "top": 1.5, "width": 1.5, "height": 0.45, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_rectangle", "slide_index": 7, "left": 6.1, "top": 1.7, "width": 1.5, "height": 0.3, "fill_color": "B0B0B0"},
{"op": "add_text", "slide_index": 7, "text": "-$10M\nFX", "left": 6.1, "top": 2.05, "width": 1.5, "height": 0.45, "font_size": 12, "bold": true, "font_color": "B0B0B0"},
{"op": "add_rectangle", "slide_index": 7, "left": 7.9, "top": 2.0, "width": 1.5, "height": 3.0, "fill_color": "03522D"},
{"op": "add_text", "slide_index": 7, "text": "$125M\nEnd", "left": 7.9, "top": 1.5, "width": 1.5, "height": 0.45, "font_size": 12, "bold": true, "font_color": "03522D"}
]Adjust top and height of each delta bar so the top aligns with the running total line.
---
KPI Tile Row (Cards with Accent Bar)
More structured than the basic KPI Row. Each metric gets a card with green left accent and change indicator.
Education: Use for executive summary slides or as a header row above detailed content. Each card answers one question: "What is the headline number, and is it good or bad?"
[
{"op": "add_rounded_rectangle", "slide_index": 8, "left": 0.5, "top": 2.1, "width": 3.0, "height": 1.2, "fill_color": "FFFFFF", "corner_radius": 5000, "border_color": "E0E0E0", "border_width": 0.5},
{"op": "add_rectangle", "slide_index": 8, "left": 0.5, "top": 2.1, "width": 0.06, "height": 1.2, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 8, "text": "Revenue", "left": 0.7, "top": 2.18, "width": 2.6, "height": 0.25, "font_size": 11, "bold": true, "font_color": "575757"},
{"op": "add_text", "slide_index": 8, "text": "$2.4B", "left": 0.7, "top": 2.45, "width": 2.6, "height": 0.45, "font_size": 28, "bold": true, "font_color": "575757"},
{"op": "add_text", "slide_index": 8, "text": "+12% YoY", "left": 0.7, "top": 2.95, "width": 2.6, "height": 0.25, "font_size": 11, "bold": true, "font_color": "29BA74"}
]Repeat at left: 3.7, left: 6.9, left: 10.1 for 4-across layout.
Common Mistakes
The most frequent errors in generated decks, ranked by impact. Check these during plan review and QA.
---
Critical (Destroys the message)
1. Topic titles instead of action titles — "Market Overview" tells the reader nothing. Every content slide must have a complete sentence stating the "so what." This is the #1 quality signal.
2. Too much text on one slide — If you can't see the "so what" in 5 seconds, there's too much content. Split into multiple slides. One message per slide, always.
3. Body doesn't prove the title — The content below each action title must contain evidence that makes the title undeniably true. Generic body + ambitious title = misleading slide.
4. Missing source lines — Every data point needs a source. Unsourced numbers destroy credibility. Use Source: Illustrative when no real source is available.
5. Layout doesn't match the relationship (isomorphism violation) — Equal columns for unequal items, grids for hierarchies, flows for non-sequential content. The visual structure must mirror the conceptual relationship.
Visual Quality (Looks unprofessional)
6. No visual hierarchy — Title must visually dominate (largest, brand color), then headings (bold), then body (regular). Without size and color contrast, everything looks flat.
7. Slides without visual structure — Every content slide needs at least one visual element: chart, table, structured layout, or colored accent. Text-only slides are forgettable.
8. Bullet-heavy slides — Replace long bullet lists with structured layouts: columns, cards, icon rows, tables. Maximum 6 bullets per slide.
9. Ignoring template colors — Use the extracted palette from the design profile and color zones. Don't introduce arbitrary colors that clash with the template's visual identity.
10. Pure black text — Most professional templates use dark gray (e.g., 333333, 575757) for body text, not 000000. Check the template's extracted text colors.
Layout & Structure (Breaks the flow)
11. Repeating the same layout 3+ times — Vary layouts across consecutive slides. Alternate between white slides and split-panel/accent layouts.
12. Cramming content — Leave breathing room. White space is a design feature. Maintain consistent margins and spacing from the template's content box.
13. Content overlapping the title — Content must start below the title area. Never place shapes or text in the title zone (typically y < 1.8").
14. Wrong archetype for the content — Using content_bullets for data that needs a chart, or bar_chart for qualitative arguments. Match archetype to content type.
15. Missing section dividers — For decks > 8 slides, section dividers are essential navigation aids. Don't jump between topics without them.
Content Quality (Weakens the argument)
16. Vague body content — "Improve efficiency" tells nobody anything. Name the specific mechanism: "Consolidate 4 regional warehouses into 2 hubs, reducing shipping costs by 18%."
17. Non-MECE groupings — Overlapping categories in columns, charts, or sections. Each group must be mutually exclusive and collectively exhaustive.
18. Inconsistent parallel structure — Items in columns, cards, or bullet lists should follow the same grammatical pattern. If one starts with a verb, all should.
19. Missing opening/closing structure — Every deck needs a title slide and a clear ending. Decks > 10 slides need an executive summary early.
20. Orphan slides — A single slide in a "section" of one. Either combine with an adjacent section or add supporting slides.
Formatting Details
21. Inconsistent font sizes — Pick size constants at planning time and reuse them throughout. Body text should be the same size on every content slide.
22. Centered body text — Body text should be left-aligned. Center alignment only for titles, card labels, and big callout numbers.
23. Too many font sizes — Use at most 4 distinct sizes in a deck: title, heading, body, caption. More than that creates visual noise.
24. Charts without insight callout — Every chart needs a highlighted data point or callout that carries the argument. A chart without emphasis is just data, not evidence.
25. Ignoring the template's content box — Place content within the extracted content_box boundaries. Content outside these bounds may overlap with template decorations (logos, page numbers, borders).
Production Quality
26. Visual effects and animations — Never add shadows, reflections, glow, 3D effects, or animations/transitions. These are distracting in professional settings and break cross-platform rendering. Clean, flat design only.
27. Failing the remove-it test — Every element on a slide should earn its place. If removing an element wouldn't reduce comprehension, cut it. Extra logos, decorative shapes, redundant labels, and "nice-to-have" text boxes all add noise.
---
Pre-Generation Checklist
Before generating ops for each slide, verify:
- [ ] Action title is a complete sentence stating the "so what"
- [ ] Body content will prove the title claim with evidence
- [ ] Archetype matches the content type (isomorphism)
- [ ] Layout differs from the previous 2 slides
- [ ] Content uses at least one visual element beyond plain text
- [ ] Font sizes follow the deck's size constants
- [ ] Source line present for any data claims
- [ ] No more than 6 bullets
- [ ] Content fits within the template's content box
- [ ] No visual effects (shadows, reflections, glow, 3D, animations)
- [ ] Every element passes the remove-it test (would removing it reduce comprehension?)
Content Density & Visual Quality Rules
Rules for ensuring every content slide has sufficient visual richness. These apply regardless of template or brand.
---
1. Minimum Visual Structure
Every content slide (not title, section divider, quote, or end slides) must have at least one of:
- Structured layout (columns, cards, grid)
- Data visualization (chart, table, big numbers)
- Visual accent (colored panel from template layout, icon, accent bar)
A slide with only plain text on a white background is unfinished. Add structure before finalizing.
2. Visual Hierarchy (mandatory for rich slides)
Each content slide should create clear hierarchy through text sizing:
| Level | Purpose | Size range | Style |
|---|---|---|---|
| Heading / category label | Section within slide | 18-22pt | Bold, brand color |
| Body | Main content | 14-16pt | Regular, dark text |
| Secondary / caption | Supporting detail | 11-14pt | Regular, medium gray |
| Source line | Attribution | 9-10pt | Regular, light gray |
Use the template's primary_color_hex (from design profile) for heading accents. Use dark text color (typically 333333 or 575757) for body — never pure black 000000.
3. Content Area Fill
Content should fill 60%+ of the available content area (the space between the title and footer). A slide that uses only the top third looks empty; one that fills edge-to-edge looks cramped.
Target zones:
- Content start: Below the action title (typically y ≈ 1.8-2.1")
- Content end: Above the source line (typically y ≈ 6.5-6.8")
4. Split-Panel Composition
For split-panel layouts (colored panel + content panel):
Colored panel (accent side):
- Big callout numbers (28-36pt bold, contrast color)
- Category labels or thematic text (20-24pt bold)
- Keep sparse — this panel is for emphasis, not detail
Content panel (detail side):
- Action title at the top (first
add_text) - Structured content: repeating header+body pairs
- Each header at 18-22pt bold, body at 14-16pt regular
5. Callout Numbers
For data-heavy slides, use 1-3 big callout numbers to anchor the message:
- Number: 28-36pt bold, brand color or white (depending on background)
- Label: 14-18pt regular, positioned directly below
- Place in colored panels, card headers, or a dedicated KPI row
6. Card / Block Patterns
When presenting 2-6 parallel items, use card patterns:
- Background rectangles to create visual separation
- Consistent card sizing across the row/grid
- Green/brand accent bar (thin line or border) at top of each card
- Content inset 0.1-0.15" from card edges
7. Bullet Limits
Maximum 6 bullets per slide. If you have more:
- Split into two slides
- Convert to a structured layout (columns, cards, table)
- Promote key items to headings with sub-bullets
8. Font Size Minimums
- Body text: 14pt minimum on full-width slides. Never go below 14pt for primary content.
- Narrow boxes (< 2" wide): 11pt acceptable. Use
autofitas safety net. - Cards/columns < 3" wide: use 13pt body, 11pt caption.
- Cards/columns < 2" wide: use 11pt body, 9pt caption.
- Below 1.5" wide: reconsider the layout — switch to fewer, wider columns.
- Labels / captions: 9pt minimum.
- If content doesn't fit at minimum sizes, split into multiple slides — don't shrink fonts.
9. Icon Consistency
When using icons across a slide (icon grids, card headers, column layouts):
- Use the same size for all icons on one slide (e.g., all
0.75or all0.55). - Use the same color for all icons on one slide — either all white (on dark bg) or all brand color (on light bg). Don't mix.
- Align icons to the same y position across columns/cards.
- If one item has no natural icon match, either find a generic alternative or remove icons from all items — inconsistent icon presence is worse than no icons.
10. Alignment & Spacing
- Title labels and bullet content within cards should share the same x offset.
- Maintain at least 0.15" between title bottom and first content element.
- Content must never overlap with the action title area.
- Parallel items (columns, cards) should have identical y positions and heights.
- Body text alignment: Left-align body text. Center alignment only for titles, card labels, big callout numbers, and single-line captions. Never center multi-line body text or bullet lists.
11. Table Alignment
- Header row: Center-aligned text, bold, brand color or white on colored header bar.
- Data cells: Left-align text columns, right-align numeric columns.
- Consistent column widths: Size columns proportional to their content, but keep all rows the same height.
- Leave 0.5" clearance between table bottom and footer/source text.
12. Source Lines (every data slide)
Every slide containing numbers, percentages, or factual claims must end with:
- Source text at the bottom of the content area
- Font size: 9-10pt, light gray color
- Format:
Source: [Organization], [Publication], [Year]
Framework Patterns (slides ops)
Patterns for strategic frameworks, matrices, hierarchies, and assessment grids. Each pattern uses slides ops directly.
---
SCQA Executive Summary with Hero Header
High-impact opening slide. Green header band with the recommendation, SCQA cards below with the Answer highlighted.
Education: The hero header states the answer immediately (Pyramid Principle). The SCQA cards provide the logical scaffolding. The Answer card is highlighted in green to draw the eye. Use this for the first content slide after the title.
[
{"op": "add_slide", "layout_name": "Title and Text"},
{"op": "set_semantic_text", "slide_index": 1, "role": "title", "text": " "},
{"op": "set_semantic_text", "slide_index": 1, "role": "body", "text": " "},
{"op": "add_rectangle", "slide_index": 1, "left": 0, "top": 0, "width": 13.33, "height": 1.7, "fill_color": "03522D"},
{"op": "add_rectangle", "slide_index": 1, "left": 8.5, "top": 0, "width": 4.83, "height": 1.7, "fill_color": "197A56"},
{"op": "add_text", "slide_index": 1, "text": "Invest $50M in AI-banking to capture $400M+ in annual savings by 2029", "left": 0.7, "top": 0.3, "width": 11.9, "height": 1.1, "font_size": 22, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 1, "left": 0.7, "top": 2.0, "width": 11.9, "height": 1.0, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_text", "slide_index": 1, "text": "SITUATION", "left": 0.9, "top": 2.08, "width": 1.5, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 1, "text": "AI is transforming financial operations across CPG, with $2.4T in supply chain finance now addressable.", "left": 2.5, "top": 2.08, "width": 9.9, "height": 0.8, "font_size": 14, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 1, "left": 0.7, "top": 3.15, "width": 11.9, "height": 1.0, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_text", "slide_index": 1, "text": "COMPLICATION", "left": 0.9, "top": 3.23, "width": 1.5, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 1, "text": "Our manual processes cost $180M annually; peers have invested 3-5x more in AI-banking.", "left": 2.5, "top": 3.23, "width": 9.9, "height": 0.8, "font_size": 14, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 1, "left": 0.7, "top": 4.3, "width": 11.9, "height": 1.0, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_text", "slide_index": 1, "text": "QUESTION", "left": 0.9, "top": 4.38, "width": 1.5, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 1, "text": "How do we close the gap and transform our financial operations before the window closes?", "left": 2.5, "top": 4.38, "width": 9.9, "height": 0.8, "font_size": 14, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 1, "left": 0.7, "top": 5.45, "width": 11.9, "height": 1.0, "fill_color": "03522D", "corner_radius": 5000},
{"op": "add_text", "slide_index": 1, "text": "ANSWER", "left": 0.9, "top": 5.53, "width": 1.5, "height": 0.3, "font_size": 12, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 1, "text": "Invest $50M across three pillars — Demand Sensing, Autonomous Logistics, and Intelligent Fulfillment.", "left": 2.5, "top": 5.53, "width": 9.9, "height": 0.8, "font_size": 14, "bold": true, "font_color": "FFFFFF"}
]---
2x2 Matrix / SWOT
For strategic positioning, prioritization, effort-impact grids.
Education: Each quadrant must be genuinely distinct. The 2x2 works when two independent dimensions create four meaningful categories. If items don't naturally sort into quadrants, use columns instead.
[
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 0.5, "top": 1.6, "width": 5.9, "height": 2.3, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_rectangle", "slide_index": 4, "left": 0.5, "top": 1.6, "width": 5.9, "height": 0.06, "fill_color": "03522D"},
{"op": "add_text", "slide_index": 4, "text": "Strengths", "left": 0.7, "top": 1.75, "width": 5.5, "height": 0.35, "font_size": 16, "bold": true, "font_color": "03522D"},
{"op": "add_text", "slide_index": 4, "text": "Strong brand equity\nEstablished distribution network\nDedicated R&D capability", "left": 0.7, "top": 2.15, "width": 5.5, "height": 1.5, "font_size": 13, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 6.9, "top": 1.6, "width": 5.9, "height": 2.3, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_rectangle", "slide_index": 4, "left": 6.9, "top": 1.6, "width": 5.9, "height": 0.06, "fill_color": "6E6F73"},
{"op": "add_text", "slide_index": 4, "text": "Weaknesses", "left": 7.1, "top": 1.75, "width": 5.5, "height": 0.35, "font_size": 16, "bold": true, "font_color": "6E6F73"},
{"op": "add_text", "slide_index": 4, "text": "Legacy IT infrastructure\nFragmented data landscape\nLimited AI talent pipeline", "left": 7.1, "top": 2.15, "width": 5.5, "height": 1.5, "font_size": 13, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 0.5, "top": 4.1, "width": 5.9, "height": 2.3, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_rectangle", "slide_index": 4, "left": 0.5, "top": 4.1, "width": 5.9, "height": 0.06, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 4, "text": "Opportunities", "left": 0.7, "top": 4.25, "width": 5.5, "height": 0.35, "font_size": 16, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 4, "text": "Open banking API adoption\nAI cost curve declining 40% YoY\n$2.4T addressable market", "left": 0.7, "top": 4.65, "width": 5.5, "height": 1.5, "font_size": 13, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 6.9, "top": 4.1, "width": 5.9, "height": 2.3, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_rectangle", "slide_index": 4, "left": 6.9, "top": 4.1, "width": 5.9, "height": 0.06, "fill_color": "295E7E"},
{"op": "add_text", "slide_index": 4, "text": "Threats", "left": 7.1, "top": 4.25, "width": 5.5, "height": 0.35, "font_size": 16, "bold": true, "font_color": "295E7E"},
{"op": "add_text", "slide_index": 4, "text": "Peer investment acceleration\nRegulatory uncertainty in APAC\nTalent competition from fintechs", "left": 7.1, "top": 4.65, "width": 5.5, "height": 1.5, "font_size": 13, "font_color": "575757"}
]---
Harvey Ball Matrix
For capability/maturity assessments. Grid of colored circles indicating readiness levels.
Education: Use when evaluating multiple items across multiple criteria with discrete maturity levels. The colored dots give instant visual scanning. Keep to 4-6 rows and 3-5 columns maximum.
Harvey balls use colored ovals at intersections. Map scores to colors:
| Score | Color | Meaning |
|---|---|---|
| 0 | F2F2F2 | Not started |
| 1 | D4DF33 | Early |
| 2 | 3EAD92 | In progress |
| 3 | 29BA74 | Advanced |
| 4 | 03522D | Complete |
[
{"op": "add_rectangle", "slide_index": 5, "left": 0.7, "top": 1.8, "width": 11.9, "height": 0.4, "fill_color": "03522D"},
{"op": "add_text", "slide_index": 5, "text": "Capability", "left": 0.8, "top": 1.82, "width": 3.0, "height": 0.35, "font_size": 12, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 5, "text": "Data", "left": 4.0, "top": 1.82, "width": 2.0, "height": 0.35, "font_size": 12, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 5, "text": "AI/ML", "left": 6.0, "top": 1.82, "width": 2.0, "height": 0.35, "font_size": 12, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 5, "text": "Cloud", "left": 8.0, "top": 1.82, "width": 2.0, "height": 0.35, "font_size": 12, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 5, "text": "Security", "left": 10.0, "top": 1.82, "width": 2.0, "height": 0.35, "font_size": 12, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 5, "text": "Demand Sensing", "left": 0.8, "top": 2.4, "width": 3.0, "height": 0.4, "font_size": 13, "font_color": "575757"},
{"op": "add_oval", "slide_index": 5, "left": 4.75, "top": 2.47, "width": 0.3, "height": 0.3, "fill_color": "D4DF33"},
{"op": "add_oval", "slide_index": 5, "left": 6.75, "top": 2.47, "width": 0.3, "height": 0.3, "fill_color": "F2F2F2"},
{"op": "add_oval", "slide_index": 5, "left": 8.75, "top": 2.47, "width": 0.3, "height": 0.3, "fill_color": "29BA74"},
{"op": "add_oval", "slide_index": 5, "left": 10.75, "top": 2.47, "width": 0.3, "height": 0.3, "fill_color": "03522D"},
{"op": "add_line_shape", "slide_index": 5, "x1": 0.7, "y1": 2.9, "x2": 12.6, "y2": 2.9, "color": "E0E0E0", "line_width": 0.5}
]Repeat rows at top: 3.0, top: 3.6, etc. Add a legend at the bottom mapping colors to maturity levels.
---
Pyramid / Hierarchy Diagram
For strategy cascades (vision → strategy → tactics), value chains, organizational layers.
Education: Widening tiers = increasing specificity. The narrowest tier is the most abstract (vision); each tier below adds concrete detail. Use when showing how high-level intent cascades into execution.
[
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 4.2, "top": 1.8, "width": 5.0, "height": 0.9, "fill_color": "03522D", "corner_radius": 5000},
{"op": "add_text", "slide_index": 6, "text": "Vision & Mission", "left": 4.2, "top": 1.8, "width": 5.0, "height": 0.9, "font_size": 16, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 2.7, "top": 2.9, "width": 8.0, "height": 0.9, "fill_color": "197A56", "corner_radius": 5000},
{"op": "add_text", "slide_index": 6, "text": "Strategic Priorities", "left": 2.7, "top": 2.9, "width": 8.0, "height": 0.9, "font_size": 16, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 1.2, "top": 4.0, "width": 11.0, "height": 0.9, "fill_color": "29BA74", "corner_radius": 5000},
{"op": "add_text", "slide_index": 6, "text": "Operational Objectives", "left": 1.2, "top": 4.0, "width": 11.0, "height": 0.9, "font_size": 16, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 0.5, "top": 5.1, "width": 12.3, "height": 0.9, "fill_color": "3EAD92", "corner_radius": 5000},
{"op": "add_text", "slide_index": 6, "text": "Tactical Initiatives", "left": 0.5, "top": 5.1, "width": 12.3, "height": 0.9, "font_size": 16, "bold": true, "font_color": "FFFFFF"}
]Add annotation text to the right of narrower tiers to explain what each level contains.
---
Org Chart Cascade
For organizational hierarchies, team structures, reporting lines.
Education: Use when the audience needs to see who reports to whom and how teams are structured. Color tiers by level: darkest at top, lighter as you go down. Keep to 3 levels maximum on one slide.
[
{"op": "add_rounded_rectangle", "slide_index": 7, "left": 5.2, "top": 1.8, "width": 3.0, "height": 0.6, "fill_color": "03522D", "corner_radius": 5000},
{"op": "add_text", "slide_index": 7, "text": "CEO", "left": 5.2, "top": 1.8, "width": 3.0, "height": 0.6, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_line_shape", "slide_index": 7, "x1": 6.7, "y1": 2.4, "x2": 6.7, "y2": 2.7, "color": "B0B0B0", "line_width": 1.0},
{"op": "add_line_shape", "slide_index": 7, "x1": 2.2, "y1": 2.7, "x2": 11.2, "y2": 2.7, "color": "B0B0B0", "line_width": 1.0},
{"op": "add_line_shape", "slide_index": 7, "x1": 2.2, "y1": 2.7, "x2": 2.2, "y2": 3.0, "color": "B0B0B0", "line_width": 1.0},
{"op": "add_rounded_rectangle", "slide_index": 7, "left": 0.7, "top": 3.0, "width": 3.0, "height": 0.6, "fill_color": "197A56", "corner_radius": 5000},
{"op": "add_text", "slide_index": 7, "text": "CFO", "left": 0.7, "top": 3.0, "width": 3.0, "height": 0.6, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_line_shape", "slide_index": 7, "x1": 6.7, "y1": 2.7, "x2": 6.7, "y2": 3.0, "color": "B0B0B0", "line_width": 1.0},
{"op": "add_rounded_rectangle", "slide_index": 7, "left": 5.2, "top": 3.0, "width": 3.0, "height": 0.6, "fill_color": "197A56", "corner_radius": 5000},
{"op": "add_text", "slide_index": 7, "text": "CTO", "left": 5.2, "top": 3.0, "width": 3.0, "height": 0.6, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_line_shape", "slide_index": 7, "x1": 11.2, "y1": 2.7, "x2": 11.2, "y2": 3.0, "color": "B0B0B0", "line_width": 1.0},
{"op": "add_rounded_rectangle", "slide_index": 7, "left": 9.7, "top": 3.0, "width": 3.0, "height": 0.6, "fill_color": "197A56", "corner_radius": 5000},
{"op": "add_text", "slide_index": 7, "text": "COO", "left": 9.7, "top": 3.0, "width": 3.0, "height": 0.6, "font_size": 14, "bold": true, "font_color": "FFFFFF"}
]Add third-level boxes below each second-level box with lighter fill (29BA74 or 3EAD92) and connecting lines.
Layout Patterns (slides ops)
Concrete patterns for composing visually rich slides using slides ops. Each pattern shows the exact ops sequence — copy and adapt for your content.
---
Card Pattern — Parallel Items
Use for 2-4 parallel concepts, capabilities, or categories. Each card gets a background rectangle + accent bar + header + body.
Education: Cards signal "these items are peers of equal weight." If one card has 5 bullets and another has 2, the slide looks unbalanced — either equalize depth or split the heavy card into its own slide. The accent bar color can vary per card to encode category (use brand palette in order), or stay uniform to signal equal priority.
[
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 0.7, "top": 2.1, "width": 3.3, "height": 3.5, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_rectangle", "slide_index": 3, "left": 0.7, "top": 2.1, "width": 3.3, "height": 0.06, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 3, "text": "Card Title", "left": 0.85, "top": 2.3, "width": 3.0, "height": 0.4, "font_size": 16, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 3, "text": "Card body description goes here with specific details.", "left": 0.85, "top": 2.75, "width": 3.0, "height": 2.5, "font_size": 14, "font_color": "333333"}
]Repeat at left: 4.2, left: 7.7 for 3-column layout (each card width ~3.3").
For 2-column: left: 0.7 (width 5.2) and left: 6.1 (width 5.2).
---
Number Badge Pattern — Ordered Steps
Use for 3-5 sequential steps or numbered items. Each step gets a colored circle with number + title + description.
Education: Numbers imply sequence and dependency — Step 2 follows Step 1. If items can happen in any order, use cards instead. Keep titles to 3-4 words (verb + noun) for scannability. If you need more than 5 steps, group into phases first.
[
{"op": "add_oval", "slide_index": 4, "left": 0.7, "top": 2.2, "width": 0.4, "height": 0.4, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 4, "text": "1", "left": 0.7, "top": 2.2, "width": 0.4, "height": 0.4, "font_size": 18, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 4, "text": "Step Title", "left": 1.25, "top": 2.2, "width": 4.5, "height": 0.35, "font_size": 16, "bold": true, "font_color": "333333"},
{"op": "add_text", "slide_index": 4, "text": "Description of what this step involves.", "left": 1.25, "top": 2.55, "width": 4.5, "height": 0.4, "font_size": 14, "font_color": "575757"}
]Repeat at top: 3.2, top: 4.2, etc. for subsequent steps (spacing ~1.0" per step).
---
KPI Row Pattern — Big Numbers
Use for 3-4 key metrics at the top of a slide. Big number + label underneath.
Education: KPIs work best as a header row above detailed content (charts, cards, or tables). Each KPI answers one question: "What is the headline number?" Keep to 3-4 max — beyond that, none stand out. Use green for positive metrics, gray for neutral context. Always include a comparison frame (YoY, vs. target, vs. peers) in the label.
[
{"op": "add_text", "slide_index": 5, "left": 0.7, "top": 2.1, "width": 3.2, "height": 0.7, "text": "$4.2B", "font_size": 36, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 5, "left": 0.7, "top": 2.8, "width": 3.2, "height": 0.4, "text": "Total addressable market", "font_size": 14, "font_color": "575757"},
{"op": "add_line_shape", "slide_index": 5, "x1": 4.1, "y1": 2.2, "x2": 4.1, "y2": 3.1, "color": "CCCCCC", "line_width": 0.5},
{"op": "add_text", "slide_index": 5, "left": 4.3, "top": 2.1, "width": 3.2, "height": 0.7, "text": "3.2x", "font_size": 36, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 5, "left": 4.3, "top": 2.8, "width": 3.2, "height": 0.4, "text": "Revenue multiplier", "font_size": 14, "font_color": "575757"},
{"op": "add_line_shape", "slide_index": 5, "x1": 7.7, "y1": 2.2, "x2": 7.7, "y2": 3.1, "color": "CCCCCC", "line_width": 0.5},
{"op": "add_text", "slide_index": 5, "left": 7.9, "top": 2.1, "width": 3.2, "height": 0.7, "text": "+87%", "font_size": 36, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 5, "left": 7.9, "top": 2.8, "width": 3.2, "height": 0.4, "text": "YoY growth rate", "font_size": 14, "font_color": "575757"}
]Use vertical add_line_shape dividers between KPIs for visual separation.
---
Key Insight Callout Box
Use at the bottom of a data slide to highlight the main takeaway. Rounded rectangle with brand-color border.
Education: The callout box is the "so what" — the one sentence an executive takes away if they read nothing else. Place it at the bottom of data slides, chart slides, and comparison slides. It should state a conclusion, not describe the data. Bad: "Revenue grew 12%." Good: "At current trajectory, digital will surpass traditional by Q2 2027."
[
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 0.7, "top": 5.8, "width": 11.0, "height": 0.8, "fill_color": "F0FAF5", "corner_radius": 5000, "border_color": "29BA74", "border_width": 1.5},
{"op": "add_text", "slide_index": 6, "text": "Key insight: Early movers capture 3x the market share of fast followers in regulated fintech", "left": 0.9, "top": 5.9, "width": 10.6, "height": 0.6, "font_size": 14, "bold": true, "font_color": "29BA74"}
]---
Timeline Pattern — Connected Milestones
Use for 3-5 milestones on a horizontal timeline. Line connector + circles at each point + labels.
Education: Timelines show "when" — use when the audience needs to understand sequencing and duration. Keep to 3-5 milestones; more than that and the labels overlap. For detailed project schedules with parallel workstreams, use the Gantt pattern from process-patterns.md instead. Alternate label positions (above/below the line) if milestone dates are close together.
[
{"op": "add_line_shape", "slide_index": 7, "x1": 1.5, "y1": 3.5, "x2": 11.0, "y2": 3.5, "color": "29BA74", "line_width": 2.0},
{"op": "add_oval", "slide_index": 7, "left": 1.3, "top": 3.3, "width": 0.4, "height": 0.4, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 7, "text": "Q1 2026", "left": 0.8, "top": 3.8, "width": 1.4, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 7, "text": "Launch MVP\nCore banking APIs", "left": 0.8, "top": 4.1, "width": 1.4, "height": 0.6, "font_size": 11, "font_color": "575757"},
{"op": "add_oval", "slide_index": 7, "left": 4.1, "top": 3.3, "width": 0.4, "height": 0.4, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 7, "text": "Q3 2026", "left": 3.6, "top": 3.8, "width": 1.4, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 7, "text": "Scale partnerships\n100+ agent integrations", "left": 3.6, "top": 4.1, "width": 1.4, "height": 0.6, "font_size": 11, "font_color": "575757"}
]Repeat for each milestone at evenly spaced x positions along the line.
---
Split-Panel with Callout Numbers
Use for data-heavy split-panel slides. Big numbers in the colored panel, structured content on the right.
Education: The colored panel is the "hook" — it should contain 1-2 attention-grabbing numbers that make the audience want to read the right panel for details. Keep left-panel text to big numbers + short labels only. Never put paragraphs in the colored panel. The right panel carries the structured argument (header+body pairs or cards).
[
{"op": "add_text", "slide_index": 8, "text": "$65B+", "left": 0.5, "top": 2.5, "width": 3.5, "height": 0.8, "font_size": 36, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 8, "text": "global AI spending\nin 2026", "left": 0.5, "top": 3.3, "width": 3.5, "height": 0.5, "font_size": 16, "font_color": "FFFFFF"},
{"op": "add_line_shape", "slide_index": 8, "x1": 0.8, "y1": 4.2, "x2": 3.5, "y2": 4.2, "color": "FFFFFF", "line_width": 0.5},
{"op": "add_text", "slide_index": 8, "text": "42%", "left": 0.5, "top": 4.5, "width": 3.5, "height": 0.6, "font_size": 28, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 8, "text": "CAGR through 2030", "left": 0.5, "top": 5.1, "width": 3.5, "height": 0.4, "font_size": 14, "font_color": "FFFFFF"}
]Right panel content uses the standard header+body pattern with font_color: "333333".
---
SCQA Executive Summary
Structure an exec summary using Situation-Complication-Question-Answer with accent bars separating each section.
Education: SCQA is the Pyramid Principle's opening framework. Each section should be 1-2 sentences max. The Answer is your core recommendation — it should be specific and actionable, not vague. If the Answer takes more than 2 lines, it belongs on a separate recommendation slide. The green accent bars create visual rhythm; all four must be present for the framework to work.
[
{"op": "add_rectangle", "slide_index": 2, "left": 0.7, "top": 2.0, "width": 0.08, "height": 0.9, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "SITUATION", "left": 0.95, "top": 2.0, "width": 2.0, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "AI agents are proliferating but lack financial infrastructure.", "left": 0.95, "top": 2.3, "width": 10.5, "height": 0.5, "font_size": 15, "font_color": "333333"},
{"op": "add_rectangle", "slide_index": 2, "left": 0.7, "top": 3.1, "width": 0.08, "height": 0.9, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "COMPLICATION", "left": 0.95, "top": 3.1, "width": 2.0, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "Without purpose-built banking, agents cannot transact, hold funds, or build credit.", "left": 0.95, "top": 3.4, "width": 10.5, "height": 0.5, "font_size": 15, "font_color": "333333"},
{"op": "add_rectangle", "slide_index": 2, "left": 0.7, "top": 4.2, "width": 0.08, "height": 0.9, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "QUESTION", "left": 0.95, "top": 4.2, "width": 2.0, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "How do we build the financial rails that enable autonomous agent commerce?", "left": 0.95, "top": 4.5, "width": 10.5, "height": 0.5, "font_size": 15, "font_color": "333333"},
{"op": "add_rectangle", "slide_index": 2, "left": 0.7, "top": 5.3, "width": 0.08, "height": 0.9, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "ANSWER", "left": 0.95, "top": 5.3, "width": 2.0, "height": 0.3, "font_size": 12, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 2, "text": "AgentBank: purpose-built banking infrastructure for AI agents with KYA, wallets, and credit.", "left": 0.95, "top": 5.6, "width": 10.5, "height": 0.5, "font_size": 15, "font_color": "333333"}
]---
Comparison Table with Header Bar
Use for side-by-side comparisons. Colored header row via rectangles + table below.
Education: Tables work best for structured comparisons with 3-6 rows and 2-3 columns. More than that and the text becomes too small. The colored header bar distinguishes this from a plain table and makes column headers scannable. If comparing just 2 options, consider a split-panel instead. For "us vs. them" comparisons, put "us" in the rightmost column (the eye finishes there).
[
{"op": "add_rectangle", "slide_index": 9, "left": 0.7, "top": 2.1, "width": 11.0, "height": 0.45, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 9, "text": "Dimension", "left": 0.8, "top": 2.12, "width": 2.5, "height": 0.4, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 9, "text": "Traditional Banks", "left": 3.5, "top": 2.12, "width": 3.8, "height": 0.4, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 9, "text": "AgentBank", "left": 7.5, "top": 2.12, "width": 4.0, "height": 0.4, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_table", "slide_index": 9, "left": 0.7, "top": 2.55, "width": 11.0, "height": 3.0, "rows": [["Identity", "KYC for humans", "KYA for agents + principals"], ["Accounts", "Manual onboarding", "API-first, sub-second"], ["Credit", "Credit scores", "Behavioral scoring"]]}
]---
2x3 Grid Pattern — Six Items
Use for 6 parallel items that don't fit in a single row. Two rows of three cards.
Education: The 2x3 grid works when all 6 items are true peers (no hierarchy). If some items are more important, use a featured card (larger) + supporting grid instead. Keep card content brief — at this density, each card gets ~3.5" x 2.0", so use 13-14pt body text and limit to 2-3 lines per card.
[
{"op": "add_rounded_rectangle", "slide_index": 10, "left": 0.7, "top": 2.0, "width": 3.6, "height": 2.0, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_rectangle", "slide_index": 10, "left": 0.7, "top": 2.0, "width": 3.6, "height": 0.06, "fill_color": "29BA74"},
{"op": "add_icon", "slide_index": 10, "icon_name": "Target", "left": 0.9, "top": 2.2, "size": 0.55, "color": "29BA74"},
{"op": "add_text", "slide_index": 10, "text": "Item Title", "left": 1.6, "top": 2.2, "width": 2.5, "height": 0.35, "font_size": 14, "bold": true, "font_color": "29BA74"},
{"op": "add_text", "slide_index": 10, "text": "Brief description of this item with key details.", "left": 0.85, "top": 2.7, "width": 3.3, "height": 1.1, "font_size": 13, "font_color": "575757"}
]Row 1 cards at left: 0.7, left: 4.55, left: 8.4 (each width ~3.6", gap ~0.25"). Row 2 cards at same x positions, top: 4.2 (gap ~0.2" between rows).
---
Shape Ops Reference
| Op | Use case | Key params |
|---|---|---|
add_rectangle | Card backgrounds, accent bars, header strips | fill_color, border_color |
add_rounded_rectangle | Cards, callout boxes, containers | fill_color, corner_radius, border_color |
add_oval | Number badges, bullet dots, status indicators | fill_color (use equal width/height for circle) |
add_line_shape | Dividers, timeline connectors, separators | x1,y1,x2,y2, color, line_width |
All position values are in inches. Colors are 6-digit hex without #.
Complete Operation Reference
All operations for slides.json ops. Use --docs method:render for the live schema.
Slide Management
| Op | Required params | Optional params |
|---|---|---|
add_slide | — | layout_index, layout_name, hidden |
delete_slide | slide_index | — |
move_slide | from_index, to_index | — |
Text & Content
| Op | Required params | Optional params |
|---|---|---|
add_text | slide_index, text, left, top, width, height | font_size, bold, font_name, font_color |
add_notes | slide_index, text | — |
set_semantic_text | slide_index, role, text | — |
set_placeholder_text | slide_index, placeholder_idx, text | text_xml, left, top, width, height |
set_title_subtitle | slide_index | title, subtitle |
replace_text | slide_index, old, new | — |
set_core_properties | — | title, subject, author, keywords |
Images & Media
| Op | Required params | Optional params |
|---|---|---|
add_image | slide_index, path, left, top | width, height |
set_placeholder_image | slide_index, placeholder_idx, path | crop params, position/size |
set_image_crop | slide_index, image_index | crop params |
add_media | slide_index, path, left, top, width, height | mime_type, poster_path |
Shapes
| Op | Required params | Optional params |
|---|---|---|
add_rectangle | slide_index, left, top, width, height, fill_color | border_color, border_width |
add_rounded_rectangle | slide_index, left, top, width, height, fill_color | corner_radius, border_color, border_width |
add_oval | slide_index, left, top, width, height, fill_color | border_color, border_width |
add_line_shape | slide_index, x1, y1, x2, y2 | color, line_width |
add_raw_shape_xml | slide_index, shape_xml | rel_images, rel_parts, rel_external |
Icons
| Op | Required params | Optional params |
|---|---|---|
add_icon | slide_index, icon_name, left, top | size (default 0.75), color (6-digit hex) |
Built-in icons (2): generic_circle, generic_square. Case-insensitive partial name matching (e.g., "circle" matches "generic_circle").
Template-extracted icons: If /slides-extract found vector shapes in the template, they are in the project's icons/ directory and available when icon_pack_dir is set in the design profile. Check the extraction report for the icon count and names.
Tables
| Op | Required params | Optional params |
|---|---|---|
add_table | slide_index, rows, left, top, width, height | table_xml |
update_table_cell | slide_index, table_index, row, col, text | — |
Charts — Creation
| Op | Required params | Optional params |
|---|---|---|
add_bar_chart | slide_index, categories, series, left, top, width, height | style, orientation ("column" or "bar", default "column"), chart_space_xml |
add_line_chart | slide_index, categories, series, left, top, width, height | style |
add_area_chart | slide_index, categories, series, left, top, width, height | style |
add_pie_chart | slide_index, categories, series, left, top, width, height | style |
add_doughnut_chart | slide_index, categories, series, left, top, width, height | style |
add_scatter_chart | slide_index, series, left, top, width, height | style |
add_bubble_chart | slide_index, series, left, top, width, height | style |
add_radar_chart | slide_index, categories, series, left, top, width, height | style |
add_combo_chart_overlay | slide_index, categories, bar_series, line_series, left, top, width, height | — |
Charts — Styling
| Op | Required params | Optional params |
|---|---|---|
set_chart_title | slide_index, chart_index, text | — |
set_chart_style | slide_index, chart_index, style_id | — |
set_chart_legend | slide_index, chart_index | visible, position, include_in_layout |
set_chart_data_labels | slide_index, chart_index | enabled, show_value, show_category_name, show_series_name, number_format |
set_chart_data_labels_style | slide_index, chart_index | position, font_size, show_legend_key, number_format_is_linked (NO number_format — use set_chart_data_labels for that) |
set_chart_plot_style | slide_index, chart_index | vary_by_categories, gap_width, overlap |
set_chart_series_style | slide_index, chart_index, series_index | fill_color_hex, invert_if_negative |
set_chart_series_line_style | slide_index, chart_index, series_index | line_color_hex, line_width_pt |
set_chart_axis_scale | slide_index, chart_index | minimum, maximum, major_unit, show_major_gridlines, number_format |
set_chart_axis_titles | slide_index, chart_index | category_title, value_title |
set_chart_axis_options | slide_index, chart_index | axis, reverse_order, tick_label_position, visible |
set_chart_secondary_axis | slide_index, chart_index | enable, series_indices |
update_chart_data | slide_index, chart_index, categories, series | — |
Slide Appearance
| Op | Required params | Optional params |
|---|---|---|
set_slide_background | slide_index, color_hex | — |
Process & Timeline Patterns (slides ops)
Patterns for process flows, timelines, roadmaps, stage gates, and Gantt-style visualizations.
---
Chevron Flow (3-5 Sequential Phases)
Connected chevron shapes showing a sequential process where each phase feeds the next.
Education: The chevron shape inherently implies forward motion and dependency. Use when Phase B cannot start until Phase A completes. If phases can run in parallel, use columns instead. Each card below answers: "What happens here, and what does it produce that the next phase needs?"
Build with overlapping rectangles to simulate chevrons, or use detail cards below a connecting line:
[
{"op": "add_line_shape", "slide_index": 3, "x1": 0.7, "y1": 2.3, "x2": 12.6, "y2": 2.3, "color": "29BA74", "line_width": 3.0},
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 0.5, "top": 1.6, "width": 2.3, "height": 0.55, "fill_color": "03522D", "corner_radius": 5000},
{"op": "add_text", "slide_index": 3, "text": "1 Assess", "left": 0.5, "top": 1.6, "width": 2.3, "height": 0.55, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 3.0, "top": 1.6, "width": 2.3, "height": 0.55, "fill_color": "197A56", "corner_radius": 5000},
{"op": "add_text", "slide_index": 3, "text": "2 Design", "left": 3.0, "top": 1.6, "width": 2.3, "height": 0.55, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 5.5, "top": 1.6, "width": 2.3, "height": 0.55, "fill_color": "29BA74", "corner_radius": 5000},
{"op": "add_text", "slide_index": 3, "text": "3 Build", "left": 5.5, "top": 1.6, "width": 2.3, "height": 0.55, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 8.0, "top": 1.6, "width": 2.3, "height": 0.55, "fill_color": "3EAD92", "corner_radius": 5000},
{"op": "add_text", "slide_index": 3, "text": "4 Deploy", "left": 8.0, "top": 1.6, "width": 2.3, "height": 0.55, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 10.5, "top": 1.6, "width": 2.3, "height": 0.55, "fill_color": "295E7E", "corner_radius": 5000},
{"op": "add_text", "slide_index": 3, "text": "5 Scale", "left": 10.5, "top": 1.6, "width": 2.3, "height": 0.55, "font_size": 14, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 0.5, "top": 2.7, "width": 2.3, "height": 3.5, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_text", "slide_index": 3, "text": "Current state analysis\nPain point mapping\nData audit\nStakeholder interviews", "left": 0.65, "top": 2.85, "width": 2.0, "height": 3.2, "font_size": 12, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 3, "left": 3.0, "top": 2.7, "width": 2.3, "height": 3.5, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_text", "slide_index": 3, "text": "Solution architecture\nVendor selection\nIntegration design\nSecurity review", "left": 3.15, "top": 2.85, "width": 2.0, "height": 3.2, "font_size": 12, "font_color": "575757"}
]Repeat detail cards for remaining phases at left: 5.5, left: 8.0, left: 10.5.
---
Stage Gate Process
Horizontal flow with colored gate boxes and arrow connectors for intake/approval workflows.
Education: Each gate represents a decision point — "go/no-go" before investing in the next phase. Use when the audience needs to see approval checkpoints. The gradient from dark to light implies increasing commitment.
[
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 0.5, "top": 1.6, "width": 2.8, "height": 1.0, "fill_color": "03522D", "corner_radius": 5000},
{"op": "add_text", "slide_index": 4, "text": "Gate 1\nConcept Review", "left": 0.5, "top": 1.6, "width": 2.8, "height": 1.0, "font_size": 13, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 4, "text": "→", "left": 3.35, "top": 1.7, "width": 0.4, "height": 0.8, "font_size": 24, "bold": true, "font_color": "29BA74"},
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 3.8, "top": 1.6, "width": 2.8, "height": 1.0, "fill_color": "197A56", "corner_radius": 5000},
{"op": "add_text", "slide_index": 4, "text": "Gate 2\nBusiness Case", "left": 3.8, "top": 1.6, "width": 2.8, "height": 1.0, "font_size": 13, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 4, "text": "→", "left": 6.65, "top": 1.7, "width": 0.4, "height": 0.8, "font_size": 24, "bold": true, "font_color": "29BA74"},
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 7.1, "top": 1.6, "width": 2.8, "height": 1.0, "fill_color": "29BA74", "corner_radius": 5000},
{"op": "add_text", "slide_index": 4, "text": "Gate 3\nPilot Approval", "left": 7.1, "top": 1.6, "width": 2.8, "height": 1.0, "font_size": 13, "bold": true, "font_color": "FFFFFF"},
{"op": "add_text", "slide_index": 4, "text": "→", "left": 9.95, "top": 1.7, "width": 0.4, "height": 0.8, "font_size": 24, "bold": true, "font_color": "29BA74"},
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 10.4, "top": 1.6, "width": 2.8, "height": 1.0, "fill_color": "3EAD92", "corner_radius": 5000},
{"op": "add_text", "slide_index": 4, "text": "Gate 4\nScale Decision", "left": 10.4, "top": 1.6, "width": 2.8, "height": 1.0, "font_size": 13, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 4, "left": 0.5, "top": 2.9, "width": 2.8, "height": 3.3, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_text", "slide_index": 4, "text": "Criteria:", "left": 0.65, "top": 3.0, "width": 2.5, "height": 0.3, "font_size": 12, "bold": true, "font_color": "03522D"},
{"op": "add_text", "slide_index": 4, "text": "Strategic alignment\nMarket validation\nTechnical feasibility\nResource availability", "left": 0.65, "top": 3.35, "width": 2.5, "height": 2.6, "font_size": 12, "font_color": "575757"}
]Repeat detail cards below each gate at matching x positions.
---
Gantt-Style Horizontal Bars
For project schedules with overlapping timelines and milestones.
Education: Use when multiple workstreams run in parallel with different start/end dates. The horizontal layout makes duration and overlap immediately visible. Add diamond milestones for key decision points.
[
{"op": "add_text", "slide_index": 5, "text": "Q1", "left": 3.5, "top": 1.5, "width": 2.2, "height": 0.3, "font_size": 10, "font_color": "575757"},
{"op": "add_text", "slide_index": 5, "text": "Q2", "left": 5.7, "top": 1.5, "width": 2.2, "height": 0.3, "font_size": 10, "font_color": "575757"},
{"op": "add_text", "slide_index": 5, "text": "Q3", "left": 7.9, "top": 1.5, "width": 2.2, "height": 0.3, "font_size": 10, "font_color": "575757"},
{"op": "add_text", "slide_index": 5, "text": "Q4", "left": 10.1, "top": 1.5, "width": 2.2, "height": 0.3, "font_size": 10, "font_color": "575757"},
{"op": "add_line_shape", "slide_index": 5, "x1": 3.5, "y1": 1.85, "x2": 12.3, "y2": 1.85, "color": "E0E0E0", "line_width": 0.5},
{"op": "add_text", "slide_index": 5, "text": "Data Platform", "left": 0.5, "top": 2.0, "width": 2.8, "height": 0.4, "font_size": 12, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 5, "left": 3.5, "top": 2.05, "width": 4.4, "height": 0.3, "fill_color": "03522D", "corner_radius": 8000},
{"op": "add_text", "slide_index": 5, "text": "AI Models", "left": 0.5, "top": 2.5, "width": 2.8, "height": 0.4, "font_size": 12, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 5, "left": 5.7, "top": 2.55, "width": 6.6, "height": 0.3, "fill_color": "197A56", "corner_radius": 8000},
{"op": "add_text", "slide_index": 5, "text": "Banking APIs", "left": 0.5, "top": 3.0, "width": 2.8, "height": 0.4, "font_size": 12, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 5, "left": 3.5, "top": 3.05, "width": 8.8, "height": 0.3, "fill_color": "29BA74", "corner_radius": 8000},
{"op": "add_text", "slide_index": 5, "text": "Change Mgmt", "left": 0.5, "top": 3.5, "width": 2.8, "height": 0.4, "font_size": 12, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 5, "left": 5.7, "top": 3.55, "width": 4.4, "height": 0.3, "fill_color": "3EAD92", "corner_radius": 8000},
{"op": "add_text", "slide_index": 5, "text": "Pilot Launch", "left": 0.5, "top": 4.0, "width": 2.8, "height": 0.4, "font_size": 12, "font_color": "575757"},
{"op": "add_rounded_rectangle", "slide_index": 5, "left": 7.9, "top": 4.05, "width": 2.2, "height": 0.3, "fill_color": "295E7E", "corner_radius": 8000}
]For milestones, add small diamond-shaped indicators using add_oval (small circle) or add_text with "◆" at the milestone x-position.
---
Multi-Track Workstream Overview
For 4-5 parallel workstreams shown as columns, each with numbered badges and detail cards.
Education: Use when workstreams run concurrently (not sequentially). Equal-width columns imply equal priority. If some workstreams are more critical, make them wider. The connecting line at the bottom shows they converge to a common outcome.
[
{"op": "add_oval", "slide_index": 6, "left": 1.3, "top": 1.6, "width": 0.5, "height": 0.5, "fill_color": "03522D"},
{"op": "add_text", "slide_index": 6, "text": "1", "left": 1.3, "top": 1.6, "width": 0.5, "height": 0.5, "font_size": 16, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rectangle", "slide_index": 6, "left": 0.5, "top": 2.25, "width": 2.3, "height": 0.35, "fill_color": "29BA74"},
{"op": "add_text", "slide_index": 6, "text": "Data Platform", "left": 0.65, "top": 2.25, "width": 2.0, "height": 0.35, "font_size": 12, "bold": true, "font_color": "FFFFFF"},
{"op": "add_rounded_rectangle", "slide_index": 6, "left": 0.5, "top": 2.7, "width": 2.3, "height": 3.3, "fill_color": "F2F2F2", "corner_radius": 5000},
{"op": "add_text", "slide_index": 6, "text": "Unified data lake\nReal-time ingestion\nAPI gateway\nData governance", "left": 0.65, "top": 2.85, "width": 2.0, "height": 3.0, "font_size": 11, "font_color": "575757"}
]Repeat for each workstream at left: 3.0, left: 5.5, left: 8.0, left: 10.5 (5 columns, width 2.3" each). Add a connecting line at y=6.2 with dots under each column.
Storytelling Rules
Rules for structuring presentation narratives. Every rule here must influence a concrete generation decision — archetype choice, title wording, section structure, or slide count.
---
1. WWWH Framework (before any planning)
Answer these four questions before writing the storyline:
1. Who is your audience? Write the story they need to hear, not the one you want to tell. 2. Why are you telling this story? Define the objective: compel action, provoke reaction, or create common understanding. 3. What is the key message? Frame around the "so what". Include as little as necessary — be ruthless about cutting. 4. How can you communicate it? Choose archetypes and visual patterns that make the message stick.
2. Pyramid Principle (mandatory)
Structure every deck top-down: lead with the answer, then support it.
- Deck level: Executive summary states the conclusion. Each section is a supporting argument. Each slide within a section provides evidence.
- Slide level: The action title IS the answer. The body provides evidence.
Mapping to archetypes
| Structural role | Typical archetypes |
|---|---|
| Conclusion / recommendation | executive_summary, big_statement |
| Section boundary | section_divider |
| Supporting argument | content_bullets, two_column, three_column, four_column |
| Evidence / data | bar_chart, line_chart, pie_chart, table, matrix_2x2 |
| Process / sequence | process_flow, icon_grid |
| Framing / emphasis | quote, big_statement |
| Opening / closing | title_slide, title_slide (or dedicated end layout) |
Choose archetypes that match the structural role — don't pick a chart archetype for a qualitative argument or bullets for a data point.
3. SCQA Framework
Use Situation-Complication-Question-Answer to structure the opening:
1. Situation — shared context the audience already knows 2. Complication — what changed or went wrong 3. Question — the strategic question this raises 4. Answer — your recommendation
Map this to slides: the executive_summary action title states the Answer. If the deck warrants it, use 1-2 content_bullets or big_statement slides before the exec summary to set up Situation and Complication. For short decks (< 8 slides), fold SCQA into the exec summary body text.
4. Action Titles (mandatory)
Every content slide title must be an action title — a complete sentence stating the slide's key takeaway.
Bad (topic titles): "Market Overview", "Q3 Results", "Customer Segments"
Good (action titles): "The European market grew 12% YoY, driven by SMB", "Three segments represent 80% of margin; mid-market is underserved"
Rules the agent must enforce:
- Complete sentence: subject + verb + object
- States the "so what" — the conclusion, not the topic
- Maximum 2 lines (~120 characters). If longer, simplify or split into two slides.
- Reading only the titles of the deck must tell the full story.
Exceptions: title_slide, section_divider, and quote archetypes use descriptive or thematic titles, not action titles.
5. Body Proves Title (mandatory)
The content below each action title must contain evidence that makes the title undeniably true. If the body is too generic for the claim, either:
- Make the body more specific (add data, examples, mechanisms)
- Narrow the title to what the body actually proves
A slide where the body doesn't prove the title is misleading — fix the mismatch before generating ops.
6. One Message Per Slide
Each slide communicates exactly one insight. If the action title requires "and" to connect two unrelated points, split into two slides.
Test: Can you write a single action title that captures everything on this slide? If not, split it.
7. MECE Groupings
All groupings must be Mutually Exclusive and Collectively Exhaustive:
- Deck sections: no overlap, no gaps in the argument
- Chart categories: exhaustive breakdown
- Column content in multi-column layouts: parallel structure, no redundancy
8. The Isomorphism Principle (layout selection)
The visual structure must mirror the conceptual relationship. Pick archetypes and layouts by the relationship you're communicating, not by item count.
| If the evidence shows... | Use | Why |
|---|---|---|
| Equal pillars/themes | three_column / four_column | Equal columns = equal weight |
| Concepts to unpack | icon_grid | Icon + label + description = concept unpacking |
| Categories with structured details | Split-panel layout | Category + detail rows = taxonomy |
| Independent capabilities (no order) | two_column / grid pattern | Grid = no hierarchy implied |
| Ranked priorities (order matters) | content_bullets (vertical stack) | Top-to-bottom = importance order |
| Sequential phases (A feeds B feeds C) | process_flow / timeline | Left-to-right = temporal sequence |
| Contrasting approaches | two_column | Side-by-side = contrast |
| High-impact single message | big_statement | Full-slide emphasis = importance |
Anti-patterns:
- Equal columns for unequal items (size should reflect weight)
- Grids for hierarchies (use vertical stack instead)
- Flows/arrows for non-sequential items
- Vertical stacks for truly equal peers (use columns)
9. Key Message vs. Detail Slides
Determine the viewing mode before planning — it changes density, font sizes, and background treatment.
| Attribute | Key Message Slide | Detail Slide |
|---|---|---|
| Purpose | Projected — briefly glanced at | Printed or viewed on a device |
| Text size | Large (18pt body minimum) | Standard (14pt body minimum) |
| Text density | Minimal, plenty of whitespace | More detail allowed |
| Approach | Key ideas supporting speaking points | Comprehensive evidence and analysis |
Ask the audience context during planning (Step 1). If the deck is projected, default to Key Message style. If shared digitally, default to Detail style. A single deck can mix both — use Key Message for executive summary and recommendation slides, Detail for appendix and backup data.
10. Source Attribution
Every data point must have a source. Generate a source line for each slide that contains numbers or claims:
- Format:
Source: [Organization], [Publication], [Year] - Place as the last text element on the slide, small font (9-10pt)
If the user provides no source data, use Source: Illustrative or Source: [To be confirmed] — never omit.
11. Section Structure
Adapt section count and depth to the target slide count:
| Target slides | Recommended sections | Notes |
|---|---|---|
| 5-8 | 2-3 | Fold SCQA into exec summary. Minimal section dividers. |
| 9-15 | 3-4 | One section divider per argument. |
| 16-25 | 4-6 | Full SCQA opening. Section dividers + multiple evidence slides per section. |
| 26+ | 5-8 | Consider an appendix section for supporting detail. |
Always include: title_slide (first), executive_summary (early), at least one section_divider (for decks > 8 slides).
12. Archetype Variety
Avoid monotony — don't use the same archetype more than 3 times consecutively. Alternate between text-heavy (bullets, columns) and visual (charts, process flows, icon grids) archetypes. For decks > 10 slides, use at least 4 distinct archetypes.
13. Layout Variety
In any deck > 6 slides, use at least 2-3 different template layouts. Never repeat the same layout for 3+ consecutive content slides. Use split-panel and accent layouts for visual punctuation between standard white slides.
14. Sanity Check (before finalizing)
Before generating ops, verify the plan against these questions:
- Does each slide have only one message?
- Can you read only the titles and understand the full story?
- Does every body prove its title?
- Are all groupings MECE?
- Does the layout match the conceptual relationship (isomorphism)?
- Are sources present for every data claim?
- Does every element pass the remove-it test? (Would removing it reduce comprehension? If not, cut it.)
Related skills
How it compares
Pick slides-build when you need template-contract-driven pptx generation with preflight and QA gates, not unstructured markdown-to-slides conversion.
FAQ
What prerequisites does slides-build require?
slides-build requires /slides-extract to have produced resolved_manifest.json, base_template.pptx, design-profile.json, and related template contracts in the project directory. Python 3.12+ and uv must be available for uvx --from agent-slides slides commands.
How does slides-build validate output?
slides-build runs slides preflight before render, mandatory dry-run, then slides qa output.pptx --slides-json @slides.json producing qa.json. QA reviews 25 ranked common mistakes from references/common-mistakes.md and requires ok:true before acceptance.