idea198-civicswarm-privacy-.../README.md

73 lines
1.7 KiB
Markdown

# CivicSwarm
Privacy-preserving neighborhood deliberation router for participatory politics.
## What It Does
CivicSwarm stores proposals, comments, resident profiles, preference signals, and deliberation ledger entries in SQLite. It then:
- clusters comments with TF-IDF + KMeans
- summarizes discussion by detected language
- routes proposal fragments to relevant residents by geography, interests, experience, and language
- aggregates preferences with optional differential-privacy noise
- ingests offline capture batches from mobile, SMS, and field canvassing with audit-friendly idempotency
- exports a civic brief with provenance and audit trail
## Stack
- Python 3.11
- FastAPI
- SQLAlchemy Core + SQLite
- scikit-learn
- langdetect
## Install
```bash
python3 -m pip install -e .
```
For development:
```bash
python3 -m pip install -e ".[dev]"
```
## Run
```bash
python -m civicswarm
```
Environment variables:
- `CIVICSWARM_DB_PATH` defaults to `civicswarm.sqlite`
- `CIVICSWARM_HOST` defaults to `127.0.0.1`
- `CIVICSWARM_PORT` defaults to `8000`
## API
- `POST /proposals`
- `POST /residents`
- `POST /proposals/{proposal_id}/comments`
- `POST /proposals/{proposal_id}/preferences`
- `POST /capture-batches`
- `GET /proposals/{proposal_id}/route`
- `GET /proposals/{proposal_id}/dashboard`
- `GET /proposals/{proposal_id}/brief`
- `GET /proposals/{proposal_id}/ledger`
- `GET /capture-batches/{batch_key}`
## Testing
```bash
bash test.sh
```
That runs `pytest` and `python3 -m build`.
## Notes
- Resident identity is kept pseudonymous through `resident_key`.
- The current codebase is backend-first and designed for mobile, SMS, and field-capture integrations.