Service requests since 2015 and crime incidents since 2017, joined to wards and asked through a chat interface that hands over the SQL, row count, and source citations on every answer. A curated dashboard layered on top; more coming.
Private beta — try the chat →This is an independent, resident-built data platform for exploring Somerville's public Open Data. It is not affiliated with the City of Somerville — it draws on the city's public data feeds (311 service requests, crime incidents, permits, traffic citations, the biennial Happiness Survey, ward boundaries, and the at-a-glance city indicators) and joins them so they can be queried in plain English. Every answer carries its own receipts: SQL, row count, source citations, and any relevant caveats.
Start with the chat at /chat. Ask a plain-language question; the Answer Agent picks the right semantic-layer view, writes the SQL, runs it on the warehouse, and replies with the answer plus the executed SQL, the row count, citations to the source tables, and any relevant entries from the limitations registry.
If a question recurs — or if you want a visual answer — check /dashboards. Each dashboard is a versioned apps/*.app.yml file in the repo carrying the same trust contract as the chat agent. New dashboards are drafted with Builder Agent and reviewed before they ship.
For architecture and ground truth: /trust shows the most recent pipeline-run test results, /metrics publishes every semantic-layer measure with its expanded SQL, /profile surfaces per-column shape data, /erd renders the warehouse + semantic-layer diagrams, and /docs is the dbt-generated data dictionary.
Every chat reply and every dashboard panel ships with four receipts: the SQL that produced the number, the row count returned, citations to the source tables and Airlayer views, and any limitations from the registry that apply to what was asked. The contract holds across surfaces — chat, dashboards, the homepage cards above, all of them. If a surface drops a receipt, that's the bug.
dim_location (neighborhoods, intersections, parcels) is MVP 3 work. Until then, "by neighborhood" questions land "by ward" instead.
crime-sensitive-incidents-no-month on /trust.
Somerville's 311 and crime SODA feeds are ingested via dlt to DuckDB, transformed through bronze and gold dbt layers, and surfaced through the Airlayer semantic layer. The chat interface is an Oxygen Answer Agent backed by Claude Opus 4.7; dashboards are Oxygen Data Apps drafted by Builder Agent.
The platform operates under a trust contract: every chat reply and every dashboard panel includes the executed SQL, the row count returned, citations to source tables and Airlayer views, and surfaced entries from the limitations registry when the query touches a flagged area. Methodology is always inspectable.
MVP 2 adds visual data products on top of the MVP 1 substrate. MVP 3 will add full governance (Verified Queries, PII redaction, star schema); MVP 4 adds sharing surfaces (Slack, MCP, public access).