Run the NFL draft outside Madden so we can apply richer trade and pick logic, then export results in a shape Madden can re-import. Local web app — Python backend, JavaScript frontend, opens in any browser.
- Loads a draft year's data from
Files/<year>/(BigBoard, current rosters, pick order, GM traits, position needs, pick value chart). - Lets you (controlling the Steelers) draft your own players, sim other teams' picks, sim to your next pick, sim to a chosen round, or sim to any overall pick number.
- AI teams will make picks (and eventually trades) based on their own
big board, GM traits, and team needs — see
backend/logic.pyfor the contract; the heuristics are placeholder shells today. - You can offer trade-ups to any team's pick; when their pick is up, you can review trade-down offers from AI teams.
- Exports three xlsx files for re-import / inspection:
DraftPickOutcome.xlsx— every pick + the player drafted.DraftPicks_updated.xlsx— same shape as input, with newCurrentTeamownership andSelectedPlayerfilled in.Trades.xlsx— chronological trade log (for testing).
Requires Python 3.10+.
macOS / Linux (bash/zsh):
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python app.pyWindows (PowerShell):
python -m venv .venv
.\.venv\Scripts\pip install -r requirements.txt
.\.venv\Scripts\python app.pyIf PowerShell blocks the activation script with a security error, you
can either run the commands above directly (they don't need the venv
"activated" — they invoke the venv's pip and python by path) or
loosen the policy for the current session with
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned.
Then open http://localhost:5050. Pick a year on the setup screen
(today only TestFiles is present) and click Start Draft.
Drop the source files under Files/<year>/ matching the names in
Files/TestFiles/:
Files/2026/
BigBoard.xlsx
Player.xlsx
DraftPicks.xlsx
GMInfo.xlsx
PositionNeeds.xlsx
DraftPickValue.xlsx
DraftMaxPerPosition.xlsx
all_colleges.json (optional)
Restart the server; the year shows up in the dropdown automatically.
If the requested year folder is missing, the loader falls back to
Files/TestFiles/.
- On the Clock (top left): which team is picking now. When it's the Steelers, you get Check Trade-Down Offers and Offer Trade Up buttons.
- Last Selection (left): most recent player drafted.
- Team Needs (left): position weakness ranking for whoever is on the clock.
- Current Round (center): 4×8 grid of the visible round; highlights the on-the-clock pick (pulsing green) and Steelers picks (gold). Round dropdown switches the view.
- Mel Kiper Best Available (center): public consensus board. When Steelers are on the clock, each row gets a Draft button.
- Team Big Boards (right): private per-team rankings. Mostly for testing how AI logic ranks players.
- Top bar buttons: Sim Pick (one AI pick), Sim to My Pick, Sim to Round…, Full Draft Order (modal showing the entire draft as a 4-wide grid), Export (downloads all three xlsx files).
app.py Flask entry + HTTP routes
backend/
data_loader.py Reads xlsx/json from Files/<year>/
draft_state.py Pick order, on-the-clock, drafted players, trades
logic.py Decision functions (placeholder shells)
exporter.py Writes the three output xlsx files
templates/index.html App shell
static/js/app.js All frontend behavior
static/css/app.css Custom styling layered on Tailwind CDN
Files/ Per-year source data + Exports/ (gitignored)
See CLAUDE.md for engineering notes (data quirks, team-ID-space mismatch, what's stubbed vs. real).
The plumbing — data load, draft state, API, UI, export — is real and
end-to-end. The decision functions in backend/logic.py are
placeholders with full docstrings describing the real algorithm. They
will be filled in iteratively without changing their signatures.