Contributing — dev setup¶
Conjure is a monorepo: the Python package, the React package, the docs, the landing site, and an example project all live together so code and docs ship as one.
Repository layout¶
django-conjure/
├── packages/
│ ├── conjure/ # PyPI: django-conjure — Django app
│ └── web/ # React dashboard + codegen (source; npm release planned)
├── apps/
│ ├── docs/ # this site (MkDocs Material + mike)
│ └── landing/ # brand / marketing site (Astro)
├── examples/
│ └── demo-shop/ # runnable Django project — the live demo (planned)
└── brand/ # tokens.css + BRAND.md — one source for all surfaces
Tooling: Python via uv/hatch, JS via pnpm workspaces, common tasks behind a
Makefile.
Quick start¶
make install # python (editable) + pnpm + docs deps
make test # pytest (packages/conjure)
make docs-serve # live docs at localhost:8000
Running the pieces¶
The docs-with-code rule¶
Every feature PR must update the docs. This is enforced socially (PR template checklist) and
in CI (a pr-docs-gate warns when a feature PR changes no docs/CHANGELOG). See
Releasing for how documentation rides the release pipeline.
issue → branch → code + tests + docs + CHANGELOG entry
→ PR (checklist: tests? docs? compatibility?)
→ CI green + review → merge → auto-published on next release
What CI checks¶
| Check | Scope |
|---|---|
| Python test matrix | Python 3.10–3.13 × Django 4.2 / 5.x |
| Lint | ruff / black (Python), tsc + vitest (web) |
| Docs build | mkdocs build --strict + the generators run clean |
| Docs gate | Feature PR with no docs change is flagged |
Conventions¶
- Conventional Commits. Release notes and version bumps are derived from them by release-please.
- One version for both packages. Once the npm package is published (planned), the Python
and npm packages will ship the same
X.Y.Z(API contract parity). - Frozen UI kit. Don't edit
components/ui/; add variants incomponents/composed/and register them on/style-guide. - Brand in one place. Colors come from
brand/tokens.css; don't hardcode hex in three surfaces.
Where to go next¶
- Releasing — the "release = docs release" pipeline and the code→docs generators.
- Extension development — adding new extension points to the core.
- Customization — using the existing extension hooks.