Commissioner · — · Draft slot —

Demo Keeper
League

Ten teams, 15 rounds, snake. One keeper each, optional. A synthetic league — every manager and every number here is generated.

This is a demo. Ten invented managers, four seasons of simulated drafts, projections generated rather than sourced. It runs the same rule engine, valuation model and audits as the real thing. Source and method.
Draft day
—
--Days
--Hours
--Minutes
--Seconds
Keeper board
—
Stranded flags
None — nothing will orphan
Declared
—
Wheel rules
Settled — 3 rulings
Live league
Sign in →

Keepers, by what they cost

Value = pick number minus ADP

Keepers occupy real picks, so those slots are gone before anyone sits down.

Keepers, ranked

By points gained over the pick each costs

Pick minus ADP only measures how far down the board a player is being taken, so anything kept late scores well whether or not he's good. This ranks on how many more points a keeper returns than the best player still available at that same pick, each measured against replacement at his own position.

#KeeperManagerCostsProjEdgeBest alternative there

The board

Nine picks already spoken for
Keeper — pick already used Your picks

The two-year clock

Counted per manager, not per player

Your ruling: the limit follows the team. A player who runs out his two years with one manager is fresh again for anybody else.

PlayerManagerKeptStatus2027 cost

Draft grades

Unlocks after the draft
Nothing to grade yet

Every pick gets measured against the best player still available when it came up; each team is scored on how much of that it captured. Run ./grade.py once the draft is done.

Rules you'll be asked about

What a keeper costs

The whole system, in two lines

undrafted all year  → flat R7
drafted by anyone  → that round − 1

Rule 5 isn't separate math. Charging two rounds earlier on a second straight year is the same as applying rule 3 twice — year one already moved him a round.

On the real league this reproduces 21 of 22 keepers on record; the one exception was a call made under an earlier wording of rule 4.

Ruling R1 — the clock is per team

The case that forces the question

Two years max follows the manager, not the player. If one manager keeps someone in 2024 and another keeps him in 2025 and 2026, those are two separate runs — only the second manager's clock has expired.

A player another manager burned through is a clean slate for you.

Ruling R2 — the draft round wins

Settled Aug 2026; rule 4 rewritten

How a player reached your roster is irrelevant. Only whether anyone drafted him that year. Waivers, free agency, a trade — if he was drafted, his cost comes off that round.

The old wording read as though any waiver pickup paid a flat R7, which priced backwards: it made a late-round wire find more expensive.

Ruling R3 — ties

Read the standings

No manual tiebreak. Sleeper ranks tied records on total points for, so a finishing position is read off the standings page.

A season can easily finish with half the league tied. Points for separates them without anyone ruling on anything — and a 40-point gap between 6th and 7th is worth four wheel spots.

Rule 7 — the injury swap

Live until the draft · timing unwritten

Swap an injured keeper for another player on your roster. The replacement is costed against his own history and must clear rule 2, so a swap can cost more than what it replaces.

The injured player accrues no year; the replacement starts his own year 1.

Keeping is optional

And the deadline binds only those who want one

One player or none. No penalty for passing, and a team with no keeper simply drafts a full board. Roughly a third of the league opts out in a normal year.

Spin the wheel — 2027 order

Based on 2026 regular-season record

47 spots across ten teams. Odds below are 200,000 simulated sequential draws.

Odds of the first pick

Spots → probability → average pick

10th — 14 spots29.8% · 2.6
9th — 1021.3% · 3.0
7th + consolation — 1021.3% · 3.0
8th — 714.9% · 3.6
6th–1st — 1 each2.1% · 7.1
10th and consolation — 1940.4%

Two things the wheel gets right

Both look like flaws until you check the bracket

The cliff sits on the playoff line. The jump from 1 spot to 5 falls between 6th and 7th — and the field is the top 6 of 10. Nobody drops a place on purpose: it trades a playoff berth and a live shot at the prize money to move first-pick odds from 2.1% to about 10.6%.

The penalty only covers facts. Empty slot, IR, OUT, BYE — readable straight off the box score. It says nothing about lineup quality, because intent is unknowable and a low-projection start may be a sincere sleeper call.

Buy-ins

Live league only

The real league tracks who has paid on a page that stores its record server-side behind a login. Figures are omitted here.

What this catches

Why a spreadsheet stops working

Three failures this tooling exists to find, each one taken from a real league.

The written rules are wrong

Or at least incomplete

Leagues write rules in chat and then apply them by feel. Modelling them and replaying against every historical keeper shows where text and practice diverge — and which of the two everyone actually believes.

On the real league this reduced nine written clauses to two lines reproducing 21 of 22 keepers, and identified the single outlier from transaction logs.

The API quietly lies

is_keeper is not the whole truth

When a commissioner enters a keeper by drafting the player manually, the pick carries no keeper flag. Anything counting keepers off that flag undercounts — and every two-year clock downstream is wrong by one.

The fix is an override layer the audit and the ledger both read.

Flags strand players

The pre-draft check

Keeper flags survive between seasons, and survive a manager leaving. A flag with no matching board pick pulls that player out of the draft pool entirely — he ends up belonging to nobody.

Running the stranded-flag check before the draft turns a post-draft mess into a two-minute fix.