# Campus Rink scoreboard connection

Connected September 10, 2026 to the public NCAA.com scoreboard, for men's Division I and women's National Collegiate (shown under D1). No account, API key, paid subscription or signup was needed for this connection. This is an undocumented public website feed, without a contracted availability, completeness or latency guarantee.

## Use

Start with `START.command` and keep the server running. Open Around the Rink → Scores. Choose Men’s or Women’s, browse a date, search teams, or use My teams. Followed teams appear first. “Saved seasons” retains the existing season schedules. Today's connected board also appears on Overview.

The server fetches today's and yesterday's boards in the background, including when the browser is closed. On a day with scheduled games or games in progress it checks every 30 seconds, or longer if the source requires it. Empty/current completed boards check every five minutes; other dates hourly. The last seven days are revisited for corrections. The browser checks while the scoreboard is visible, without reloading the page. For local use, your computer must be awake, online, and running the server. The Cloudflare edition uses minute-based scheduled checks independently of this computer; see CLOUDFLARE.md. The Render alternative remains available in HOSTING.md.

Live, Final, Scheduled, Postponed, Canceled, game delay, and unknown states are separate. Missing scores and clocks remain unavailable; a missing score is never converted into 0. Game clocks are displayed as supplied and are never simulated by a countdown. “Report received” is our successful retrieval time, **not** the age of the source's underlying scoring update; that timestamp is not supplied. Connection failures show Delayed (with a saved report) or Unavailable, then retry with bounded backoff. A stopped or late source clock cannot be reliably distinguished from an actual stoppage in play.

## Coverage and remaining work

The feed was verified against March 20, 2026: five men's games and the two women's Frozen Four semifinals. September 10 returned empty boards for both competitions. There were no games in progress in those responses, so live transitions were exercised with isolated test fixtures, not claimed as observed during an actual game. NCAA may list fewer games than other sources. Empty means no source listings, not proof that no college hockey game exists anywhere.

DII, DIII and club live scores are not connected. Standings, season player leaders, roster profiles, polls and simulations still use their existing dated inputs. They are **not recalculated from a partial scoreboard**. Automatic current-season standings and individual statistics need their own validated feeds and team/player identity matching. A score-only update does not provide assists, goalie statistics, league points rules or a complete season record.

ESPN public scoreboard requests returned HTTP 403 during verification. No ESPN connection is claimed. Sportradar offers a documented men's D1 product; account access and a commercial quote would be needed to evaluate a supported replacement. Women's coverage would need separate confirmation. No purchase was made.

## Source and implementation

- NCAA men's scoreboard: https://www.ncaa.com/scoreboard/icehockey-men/d1
- NCAA women's scoreboard: https://www.ncaa.com/scoreboard/icehockey-women/nc
- Public NCAA data host: https://sdataprod.ncaa.com/
- Endpoint format discovery: https://github.com/henrygd/ncaa-api/blob/master/src/scoreboard/scoreboard.ts ; Campus Rink requests NCAA directly, not that project's hosted proxy.
- Sportradar product: https://www.postman.com/sportradar-media-apis/sportradar-media-apis/collection/9iytkoj/sportradar-ncaa-men-s-hockey-v3

`GET /api/scores?group=d1-men&date=2026-03-20` uses a fixed HTTPS origin, known query hash, validated competition/date, response size cap, timeout, schema checks and cache. The local API rejects unsupported groups/dates and foreign Host/Origin headers. It cannot proxy arbitrary URLs. A game missing from a previously received board triggers fallback rather than silently deleting scores; this intentionally requires review if the source legitimately withdraws an event.

`.live-scores.sqlite3` stores complete received daily boards keyed by group and date. Subsequent reports replace the same IDs, so finals and corrections survive restarts without accumulating duplicate results. It is local runtime data and excluded from the app ZIP. Server startup revalidates saved reports before calling them connected. Cache data is not written to the old season snapshots.

`certs/cacert.pem` is Certifi's unmodified Mozilla CA bundle (2026.7.22); `LICENSE-certifi.txt` includes its license. It supplements the system trust store because this machine's older CA set could not validate NCAA's certificate chain. HTTPS certificate and hostname verification remain enabled. Keep the bundle updated as certificates change.
