A live draft board that rescores 700 NFL players under one league's exact rules, ranks them by what they're worth above a free replacement, and tells you who will be gone before your next turn — built in a single afternoon, hours before the draft.
The starting point was a 35-section planning document describing how an assistant should think about a draft. It was all process and no data — and its core formula didn't work.
Thirty-five sections of instructions. Zero projections, zero draft-market prices, zero tiers. It told a system how to think and gave it nothing to think about.
It summed tier score, market value, scarcity, roster fit and upside — quantities measured on entirely different scales. Adding them produces a number that means nothing.
The single most important idea in a draft was absent. Without it, raw projections rank nine quarterbacks in the top ten — in a league that starts one.
Six phases and eleven modules, with the draft in under three hours. Following it would have produced an architecture and no usable board.
Public rankings assume full-point receptions and standard roster shapes. This league used half-point receptions and started three receivers. The published numbers were simply wrong for it.
Under this league's exact rules, the 11th-best quarterback projects 299.9 points. Patrick Mahomes projects 299.9 points.
Mahomes is worth exactly zero above a quarterback anyone could claim off waivers for free.
That one comparison rewrote half the draft plan — and no public ranking surfaces it, because it only appears once you score for the specific league you're in.
Four scripts and one live page. Every number traces to a timestamped pull, so any board can be rebuilt exactly as it stood.
700 players from a public API — projections, live draft-market prices, injury status.
Apply the league's exact rules. Half-point receptions and 4-point passing touchdowns change every ranking.
Measure each player against the last startable player at his position in a league this shape.
Break groups at real scoring cliffs, not fixed buckets. The cliff is what forces a decision.
One recommendation, in plain words, with the odds he survives to your next turn.
A player is only worth what he beats the person you could have had for nothing. Under this roster shape that line falls at QB11, RB25, WR36 and TE12 — and measuring against it reorders the entire board.
The useful question on the clock isn't "who is best." It's "who will not be here at my next turn." Each player carries a probability of lasting that long, derived from where the market drafts him.
Built for someone who doesn't follow the sport. Every player carries what he actually did last season — catches, yards, share of his team's plays — so a name is never just a number.
A public projections API, an open play-by-play dataset, and a public trending-adds feed. No paid keys, and nothing scraped from a site whose terms forbid it.
Thirty-eight automated checks, nine browser passes driving a real Chrome window, and one adversarial review. Five genuine defects surfaced — and not one was a crash.
Thirty-three assertions passed and a screenshot looked clean while three real bugs sat in the build. They only appeared by clicking through the actual sequence a person performs.
A warning correctly said "you still need a kicker" while the recommendation card suggested a running back. A first-time user follows the card. Two halves of one screen, disagreeing.
Every kicker and defense scored exactly 0.0, because their statistics live under different identifiers. The screen displayed a computed-looking zero. Nothing was broken; it was simply never calculated.
Running the data step alone wiped the descriptive text from all 534 players. The page still rendered perfectly, just blank. The fix was making it impossible to ship quietly.
Value over replacement is a scarcity measure. Adding a second scarcity term on top double-counted it, and a one-man tier outranked players worth ten points more. Every test still passed.
The draft position came from one line in a planning note and was never confirmed. It turned out to be wrong. Making it a control instead of a constant meant the correction took two seconds, not a rebuild.
The pipeline that scores a draft also scores a waiver wire, a weekly lineup, and a trade. Same engine, different question.
Scores the free-agent pool against this roster's actual holes using weekly opportunity trend, league-wide claim volume, and upcoming bye exposure. Because waiver priority is a one-shot resource, it says when to spend it, not just who is good.
Flags the start-or-sit decisions where the gap is under two points, so the choices that don't matter stop consuming attention.
Schedule strength across the roster for the three playoff weeks, surfaced before the trade deadline rather than after it.
A zero-dependency rig that drives any local page in a real browser with real mouse events, using the runtime's native WebSocket over the Chrome DevTools Protocol. No framework required. It now tests other client deliverables.
Strip out the sport and the shape is familiar: what is this worth above the alternative I could have for free, how fast is the opportunity disappearing, and what does waiting cost me?
That's inventory. That's hiring pipelines. That's capital allocation. The engine doesn't care that the rows happen to be football players — it cares that the scoring rules are specific, the supply is finite, and the clock is running.
The real tool, running on real 2026 projections. Click any player to take him off the board and watch the recommendation, the tier counts, and the survival odds all recalculate.
Click rows in the table the way you would when other managers draft. The counter at the top moves and the board rethinks itself.
It names one player and says why in plain words — which hole he fills, how far he has fallen, and who you drop to if you wait.
Set "I pick" to a different position. Every pick number, survival probability and recommendation recomputes for that seat.
Turn it off and watch an elite quarterback climb the board. That switch exists because the model and the analysis genuinely disagreed.
Nothing is saved anywhere but your own browser. Refreshing gives you a clean board.