Inspiration

Professional sports seasons mean huge amounts of team travel and emissions. Scheduling affects miles flown, rest, and fairness. We wanted a tool that treats schedule design as a sustainability problem while still respecting league structure and operational constraints.

What it does

CarbonPlay generates full-season schedules for NBA, NHL, and NFL, optimizing for lower travel-related emissions while balancing fairness (rest, burden spread) and density rules. The Next.js dashboard lets you pick a league, tune weights and season parameters, and run optimization. You get emissions by team, schedule and travel views, optional baseline comparison, and sensitivity analysis that perturbs objective weights and shows how league emissions respond.

How I built it

  • Backend: Python FastAPI, core logic in optimizer.py (league-specific matchups + greedy multi-objective search), orchestration and optional baseline in service.py. Emissions use distance plus ground vs flight factors and takes into account specific jets each individual team uses as their mode of transportation.

  • Frontend: Next.js app in dashboard-next with Recharts, MapLibre, TanStack Query, and Zustand for filters and state.

  • Deploy: API on Render , UI on Vercel

Challenges we ran into

  • Hosting limits: Long NBA/NHL optimizations exceeded HTTP timeouts on free hosting so we reduced optimizer restarts

Accomplishments that we're proud of

  • End-to-end product: real optimizer + polished UI + live deploy.
  • Three leagues with meaningfully different rules and visuals
  • Realistic constraints used by pro leagues to create their actual schedule

What we learned

  • Greedy full-season search is CPU-heavy; serverless-style timeouts are a real design constraint for 82-game leagues.

What's next for CarbonPlay

  • Expanding to MLB and MLS

  • Async optimization: for results so long MLB/NBA/NHL runs work reliably on cheap hosts.

  • Deeper constraints (TV windows, marquee matchups)

Built With

Share this project:

Updates