Public works accountability · Bengaluru pilot
Report what you see. CivicProof finds the public works record for that spot, checks every fact against the official document, and drafts the complaint, or the RTI application for whatever the records leave out.
- No account needed
- Every fact cites its page
- Nothing is sent without you
npm run seed to load the demo reports.The problem
Reporting a pothole is easy. Proving who owes the repair is not.
The facts that make a complaint hard to ignore are public, but scattered: a tender on the state procurement portal, an award record, a completion date in a scheme database, a five-year maintenance clause on page 56 of a bid document.
Most complaint channels capture the photo and stop there. Procurement portals start from the contract and assume you already know which one you are looking for. CivicProof starts where you are standing, and treats every record the way a careful journalist would: quoted, cited to the page, and marked as unconfirmed when it can't be checked.
- 26
- Official documents
- 853
- Pages searchable
- 7677
- Facts checked at ingest
How it works
From a pin to a paper trail.
Report
A photo, a pin and a date. The photo's GPS and capture time are read in your browser, and the file is fingerprinted with SHA-256.
Locate
The location is matched against the alignments of public works projects, using official GIS where it exists and labelled approximations where it doesn't.
Verify
An agent reads the tender, award and completion records. Each fact must quote the page it came from, and a verifier rejects any quote it cannot find.
Act
You get a complaint that cites its sources, an RTI application for whatever is missing, and a timeline that tracks when each reply is due.
Evidence over confidence
Every claim carries its receipt.
The language model proposes; a deterministic verifier decides. A contractor's name only counts as verified when the words containing it are found, verbatim, on the page the model cited. Nothing unverified reaches the complaint as fact.
- Verified
The quoted words, including the value, were found on the cited page.
- Partially verified
The source exists, but the value could not be matched word for word.
- Not verified
No citation survived the check. Shown, never relied on.
- Sources disagree
Two records disagree. Both are shown and neither is chosen.
What the agent may do
It investigates. It never files, accuses or invents.
- Reads the report and the official documents, one page at a time.
- Links the report to a project only if the location search returned it.
- Records facts with quotations, and flags what it could not establish.
- Cannot mark a case submitted or resolved. Only the reporter can.
// Nobody except the reporter can declare a case
// submitted, answered, resolved or closed.
forbid (principal, action == Action::"ChangeStatus", resource)
when {
["submitted", "awaiting_response",
"resolved", "closed"].contains(context.to_status)
}
unless { principal is Reporter && context.is_owner };Written in Cedar, AWS's open-source policy language, and evaluated by Strands Agents before each of the agent's tool calls.
Built on AWS
Small, auditable, serverless.
Amazon Bedrock
Amazon Nova takes over an investigation mid-run when Gemini hits its quota or is overloaded, keeping the work done so far. Or runs it end to end.
Strands Agents
AWS's open-source agent SDK runs the tool loop and streams each step to the case page.
Cedar
Policies authorize every tool call and every change to a case, and deny anything unlisted.
Amazon Textract
Reads scanned RTI replies and letters so the investigator can quote them.
AWS Lambda
The app runs behind a Function URL in response-streaming mode, via the Lambda Web Adapter.
DynamoDB + S3
Cases in one table with optimistic locking; photos, private documents and PDFs in a private bucket.
CloudWatch
Every run emits metrics: share of the model's claims the verifier accepted, policy denials, model waits, duration. A dashboard and an alarm.
SAM + Secrets Manager
One template, least-privilege IAM: one table, one bucket, one secret (the Gemini key), Nova models, Textract.
This deployment: Google Gemini (gemini-3-flash-preview) · local storage · local files
What is real here
Real records. Labelled demos.
The corpus is 26 public documents covering 790 public-works projects in and around Bengaluru, each stored with its source link and SHA-256; the investigator can also fetch records live from the government's PMGSY portal. The 0 demo reports are illustrative and marked as such; nothing has been filed with any authority.
- SLR: Statewise List of Works — Karnataka, Bangalore U, PMGSY-III4 p.
- Works Wise Grading Abstract — NQM/SQM inspections, Bangalore U, Jan 2021 to Sep 20262 p.
- Pradhan Mantri Gram Sadak Yojana — Programme Guidelines48 p.
- Tender document — White Topping of Selected Roads under GoK Grants, Package-2 (BBMP, Project Central-8)65 p.
- KPPP selected-bid (award) record — tender BBMP/2023-24/RD/WORK_INDENT17331 p.
- KPPP tender record (full view) — BBMP/2023-24/RD/WORK_INDENT173322 p.
- Tender SURE Phase A roads — project status presentation (Feb 2021)65 p.
Publishers: NRIDA · Ministry of Rural Development · Bruhat Bengaluru Mahanagara Palike · Karnataka Public Procurement Portal · Bengaluru Smart City Limited · Comptroller and Auditor General of India · Rajya Sabha