Development¶
Contributions are welcome. To add a new service:
- Create a YAML file in the appropriate
services/subdirectory followingservices/_schema.yml - Generate the guide page with
python scripts/new_service_stub.py <slug>, then write the parts that need a human (CI fails if a service has no guide) - Regenerate the service tables in the README with
python scripts/generate_readme_tables.py, and the guide navigation and index withpython scripts/sync_docs_nav.py(CI fails if either drifts from the YAML) - Submit a pull request
For bug reports and feature requests, open an issue on GitHub.
For UI work, uv run python scripts/ui_demo_seed.py /tmp/cp-demo --serve 8100 serves the app with invented demo data (login demo / demo-password-1), and never touches a real data dir.
node scripts/ui_screenshots.mjs http://127.0.0.1:8100 /tmp/shots all then takes full-page shots of every page and state in every theme in app/themes.json: Classic night (the default, no suffix), then -dark, -light, -sunrise and -warm. Pass one theme id instead of all for just that one. CP_SCALE=2 takes retina shots, CP_SHOT_ONLY=<regex> picks states.