Inspiration
Professional League of Legends drafts are not a stage-aware, sequential decision process under uncertainty. Most tools stop at static tier lists or generic composition advice, while real coaching questions sound like:
- “What is the most defensible action right now, given this exact draft state?”
- “Is this ban driven by meta, by opponent pool, or by recency?”
- “How much should we trust a small sample from a brand-new patch?”
We built this project to close that gap: a stage-aware draft assistant that is transparent about why it suggests something, and honest about uncertainty.
What it does
Stage-Aware Draft Intelligence is a real-time Ban/Pick decision-support tool for pro LoL esports drafts (route: /bp).
It provides:
- Stage-aware assistants for Ban and Pick phases aligned with the official 20-step draft order
- Predictions of opponent bans/picks based on team blueprints and response patterns
- A candidate engine that proposes actionable ban/pick candidates at each step
- An explainable PTS v1 scoring system (percentile-rank based, no hard-coded weights)
- Clear “why” reasons behind each candidate (Meta / Threat / Predict / Flex, plus Pick extras such as Synergy and Counter)
- Fearless Draft mode: champions used in prior games are globally disabled in the grid and in candidate generation
- Strong null-safety, ID normalization, and graceful fallback logic for production reliability
How we built it
System design
- Frontend: Next.js (App Router) with React UI components
- Draft state machine: deterministic BP step engine (20 steps)
- Offline data artifacts: generated JSON files (grid_v2) from esports match history
- API layer: lightweight endpoints serving meta, predictions, threats, synergy/counter, and role flexibility
- Two assistants:
- BanPhaseDraftingAssistant (ban steps)
- PickPhaseDraftingAssistant (pick steps)
Alpha / Beta / Gamma: Bayesian weighting core
Our weighting framework answers: “Which historical samples are more trustworthy?”
For each game ( g ), we compute a weight:
$$ w(g) \;=\; \beta^{\Delta_{patch}} \cdot \left(1 - e^{-\frac{d(g)+1}{\gamma}}\right) \cdot W_{team} \cdot W_{season} $$
- Δ_patch: distance from the target patch
- d(g): days since the patch went live when game g was played
- W_team, W_season: optional multipliers (for example, season priority)
Then we update Bayesian posteriors with a prior strength α:
$$ posterior = \frac{\alpha \cdot prior + \sum_{g} w(g)\,count_{g}}{\alpha + \sum_{g} w(g)\,total_{g}} $$
Interpretation:
- α (prior strength): how conservative the model is when sample sizes are small
- β (patch decay): how fast older patches lose relevance
- γ (patch maturity): how quickly early patch data stabilizes
These parameters are calibrated via grid search (for example, minimizing log loss under calibration constraints), not chosen arbitrarily.
PTS v1 (Percentile Rank, no constants)
Instead of hard-coded weights, we compute relative ranks within the current candidate set:
$$ \mathrm{PTS}(c) \;=\; \sum_{d \in D} \mathrm{PercentileRank}!\left(\mathrm{raw}_{c,d}\right) $$
- Ban dimensions ( D ): META, THREAT, PREDICT, FLEX
- Pick dimensions ( D ): META, COMFORT, PREDICT, DENY, FLEX, SYNERGY, COUNTER
This makes PTS robust across leagues and patches, interpretable per step, and free of arbitrary constants.
Threat signal migration (grid_v2)
We migrated legacy threat signals into compact, patch-weighted grid_v2 data:
- Team-level threats (opponent ban tendencies, self patterns, and meta)
- Player-level threats (team pool, top-player spike risk, and recency)
This reduced file size and improved consistency with the alpha/beta/gamma framework.
Challenges we ran into
- Stage leakage between Ban and Pick phases
- Champion ID versus name mismatches across datasets
- Null safety and partial real-world data
- End-to-end Fearless Draft consistency
- Explainability without UI clutter
Accomplishments that we’re proud of
- A production-ready, stage-aware BP assistant aligned with the official 20-step draft flow
- A principled alpha/beta/gamma weighting system modeling trust in historical data
- PTS v1 built entirely on percentile ranks
- Full migration to compact grid_v2 artifacts
- Fearless Draft integrated across UI and AI engines
What we learned
- In decision support, explainability beats complexity
- Percentile-based scoring works extremely well for step-wise ranking
- Draft tools must be engineered like real products, not demos
- Time-aware modeling is essential in esports analytics
What’s next
- Extend prediction depth for second ban phase
- Add patch comparison and meta delta views
- Improve UI clarity with champion portraits
- Publish calibration and stability diagnostics
- Add draft replay and scenario simulation tools
Built With
- github
- grid
- javascript
- json
- markdown
- next.js
- node.js
- pm2
- react
- rest
- tailwindcss
- typescript
Log in or sign up for Devpost to join the conversation.