All case studies
PersonalGold · Track ADatabricks Genie App Challenge · 2026

A civic-data app that shows its work

A Databricks Genie app over governed City of Chicago open data, built so a user can inspect the evidence behind every answer. It won Gold in the Databricks Genie-Powered App Challenge.

Author: data pipeline, Genie space, app and evaluation

The problem

City open-data portals hold valuable records, but access is not usability. A resident asking how 311 demand changed in their neighborhood should not first have to find the right Socrata dataset, decode its columns, learn Chicago's Community Area identifiers, pick a complete reporting period and write a defensible aggregation. Natural language removes that friction, but it adds a new failure mode: a fluent answer can quietly hide the wrong metric, an incomplete month, stale data or a query built at the wrong grain. In a civic context that is uncomfortable, so the product has to show its work.

What I did

Architecture

ChicagoPulse: from City open data to an inspectable Genie answerSOURCESPIPELINEGOVERNEDAPPSQL WarehouseGenie computeCity open data4 Socrata datasetsMedallion pipelineBronze · Silver · GoldMetric ViewsUnity CatalogGenie spacegoverned NLQFastAPIallowlist + authReact appAsk · Map · HealthAppwrite gatewaypublic snapshotpublic, read-onlygoverned measures, not raw columnsbrowser sends no arbitrary SQL · resources bound server-side
Four City of Chicago datasets flow through a medallion pipeline into Unity Catalog Metric Views, so Genie reasons over governed measures rather than raw columns. A FastAPI boundary handles auth and allowlisted, parameterised templates, so the browser never submits arbitrary SQL. A public Appwrite gateway serves a read-only snapshot without exposing Databricks credentials.

What went wrong first

A fluent answer is not a correct one

A polished demo question usually only proves the demo question works. The 30-question benchmark spans basic metrics, neighborhood comparisons, time trends, cross-dataset reasoning and freshness, and is run before and after any Genie change. Feedback is evidence to investigate, not ground truth: proven corrections become verified SQL examples or instructions, not an automatic retrain.

"Latest" is ambiguous, and geography is not free

When a source updates mid-month, "latest" silently compares a partial month against a full one. I standardised on the latest completed month and made the reporting period visible. City records also do not all arrive with usable Community Area fields, so the pipeline adds official boundaries and spatial enrichment so every neighborhood shares one geographic vocabulary.

Genie is asynchronous, and Free Edition is strict

A Genie response can be pending, complete, empty, failed, cancelled or expired. The FastAPI layer normalises those into explicit application states so the React app has a stable contract. Running on Apps Free Edition also forced deterministic mock providers, local lifecycle testing and a production fail-closed rule that refuses to start in mock mode.

Results

1st in Track A
Gold1st in Track AReal World Problem Solving
contest score
35.7contest scoretop Track A entry
Community Areas covered
77Community Areas covered
benchmark questions with verified SQL
30benchmark questions with verified SQL

The medal is the visible outcome; the reusable lesson is that a Genie app becomes credible when governance, evaluation, provenance and operational truth are designed in from the start. Genie handles open-ended questions over governed semantics, while fixed product journeys use constrained APIs, and a user can always inspect why an answer should be trusted.

Stack

Databricks AppsDatabricks GenieUnity CatalogMetric ViewsDelta LakePySparkFastAPIReactTypeScriptAppwrite
Live appRepositoryWrite-upWinners announcement