↑↓move ↵open escclose Players, teams and this week's games · type a position like "rb" for the list

Players, teams and this week's games. Type a position like "rb" for the list.

Releases

2.0.1

All releases, newest first

For you

  • The track record scores a game from the first forecast run after its final. A Sunday final used to wait for the next data refresh and then the next run before it counted. Until a game's box scores arrive, its players' projections show as pending.
  • Every address in the sitemap and every page's canonical link now ends in a slash, the form the site serves, so search engines are no longer sent through a redirect for each page. On 2026-10-07, 5,030 of the 5,049 sitemap addresses lacked it.
  • A player who was on the field and had no carry, catch or pass now counts as 0 points in the track record, on his player page and in a game page's players table, beside every other scored player, instead of as a player who did not play or a game with no stats for him. The count of players who did not play is corrected with it: about a third of the players it held had been on the field. The projections themselves stand as published.
  • Archived editions of a game or a ranking stay at their addresses, and the sitemap no longer lists them. An edition of a game in this season's schedule names that game's page as its canonical, the latest run's rankings name the current rankings page, and every other edition asks search engines not to index it.
  • A game page's title names both clubs in full, for example Pittsburgh Steelers at Cleveland Browns, Week 4 2026 forecast, where it used to read PIT at CLE. Its link preview and its structured data name the clubs the same way.
  • Nothing on the site links to a Terms page, which does not exist, and the link check now holds every link to a page the site has built.
  • The live game feed has an address on the site's own domain, live.sporacle.app. The pages do not use it yet.
  • Game pages are allowed to read the live game feed from live.sporacle.app as well as from its old address, ready for the switch.

Under the hood

  • The track record reads the results the publishing run already holds: the schedule from the master with the facts channel's confirmed finals applied, for both the scoring and the week it is complete through. Wherever the master has a result, the master's result is the one scored. sporacle track-record applies the stored schedule fact the same way.
  • One function, servedPath in seo.ts, gives the served form for the sitemap and the canonical link, and a build test holds every sitemap address to a built page whose canonical is that same address.
  • When a published player has no stats row for a game whose box score is in, the track record now reads his offensive snaps from the snap counts, joined through the id crosswalk. Offensive snaps mean he played and he is scored 0.0; no crosswalk entry, no snap row or no offensive snap keeps him as did not play. Snap counts arrive later than the box scores, so such a player reads as did not play until they land, and never as 0 before.
  • The published actual points per player per game read the same snap count lookup as the track record, from one shared function: a player with no stats row who took offensive snaps in a final game whose box score is in is published with 0.0 in every scoring format, so his player page and the track record give one answer. The internal standings read it too. Offensive linemen are left out of the lookup, and without a snap row a player stays out of the file, as before.
  • The sitemap drops every run id address, 3,024 of its 5,049 on 2026-10-07, and a build test fails on any sitemap address that carries one or any edition page that neither names a built canonical nor asks not to be indexed.
  • teamFullName and gameDocumentTitle in games-view.ts make the title for a game's page and for each archived edition of it.
  • The link check reports a missing page whether or not its address ends in a slash. It used to let /terms/ through while catching /terms.
  • The live Worker also answers at live.sporacle.app, a custom domain set in its wrangler.toml, and its workers.dev address stays on through the switch.
  • The page security policy allows live.sporacle.app beside the workers.dev address, and a Pages build fails when PUBLIC_LIVE_API_BASE names a host that policy does not allow.
  • The pipeline and site run on newer versions of their libraries (duckdb, pandas, numpy, scikit-learn, boto3, google-genai and ruff for the pipeline; satori, Playwright, happy-dom, tsx and the Node types for the site), with no change to what they publish.