Inspiration

Real change in a community starts with the people who live there. GroundCheck is built to make that count, turning what residents see and report into a clear picture that decision makers can actually act on.

Cities like Atlanta have dedicated budgets, departments, and staff for infrastructure. The money exists. The community knowledge exists. What has never been built is the system to take everything residents know at ground level and make it legible to the people deciding where that budget goes. That gap is where problems get ignored for years.

The tools people have today were not designed for this. Calling 311 means navigating a phone tree for three minutes to reach the right department, if anyone picks up at all. Those systems handle individual tickets. Nobody is aggregating them, ranking them, or connecting them to a capital decision.

GroundCheck is that missing layer. Residents report what they see in under 60 seconds. The platform compiles and aggregates those reports, applies equity weighting, and surfaces a ranked list of where the city needs to act most. Decision makers get something clear and defensible. Residents get proof their voice made it to the room. That is where the name comes from: grounding city decisions in what is actually happening at street level.


What it does

GroundCheck has three surfaces that work together.

Resident report flow. Any can resident opens the app, drops a pin on the map, selects what they are reporting, picks a severity level, and submits in under 30 seconds. No account required. Each category routes to the responsible Atlanta department: flooding goes to the Department of Watershed Management, road defects and traffic signals go to ATLDOT, and streetlight outages go to Public Works. Photos are validated by AI to confirm they actually show the reported problem. Residents who leave contact info get an immediate confirmation and a follow-up showing exactly where their report landed in the city queue, what their neighborhood's equity tier is, and what the AI-generated brief for their area says.

Live public map. Reports appear on a map in real time, color coded by category and sized by severity. Nearby reports cluster into hotspots automatically. A community leaderboard shows which neighborhoods and schools are contributing the most reports, making the act of reporting feel collective rather than individual.

Planner dashboard. The top 10 ranked infrastructure sites, scored across four weighted factors: report volume, observed severity, equity risk — the heaviest input in the formula — and corroboration, meaning whether the same spot keeps getting reported over multiple days rather than spiking once. A climate-vulnerability overlay can be toggled on the dashboard map so a planner can see the equity picture behind the ranking. Each site has an AI-generated brief summarizing what the community is reporting and why it matters. Planners can update the status of each site as it moves from new to reviewed to queued. The whole list exports as a presentation-ready PDF or a data CSV for budget meetings. Every report can be drilled into individually, including the photo validation result and the AI description of what it shows.


How we built it

Backend: FastAPI with a SQLite database. When a report comes in, Claude Haiku 4.5 reads the photo against the reported category and returns a match verdict, a confidence score, a severity read, and a one-sentence description of what it sees. Each report is then geocoded two ways: a nearest-centroid match against 51 curated Atlanta neighborhoods stamps a neighborhood name so the leaderboard never drops a report, and Shapely tests the point against the city's equity-scored neighborhood polygons to assign a climate-vulnerability tier, with a nearest-polygon fallback so no report goes untiered. Two emails fire in the background after submission: an immediate receipt via Resend and a delayed follow-up that pulls live cluster data to show the resident their real impact. A recompute endpoint runs clustering with scikit-learn (DBSCAN), applies the priority formula below, and generates AI briefs with the same Claude Haiku model. Every category-specific detail — department routing, cost model, intervention type — lives in a config file, so adding a new hazard type for a new city is a single entry.

Each hotspot's rank is a single weighted score:

$$P \;=\; 0.25\,C \;+\; 0.25\,S \;+\; 0.35\,E \;+\; 0.15\,R$$

where $C$ is normalized report volume, $S$ is observed severity, $E$ is the neighborhood's equity (ECJRI) score, and $R$ is corroboration. Equity carries the heaviest weight at $0.35$, so a high-vulnerability block with fewer reports can outrank a louder low-vulnerability one.

Frontend: React, Vite, TypeScript, Tailwind CSS, and Mapbox GL JS for the map. The report flow is a mobile-first, full-screen flow. The planner dashboard is a filterable grid with an embedded AI chat assistant for ad-hoc queries. The community leaderboard supports week, month, and all-time filters.

Data: 15 Atlanta neighborhoods matched to climate vulnerability tiers from the City of Atlanta's Climate Resilient ATL plan, spanning the full range from Critical (Vine City, English Avenue, Mechanicsville) to Low (Buckhead), and including Proctor Creek, South Atlanta, Campbellton Road, and others. Seed data covers more than 2,300 reports spread across 90 days and all four hazard categories.

Spam prevention: Device fingerprinting, IP rate limiting, and a per-category geographic deduplication guard so a single location cannot flood the rankings.


Challenges we ran into

Scaling crowdsourced data to something a city planner can actually use meant solving problems most civic tech projects never reach.

The hardest was geographic resolution at scale. Early on, 88% of reports couldn't be assigned to a real neighborhood — which made the leaderboard, social proof, and cluster labeling meaningless. We rebuilt the assignment system around 51 named Atlanta neighborhoods with automatic nearest-match logic and re-stamped the entire report history. That fix is also the blueprint for onboarding any new city: swap the neighborhood list, keep everything else. The clustering, ranking formula, AI brief generation, and capital queue are all city-agnostic — only the data layer changes.

The second was making the feedback loop feel real at scale. Generic confirmation emails don't retain reporters. Showing someone their cluster's actual rank in the city queue, their neighborhood's equity tier, and the AI brief their reports contributed to — that specificity is what turns a one-time submission into a recurring contributor. At scale, that retention is what keeps the data quality high enough to be defensible.


Accomplishments that we're proud of

The closed loop works end to end on a live demo. A resident submits a report and within a minute gets a follow-up showing their cluster's rank in Atlanta's infrastructure queue, the equity tier of their neighborhood, and the exact brief a planner would read. That is the whole story compressed into one minute: ground-level report in, high-level decision visible, resident confirmed. We have never seen another tool close that loop.

The equity weighting is real, not decorative. It is the largest single factor in the ranking formula. A high-vulnerability neighborhood with fewer reports can outrank a low-vulnerability neighborhood with more. The leaderboard makes that visible so communities can see the system is working for them, not just reflecting whoever is loudest.

The multi-category support ships as a working feature, not a roadmap item. Flooding, potholes, streetlights, and traffic signals are all live today, each routing to the correct Atlanta department with its own intervention type and cost model.


What we learned

The infrastructure crisis hiding in plain sight is bigger than flooding. Once we started building, it became clear that the same broken data problem of dollars following political pressure instead of ground truth, applies to every pothole that blows out a tire, every broken streetlight that makes a block unsafe at night, every failed traffic signal at a school crossing. Flooding was the entry point. The real opportunity is every dollar a city spends on infrastructure it can't currently justify with data.

Reporting tools are everywhere. Capital planning tools don't exist. Every civic tech solution we found stops at the map. None of them answer the question the budget decision-maker actually has: where should the money go, and how do I defend that to Council? That gap — between data collection and capital decision — is where GroundCheck lives, and it was completely unoccupied.

Equity has to be structural on both sides. Weighting the output toward high-vulnerability neighborhoods is not enough if the input data is already skewed toward neighborhoods that know how to use 311. The school leaderboard fixes the input side — students who walk flooded streets and dodge potholes every morning become the most accurate sensors in exactly the communities most likely to be overlooked. Both sides have to work or the equity claim doesn't hold.


What's next for GroundCheck

Scale it. ~3,000 US cities are making infrastructure decisions the same broken way Atlanta was — gut feel, political pressure, and incomplete data. The federal Infrastructure Act put $55 billion behind fixing that. GroundCheck is the data layer those decisions run on — city by city, dollar by dollar, until the infrastructure that serves the most vulnerable communities stops being the last to get funded.

Expand to every infrastructure dollar. Flooding is the entry point — but the broken capital allocation problem is the same for every pothole, streetlight, and failed signal in the city. One platform, every category, one ranked queue the planner brings to every budget meeting.

Then go predictive. Crowdsourced reports tell you what's broken now. Layered against weather data, pavement records, and incident history, the system tells you what's breaking next — before a resident has to report it, before a Council member has to defend it.

The cities that get this right will spend less, serve more, and finally have the data to prove it.

Built With

Share this project:

Updates