All Projects

Civic Sentinel

Drupal-Aware Site Intelligence Platform

PythonFastAPIReact 19Vertex AIClaude Sonnet 4.5Gemini 2.5 FlashPlaywrightaxe-corePandasGoogle Cloud RunDrupal 10
59K+
Files Tracked
18K+
Pages Audited
60
Departments

Platform Screenshots

multnomah-county-accessibility.app
Executive Summary — Digital Content Health

Director-level dashboard: 59,073 files tracked, 18,214 pages audited, 40 critical accessibility issues — total content footprint and live site-health gauges across File and Site Intelligence

multnomah-county-accessibility.app
Site Health — Four-Gauge View

Overall, Accessibility, Content Quality, and Link Health gauges with 14-day trends, audit-coverage transparency, and severity-banded issue counts across 16 departments

multnomah-county-accessibility.app
Accessibility Report — Rule-by-Rule

WCAG 2.1 AA compliance breakdown: most common problems with severity, affected page counts, and ranked worst-scoring pages — drill-down ready for editorial action

multnomah-county-accessibility.app
File Detail — Drupal-Aware Inventory

Drupal-native file inventory: every asset linked back to its database node, uploader, department, and live page references — surfaces orphans, duplicates, and ownership gaps

Overview

An open-codebase replacement for a six-figure SaaS contract — built specifically for Multnomah County's Drupal 10 site (multco.gov) with 18,000+ pages, 57,000+ files, 60 departments, and 145+ uploaders. Off-the-shelf alternatives charge per page (which balloons at this scale), give scores without explanations, and don't understand Drupal. Civic Sentinel does both: it crawls the live site nightly, audits accessibility against WCAG 2.1 AA via axe-core, runs Lighthouse for performance, scans for broken links, PII patterns, and spelling, and classifies every page using Gemini for service intent. It then layers AI on top — an Ask Agent for plain-English investigation, AI-generated remediation proposals in an editor approval queue, and Citizen Journey simulations that walk real workflows like a resident would. Three deployable units share one repo: a nightly Cloud Build pipeline, a docs-explorer dashboard (4 GB), and a html-hub companion service. All running on Google Cloud Run with @multco.us OAuth, JWT auth, and shared security middleware. Surfaced 25,867 true orphan files (45% of inventory), 4,499 live-only files invisible to the database, and 1,158 duplicate clusters — findings nobody at the County had ever seen before.

Impact & Results

25,867
True Orphans Found
45% of inventory — invisible to users, costing storage
4,499
Live-Only Files
Found via crawl but missing from Drupal DB
1,158
Duplicate Clusters
2,581 files — roughly 5% of storage
18,214
Pages Classified
AI service-intent classification (APPLY, TRANSACT, INFORM…)
Six-figure
SaaS Contract Replaced
Open codebase running on existing GCP infrastructure
Nightly
Audit Cadence
Full re-crawl + 10 audit modules + AI classification

Key Features

10-module nightly pipeline: crawl, accessibility (axe-core), SEO, link health, Lighthouse, PII, spelling, unsafe domains, page duplicates, AI service classification
Drupal-native inventory — uploaders, departments, node references, orphan detection, DB-vs-live mismatches
Ask Agent (Claude Sonnet 4.5 on Vertex AI) — chat over the full inventory with read-only DataFrame tools and 8-iteration tool-calling loops
Citizen Journey simulator — AI personas walk live workflows, capture dead-ends, and produce structured reports
Service Scout (Gemini 2.5 Flash) — classifies every page into APPLY / TRANSACT / INFORM / CONTACT / FIND service patterns
AI-generated remediation proposals in an editorial approval queue with PENDING → APPROVED/REJECTED → APPLIED lifecycle
Custom policy engine — editors write rules in JSON, see plain English, edit/add/delete (e.g. "no PDFs in /forms/")
Square-root penalty curve scoring with audit-coverage transparency — replaces the inflated "93.3% scored 100" of v1
In-memory pandas data store — 57K rows × 80 cols, 200 MB RAM, no DB in the read path
Two access tiers via Google OAuth domain check (@multco.us) and JWT — Standard (any employee) and Advanced (named users)

Next Project

A11yReady