Four teams each. All thirty-two owned. Pup
Eight people snake-draft four NFL teams apiece and total regular-season wins is
the only criterion. Every number below is read from
/data/draft-2026.json.
Wins tracker
Each bar is a roster's season against the par rule at 34 — 272 wins split eight ways. Solid segments are wins actually banked, one per draft round; the hatched extension is the season still to play, ending at that roster's projection. Nothing is banked yet, so right now every bar is entirely projection — and that is the honest shape of it. Scale is fixed at 48 so par never moves.
Round by round, as a table
Spin wheel
The ring is finishing probability — each slice is how often that roster comes first across the simulated seasons in the payload, so the wheel is the answer and not a decoration. Press the button and it plays one whole season, 272 games, and stops on whoever actually won it. Spin it enough and the tally converges on the slices.
Monte Carlo
The same machine, without the theatre. Each trial plays all 272 games once — a win goes to exactly one side, so every simulated season pays exactly 272 and a roster owning both sides of a game cannot bank both. That is why this is simulated game by game instead of by drawing each team's win total: drawing totals independently would break the conservation and hand a division-stacked roster a spread it does not have.
Expected wins, all 32
Bars are devigged expected wins, anchored at zero. The vertical tick on each bar is the posted line — the gap between tick and bar end is the vig coming out, which is why none of these land on a round number. The rule at 8.5 is par per team. Colour is the owner and the owner is also written out; undrafted teams are hatched.
Every bar is a button — pick one and the Team sheet opens on it.
Who plays whom
The 32×32 head-to-head grid, ordered by division so the twice-a-year rivalries form the blocks down the diagonal. This is the visual that makes the pool make sense: a game between two teams pays exactly one win, so when one person owns both sides it is a win they are guaranteed to collect and guaranteed to lose. Those cells are painted in that drafter's colour.
Hover or focus any cell for the two teams and the weeks they meet.
The board
Snake order, eight columns, four rounds. Each pick carries the gap between the team taken and the best expected wins still on the board at that moment. That is a description of the board, not a grade of the pick — and it is a statement about draft day, computed against the numbers as they stood then. It will not be recomputed against live ratings later, because that would make it retroactively wrong.
The eight rosters
Sorted by expected wins, which is a market snapshot and not a standing. “Internal” is games the roster plays against itself — the wins that cannot help. Every card is a button.
Week by week
Seventeen weeks of per-game win probability. Games where the same drafter owns both sides are outlined — those are the ones that wash. With four strips stacked, a collision lines up vertically.
How a season lands
Probability mass over final win counts, 0 through 17, straight from the payload. Season standard deviations sit within a few tenths of 2.7 across the whole league, so no team here is meaningfully more of a lottery ticket than another — they are the same shape slid left and right.
These curves are the shape of a season, not a second estimate of its total — their means run a little above expected wins for the worst teams and a little below for the best, up to 0.36 wins, which is what truncating at 0 and 17 does to a distribution built around a mean near the edge.
Every game
The same 17 games as a table, with where each number came from.
What the numbers agree with, and what they don't
Every check below is measured off
/data/draft-2026.json on the run that built it,
by scripts/team_draft_pool.py. A diagnostics panel that only ever prints OK is
decoration, so the ones that report drift are the point.
Every team, every figure
The table view of the same numbers the charts draw. Line is what was posted, EW is the devigged expectation, Δvig is the difference. Σp sums the 17 game probabilities. μdist is the mean of the win distribution.
The rules, and where the numbers come from
The league's own rules, plus an honest account of what each figure on this page is and is not.
What each number is
- Posted line — the median regular-season win total on the board. Half-points are the book's, not a rounding convenience.
- Expected wins — the four-book prices devigged and renormalized so all 32 sum to 272. This is not the posted line, and calling it one would be wrong in the direction that flatters it: the line carries the hold and this does not. It is frozen at the draft-day devig and is never recomputed, because the board's reach and value are claims about that day.
- Where each game's number comes from — resolved per game, in order: a settled result if it has been played; a market price if one exists for an unplayed game; the model beyond the market's horizon; and, before the season starts, the frozen preseason devig. Every game on the Team sheet carries its own tier. The switch is data-driven — one settled game anywhere and the whole payload flips — so no date is hardcoded.
- Why not just switch to the model in September? Because market primacy does not lapse when the season starts. The reason to move off a frozen preseason total is not that the model beats the market; it is that a number frozen on 9 August stops being true the moment a starting quarterback tears an ACL, and a live pipeline reprices that in a week where a snapshot never does.
- Win distribution — probability mass by final win count. Its mean sits up to 0.36 wins from expected wins for the teams at either end, which is what truncation at 0 and 17 does. Said once, on the distribution, and nowhere else.
- Internal games — head-to-head meetings inside one roster, counted off the overlap matrix. The only figure here that is purely structural: it does not depend on anybody's price being right.
- Finishing probabilities — Monte Carlo over the schedule, game by game, on top of whatever is already banked. Not a forecast. No tie outcome is modelled, so the league's half-win-for-a-tie rule does not appear; and a tie for first is broken at random, because the real tiebreakers are playoff wins and point differential and neither is in this payload.
- Nothing is graded. There is no result on this page, no leaderboard, and no claim that any of these prices are right.
The same page for machines
/data/draft-2026.json— the whole surface: 32 teams with line, expected wins, SD, the 0–17 distribution and a 17-game schedule carrying each game's tier; the sparse head-to-head matrix; the draft log; and the derived rosters, tracker, board, simulation and diagnostics./data/nfl-schedule.jsonand/data/survivor.json— the results feed and the price feed the in-season composite reads. This page holds no copy of either.scripts/team_draft_pool.pyis the pipe, and.github/workflows/draft-picks.ymlruns it from the Actions tab so recording a pick needs no laptop.
This is a private pool between eight people. It is on the public site because the arithmetic is interesting, not because anybody can enter it. There is no signup, no money handled here, and no contact detail on this page.