HTML slide authoring + PDF export pipeline, driven by AI agents.
Write a slide in slides/, run one command, get a PDF.
Works with any AI agent that can read CLAUDE.md — Claude Code, Cursor, Windsurf, GitHub Copilot, and others.
- Write your slides as a single HTML file in
slides/ - Run
./run.shto convert to PDF via headless Chromium - Pick up the result from
output/
slides/my-talk.html → output/my-talk.pdf
# install deps (first time only)
python3 -m venv venv
source venv/bin/activate
pip install playwright
playwright install chromium
# convert a single file
./run.sh slides/my-talk.html
# convert everything in slides/
./run.shmake-ppt/
├── slides/ # put your HTML slides here
├── assets/ # background & decoration images
├── fonts/ # local font files (Tossface, Freesentation, Wanted Sans)
├── output/ # generated PDFs (git-ignored)
├── convert.py # Playwright-based converter (don't touch)
├── run.sh # entry point
├── CLAUDE.md # authoring rules for AI agents
└── DESIGN.md # design system reference
Each .html file in slides/ is a standalone deck. One <div class="slide"> = one PDF page.
<div class="slide slide-title">
<!-- title page -->
</div>
<div class="slide slide-content">
<!-- content page -->
</div>Fixed canvas: 1920 × 1080px (16:9).
Background images and right-side decorations live in assets/.
| prefix | description |
|---|---|
bg-dark-*.png |
dark abstract backgrounds (for title / section slides) |
bg-light-*.png |
light holographic backgrounds |
deco-right-*.png |
right-edge glow orbs (white background only) |
See slides/asset-test.html for a visual reference of every asset.
All fonts are bundled locally so PDF export works offline.
| font | use |
|---|---|
| Tossface | emoji (always applied first) |
| Freesentation | Korean body text (presentation style) |
| Wanted Sans Variable | Korean body text (modern sans-serif) |
Pick one body font per deck — don't mix.
MIT