Standalone, static build of the interactive 28-slide workshop deck. Originally authored as a GitHub Copilot canvas extension (Node-backed); this repo is a self-contained static site with no server dependency, so it deploys to GitHub Pages and can be presented from a stable URL.
- 28-slide deck with keyboard nav (
←/→,Home/End), a slide Index overlay, and a Present (fullscreen,F) mode. - Four live-fillable working boards (MVP Canvas, Scope, Decision Log, Action
Log). Edits auto-save to the browser's
localStorage(per-origin) and survive navigation and reloads. - Export PDF renders a printable workshop record from the filled boards (browser Print → Save as PDF).
The extension used a Node backend for state, live agent sync (SSE), and the
/export record. This static port replaces all of that with client-side code:
| Extension (server) | Standalone (static) |
|---|---|
GET/POST /state |
localStorage via app/store.js |
GET /export |
DeckStore.renderExportHTML() (client) |
GET /events (SSE) |
storage events (cross-iframe/tab sync) |
POST /goto + SSE |
current slide persisted to localStorage |
absolute paths (/app, /slide/<id>) |
relative paths (app/, slides/<id>.html) |
Board state lives only in the presenter's browser; there is no shared backend.
Any static file server works (paths are relative):
python3 -m http.server 8080
# open http://127.0.0.1:8080/.github/workflows/deploy.yml publishes the repo root to GitHub Pages on every
push to main (via actions/upload-pages-artifact + actions/deploy-pages).
index.html deck shell (nav, fullscreen, index, export)
base.css shared slide styles
app/
app.css shell styles
manifest.js slide order + titles (28 slides)
store.js localStorage state + client-side record export
app.js deck navigation
board.js board field binding + autosave
slides/*.html individual slides (authored + board slides)