Skip to content

Development

Contributions are welcome. To add a new service:

  1. Create a YAML file in the appropriate services/ subdirectory following services/_schema.yml
  2. 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)
  3. Regenerate the service tables in the README with python scripts/generate_readme_tables.py, and the guide navigation and index with python scripts/sync_docs_nav.py (CI fails if either drifts from the YAML)
  4. 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.