Inspiration
We wanted a way to test “fair” policies on real-looking populations without needing a whole data science team. Cities, campuses, and nonprofits often have spreadsheets of people, income, rent, commute, or energy use — but no quick way to ask: if we raise wages, or add a housing subsidy, or encourage EVs… who actually benefits? We built Ripple (our fairness-aware policy simulator) so anyone can upload a dataset and see how a policy change ripples through different groups.
What it does
Ripple is an interactive policy sandbox. You upload an Excel sheet of people/households, then:
- Pick policy levers (minimum wage increase, housing subsidy, transit/EV incentive, education or green-jobs boost).
- Ripple simulates how that affects income, rent paid, employment, commute, emissions, and even energy use.
- It breaks results down by race/ethnicity, county/region, income bracket, and sector so you can spot uneven impacts.
- It also tracks things that are usually hidden, like rent burden and average rent actually paid, so we can tell if a policy is good on paper but bad for low-income groups.
So it’s basically: Upload → Adjust policies → Get fairness and sustainability insights.
How we built it
- React frontend for the main dashboard and cards (baseline metrics, post-policy metrics, group breakdowns).
- Excel → JSON pipeline in the browser so a judge or policymaker can just drop in a sheet and we detect common column names (income, rent, race, county, energy, commute).
- Simulation engine that, for every person/row, applies the chosen policies: updates income, recalculates rent and subsidy, changes commute mode if there’s a transit/EV incentive, and updates energy use.
- Aggregation layer that recomputes group-level metrics (by race, county, income bracket) so we can say “this group improved X% from its own baseline,” not just from the overall average.
- Monte Carlo-style runs (lightweight) to smooth randomness and give more realistic ranges.
- Styling and visualization hooks so we can plug in better charts (Lorenz, before/after, equity plots) without rewriting the logic.
Challenges we ran into
- Messy input data: different spreadsheets name the same column differently. At first that made whole groups show up as “Unknown,” which invalidated the equity view. We fixed it by checking multiple column-name variations everywhere.
- Housing realism: if you only track “rent,” a wage increase can make the results look worse. We added rent actually paid (after subsidy) and rent burden to show the true effect.
- Linking climate and equity: EV/transit incentives lower transport emissions but can change energy use. We had to track energy too so we don’t claim a win in one dimension and hide a loss in another.
- Performance in the browser: running per-person simulations with several levers can get heavy, so we tuned the number of runs and how much we log.
Accomplishments that we're proud of
- Turned a plain Excel upload into a full policy simulator in one flow.
- Made the results equity-aware — you can actually tell which race/region/income group benefited.
- Added practical metrics (rent paid, rent burden, energy use) that make the demo believable to real stakeholders.
- Documented future visualizations (Lorenz curve, Sankey for mode changes, radar for policy comparison) so the project looks extensible beyond the hackathon.
What we learned
- Data robustness matters more than fancy charts — if your app breaks on one column name, nobody trusts it.
- Equity analysis only makes sense if you store per-group baselines first.
- Policy levers interact (wage ↔ rent, EV ↔ energy), so it’s better to show multiple outcomes on one screen.
- A clean, card-based React UI is enough to tell the story to judges quickly.
What’s next for Ripple
- Add the visualization set we outlined (Lorenz, before/after income, equity dot-plot).
- Let users save and compare scenarios (Policy A vs Policy B vs Policy C) on a single radar chart.
- Add budget/cost estimates for each lever so you can say “best outcome under $X.”
- Add light geo (by county/region) to show where the policy hits hardest.
- Package the simulator as an API/notebook so other civic/hackathon projects can drop it into their stacks.
Built With
- geminiapi
- javascript
- python
- react

Log in or sign up for Devpost to join the conversation.