DEV Community

Cover image for Corporate PowerPoint decks with AI, for free: slides as code, QA as the gate
sebyx07
sebyx07

Posted on

Corporate PowerPoint decks with AI, for free: slides as code, QA as the gate

Ask an AI chat to "make me a board deck" and you usually get one of three things:

  1. A wall of Markdown you still have to paste into PowerPoint.
  2. A picture of slides that nobody can edit.
  3. A .pptx where the text spills off slide 4, the chart is a screenshot, and the closing slide says "Thank you! Questions?"

I wanted a fourth option: the AI writes the deck, a machine proves it is correct, and a second AI with fresh eyes judges it. That project is PowerPoint Factory. It is MIT-licensed and you can clone it today.

All 20 slides of the sample board deck

The sample: a 20-slide Q4 board review for Halden Logistics, a fictional company. Every shape, chart and table is native and editable in PowerPoint.

What "free" means here

  • The factory is free. MIT license, no SaaS seat, no per-deck fee, no watermark.
  • The toolchain is free. Bun, LibreOffice (headless rendering), poppler and open metric-compatible fonts (Carlito, Caladea, Liberation, Gelasio).
  • AI images are optional. Generated photos, video and music come from Kubeez and cost credits. Without a key you get labeled placeholders and everything else still builds. Results are cached and committed, so you never pay twice for the same image.
  • You bring the agent. It is built for Claude Code, and any agent that reads AGENTS.md can drive it. You can also write the recipes by hand: they are just TypeScript.

A slide is data, not coordinates

Every slide is a small typed recipe, one file per slide. You pick a layout by the message you want to land, not by where boxes go:

// slides/06-margin-bridge.ts
import { slide } from "@/slide";

export default slide({
  layout: "waterfall",
  eyebrow: "Results",
  title: "Pricing and routes added $19M of operating profit; wage inflation took back $6M",
  steps: [
    { label: "Q4 2025", value: 46, total: true },
    { label: "Pricing", value: 9 },
    { label: "Route consolidation", value: 6 },
    { label: "Wage inflation", value: -6 },
    { label: "Q4 2026", value: 55, total: true },
  ],
  prefix: "$",
  suffix: "M",
  source: "Halden finance; operating profit, $M",
  notes: "The operational levers more than offset wage inflation.",
});
Enter fullscreen mode Exit fullscreen mode

That becomes this. Real shapes, not an image:

Waterfall bridge slide

This is why AI is good at it. An LLM is bad at pixel geometry and good at structured data. Layouts handle the geometry, so the model only has to get the content and the story right.

There are 23 built-in layouts: cover, agenda, summary, stats, chart, waterfall, table (with RAG status and Harvey balls), 2×2 matrix, process, timeline, roadmap, next steps, references and more. Charts (column, bar, stacked, line, area, pie, doughnut) are native PowerPoint charts, so finance can still click in and fix a number.

Table slide Roadmap slide
Native table with highlight and total rows Gantt roadmap with a "today" line

The part that makes it corporate-grade: QA

Generating a .pptx is easy. Generating one you would send to a board is not. So every build runs about 40 checks, and each one comes with a → fix hint the agent can act on:

  • Layout: text overflow, measured with metric-twin fonts so wrapping matches PowerPoint; overlaps; safe margins; minimum font sizes; titles kept to two lines or fewer.
  • Accessibility: WCAG AA contrast against the real backdrop, including photos and translucent scrims; alt text; real title placeholders so outline view and screen readers work.
  • Copy discipline: at most 6 bullets and about 70 words per slide, no placeholder text, no emoji, and a list of banned slop words ("leverage synergies", I'm looking at you).
  • Story and charts: action titles, a source line on data slides, no pies with negative values, axes that start at zero, and no "Thank you" closer. The deck ends on decisions.
  • Rendered pixels: LibreOffice renders every slide to PDF and PNG, then checks for blank slides, ink touching the edge, and a pixel diff against an approved baseline.

The output folder gives you, and the agent, everything needed to look at the result: a contact sheet, one PNG per slide, a QA report, and an outline containing only the titles. If the titles alone don't tell the story, the deck isn't done.

The loop

git clone https://github.com/sebyx07/power-point-factory && cd power-point-factory
bin/setup        # bun install, .env, checks LibreOffice + poppler + fonts
bin/deck loop    # build + QA + screenshots of the sample deck

bin/deck new acme q1-review board-update --theme ledger
claude           # then: /deck acme "Q1 board review — revenue 2M, +11%…"
Enter fullscreen mode Exit fullscreen mode

The /deck command follows the same workflow a consultant would:

  1. Ghost deck. Write the action titles first. Each is one sentence with the takeaway, 15 words or fewer.
  2. Recipe. One file per slide, with the layout chosen by the message.
  3. bin/deck loop. Fix every ✖ until QA passes.
  4. Look. The agent reads the contact sheet and the full-size screenshots.
  5. Fresh eyes. A separate deck-reviewer agent, which never saw the recipe, judges the screenshots and returns ship, fix or rebuild.
  6. Export. bin/deck export is QA-gated and writes Company - Title - date.pptx/.pdf.

The agent is also told never to invent facts. A missing number becomes a TBD in the speaker notes and is listed back to you. It never ends up on a slide, and QA fails if one does.

Real photography without a stock-photo subscription: Kubeez

Stock photos are where a lot of corporate decks die: the same handshake, the same glass tower, and a license nobody checked. The factory gets its imagery from Kubeez instead, and it's what makes the sample deck look like an agency made it:

Cover slide with a generated photo

Every photo in the Halden deck is a Kubeez generation, including the cover and the warehouse shots.

Why it fits a slides-as-code workflow so well:

  • One API for every kind of media. Images (text-to-image and image-to-image), video (text-to-video and image-to-video), music beds and background removal, so you can make transparent cut-outs of products or people. You can pick the model per job and choose resolutions up to 4K on models that support it.
  • Slide-shaped output. Request 16:9 for full-bleed slides, 3:4 for a half-slide cover, 1:1 for objects or 21:9 for banners. No cropping.
  • The agent can use it directly. There's a REST API for builds and an MCP server (mcp.kubeez.com) so Claude Code can generate and preview media in the conversation.
  • Built for caching. The factory hashes each prompt spec and stores the result in the deck's assets/generated/ folder, which you commit. Rebuilds are offline and free, and teammates who clone the repo never pay again for the same image.
bin/kubeez generate "aerial photo of a logistics hub at dawn, 35mm, natural light" --aspect 16:9
bin/kubeez remove-bg ./assets/product.png
bin/kubeez balance
Enter fullscreen mode Exit fullscreen mode

In a recipe, an image is just a prop. The factory generates it on the first build and reads it from the cache after that. Add KUBEEZ_API_KEY to .env and you're set.

Brand once, reuse forever

Each company gets a "brand brain": BRAND.md for voice, logo rules, colors and approved facts, brand.ts for theme tokens, plus logos and reusable photos. Four built-in themes (cobalt, ledger, graphite, terracotta) all pass a WCAG AA test, and extendTheme puts your colors on top. A brand-reviewer agent checks claims and logo use against BRAND.md before anything ships.

Motion without the effect soup

Pick one motion profile per deck: none (for read-ahead decks), subtle (the default, a fade transition), build (click reveals) or keynote (Morph). Per-slide effect soup isn't an option.

Try it

If you build a deck with it, I'd like to see the contact sheet. Drop it in the comments.

Top comments (0)