1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Contributing
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Ways to contribute
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Add a template** — build a new stack using the [boilerworks conventions](https://github.com/ConflictHQ/boilerworks/blob/main/primers/PROCESS.md) and open a PR to add it to the catalogue
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Improve docs** — fix errors, improve clarity, add examples
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Report bugs** — open an issue with steps to reproduce
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Request a template** — open an issue describing the stack
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Template conventions
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All templates must:
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Boot with `docker compose up -d` from scratch (no local installs required)
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Use standard ports (app: 3000/8000, postgres: 5432, redis: 6379)
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Use `boilerworks` as the placeholder name throughout (the renderer replaces it)
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Include: Items, Categories, FormDefinitions, FormSubmissions, WorkflowDefinitions (Full only)
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Have health check at `/up` or `/health/`
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Include a `CLAUDE.md` pointing to `bootstrap.md`
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Pass `make test` and `make lint`
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## CLI development
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
git clone https://github.com/ConflictHQ/boilerworks.git
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cd boilerworks
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
uv sync
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
uv run boilerworks --help
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
make lint # ruff check + format --check
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
make test # pytest with coverage
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
make format # ruff fix + format
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Coverage must stay at ≥ 80%.
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Adding a template to the catalogue
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. Build and test the template repo (must live at `ConflictHQ/boilerworks-{name}`)
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. Edit `data/templates.yaml` — add an entry with `name`, `repo`, `size`, `language`, `status`, `description`, `topologies`
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. Run `make test` — `test_registry.py` will catch count or schema mismatches
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
4. Open a PR
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Code standards
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Python 3.12+, fully typed
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Line length: 120 (ruff config in `pyproject.toml`)
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `ruff check . && ruff format .` before every commit
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- No TODOs, no stubs
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- No co-authorship messages in commits
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Issues and PRs
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[github.com/ConflictHQ/boilerworks/issues](https://github.com/ConflictHQ/boilerworks/issues)
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!