A reusable GitHub repository template that bundles the build techniques, automation, and conventions reused across greenfield projects — so each new project starts from a proven foundation instead of re-deriving the same patterns.
Stack-agnostic where possible, customisable where not. Everything here is an adaptable example you are expected to tailor, not fixed machinery.
- GitHub Pages deployment — the built app on
main, plus an isolated, browsable preview for every PR (with a comment linking to it). - Spec-kit, installed fresh — instructions to pull the current
github/spec-kitper project, so you always get the latest. - Project memory — a standard
docs/project_notes/structure for decisions, bugs, key facts, and a work log. - Memory-aware protocols — the check-before / record-after rules, in
CLAUDE.md. - Blog on Pages — posts authored alongside each spec and published automatically on merge.
- Playwright in the cloud — a reference wrapper so end-to-end tests and real screenshots work inside Claude Code web sessions.
- Active feature resolution — reliable spec selection, including a workaround for cloud branch names.
- Create a repo from this template (GitHub → Use this template).
- Install spec-kit — already installed and customised in this repo; the
command used was:
See
uvx --from git+https://github.com/github/spec-kit.git \ specify init --here --integration claude --script sh --force --ignore-agent-tools
CLAUDE.md→ spec-kit is installed and customised here before re-running it. - Configure deployment — edit
pages.config.yml(app name, build command, dist directory, app path). - Enable GitHub Pages (see the checklist below), then push.
These are GitHub settings that cannot be set from code:
- Template repository: Settings → check Template repository (if you want others to fork this).
- Pages source: Settings → Pages → Deploy from a branch →
gh-pages/(root). Thegh-pagesbranch is created automatically by the first workflow run, so do this after the first push tomain. - Workflow permissions: Settings → Actions → General → Workflow
permissions → Read and write (so workflows can publish to
gh-pagesand comment on PRs).
Fork PRs: preview deployment and the preview comment are skipped on pull requests opened from forks (their
GITHUB_TOKENis read-only). Same-repo branch PRs work normally.
.github/workflows/ deploy.yml · pr-preview.yml
pages.config.yml deployment configuration (edit me)
site/ landing page, Jekyll config + layout, blog shell
docs/project_notes/ decisions · bugs · key_facts · issues
docs/blog-post-template.md
run-playwright.mjs · playwright.config.ts · e2e/ Playwright reference (cloud)
CLAUDE.md agent + contributor guide for everything above
Cloud sessions can produce real screenshots. The dev deps are declared in
package.json (@playwright/test, @sparticuz/chromium):
npm install
npm run test:e2e # = node run-playwright.mjs (cloud-aware wrapper)Locally, run npm run playwright:install once, then npm run test:e2e:local.
See CLAUDE.md → Playwright in cloud sessions.
CLAUDE.md— the working guide: memory protocols, the spec-kit workflow + active-feature resolution, the blog pattern, Playwright, and deployment.docs/project_notes/— this project's accumulated memory.