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 inservice.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-nextwith 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
- fastapi
- javascript
- next.js
- python
- react
- render
- tailwind-css
- ticketmasterdiscoveryapi
- typescript
- vercel

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