Zero-dependency presentation system. One HTML file to present, one popup window for speaker notes, no build step, no server required.
- Open
presentation.htmlin a browser. - Navigate with arrow keys,
Space, or the on-screen buttons. - Press
Pto open the synced presenter/notes window in a popup. - Press
Fto go fullscreen,Ofor the slide overview grid,Nfor the inline notes drawer.
| Key | Action |
|---|---|
→ / Space / PageDown |
Next slide |
← / PageUp |
Previous slide |
Home / End |
First / last slide |
N |
Toggle inline notes drawer |
P |
Open presenter window (synced) |
O |
Toggle overview grid |
F |
Toggle fullscreen |
Esc |
Close overview |
Press P (or click the P button) from presentation.html. A popup opens with:
- Live slide indicator (current / previous / next)
- Speaker script and notes for the current slide
- Navigation arrows that sync back to the main window
Navigation in either window advances both. Works via BroadcastChannel + localStorage — no server needed.
- Copy this folder to a new location (or use it as a GitHub template repo).
- Edit
presentation.html:- Update
<title>, the.brandtext (top-left of each slide), and the cover slide. - Replace the template slides with your content. The CSS block must stay untouched.
- Update
- Edit
notes.jsto match your slides (one entry per slide inSPEAKER_NOTESandSPEAKER_SLIDES). - Open and present.
If you work with Claude, see
AGENTS.mdfor the full component library, notes format, and agent rules.
presentation.html Main deck — edit slides here
notes.js Speaker notes and metadata — edit alongside slides
presenter.html Presenter popup — rarely needs editing
AGENTS.md AI agent instructions and CSS component reference
CLAUDE.md Claude-specific quick reference
README.md This file
Split slides across multiple objects in SPEAKER_SCRIPT inside notes.js. The presenter window shows a speaker dropdown and scrolls to the active slide automatically. See AGENTS.md → Speaker notes for the full format.