From 59c0ef7f3b035ce331e0e3004229c4f97d7ecacf Mon Sep 17 00:00:00 2001 From: wonder Date: Wed, 27 May 2026 11:41:04 +0800 Subject: [PATCH] feat: restructure project for multi-deck support Co-Authored-By: Claude Opus 4.7 --- CLAUDE.md | 41 +++++++++++++++++++++-------- slides.md => decks/demo/slides.md | 0 index.html | 43 +++++++++++++++++++++++++++++++ package.json | 6 +++-- scripts/build.sh | 19 ++++++++++++++ 5 files changed, 96 insertions(+), 13 deletions(-) rename slides.md => decks/demo/slides.md (100%) create mode 100644 index.html create mode 100755 scripts/build.sh diff --git a/CLAUDE.md b/CLAUDE.md index f13afc2..d92ca2c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # Slide Project -Slidev presentation project. Remote Gitea repo with Docker-based CI/CD auto-deployment. +Multi-deck Slidev presentation project. Remote Gitea repo with Docker-based CI/CD auto-deployment. ## Slidev Skill @@ -8,11 +8,28 @@ All slide-related operations (create, edit, format, build, export) MUST first in ## Project Structure -- `slides.md` — main slide entry point -- `pages/` — additional slide files (imported via `src: ./pages/xxx.md`) -- `public/` — static assets (images, fonts) -- `.gitea/workflows/deploy.yaml` — CI/CD pipeline -- `dist/` — build output (gitignored) +``` +index.html # Landing page (lists all decks) +decks/ + / + slides.md # Slide entry point + pages/ # Additional slide files (imported via src: ./pages/xxx.md) + public/ # Static assets (images, fonts) +scripts/ + build.sh # Build all decks +.gitea/workflows/ # CI/CD pipeline +dist/ # Build output (gitignored) +``` + +Each deck is an independent Slidev presentation under `decks/`. The build outputs to `dist//` with the landing page at `dist/index.html`. + +## Adding a New Deck + +1. Create directory: `decks//` +2. Add `decks//slides.md` with frontmatter +3. Optionally add `pages/` and `public/` subdirectories +4. Register in `index.html` decks array +5. Add `dev:` and `build:` scripts to `package.json` ## Git Commit Convention @@ -34,15 +51,17 @@ After completing slide edits, auto-commit with a descriptive message. ## Key Commands ```bash -pnpm run dev # Local dev server (http://localhost:3030) -pnpm run build # Build static SPA → dist/ -pnpm run export # Export to PDF (requires playwright-chromium) +pnpm run dev # Dev server for demo deck (http://localhost:3030) +pnpm run dev: # Dev server for a specific deck +pnpm run build # Build all decks → dist/ +pnpm run build: # Build a single deck +pnpm run export # Export to PDF (requires playwright-chromium) ``` ## CI/CD Pipeline - **Trigger:** push to `main` branch - **Runner:** self-hosted Gitea Act Runner (label: `aliyun`), Docker mode with `/var/run/docker.sock` mounted -- **Steps:** checkout → install deps → `slidev build` → deploy dist/ to nginx container +- **Steps:** checkout → install deps → `pnpm run build` → deploy dist/ to nginx container - **Deploy:** CI job spawns a sibling nginx container on the host via the mounted Docker socket (Docker out of Docker, not DinD) -- **Serve:** nginx container exposes port 8080 +- **Serve:** nginx container exposes port 8080, decks accessible at `//` diff --git a/slides.md b/decks/demo/slides.md similarity index 100% rename from slides.md rename to decks/demo/slides.md diff --git a/index.html b/index.html new file mode 100644 index 0000000..16fb37e --- /dev/null +++ b/index.html @@ -0,0 +1,43 @@ + + + + + + Slides + + + +
+

Slides

+
+

Loading...

+
+
+ + + diff --git a/package.json b/package.json index 52c666f..b248b44 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,10 @@ "description": "", "main": "index.js", "scripts": { - "dev": "slidev", - "build": "slidev build", + "dev": "slidev decks/demo/slides.md", + "dev:demo": "slidev decks/demo/slides.md", + "build": "bash scripts/build.sh", + "build:demo": "slidev build decks/demo/slides.md --base /demo/ --out dist/demo", "export": "slidev export" }, "keywords": [], diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..df6c5d2 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +DIST="$ROOT/dist" + +rm -rf "$DIST" +mkdir -p "$DIST" +cp "$ROOT/index.html" "$DIST/index.html" + +for dir in "$ROOT"/decks/*/; do + [ -d "$dir" ] || continue + name="$(basename "$dir")" + echo "Building deck: $name" + pnpm exec slidev build "$dir/slides.md" --base "/$name/" --out "$DIST/$name" +done + +echo "Done. Output: $DIST" +ls -la "$DIST"