# The Long Game

Every qualifying NHL career since 1917 drawn as one line, on one sheet. Age runs across the sheet, scoring runs up it. 4,340 skaters and 401 goaltenders.

The page is one long reading sheet of twenty-two questions, each with a figure and a margin note. It is not a ranking. Nothing on it is a rating, a score or a projection. Every figure is counted from the league's own published season reports and carries the report it came from.

## The questions

What does a century of careers look like. When does a career peak. How long does a career last. What was the draft slot actually worth. How many players clear each shelf of games played. Who was the best at each age. What ages away first, and what stays. What do the playoffs do to the curve. How do goaltenders age. Where do careers come from. What does a Cup winner's line look like. Where does your own player sit.

The last one is the reader's: type a name and the sheet draws that career against the century behind it, with the 2025-26 and 2024-25 game logs under it for anyone who played.

## The rules

The rules are printed on the page and baked into the build.

- NHL regular season only, 1917-18 through 2025-26.
- A season under ten games played is dropped from the line. It stays in the career totals.
- A career needs three qualifying seasons to earn a line.
- Multi-team seasons are merged to one row per player per season.
- Age is age on 1 February of the season end year, floored.
- Best-rate claims use seasons of twenty games or more.
- A season's league rate is every skater point divided by every skater game.
- A figure the league did not publish is absent, never zero.

Era-relative height is the option, not the default. The scoring environment of 1981 is not the scoring environment of 2004, and the page says so with the league rate drawn under every sheet.

## The endpoints

- `/data/long_game.json` — the skater career lines, per season and per age.
- `/data/long_game_goalies.json` — the goaltender lines.
- `/data/long_game_extras.json` — the context blocks: skills by age, team seasons, trophies, birthplaces, NHL Edge speed, draft reach rate by round and decade.
- `/data/long_game_players/index.json` — the player stage index, with the bucket rule.
- `/data/long_game_players/{id mod 100}.json` — one landing per name on the sheet.
- `/data/long_game_logs/{id mod 40}.json` — 2025-26 and 2024-25 game logs for the active names.

## The sources

`api.nhle.com/stats/rest/en` skater and goalie summary, bios, time on ice, realtime and penalties reports, season by season. `records.nhl.com/site/api/draft` from 1963. `api-web.nhle.com/v1/player/{id}/landing` and the per-season game logs for the named players. Locally, this site's own peak-age study and its Cup ledger. The page never calls the league API at read time: everything is on disk before it ships.

## How it is built

Three builders, run in order. `scripts/build-long-game.js` pulls the century of season reports and writes the career lines. `scripts/long-game-extras.js` runs inside it and writes the seven context blocks. `scripts/build-long-game-players.js` writes the player stage and the game-log buckets. Every raw response is cached, so a rebuild adds only what is missing.
