"Build Lineups" calls your deployed dfs-optimizer-api
Cloudflare Worker, which dispatches to GitHub Actions and runs the real
optimizer.py. Also used for cloud-synced slates and presets. Stored only
in this browser's localStorage.
Slates
▸
Upload Slate CSV
No slate loaded
Name:
Accepts either final_projections_{site}_{slate_id}.csv (to build lineups) or an already-built lineup_*.csv (to view). The name field is pre-filled with the real --slate-id 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. Persists across reloads and syncs to cloud.
Build a Lineup
▸
# Lineups
Max Exposure %
Uniqueness
Stack Mode
Randomization %
Minimum Salary
Minimum Projection?
Minimum Total Ownership?
Participation Floors?
Lambda (variance penalty)
Dart Exposure Cap?
Cap %
Floor Threshold
Showdown Construction Rules
Cheap-tier penalty
Cheap-tier range
Stack cap
Stack cap penalty
QB-partner bonus
Exclude CPT positions
K-CPT penalty
Heavy-side-CPT penalty
Classic Construction Rules (soft)
DST $2.8-3.1k bonus
DST $3.6k+ penalty
Zero-punt penalty
3+ punt penalty
FLEX=RB bonus (superseded, see rule 3)
FLEX=WR flat penalty (superseded, see rule 3)
WR $6.3k+ FLEX bonus
WR $4.9-6.3k FLEX penalty
Skill Player vs. Opposing DST
Team Exposure Caps (optional -- max players from a specific team, applies to every generated lineup)
Game Exposure Caps (optional -- max combined players from both teams in a game)
Min Team Players (Showdown only -- force a one-sided lineup)
Require N From Group (classic only -- force at least N of these specific players into every lineup; which ones is left to the solver)
Minimum required in every lineup
FLEX Eligible Positions
Settings Presets
Each lineup in the batch draws its own randomized projection around the real value -- adds variety across a multi-lineup build.
Stack Size
Partner Positions
WR/TE correlate with their own QB's passing stats -- RB production is mostly independent (rushing, not passing), so it's left out of the default. Add RB here if you specifically want it as an option.
Stack Team(s) (optional -- pick 1 or more, or leave blank to auto-select)
Stack Game(s) (optional -- pick 1 or more, or leave blank to auto-select)
Min Players From Game
Mini Stack Type
Player Pool
Using estimated_ownership_pct from the slate, if present
Salary
–
Projection
–
Value
–
Own %
–
Runs the actual optimizer.py via GitHub Actions (typically 20-90s) and supports every control above.
Exposure Summary
▸
Player/DST exposure across every lineup in your last build. Confirm your chalk lands near Max Exposure %, your dart-tier plays land near Dart Exposure Cap % (if set), and nothing is over- or under-exposed relative to what you intended. Updates automatically after each "Build Lineups" run.