Inspiration
Public-records teams have to move quickly while protecting people’s privacy. A missed record can delay transparency; a missed redaction can expose a resident, witness, employee, or vendor. I wanted to replace the fragile chain of inboxes, shared drives, PDF tools, spreadsheets, and approval checklists with one accountable workflow.
What it does
CivicRight is a governed public-records release desk. It scopes a request, gathers only permitted records, proposes protections, performs irreversible PDF redactions, independently checks the prepared files, and requires an authenticated records officer to approve the exact package before release.
A completed release is packaged as a verified ZIP with prepared records, a manifest, verification report, response letter, and release receipt.
How we built it
I built CivicRight with Gemini 3.5 Flash through Vertex AI and Google ADK. The application runs on Cloud Run, while Cloud Tasks supports durable background work and Firestore stores workflow checkpoints and idempotent job claims.
Google Cloud Vision OCR reads scanned PDFs. Deterministic PDF tooling removes redacted objects, metadata, and attachments; a separate verifier re-extracts the saved bytes to catch residual personal information or hidden content. Cloud KMS signs the approved manifest, and private Cloud Storage holds artifacts. I also used Model Armor, OpenTelemetry-compatible Cloud Trace, FastAPI, Python, React, and TypeScript.
Challenges we ran into
The hardest challenge was ensuring the system was genuinely safe instead of merely looking safe. AI can help interpret a request, but it should not decide what an agency may disclose.
I had to separate Gemini’s proposals from deterministic authority, prevent document content from altering instructions, handle both text and scanned PDFs, make redactions irreversible, verify the transformed output independently, preserve exact artifact provenance, and ensure failed privacy, integrity, storage, or signing checks leave the request unreleased.
Accomplishments that we're proud of
I am proud that CivicRight treats release as a high-consequence workflow rather than a chatbot response.
- Gemini may propose, but deterministic controls and an authenticated officer authorize.
- Redactions remove underlying PDF objects instead of drawing cosmetic overlays.
- A separate verifier checks the actual saved document bytes.
- Officer approval is bound to the exact canonical manifest hash.
- Cloud KMS signs the approved release package.
- The workflow has durable checkpoints, bounded correction attempts, and audit evidence.
- The guided demo uses synthetic records, proving the safeguards without exposing real people’s information.
What we learned
I learned that trustworthy AI systems need explicit limits and verifiable evidence.
- A redaction plan is not enough; the transformed file must be independently inspected.
- Human approval must be tied to immutable content, not only a request ID or filename.
- Long-running workflows need durable state, retries, and idempotency.
- Source documents must remain untrusted, even when a safety service reports a clean result.
- Synthetic data can demonstrate serious public-sector safeguards without risking real resident or agency information.
What's next for CivicRight — Public Records Release Desk
Next, I want to expand jurisdiction-specific policy support, strengthen production identity and agency integrations, improve accessibility, and run broader evaluations with approved public-records teams. I also plan to extend the evidence and reporting layer so agencies can measure turnaround time, redaction outcomes, overdue requests, and release quality without exposing protected source data.
CivicRight is a hackathon demonstration built with synthetic records and policy. It is not legal advice or a replacement for an agency’s approved records policy.
Built With
- cloudkms
- cloudrun
- cloudstorage
- cloudtasks
- cloudtrace
- cloudvision
- docker
- fastapi
- firestore
- gemini
- googleadk
- googledriveapi
- modelarmor
- opentelemetry
- pydantic
- pymupdf
- pytest
- python
- react
- typescript
- vertexai
- vite
Log in or sign up for Devpost to join the conversation.