A multi-deck Slidev host, vibe-coded. Each talk lives under decks/<slug>.md and
is served at https://<user>.github.io/<repo>/<slug>/; the site root is a list of
the talks. Deployed to GitHub Pages on every push to main.
Adding a talk = drop a markdown in decks/ (its filename is the slug). The landing
card is generated from the deck's first-slide title (#) and subtitle (##), so
there's nothing else to edit. No workflow edits needed.
Tooling pinned via mise (see mise.toml).
mise install # one-time: installs pinned Node + pnpm
pnpm install
pnpm dev # always prompts you to pick a deck
pnpm dev adt4fun # …or run a deck by slug directlyOpens at http://localhost:3030.
pnpm build # builds every decks/*.md into ./dist/<slug>/ + the talk-list root
pnpm export # PDF export of decks/adt4fun.md (needs Playwright: pnpm dlx playwright install chromium)pnpm build (scripts/build-decks.mjs) builds each deck
separately with its own --base/--out, renders the landing from
site/index.html (filling its <!--TALKS--> marker with a card
per deck, title/subtitle pulled from each deck's first slide), and writes a root
404.html redirector (GitHub Pages serves one root 404 for all paths, so a
mid-deck reload bounces back to that deck's index).
BASE_PREFIX sets the hosting root (CI uses /<repo>; empty locally).
- Push to a GitHub repo with
mainas default branch. - Repo Settings → Pages → Build and deployment → Source: GitHub Actions.
- First push to
maintriggers .github/workflows/deploy.yml. - Site lands at
https://<user>.github.io/<repo>/(talk list); each deck at…/<repo>/<slug>/.
The workflow derives BASE_PREFIX from the repo name automatically, so renaming the repo or forking Just Works.