A slide is HTML. A deck is a route. Navigation is ?slide=3. Presenting is fullscreen. Exporting is rasterising the DOM. There is no other thing happening.
Once you accept that, the entire "AI slide generator" category collapses. We don't need a worse Google Slides with a chat box on the side. We need to build slides the same way we build everything else on the web — and let the tools that are already extraordinary at the web do the work.
The category error
PowerPoint, Keynote and Google Slides are document formats with a presentation viewer bolted on. Tome, Gamma and Beautiful.ai are the same idea with a generative model in front of the styling. None of them are particularly good at being slides. They are good at being storage for slide-shaped objects.
But every time someone gives a great deck, what they are really doing is putting a really specific webpage on a screen for sixty seconds, then putting the next one up. The "slide" abstraction is the projection layer, not the source of truth.
The five claims
A slideshow is a website with a PDF export. To prove it, here are the five things a slide tool actually has to do:
- Render a slide — a webpage at 16:9 with type and visuals that don't fall apart at 4K.
- Navigate between slides — keyboard, URL, or click.
- Show one full-screen — the browser already does this with one API call.
- Show all of them at once — for review, for tailoring the deck per audience, for finding the slide you want.
- Export to PDF — so people who weren't in the room can read it offline.
Five things. Every one of them is a five-line problem on the web. None of them are a five-line problem in a .pptx.
What changes when slides are React
Once a slide is a React component, the entire toolchain changes shape:
- Want to refactor every slide's headline to use the same heading scale? Rename a Tailwind class.
- Want to A/B two layouts in front of an investor on Tuesday? Keep both files in the tree, swap the import.
- Want a chart that updates from real data?
await fetch()in the slide. Done. - Want to ship a slide that the presenter can tune live during the pitch? Render a control panel next to the slide. State is just state.
- Want to ask Claude Code to clean up the deck? It knows how to clean up a Next.js app. It does not know how to clean up
.pptxXML.
These are not features you bolt onto a slide tool. They are properties you get for free when the slide is just a webpage.
Export is a solved problem
The objection is always: "fine, but you still need to email people a PDF." Yes. And the browser already knows how to rasterise the DOM. html2canvas-pro does it for one slide. jspdf glues many of them together. You loop over your slide registry, mount each one offscreen at 1280×720, capture, push into a PDF, save.
There is no "PowerPoint export" to write. You already wrote it the first time you put a slide on screen. The PDF is the same renderer running headless.
Where this lands
I'm calling the project nopoint. It is a Next.js + React + Tailwind scaffold for decks-as-code, extracted from the investor portal I built for Chartcastr. One viewer component, a slide registry per deck, an export pipeline that hits the same DOM you present from, companion markdown files for design rules and citations.
You write slides like you write components. You ask Claude Code to write slides like you ask it to write components. You present them like you present any other route. You export them like you export any other webpage.
If your slide tool isn't a website, you're using the wrong tool.
Read next
- Against AI slide generators — why "AI for PowerPoint" was always the wrong abstraction
- Deck-as-code: the slide registry — one viewer, many decks
- Real React, real PDF — how the export pipeline actually works
- Every slide carries its rationale — making slides legible to your AI editor
- Variants in the tree — keep every layout you tried
- Live-tunable slides — shipping a micro-IDE inside a slide
- Companion docs: DECK.md and REFERENCES.md — the receipts every deck should ship with