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

  1. React frontend for the main dashboard and cards (baseline metrics, post-policy metrics, group breakdowns).
  2. 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).
  3. 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.
  4. 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.
  5. Monte Carlo-style runs (lightweight) to smooth randomness and give more realistic ranges.
  6. 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

Share this project:

Updates