ImpactProof is a local-first monorepo for turning raw operational evidence into structured, reviewable impact records. It includes a Vue 3 frontend for ingestion/report workflows, a FastAPI backend for APIs and persistence, and a Celery worker for background extraction/scoring jobs (LLM integrations intentionally stubbed with TODO placeholders).
- Copy env file:
cp .env.example .env(PowerShell:Copy-Item .env.example .env) - Start services:
docker compose -f infra/docker-compose.yml up --build - Open:
- Backend API:
http://localhost:8000 - API docs:
http://localhost:8000/docs - Frontend (if enabled in compose with
--profile ui):http://localhost:5173 - Postgres (host):
localhost:5433(container5432)
- Backend API:
- Start core stack (postgres, redis, backend, worker):
docker compose -f infra/docker-compose.yml up --build - Start with frontend too:
docker compose -f infra/docker-compose.yml --profile ui up --build - Stop stack:
docker compose -f infra/docker-compose.yml down
- Ensure Postgres and Redis are running (via Docker compose or local installs).
- From
backend/:python -m venv .venv./.venv/Scripts/Activate.ps1(Windows PowerShell)pip install -e .alembic upgrade headuvicorn app.main:app --reload --host 0.0.0.0 --port 8000
- From
frontend/:npm installnpm run dev - Frontend uses
VITE_API_BASE_URL(defaults tohttp://localhost:8000).
GET /health- service health checkPOST /ingest/text- store a source document (source_type,title,content, optionaloccurred_at)POST /work-items/extract- create placeholder work items from stored source docsGET /work-items- list work items
- LLM extraction/scoring is not implemented yet. Placeholder logic and TODOs are included in backend services and worker tasks.
- Alembic migrations are included for initial database setup.
- Ingest a source doc:
curl -X POST http://localhost:8000/ingest/text \ -H "Content-Type: application/json" \ -d '{ "source_type":"ticket", "title":"Payment timeout follow-up", "content":"Connection pool tuning reduced timeout frequency.", "occurred_at":"2026-05-01T08:00:00Z" }'
- Extract work items:
curl -X POST http://localhost:8000/work-items/extract
- Read work items:
curl http://localhost:8000/work-items
- Re-run extract with same source docs:
- Expected:
created_countbecomes0 - Meaning: duplicate extraction for the same
source_doc_idis blocked.
- Expected:
From backend/:
python -m venv .venv
./.venv/Scripts/Activate.ps1 # Windows PowerShell
pip install -e .[dev]
pytest