← Work

Solo · open source

Why do AI-made slides all look the same, and what changes that?

Decklume — AI Presentation Maker for Claude Code

A plugin that turns a topic, notes or a PowerPoint file into a designed, animated HTML deck, by giving the model a design system instead of adjectives.

Role
Solo — design and engineering
Outcome
Open source under MIT — installable as a Claude Code plugin, with four example decks and thirteen theme demos live on GitHub Pages
Built with
Claude Code · Node.js · JavaScript · Playwright · View Transitions API · HTML/CSS
Decklume, cover image

A Claude Code skill and plugin that turns a topic, a set of notes or a PowerPoint file into a designed, animated HTML presentation. Most AI-made slides look the same because the model is given adjectives rather than a system; Decklume gives it one — a fixed 16:9 canvas, a modular type scale, a 12-column grid, 26 tested layouts and 13 complete themes — and then refuses to hand a deck over until a browser-rendered QA gate passes. The output is a single self-contained HTML file with Keynote-style Magic Move transitions, a presenter view, in-browser editing, and export to vector PDF or per-slide PNG. Built solo, end to end.

Problem

Asking a language model for slides tends to produce one recognisable deck: a heading, three bullets and a gradient, whatever the subject or the room. The model is not short of taste so much as constraints — it has no canvas, no grid, no type scale and no way to see its own output, so text overflows, elements overlap and low-contrast colour pairs ship unnoticed. The workflow fails too: design gets decided before the argument, so the deck looks finished while the story underneath it is still a list of topics.

Approach

Decklume splits the work into stages with a human checkpoint before each expensive one. Claude first writes a storyline with an assertion headline on every slide (“Half the night is stage N2”, not “Sleep stages”), which the user approves before any design happens. It then writes the title slide and two key content slides once, and a preview script renders them in three contrasting themes on one comparison page, so style is chosen from the user’s own content rather than from a template gallery. Claude writes only slide content using layout classes; a build script inlines the engine, theme and fonts into one HTML file. The QA gate renders every slide in a real browser with Playwright and fails the deck on overflow, clipped text, overlap, undersized type, WCAG contrast, broken images and leaked placeholder text, then produces a contact sheet for a final design review. Motion is declared in plain HTML attributes and choreographed by the engine, with reduced motion respected and PDF, PNG and QA always showing the finished state of each slide. PowerPoint import reads bullet levels, tables, grouped images, speaker notes and native chart data with no dependency beyond Node.

Screens

Launch film · 21 seconds, with sound.
The Decklume card: 'Pick the frame. Ship the deck.' above a film strip of slides in several themes, one circled with the handwritten note 'keep this one'
The pitch. The user picks a style from their own slides rendered side by side, rather than from a template gallery.
A slide in the Folio theme titled 'Half the night is stage N2', with a donut chart of sleep stages highlighting N2 at 50 percent
A chart slide from the sleep-and-memory lecture. Charts are drawn from data attributes with no library, and the theme highlights the point the headline makes.
A slide in the Folio theme titled 'From fast learner to long-term store', showing a four-step flow from Experience to Hippocampus to Sleep replay to Neocortex
Every headline is an assertion rather than a topic, decided in the storyline before any design happens.
A dark slide in the Volt theme titled 'Three messages, one round trip', with a TCP handshake diagram of SYN, SYN-ACK and ACK between client and server
From an engineering talk in the Volt theme. In the live deck this diagram draws itself, one message at a time.
A dark slide in the Volt theme titled 'The browser already records every stop', showing JavaScript that reads navigation timing entries
Code slides support line-by-line walkthroughs, focusing one range of lines per key press.
A slide in the Aurora theme titled 'Weekly actives grew every month', with a rising line chart ending at 12,400
From a seed-pitch example in the Aurora theme — a fictional company, labelled as such in the deck.