Skip to content
CivicProof

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
Run 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.

The full method →
01

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.

02

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.

03

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.

04

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.

Official recordReported by citizenAI suggestionComputed
  • 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.
policies/case-actions.cedarenforced on every change
// 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.

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