All Projects

File Intelligence Platform

Drupal-Aware Site Intelligence for multco.us

Python 3.11FastAPIReact 19ViteTailwind 4Vertex AIClaude Sonnet 4.5Gemini 2.5 FlashPlaywrightaxe-corePandasGoogle Cloud RunCloud BuildCloud Storage
57K
Files Classified
10K
Pages Crawled
92%
Xingwu Agreement

Platform Screenshots

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

Director-level dashboard: 56.5K files classified, 9.9K pages crawled, six-bucket File_Status classification, with per-department health gauges

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 30 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

Custom site-intelligence platform giving Multnomah County a single coherent picture of every file and every page on multco.us — measured nightly, scored honestly, routed to the person who can fix it. Six-bucket File_Status classification (CONNECTED · EMBEDDED · UNPUBLISHED_ONLY · NOISE_ONLY · ORPHAN_MEDIA · ORPHAN_FILE) is deterministic, not ML-based. A section-overview navigation (Home · Files · Pages · Services · Workbench · Departments) sits over a 10-module audit pipeline. An Analytics page with 8 tabs (Overview · Duplicates · Cross-Tab · Mismatches · Distributions · Languages · Images · Hotspots · Diagnostics) consolidates deep-insight views that used to live in three separate sections. A Validation page cross-checks the platform against Xingwu's independent PHP audit (92.3% agreement on 33,738 UUIDs) and the monthly Siteimprove snapshot — proving accuracy against external sources. Editor attribution means every file has an uploader and every page has an editor; "Mine" toggles on every report card let staff focus immediately. Per-department 30-day Health-score sparklines show trend direction at a glance. Vertex AI runs Claude Sonnet 4.5 for the Ask Agent + Citizen Journeys, and Gemini 2.5 Flash for the Service Scout classifier + the daily executive narrative. Min-instances=1 on Cloud Run + a RouteErrorBoundary in the React shell — no more cold-start lag, no whole-app crashes on a single page error.

Impact & Results

56,500
Files Classified
every nightly run, across 30 departments
9,900
Pages Crawled
with WCAG 2.1 AA axe-core scoring
92.3%
Xingwu Agreement
validated against independent PHP audit (33,738 UUIDs)
10
Audit Modules
a11y, SEO, links, performance, PII, spelling, more
6
File Buckets
deterministic classification (no ML guesswork)
30
Departments Scored
per-department 30-day health sparklines

Key Features

Six-bucket File_Status classification (CONNECTED · EMBEDDED · UNPUBLISHED_ONLY · NOISE_ONLY · ORPHAN_MEDIA · ORPHAN_FILE) — deterministic, not ML
Validation against Xingwu's independent PHP audit (92.3% agreement on 33,738 UUIDs) + monthly Siteimprove reconciliation
Section-overview UI (Home · Files · Pages · Services · Workbench · Departments) with collapsible sidebar and per-section overview pages
Analytics page with 8 tabs — merged Deep Insights + Visualizations into one navigation surface in June 2026
Editor attribution: every file has an Uploader, every page has an Editor — "Mine" toggles on every report card
Per-department 30-day Health-score sparklines with trend direction at a glance
Dictionary editor for misspellings allowlist (181 proper-noun overrides shipped → 35,413 misspellings, down from 45,856)
Vertex AI: Claude Sonnet 4.5 (Ask Agent, Citizen Journeys) + Gemini 2.5 Flash (Service Scout + daily executive narrative)
Cloud Run min-instances=1 + RouteErrorBoundary — no cold-start lag, no whole-app crashes on a single page error