Inspiration
A general manager usually knows what their team needs. The harder part is weighing a prospect's ranking, production and positional fit together, and understanding how much the final decision depends on the priorities you've chosen.
I wanted to build something that makes those trade-offs visible. Rather than giving you one ranking and asking you to trust it, the tool shows why a player comes out on top and how that result changes when you adjust the priorities.
What it does
The tool takes a team's positional needs and uses them to rank the 2027 NBA Draft prospect board and recommend a pick. Every score is broken down into three components: ESPN ranking, BPM and positional fit. It also provides up to three alternative picks and flags close decisions when the top two prospects are within one point of each other.
The explanations are grounded in the actual scoring data. An AI-generated sentence can add context, but only when every name and number can be verified against the information displayed alongside it. If it cannot be verified, the explanation is left out.
There's also a second page featuring a seeded mock draft, where AI-controlled teams make selections using the same scoring framework. Six teams have researched positional needs, while the remaining 24 use simulated needs. The simulator can also check AI-generated trade-off claims against the evidence provided to support them.
How I built it
The scoring engine is written in Python and uses a weighted formula:
$$ \text{score} = 100 \times \left( w_{\text{rank}} \cdot r + w_{\text{BPM}} \cdot b + w_{\text{need}} \cdot n \right) $$
Here, (r) represents the scaled ESPN ranking, (b) is BPM scaled against fixed bounds of -5 to +8, and (n) represents positional fit (1 if the prospect matches a team need, 0 otherwise).
The weights always add up to 1. The main tool uses 65% for ESPN ranking, 30% for BPM and 5% for positional fit.
I built the interface using Streamlit and deployed it through Streamlit Community Cloud. For AI-generated explanations, I integrated Nemotron 3 Nano through Nebius Token Factory, with the API key securely stored in the platform's secrets.
I also built tests covering the data loader, scoring system, mock draft engine and AI claim validation, all of which are included in the project repository.
Challenges
The weights can completely change the recommendation.
One of the most interesting findings was how sensitive the results were to the scoring weights. With no weight assigned to team needs, Tyran Stokes comes out on top. Introduce any positive weight for positional fit, however, and Jordan Smith Jr. takes the lead. Three of the four weighting configurations I tested also produced close calls.
Rather than hide this behind a single set of weights, I decided to make the sensitivity visible and let users see how different priorities change the recommendation.
Making AI explanations trustworthy.
During development, the model produced an explanation claiming a prospect matched a team's positional needs when the underlying data said otherwise. Even with explicit prompt instructions, it still happened.
I added a rule-based validation system that checks the generated explanation against the underlying data, with one retry if a problem is found. I applied the same approach to the mock draft simulator, checking its trade-off claims against the evidence it cites.
Working with imperfect data.
Not every prospect has comparable statistics. Some figures come from different leagues, five prospects have no recorded BPM, and most team-needs entries are simulated.
Rather than fill missing values with averages or present assumptions as facts, I chose to make those gaps visible in the interface and document them in the README.
What I learned
The biggest lesson was that transparency takes more
Log in or sign up for Devpost to join the conversation.