Multi-channel communications hub for Books in Hand — aggregates BH/personal text, email, voice, Messenger, and more into one triage interface.
Find a file
pyr0ball f2709fc425 fix: match ItemModal stagesForType() to backend valid_stages_for() contract
stagesForType() returned OTHER_STAGES (including 'done') for the unset
type case, but backend stages.py::valid_stages_for(None) only allows
['new'] when type is unset. This let the UI offer 'Done' as a stage
option with no type selected, which the backend rejects with 422.

Also add a watch on type that resets stage to 'new' when the current
stage is no longer valid for the newly selected type, preventing a
stale invalid stage from being silently submitted.
2026-07-13 14:25:28 -07:00
backend feat(backend): add FastAPI routes for items 2026-07-13 13:43:09 -07:00
bot feat(bot): add subscribe/unsubscribe commands and bot bootstrap 2026-07-13 14:16:28 -07:00
frontend fix: match ItemModal stagesForType() to backend valid_stages_for() contract 2026-07-13 14:25:28 -07:00
.gitignore chore: initialize chorus repo 2026-07-13 11:01:51 -07:00
README.md chore: initialize chorus repo 2026-07-13 11:01:51 -07:00

Chorus

Multi-channel communications hub for Books in Hand.

Aggregates BH text, personal text, BH email, personal email, voice, Facebook Messenger, and ND messenger into a single triage interface, so Donna can coordinate with volunteers and donors without switching between apps.

Standalone client project for Books in Hand. Not part of the CircuitForge product line — no BSL tiering, no CircuitForge license server integration.

Design spec and implementation plan live in a separate private planning repo (circuitforge-plans/books-in-hand/superpowers/) and won't always be available to whoever is working in this repo.

Status

Design in progress.