CivicGrid is an end-to-end pipeline for turning resident reports into actionable work orders. It collects issues via a voice-driven intake, transcribes calls, enriches them with a Claude-powered analyzer (including optional photo context), and surfaces structured issues to the web dashboard so they can be routed to contractors or internal crews.
civicgrid/– Vite/React frontend for reporting and dashboard views.ML-backend/voice-agent-backend/– Flask + Deepgram voice agent for call handling and transcription.ML-backend/Claude-Anaylzer/– Claude-powered analyzer that turns transcripts (and optional photos) into structured issues.- Root helper scripts (
start-all-services.sh,stop-all-services.sh) orchestrate the stack.
- Node.js 18+ (Node 20 tested).
- Python 3.10+ with
python3-venvand build tools. - PortAudio dev headers for PyAudio (
sudo apt-get install -y portaudio19-dev libasound2-dev python3-dev).
- Frontend
cd civicgrid
npm install
- Voice agent + analyzer (shared venv)
cd ML-backend/voice-agent-backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
- Environment files
ML-backend/voice-agent-backend/.env– setDEEPGRAM_API_KEY.ML-backend/Claude-Anaylzer/.env– setANTHROPIC_API_KEYand optionalCLAUDE_MODEL.
From repo root:
./start-all-services.sh # frontend (5173), backend (3000), analyzer loop
# ... work ...
./stop-all-services.sh
start-all-services.sh– launch backend, analyzer loop, and frontend.stop-all-services.sh– stop all running services.
- PyAudio build errors: install PortAudio dev packages (see Prerequisites).
- Node syntax errors on Vite start: ensure Node 18+.
- ALSA warnings on headless hosts can be ignored if audio hardware is unavailable.
- If analyzer cannot reach Claude: confirm
ANTHROPIC_API_KEYand outbound network access.