Add README and ensure TODO markers at all template customization points

Adds a README.md describing the template and how to fork it. Adds TODO
comments to Dagger config, Quartz config, and CI workflow where they
were missing. Adds a "First-Time Setup" section to CLAUDE.md that
instructs Claude to proactively suggest resolving TODOs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Erich Blume 2026-03-03 19:25:14 -08:00
commit 5c9f06c165
9 changed files with 75 additions and 3 deletions

View file

@ -1,4 +1,5 @@
[project]
# TODO: Rename to match your project (also rename the src/ directory)
name = "project-template-ci"
version = "0.1.0"
requires-python = ">=3.13"

View file

@ -1,3 +1,4 @@
# TODO: Update module docstring and class name to match your project
"""Project Template CI — Dagger build functions."""
from .main import ProjectTemplateCi as ProjectTemplateCi

View file

@ -2,6 +2,7 @@ import dagger
from dagger import dag, function, object_type
# TODO: Rename class to match your project (e.g. MyProjectCi)
@object_type
class ProjectTemplateCi:
@function

View file

@ -221,6 +221,7 @@ jobs:
exit 0
fi
# TODO: Update git identity to match your Forgejo instance
git config user.name "Forgejo Actions"
git config user.email "actions@forge.example.com"

View file

@ -11,6 +11,14 @@ Guidance for Claude Code working in this repository. See also [[ai-assistance-gu
**Shell:** The user's shell is **fish**. Use `$status` not `$?` for exit codes. Use fish syntax in interactive examples.
## First-Time Setup
This repository is a **project template**. All customization points are marked with `TODO` comments throughout the codebase. Before any other work, you should:
1. **Suggest resolving TODOs first.** Even if the user gives you a different task, check whether TODOs remain by searching for `TODO` across all files. If unresolved TODOs exist, inform the user that the template hasn't been fully customized yet and suggest resolving them first (the user may decline — that's fine, proceed with their request).
2. **To resolve TODOs:** search all files for `TODO`, update each value to match the new project, rename the `.dagger/src/project_template_ci/` directory, and verify nothing was missed.
3. **When all TODOs are resolved:** delete this "First-Time Setup" section entirely from `CLAUDE.md` — it is only needed once.
## Rules
1. **Always run `mise run ai-docs` at session start**

59
README.md Normal file
View file

@ -0,0 +1,59 @@
# project-template
A personal project template with opinionated infrastructure for documentation, CI, and AI-assisted development.
## What's Included
- **Documentation** — [Diataxis](https://diataxis.fr/)-structured docs built with [Quartz](https://quartz.jzhao.xyz/)
- **Changelog** — [Towncrier](https://towncrier.readthedocs.io/) fragment-based changelog
- **CI/CD** — [Dagger](https://dagger.io/) pipelines + [Forgejo](https://forgejo.org/) Actions workflow for releases
- **Pre-commit hooks** — [prek](https://github.com/dustinblackman/prek) with linting, formatting, secret detection
- **AI assistance**`CLAUDE.md` + structured docs for Claude Code (C0/C1/C2 change process, Mikado method)
- **Task runner** — [mise](https://mise.jdx.dev/) tasks for docs validation, Mikado chain management, and more
## Forking This Template
The template contains `TODO` markers at every point that needs customization. To set up a new project:
1. Fork or copy this repository
2. Search for `TODO` across all files — each one marks a value you need to update:
- Project name and description (`CLAUDE.md`, `docs/index.md`)
- Forgejo/forge instance URLs (`build.yaml`, `mise-tasks/docs-mikado`, `mise-tasks/pr-comments`)
- Dagger module name and class (`dagger.json`, `.dagger/`)
- Quartz site title and URLs (`docs/quartz.config.ts`, `docs/quartz.layout.ts`)
- CI git identity (`.forgejo/workflows/build.yaml`)
3. Rename the `.dagger/src/project_template_ci/` directory to match your new Dagger module name
4. Remove the "First-Time Setup" section from `CLAUDE.md` once all TODOs are resolved
5. Delete this "Forking This Template" section from `README.md` and write your own project description
If you use Claude Code, it will prompt you to resolve these TODOs at the start of your first session.
## Getting Started
```bash
# 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/ # towncrier fragments
./.dagger/ # dagger pipelines
./.forgejo/ # forgejo-runner actions and workflows
./mise-tasks/ # scripts via `mise run`
```
## License
<!-- TODO: Add license information -->

View file

@ -1,4 +1,5 @@
{
"_comment": "TODO: Rename 'project-template-ci' to match your project",
"name": "project-template-ci",
"engineVersion": "v0.19.11",
"sdk": {

View file

@ -7,13 +7,13 @@ import * as Plugin from "./quartz/plugins"
*/
const config: QuartzConfig = {
configuration: {
pageTitle: "Project Docs",
pageTitle: "Project Docs", // TODO: Update to your project name
pageTitleSuffix: "",
enableSPA: true,
enablePopovers: true,
analytics: null,
locale: "en-US",
baseUrl: "CHANGEME.example.com",
baseUrl: "CHANGEME.example.com", // TODO: Update to your docs site URL
ignorePatterns: ["private", "templates", ".obsidian"],
defaultDateType: "modified",
theme: {

View file

@ -13,7 +13,7 @@ export const sharedPageComponents: SharedLayout = {
afterBody: [],
footer: Component.Footer({
links: {
"Repository": "https://CHANGEME.example.com/owner/repo",
"Repository": "https://CHANGEME.example.com/owner/repo", // TODO: Update to your repo URL
},
}),
}