{"id":50719579,"url":"https://github.com/obcode/lecture-toolkit-cli","last_synced_at":"2026-06-09T22:30:32.246Z","repository":{"id":362550834,"uuid":"1259622604","full_name":"obcode/lecture-toolkit-cli","owner":"obcode","description":"toolkit for slidev","archived":false,"fork":false,"pushed_at":"2026-06-04T20:47:37.000Z","size":95,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-04T21:28:06.937Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/obcode.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-04T17:34:52.000Z","updated_at":"2026-06-04T20:47:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/obcode/lecture-toolkit-cli","commit_stats":null,"previous_names":["obcode/lecture-toolkit-cli"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/obcode/lecture-toolkit-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obcode%2Flecture-toolkit-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obcode%2Flecture-toolkit-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obcode%2Flecture-toolkit-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obcode%2Flecture-toolkit-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/obcode","download_url":"https://codeload.github.com/obcode/lecture-toolkit-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/obcode%2Flecture-toolkit-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34129072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-09T22:30:31.617Z","updated_at":"2026-06-09T22:30:32.241Z","avatar_url":"https://github.com/obcode.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lecture-toolkit-cli\n\nReusable CLI toolkit for Slidev-based lecture repositories.\n\n## Install\n\n```bash\npnpm add -D github:obcode/lecture-toolkit-cli#v0.1.0\n```\n\nvia GitHub Packages (npm registry):\n\n```bash\npnpm add -D @obcode/lecture-toolkit-cli\n```\n\nor run on demand:\n\n```bash\npnpm dlx lecture-toolkit-cli --help\n```\n\n## Commands\n\n```bash\nlecture-toolkit export-notes \u003cdeck\u003e\nlecture-toolkit watch-notes \u003cdeck\u003e\nlecture-toolkit dev-deck \u003cdeck\u003e\nlecture-toolkit build-deck \u003cdeck\u003e\nlecture-toolkit build-all\nlecture-toolkit build-index\nlecture-toolkit export-pdf-deck \u003cdeck\u003e\nlecture-toolkit export-pdfs\nlecture-toolkit render-dot\nlecture-toolkit render-tikz\nlecture-toolkit generate-changelogs\nlecture-toolkit strip-presenter-notes \u003cslides.md\u003e\n```\n\n`dev-deck` starts `watch-notes` automatically so `notes.md` is generated and updated while developing slides.\n\n## Repository Config\n\nCreate `lecture-toolkit.config.json` in your lecture repository root to customize shared behavior.\n\nExample:\n\n```json\n{\n\t\"index\": {\n\t\t\"eyebrow\": \"Vorlesungsfolien\",\n\t\t\"courseTitle\": \"Moderne Programmierkonzepte und Datenstrukturen\",\n\t\t\"subtitle\": \"Prof. Dr. Oliver Braun\",\n\t\t\"siteTitle\": \"Moderne Programmierkonzepte und Datenstrukturen - Prof. Dr. Oliver Braun\",\n\t\t\"locale\": \"de-DE\",\n\t\t\"timezone\": \"Europe/Berlin\"\n\t},\n\t\"changelog\": {\n\t\t\"globalResetDefault\": \"2026-05-18\"\n\t}\n}\n```\n\n`build-index` also supports CLI overrides such as:\n\n```bash\npnpm exec lecture-toolkit build-index --course-title \"Algorithms\" --subtitle \"Prof. Ada\" --site-title \"Algorithms - Prof. Ada\"\n```\n\n`\u003cdeck\u003e` supports:\n\n- Prefix lookup like `09-DFS-BFS`\n- `decks/\u003cdeck\u003e`\n- `decks/\u003cdeck\u003e/slides.md`\n\nThe command must run inside a repository that contains a `decks/` directory.\n\n## Keep Local Shell Wrappers\n\nExisting local shell scripts can stay as thin wrappers, for example:\n\n```bash\n#!/usr/bin/env bash\nset -e\npnpm exec lecture-toolkit dev-deck \"$@\"\n```\n\n## CI Example\n\n```yaml\nbuild-all:\n\timage: node:20\n\tscript:\n\t\t- pnpm install --frozen-lockfile\n\t\t- pnpm exec lecture-toolkit build-all\n```\n\n## Subpath Hosting: pin Slidev to 52.15.0 (avoid 52.16.0)\n\n`build-deck`/`build-all` build each deck with a subpath base of `--base /\u003cCI_PROJECT_NAME or \"lectures\"\u003e/\u003cdeck\u003e/`, required when serving from a subfolder such as `https://\u003cgroup\u003e.pages.example.com/lectures/\u003cdeck\u003e/`.\n\n**Slidev 52.16.0 has a regression that breaks in-deck navigation under any non-root base.** Stepping from slide 1 to 2 doubles the base path (e.g. `…/\u003cdeck\u003e/1` → `…/\u003cdeck\u003e/\u003cdeck\u003e/2` → 404). The client's `getSlidePath()` started prepending `import.meta.env.BASE_URL` to the route, while the router history (`createWebHistory(BASE_URL)`) already adds it — so the base is applied twice. This affects both `history` and `hash` `routerMode`, so hash routing does **not** work around it. Reproduced and bisected: `getSlidePath` returns base-relative `/${no}` up to 52.15.0 and base-prefixed `${BASE_URL}${no}` from 52.16.0.\n\nFix in the consuming lecture repo's `package.json` — pin Slidev to the last good version:\n\n```jsonc\n\"devDependencies\": {\n  \"@slidev/cli\": \"52.15.0\"   // NOT \"^52.16.0\" — the caret allows 52.16.0\n}\n```\n\nthen `pnpm install`. Default `history` routing then produces correct URLs (`…/\u003cdeck\u003e/2`). Once a Slidev version \u003e 52.16.0 ships with the fix, the pin can be relaxed.\n\n## GitHub Release Automation\n\nThis repository is configured for Semantic Release via GitHub Actions.\n\n- Workflow: `.github/workflows/release.yml`\n- Config: `.releaserc.json`\n- Trigger: push to `main`\n\nThe release workflow publishes:\n\n- Git tag + GitHub Release\n- npm package to GitHub Packages (`npm.pkg.github.com`)\n\nRequired repository secret:\n\n- `GH_PACKAGES_TOKEN`: classic PAT (or fine-grained token) with `write:packages` (and `read:packages`) for owner `obcode`.\n\nThe workflow maps `NPM_TOKEN` and `NODE_AUTH_TOKEN` to `GH_PACKAGES_TOKEN` and also uses `GITHUB_TOKEN` for release/tag operations.\n\nTo consume the package from GitHub Packages, configure `.npmrc` in the consuming repo or user profile:\n\n```ini\n@obcode:registry=https://npm.pkg.github.com\n//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}\n```\n\nUse Conventional Commits for release versioning, for example:\n\n- `fix: ...` -\u003e patch release\n- `feat: ...` -\u003e minor release\n- `feat!: ...` or `BREAKING CHANGE:` -\u003e major release\n\n## Notes Export Format\n\n`export-notes` writes:\n\n- Header callout with export timestamp in `dd.mm.yy, HH:MM Uhr`\n- Source and notes links in GitLab blob format\n- Bear tag footer `#hm/lectures/\u003clecture\u003e/notes`\n\n`\u003clecture\u003e` is derived from repository name prefix, for example `mpd-lectures` -\u003e `mpd`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobcode%2Flecture-toolkit-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fobcode%2Flecture-toolkit-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fobcode%2Flecture-toolkit-cli/lists"}