A personal project template with opinionated infrastructure for documentation, CI, and AI-assisted development.
  • Python 57.7%
  • Shell 42.3%
Find a file Use this template
Erich Blume c46c303236
Some checks failed
Build / validate (push) Failing after 6s
release.yaml: authenticate the version-resolution API calls
The /releases/latest and /releases/tags/X reads were unauthenticated. On
private repos Forgejo returns 404 to unauth'd callers, so the workflow
silently fell back to v0.0.0 as the "previous version" and let a
BUMP_PATCH on top of v1.x.y produce v0.0.1. The duplicate-tag guard had
the same blind spot — it could not detect existing releases at all.

Both reads now send the Authorization header and treat any non-200 /
non-404 response as a hard failure instead of swallowing it.
2026-05-11 10:07:39 -07:00
.dagger Upgrade Dagger from v0.19.11 to v0.20.0 2026-03-05 09:32:05 -08:00
.forgejo/workflows release.yaml: authenticate the version-resolution API calls 2026-05-11 10:07:39 -07:00
.gitea Add Forgejo template variable expansion for automatic repo customization 2026-03-03 20:28:15 -08:00
.github Initial scaffold (pre-hook install) 2026-03-03 19:05:51 -08:00
docs Resync template docs 2026-04-19 08:19:26 -07:00
mise-tasks CLAUDE.md -> AGENTS.md and docs-preview 2026-04-19 07:45:41 -07:00
.gitignore Add .ruff_cache to gitignore 2026-03-03 19:09:53 -08:00
.yamllint.yaml Initial scaffold (pre-hook install) 2026-03-03 19:05:51 -08:00
AGENTS.md Resync template docs 2026-04-19 08:19:26 -07:00
CHANGELOG.md Initial scaffold (pre-hook install) 2026-03-03 19:05:51 -08:00
dagger.json Bump Dagger template pin to v0.20.6 2026-04-21 08:41:55 -07:00
mise.toml Bump Dagger template pin to v0.20.6 2026-04-21 08:41:55 -07:00
prek.toml Add Forgejo template variable expansion for automatic repo customization 2026-03-03 20:28:15 -08:00
README.md Resync template docs 2026-04-19 08:19:26 -07:00
towncrier.toml Initial scaffold (pre-hook install) 2026-03-03 19:05:51 -08:00

project-template

A personal project template with opinionated infrastructure for documentation, CI, and AI-assisted development.

What's Included

  • DocumentationDiataxis-structured docs built with Quartz
  • ChangelogTowncrier fragment-based changelog
  • CI/CDDagger pipelines + Forgejo build and release workflows
  • Pre-commit hooksprek with linting, formatting, secret detection
  • AI assistanceAGENTS.md + structured docs for Claude Code (C0/C1/C2 change process, Mikado method)
  • Task runnermise tasks for docs validation, Mikado chain management, release preview, and runner inspection

Forking This Template

This is a Forgejo template repository. When you create a new repo from this template, Forgejo automatically expands variables like ${REPO_NAME} and ${REPO_OWNER} in key files — handling most customization automatically.

After creating your repo, the remaining manual steps are:

  1. Set baseUrl in docs/quartz.config.ts to your docs site domain
  2. Rename .dagger/src/project_template_ci/ directory and update class names to match your project
  3. Review and tailor the project structure section in AGENTS.md
  4. Add license information to README.md
  5. Remove the "First-Time Setup" section from AGENTS.md and this section from README.md

If you use Claude Code, it will prompt you to resolve remaining TODOs at the start of your first session.

Getting Started

# Install git hooks
prek install && prek install --hook-type commit-msg

# Run all pre-commit checks
prek run --all-files

# List available tasks
mise tasks

# Build docs (requires Dagger)
dagger call build-docs --src=. --version=dev export --path=./docs-dev.tar.gz

Project Structure

./docs/                 # documentation (Diataxis, Quartz)
./docs/changelog.d/     # leave only .gitkeep in the template; generated repos add towncrier fragments here
./.dagger/              # Dagger module backing docs builds and releases
./.forgejo/workflows/   # generic build/release workflows for generated repos
./.forgejo/scripts/     # optional per-project hooks consumed by those workflows
./mise-tasks/           # scripts via `mise run`

License