// the find
ProgressiveCoders/Spoke
mass-contact text/SMS distribution tool
Spoke is a self-hosted bulk texting tool for advocacy organizations. Admins upload phone lists, write scripts, and assign volunteers to text supporters through a React texter UI, and it handles replies, opt-outs, and campaign management. It suits an organization with someone technical to run it, not a developer looking for a messaging library.
- Compliance is built in rather than bolted on. Texting-hours enforcement and opt-out handling each have a dedicated doc, and there is a migration specifically for opt-out messages, which matters more for this kind of tool than any single feature.
- The extension points are real and documented. Action handlers, contact loaders, message handlers, service vendors, and service managers each have a HOWTO and a matching test directory, so you can add a carrier or a CRM without forking the core.
- Deployment has several paths (Heroku button, AWS Lambda, Docker, a minimalist setup), and the docs are candid about which one is for testing and which is for production.
- CI runs Jest unit tests and Cypress end-to-end tests on every push, and the server-side texter flow has its own test suite, which is more coverage than most small open-source tools bother with.
- The repo topics still list rethinkdb and thinky, but the migrations are Knex files and the docs cover PostgreSQL. The metadata predates the current stack, so it is misleading when you are searching for the project.
- The README is mostly links. The request path, how jobs move from the queue to the carrier, and how the pieces fit together are not explained there, so you end up reading a dozen docs and then the source to understand a message's life.
- Production is expensive for a small organization. The README puts the Heroku production tier at roughly $75 a month before carrier charges, and the free deploy button is explicitly not for production use.
- Ownership has changed hands (MoveOn to State Voices in 2023), and the tree carries a long list of legacy vendor integrations (ActionKit, CiviCRM, Mobile Commons, Revere, NGP VAN). Each one needs upkeep, and they are dead weight unless you actually use them.