A Viaduct-powered GraphQL API that federates 12 civic data sources into a unified graph — serving both spatial UIs and AI clients from a single endpoint.
All data seeded offline — no external API calls at query time. Every record time-windowed, geocoded, and enum-normalized.
The X-UrbanMesh-Profile header controls which
fields resolve. Same schema, eight perspectives.
Zoning compliance, permit history, land-use trends
Permit timelines, home values, investment metrics
Stop frequency, coverage gaps, commute patterns
Nearby trees, transit options, walkability, open 311 cases
Zoning verification, foot traffic, disruption risk
Tree canopy, green spaces, commute modes, equity
Time-series trends, anomalies, cross-correlations
ADA stops, accessible routes, sidewalk issues
A browser-based map UI and an AI client via MCP consume the same GraphQL endpoint — differentiated only by a profile header.
A narrative arc across four real San Francisco locations, showing what a unified data graph makes possible.
A single query resolves a parcel with permits, zoning, transit stops, 311 cases, and census data — all from one endpoint.
“Five data sources. One query. Zero client-side joins.”
Switch the profile header and watch fields appear and disappear. The urban planner sees zoning compliance; the resident sees walkability.
“Same query, three profiles, completely different results.”
The accessibility advocate sees ADA boarding and wheelchair access. The transit planner sees headway stats and coverage gaps.
“Same Muni stop, two planners, two different answers.”
The environmental advocate reveals tree canopy coverage, green space access, and bike commute patterns — an entirely different San Francisco.
“The data you never knew was there.”
The small business owner queries a single block and sees active construction permits, 311 complaints, and foot traffic proxy — a disruption risk assessment.
“Every permit and complaint that could affect your storefront.”