SEASONAL · PRELIMINARY DATA · a summer test build — projections for 2026-27 are loaded, but the models are still being tuned before the public launch

Fantasy Options

Your draft board, two ways. Pick the model — a transparent formula you can recompute by hand, or a black-box AI trained on the same history — then see every player ranked and where each one sits against the league.

Drafting soon? Grab the Draft Kit — a printable cheat sheet and an interactive tracker you run on your phone at the table, both offline. ↓ Get the Draft Kit
01

Choose Your Model

two projection models

Both rank the same players from the same five seasons of public NHL data. The difference is how.

Show the exact math

Projected points = projected goals + projected assists, each built the same way (shown for goals; assists identical):

1. weighted rate
     r =  0.70·rate(last yr)
        + 0.20·rate(2 yrs ago)
        + 0.10·rate(3 yrs ago)
     rate = goals ÷ games (per season)

2. regress to the mean
     R =  ( N·r + K·base ) ÷ ( N + K )
     N    = total games over those seasons
     K    = 2 + 0.6·(82 − GP last season)
     base = position median goals/game
            (40+ GP regulars)

3. age factor
     A =  1 + 0.014·(27 − age)   if age ≤ 27
          1 − 0.015·(age − 27)   if age > 27
          (floor 0.82)

4. projected goals = R · A · games
     games = weighted recent GP, max 82
             — counting only seasons in which
             he was already an NHL regular
             (20+ GP, or any season after
             his first 20+ GP season)

Every input is a completed-season box-score number from the public NHL API — plug a player's last three seasons into the steps above and you'll land on the same number the board shows.

How this treats a rising young player: someone who played a full 82 games gets K ≈ 2, so step 2 barely touches his rate — he's projected close to what he actually did, not dragged toward the league average. And if he's under 27, step 3 nudges him up rather than down. So a young player coming off a career year isn't automatically projected to fall back.
Why step 4 skips the years before a player arrived: a thin season means two different things — a regular who got hurt, or a prospect who simply wasn't in the league yet. Averaging in a two-game call-up from the year before a player's rookie season used to project a healthy 82-game season forward at 64 games, quietly cutting a fifth off his line. Now only seasons in which he was already an NHL regular count toward his expected games. A veteran's injury-shortened season still counts in full — that's real information about how available he is.
⚠️
What no model here knows. These projections are built from completed-season data only. They do not account for recent events — a training-camp injury, a summer trade, or a change in who a player's linemates will be. Treat every number as a starting point for the argument, not the end of it.
02

The Draft Board

the big board

Every skater in draft-rank order. Filter by position, or sort by goals, assists, or points. The rank is the call we trust most — a player's ordinal slot holds up better than the exact totals, which carry false precision. Treat the goals and assists as the supporting argument, and the tiers as the cliffs where the talent drops off.

Tap G, A or Pts to re-sort · the # column always shows the model's overall draft rank

#PlayerPosTeamGAPts ▾Tier

03

Player vs The League

trajectory & percentiles

Pick a player and see where they rank against everyone at their position — and which way their trend line points. This is how you know whether a name is worth reaching for, or worth waiting on.

The menu lists every skater in the board's order, so you can scan from the top.

League percentiles
Points—th pct
Goals—th pct
Assists—th pct
Faceoff %—th pct

Bars fill once a player is selected — percentiles are computed against everyone who played that position last season.

04

Draft Kit

take it to the table

Two things you can actually draft off of — both built from the model you've picked above, and both work offline, so they don't care about the wifi at someone's kitchen table.

Model A · The Formula. Take a player's scoring rate over his last three seasons — leaning hardest on the most recent — and pull it toward a normal rate for his position, but only as far as his sample is thin: a full-season player barely budges, a half-season sample gets pulled harder. Then adjust for age — a nudge up if he's young and still climbing, down if he's past his prime. Finally, multiply by the games he's expected to play, counting only the seasons in which he was already an NHL regular: a two-game call-up before a player's rookie year says nothing about how available he'll be, while a veteran's injury year says plenty. It's simple enough to check by hand, and across the last four seasons it beat simply repeating last year's numbers by about .

Model B · The AI. A machine-learning model that works through years of player history and finds patterns a hand formula would miss. It's tuned so it won't underrate the stars the way a cautious average tends to — the cost is that it can give you a number but can't fully explain how it got there. It also weighs how many games a player has missed in past seasons as a durability signal (that's availability, not medical injury data). Across the last four seasons it beat simply repeating last year's numbers by about .

What no model here knows. Neither one sees anything that hasn't happened yet — a summer trade, a training-camp injury, a new set of linemates. They only know completed seasons, so treat every number as the start of an argument, not the final word. Data: NHL public API.