Inspiration

Walking through Madison you notice them everywhere, vacant storefronts on State Street, empty lots on Park Street, dark windows on Willy Street. These represent failed businesses and neighborhoods that never got what they needed. We kept asking: why does nobody use data to figure out what belongs there before someone spends their life savings guessing wrong? That question became UrbanPlot.

What it does

UrbanPlot predicts what business has the highest probability of success at any vacant lot in Madison. The result is an interactive map where every pin shows a viability score, a business category breakdown, and a plain-English explanation of why.

How we built it

Three data layers feed one probability engine. Community Sentiment scraped 7,466 Reddit posts and Isthmus articles, ran them through RoBERTa for sentiment scoring and BART for zero-shot business classification across 13 categories. No labeled training data required. Location Intelligence queried OpenStreetMap for every commercial zone in Madison and scored each lot on competitor saturation, foot traffic density, and complementary business proximity within 400 meters. Search Demand pulled Google Trends data for 28 Madison-specific search terms and converted rising versus falling signals into a demand multiplier. Final probability: 40% sentiment + 40% location + 20% demand, calibrated to a realistic 20–92% range. 676 predictions served instantly through JavaScript.

Challenges we ran into

Reddit's API blocked us completely on the university network. We pivoted to Arctic Shift's Pushshift archive, which gave us cleaner historical data anyway. Running two transformer models on the CPU was going to take 45 minutes per run. We moved inference to a teammate's NVIDIA GPU and cut it to under 5 minutes. We ran into multiple merge conflicts while getting an accurate probability score.

Accomplishments that we're proud of

UrbanPlot actually works not as a mockup but as a fully functional pipeline serving real predictions through a real API to a real map. In 24 hours. Every score is fully explainable, showing its three component inputs. Black box predictions have no place in urban planning.

What we learned

Zero-shot classification actually works in production. No labeled training data, no fine-tuning. BART classified 7,466 entries into 13 business categories out of the box and held up under manual spot-checking. We learned that Reddit has cleaner data than you think. Once you filter for demand signal keywords, the noise drops dramatically, and what's left is genuinely useful sentiment. We learned that haversine distance matching is the right solution for joining neighborhood-level NLP output to exact lot coordinates. Simple, fast, no external dependencies. We learned GPU inference isn't optional for transformer models at scale. 45 minutes on CPU versus 5 minutes on GPU isn't a nice-to-have difference during a hackathon; it's the difference between iterating and waiting.

What's next for UrbanPlot

• SafeGraph real foot traffic integration • Historical Madison business survival rates • Commercial landlord analytics dashboard • Expansion to all of Dane County

Share this project:

Updates