Inspiration
- Rising cost pressures don’t hit cities evenly; neighborhood-level patterns are what matter for policy and investment.
- We wanted a transparent, data-driven way to compare Jacksonville to its peers and spotlight tracts at risk of displacement.
- Our goal: turn fragmented housing, income, transportation, and walkability data into an actionable, explainable index.
What it does
- Computes city- and tract-level affordability risk scores using PCA components and/or configurable weights.
- Lets users filter tracts by thresholds (%, counts, or $) and instantly visualize where conditions exceed targets.
- Surfaces tract-specific top contributing factors so users can see why a score is high.
- Benchmarks Jacksonville against peer cities and highlights neighborhoods for targeted support.
How we built it
- Data: Housing affordability, income distributions, SNAP/public assistance, transportation access, walkability; normalized and aligned at tract level.
- Modeling: PCA to learn dominant affordability dimensions; optional manual weighting for policy scenarios.
- Frontend: Next.js + React, Leaflet map, shadcn/ui for the ui components; custom percent/dollar filter logic with auto-denominators, chatbot using local ollama model
- Backend: Endpoints to serve city/tract stats, PCA scores, components, scaler parameters, and feature order; cached for fast map interaction.
Challenges we ran into
- Harmonizing feature names across sources (percent vs. count vs. dollar) and ensuring consistent denominators.
- Making filters both powerful and intuitive (multi-criteria AND/OR logic, between-ranges, auto-denominator fallbacks).
- Ensuring tract-level PCA explanations were stable and meaningful (robust scaling, feature matching, sign consistency).
Accomplishments that we're proud of
- A fast, interactive map that remains responsive under multi-filter queries.
- Clear tract-level explanations of drivers behind high risk—not just a score.
- A flexible pipeline where PCA can be blended and tuned for different stakeholder needs.
What we learned
- Good UX for public data tools requires opinionated defaults (e.g., auto-denominators, sensible ranges) with expert overrides.
- PCA is powerful for signal discovery, but human-readable feature names and careful scaling are essential for explainability.
- Neighborhood-level insights change conversations—citywide averages mask critical disparities.
What’s next for CityScale
- Add time-series to track risk trajectories and evaluate impact of policy changes.
- Incorporate eviction filings, LIHTC expirations, and development pipeline data for earlier risk flags.
- Ship downloadable tract briefs and an API so partners can embed the index in their workflows.
- Expand fairness/robustness checks and add confidence bands around scores per tract.
- Fine tune housing index model with the help of PhD level SMEs
- Add other models to understand data better
- Improve chatbot to fine tune responses and create more valuable insight about the data
- Deploy to cloud infrastructure to allow for widespread use
- Partner with city staff, survey residents in selected tracts, visit neighborhood sites to find more raw findings to refine data set
- Create an app version for homeowners or renters to understand where is affordable in their city
Log in or sign up for Devpost to join the conversation.