# My Fantasy Hockey League: bring your own roster, 2026-27

Page: https://hockeyinsights.ca/fantasy/my-league/

A client-side desk that takes your own fantasy hockey league and reads it against the 2026-27 pool this site already ranks. There are three ways in and no account behind any of them.

**Door one, ESPN public league.** Type the league id from your ESPN league URL and the season year (ESPN files 2026-27 as 2027) and the browser calls ESPN's own public read endpoint directly, asking for the mTeam, mRoster and mSettings views. That endpoint answers with `Access-Control-Allow-Origin: *`, so the cross-origin call works from the page with credentials omitted. A public league returns every team's roster in one response. A private league returns 401, and the page says so plainly and points at the paste box rather than trying to work around it. Nothing is proxied through this site and no cookie or login is used or asked for. Yahoo requires OAuth even for public leagues, so Yahoo is paste only.

**Door two, paste a roster.** One player a line, or the block copied straight off an ESPN or Yahoo roster page. The parser walks two-, three- and four-word windows of each line against the pool, so slot letters, club codes and jersey numbers around a name do not stop a match. A line beginning with `#` starts a new team, which is how you load every roster in the league at once.

**Door three, a CSV** with name, position and team columns, plus an optional fantasy team column.

The name join is the one `scripts/build-fantasy-consensus.js` uses, ported to the browser: NFD normalisation, combining marks dropped, lowercased, dots and apostrophes removed, everything else collapsed to single spaces, then a club match and a position match to break collisions. A name that still will not resolve becomes a chip you fix by searching the pool. Nothing is guessed and nothing is dropped in silence.

Pick a scoring format (ESPN, Yahoo, Fantrax, Yahoo head-to-head categories or roto, shared with the rest of the fantasy desk). The page then prints your roster ranked, with the published market consensus and the gap beside it. Each row carries the blended rest-of-season points-per-game rate, club games this fantasy week and next from the published NHL schedule, and out, day-to-day, PP1, projected-starter and new-club chips. Position counts run against starting slots you configure. The free agent list is the pool minus everyone rostered, with best-available shelves per position. A trade check prints both sides' figures side by side with no verdict and no composite number.

Everything is written to this device's local storage under `hi-my-league-v1` and nowhere else. There is no upload, no sync and no endpoint of this site in the path. A clear button removes it.

Sources: `/data/fantasy_2027.json` (400 skaters, 61 goaltenders, blended 60/30/10 across 2025-26, 2024-25 and 2023-24), `/data/fantasy_streamers_2027.json` (28 fantasy weeks, 32 clubs), `/data/lineups/index.json` (projected lineup status), and ESPN's public read API when you use door one.

## Weekly lineup capacity

After importing a roster, the weekly planner shows which scheduled games fit your active slots across seven days, which games cannot fit, and the crowded dates behind that count. It starts with the current or next available fantasy week. Slot settings, custom eligibility and date-specific locks remain editable. Goalie opportunities are unconfirmed; a scheduled game does not establish that a player will dress. Candidate scenarios compare capacity rather than adding a player ranking.

League backups and recovery controls remain on this device. If saving fails, the page identifies the unsaved state and lets you retry or export a backup.
