Decision engine · Fantasy basketball
A custom decision system built on top of real league state.
Draft9 does more than rank players. It normalizes multiple projection and market sources, builds a custom 9-category value model, connects a real ESPN league and simulates how draft picks, trades and waiver moves change a specific roster relative to its competition.
01 · Problem
Player value is not a fixed number once a league starts.
A ranking tells you who is generally good. It does not tell you what your roster needs, where your team sits against eleven competitors, whether a trade improves both sides enough to be plausible, or whether a waiver pickup has enough games left this week to matter.
Sources disagree
Projections, ADP and rankings come from different places, formats and assumptions.
Fit depends on the roster
A player's categories can be valuable to one team and redundant—or actively harmful—to another.
The league keeps changing
Draft picks, injuries, schedules, rosters, free agents and current matchups continuously alter the decision.
02 · Data & model
Normalize the inputs first. Then model the decision.
Draft9 combines ESPN fantasy data with public projection and ADP sources, maps them into one player model and computes its own category-aware score rather than treating a single provider ranking as truth.
03 · Simulation
The important output is the change caused by the move.
During a draft, Draft9 can add a candidate to the user's current roster without recording the pick, recalculate category shape and estimate how the team's projected league position changes. The demonstration below is synthetic, but mirrors that interaction.
Synthetic pick-impact demo
Preview the next roster move
Illustrative category movement only. The production model uses actual league rosters and player projections.
Pick impact
Preview a player on the roster, compare before/after category ranks and see projected overall movement before committing the pick.
Realistic trade scanning
Scan 1-for-1 and 2-for-2 ideas against actual rosters, category fit and original draft capital, rejecting deals that are too one-sided.
Schedule-aware add/drop
Use the actual ESPN free-agent pool, upcoming NBA games and current matchup state to estimate what a transaction changes.
04 · Live league context
The model becomes useful when it knows the league it is operating inside.
A user can connect a public ESPN league by ID or URL. Draft9 pulls rosters, original draft positions, free agents and waivers, NBA schedules and the current matchup into a read-only snapshot. Saved snapshots are used as fallback if ESPN is temporarily unavailable.
Actual team construction
Every roster is available to the simulation layer rather than approximated from a generic league.
Original pick context
Trade scanning uses where players were originally drafted as one realism constraint instead of suggesting fantasy trades in a vacuum.
Upcoming games
Free-agent analysis knows how many games a player has in the next 7/14 days and can focus on the current scoring window.
Before / after outcomes
For a current opponent, add/drop previews compare category outcomes before and after the proposed transaction.
05 · Product system
A toolkit around one analytical core.
The visible product has several surfaces, but they share the same player model and persistent league state.
Personal draft board
Reorder players, add tiers/tags/notes and preserve a user's own judgment alongside the model and market ADP.
Live draft workspace
Track picks, remaining players, team construction, league-wide category shape and hypothetical next selections.
Change the objective
Selected punt categories are removed from the active strategy so suggestions respond to how the user intends to compete.
Evaluate both sides
Model roster changes and category-rank movement instead of reducing a deal to two player names.
Transaction simulation
Search actual availability, choose the exact pickup/drop and compare team and matchup effects.
Refresh + cache behavior
Scheduled source refreshes, league snapshot caching and saved-state fallback keep the product useful when external feeds fluctuate.
06 · My role
I designed the decision logic as well as the product around it.
This is a self-directed build. I defined the decision problem, sourced and normalized the data, designed the scoring and simulation logic, structured the persistent league state, implemented the ESPN integration and built the product surfaces around real fantasy decisions I wanted to make faster.
Analytical product design
Turning a vague objective—“help me make better fantasy decisions”—into explicit models, simulations and workflows.
External data → usable decisions
Normalizing unreliable, changing external data and combining it with user-specific state without hiding uncertainty behind a single magic number.