2026-06-078 min·#tutorial#thesis

How to make a pitch deck from one Markdown file (and ship it as a link)

Zephyr WhimsyEditorial · 2026-06-07

Markdown as source. Web as render. One source generates the deck, a backup .pptx, and a sharable URL.

You want to make a pitch deck. You want AI to do most of the work. You also want to never look at a .pptx file again. This is the workflow I use.

The shortcut: write the deck as one Markdown file. Render it as a web page. Share the URL. Skip the file entirely. Below is how to do that, step by step, with the exact source you can paste into Plain to follow along.

Why Markdown for slides

Three reasons that are individually small and collectively decisive.

1. Diffable. When you change a Markdown file, the diff is a couple of lines. When you change a .pptx, the diff is "the entire binary file is different." If you've ever been in a co-edited deck where two people made changes and you couldn't tell what changed, Markdown solves this. (more on diffable docs.)

2. AI-native. Every AI you'd actually use — Claude, GPT, Gemini — was trained on enormous quantities of Markdown. Ask it to generate slides as Markdown and you get clean output. Ask it to generate a PowerPoint XML and you get… well, you don't, because nobody has that data at scale.

3. Future-proof. Markdown files I wrote in 2012 still open in 2026. PowerPoint files I wrote in 2012 open with broken fonts and warning dialogs. Markdown is text. Text is forever.

The minimum viable deck file

Here's a complete 5-slide pitch deck in 30 lines of Markdown plus YAML frontmatter:

---
plain: deck@v2
theme: editorial
---

# Plain
## The Office for the AI era

— a 5-page intro

---

# The problem

You make a deck. You attach it. Your client opens it.
Maybe the font is missing. Maybe the chart is now an image.
Now you re-export, re-send, repeat.

You spend more time on the file than on the argument.

---

# The wedge

What if the artifact was a link, not a file?

- Open on any device, always latest
- Edit a sentence, URL doesn't change
- Re-export to .pptx as a fallback, not the default

---

# How it works

```
Markdown source → Plain renders → inplain.app/s/xxxxx
                                  ↓
                            Export .pptx if needed
```

---

# Try it

inplain.app — 200 free credits / month, no card

Or paste this into the chat and it'll generate live.

That source generates a presentation-ready 5-slide deck. Same file generates a backup .pptx in one click. Same URL can be shared, embedded, presented. You change one line, the URL still works — the next person who opens it sees the update.

The frontmatter — what those two lines do

plain: deck@v2 tells the renderer "this is a deck, use the v2 render pipeline." Without this header it'd treat the Markdown as a generic long-form document.

theme: editorial picks one of Plain's eight design philosophies. Editorial is the magazine-style theme — serif headlines, narrow column, generous white space. Other options: Swiss (geometric, grid-disciplined), Linear (dark, dense, engineering vibe), Dune (dashboard-friendly), and four more. Each is a complete design system, not a color swap. (why eight, and why not just templates.)

You can change theme: after the deck is written and the visual changes — content stays the same. That's the point of separating source from render.

The --- separator and slide structure

Every --- in the body starts a new slide. Inside each slide:

  • # Title — slide headline, largest type
  • ## Subtitle — second line, smaller
  • Plain prose paragraphs — body text
  • Bullet lists, code blocks, inline emphasis (**bold**, _italic_, `code`) — all the standard Markdown things

If you've used Marp, this is basically Marp-compatible. If you haven't, it's basically GitHub Markdown with the rule that --- means "next slide."

Adding richer blocks

Plain extends standard Markdown with section blocks — the ::: name ::: pattern — for things that don't fit a single Markdown primitive. A two-column compare slide:

---

# Today vs Tomorrow

::: compare
left: "File-based workflow"
right: "Link-based workflow"
left-points:
  - "Email attachments"
  - "Version naming in filename"
  - "Font breakage on receiver's machine"
right-points:
  - "Send the URL"
  - "Latest version is always at the URL"
  - "Browser handles rendering on any device"
:::

---

That generates a side-by-side comparison slide with proper visual treatment for the two columns. Stats slides, callout slides, image slides — all use the same ::: name ::: pattern. The full list is in the docs.

Sharing the deck

Once your source compiles, you have three options:

  1. Copy link. Click Share in the toolbar. You get inplain.app/s/xxxxx. Send this. Anyone who opens it sees the latest version. Edit a sentence on your side, they refresh, the change is there.
  2. Export to .pptx. Same toolbar, click Export → .pptx. You get a clean PowerPoint file with fonts, layout, and structure preserved. Some animations and embedded video will degrade — see why we treat Office as fallback, not default — but the file opens cleanly in PowerPoint / Keynote / WPS.
  3. Present. Click Present on the shared URL or in the editor. Browser-native fullscreen, key shortcuts work, no install required. You can present from any device that has a browser.

Why a link beats a file, concretely

Three actual scenarios where I've felt the difference.

Scenario 1: client wants a number changed. File workflow: re-export to .pptx, re-attach to email, hope the client uses the new version. Link workflow: edit the number in source, your client refreshes the page, done.

Scenario 2: pitching to a phone. File workflow: client opens .pptx on iPhone, font is missing, chart is now a JPEG. Link workflow: client opens inplain.app/s/xxxxx in mobile Safari, the same fonts and charts render exactly as on desktop.

Scenario 3: investor wants the source. File workflow: send the .pptx. Investor edits it themselves, sends back a different version, you don't know what changed. Link workflow: investor leaves comments on the page, you see them in your editor, you decide which to incorporate, no fork.

What about AI generation

Everything above assumed you wrote the Markdown yourself. The whole point of AI tools is you mostly don't. So how does that fit?

In Plain, you type a sentence into the chat:

> Generate a 5-slide pitch deck on Plain
> for indie founders who currently use Gamma.
> Theme: editorial. Tone: confident not pushy.

It generates the Markdown above (or its equivalent for your topic), renders the deck, gives you the URL. You can read the source — it's not opaque. You can edit any part of it. You can hand it back to AI with "shorten slide 3 to one sentence" and it edits via JSON-Patch, so you always know what changed.

That's the loop. AI produces structured Markdown. Plain renders. You ship the link.

If you want to try this without signing up

Three things you can do without an account:

And if you want to do this without Plain

Honest answer: you can. Marp + a GitHub Pages site renders Markdown to a deck. Slidev is open source and very good if you write a lot of code. Reveal.js is the granddaddy of browser-based slideshow tools.

What you'd lose vs Plain: AI generation, JSON-Patch editing history, the doc + sheet siblings (single source for three artifact types), the shared-link permissions / comments / analytics layer. Whether those are worth $20/month depends on you.

But you don't need Plain to do "Markdown to pitch deck." You need Plain to do "Markdown to pitch deck plus the eight other things in my document workflow."


If link-first decks resonate, try Plain at inplain.app — 200 free credits / month, no card. Or read the manifesto first. If you want to see how this same Markdown source becomes a doc and a dashboard in addition to a deck, see the AI deck tool selection guide and making dashboards without a data warehouse.