NHLOPTIMIZER
DraftKings & FanDuel
Slates
Upload Slate CSV
No slate loaded
Accepts either final_projections_{site}_{date}.csv (to build lineups) or an already-built lineup_*.csv (to view) or a pivot_suggestions_{site}_{date}.csv (paired to a matching date already saved -- type that same date above). The date field is pre-filled from the filename -- leave it as-is unless you have a reason to change it, since this exact value is what "Build Lineups" sends to the real solver as --date. Must be a real YYYY-MM-DD date (NHL's data pipeline is date-keyed, not free-labeled). Persists across reloads and syncs to cloud.
Build a Lineup
# Lineups
Max Exposure %
Min Swaps (Uniqueness)
Stack Mode
Randomization %
Minimum Salary
Lineups must spend at least this much (cap is $50,000 on DK, $55,000 on FD -- the slider adjusts automatically when you switch sites).
Max Players Per Team (optional -- applies to every team, every lineup)
Max Players Per Game (optional -- both teams combined, every lineup)
A single number applied uniformly to every team/game (matches optimizer.py's current --max-players-per-team/--max-players-per-game). Per-team-specific caps (e.g. cap COL at 2 but TOR at 3 in the same build) aren't supported yet -- flagged as a follow-up backend session.
Settings Presets
Runs the actual optimizer.py via GitHub Actions (typically 20-90s) and supports every control above.