Releases: 23seriy/readme-scoreboard
Release list
v1.14.2 — Fixed league logos and league keys in the docs
Patch release. No input or output changes — nothing to adjust in your workflow.
Four league logos were broken, and a fifth showed the wrong competition
The Greek Super League, Austrian Bundesliga, Danish Superliga, and Norwegian Eliteserien logos
all returned 404. Those URLs appear in the README's supported-sports table, in the league
showcase, and in supported-leagues.json, so the breakage showed up wherever you looked.
The Swedish Allsvenskan was the quieter problem: its logo loaded perfectly well, but it was
another competition's artwork.
All five now point at ESPN's real values. Denmark and Norway have no league artwork on ESPN at
all — its own API returns a placeholder for both — so they use the generic soccer icon, the same
treatment the NCAA and tennis leagues already get. A daily check now verifies that every league
logo both resolves and matches the logo ESPN reports for that league, so neither failure can
return unnoticed.
Easier to find your league key
The supported-sports table now lists the sport: key for every league. The action takes that key
— epl, not the ESPN endpoint soccer/eng.1 — and the README pointed you at this table to find
it without ever showing it, so the documented lookup wasn't actually followable.
The list of supported leagues in the introduction is now generated from the same source as that
table, so the two can't disagree again. It had been claiming 41 leagues while naming 39.
Local preview for every league
The --demo section of the README now has a copy-ready command for all 41 leagues. It covered 23
before, so if you follow a racing league, a tennis tour, or one of the newer soccer leagues,
there was nothing to paste.
Upgrading
Nothing to do. No inputs changed and no output format changed, so
uses: 23seriy/readme-scoreboard@v1 picks this up automatically once the v1 alias moves to this
tag.
Full changelog: v1.14.1...v1.14.2
v1.14.1 — Corrected league counts in the docs
Patch release. No changes to inputs or output — nothing to adjust in your workflow.
Corrected league counts in the docs
The documentation had drifted from the code. The README claimed 39 supported leagues and the
action's marketplace description claimed 30, while the registry has held 41 leagues for some
time. The description figure had been wrong across several releases, because nothing read the
prose — the test suite passed the whole way through.
Both figures now read 41, and a test asserts that every "<n> leagues" claim in the README and
in the action metadata matches the league registry, so the numbers cannot drift from the code
again.
Upgrading
Nothing to do. No inputs changed and no output format changed, so uses: 23seriy/readme-scoreboard@v1 picks this up automatically once the v1 alias moves to this tag.
Full changelog: v1.14.0...v1.14.1
v1.14.0 — NASCAR, IndyCar, and college basketball spotlights
Two new leagues: NASCAR and IndyCar
The supported-league count is now 41. Both series rank drivers rather than teams, so team: takes a driver abbreviation and the board shows that driver's championship position and championship points.
- uses: 23seriy/readme-scoreboard@v1
with:
sport: nascar
team: HAM
gh_token: ${{ secrets.GH_TOKEN }}### 🏁 Denny Hamlin (HAM)
NASCAR Cup Series · Driver Championship
🟢 Season in progress
🏆 Championship position: 1
📍 Points: 2168
ESPN publishes no driver abbreviations, so both rosters (the top 30 of each championship) use surname-derived codes — HAM for Denny Hamlin, LAR for Kyle Larson, PAL for Alex Palou. All 60 drivers are listed in the player directory.
Player spotlight for college basketball
player: now works with sport: ncaab and sport: ncaaw, shown alongside the team board:
- uses: 23seriy/readme-scoreboard@v1
with:
sport: ncaab
team: ARIZ
player: "Dwayne Aristode"
gh_token: ${{ secrets.GH_TOKEN }}ESPN began serving college basketball athletes the same avgPoints/avgRebounds/avgAssists splits payload and game log the NBA and WNBA use, so these boards show the player's season averages, most recent game, and headshot. Both leagues come off the "leagues without player spotlight" list, which now holds eight leagues.
Fixed: WNBA and G League sample boards drifted every day
Both built their demo dates from Date.now() instead of the pinned demo clock, so regenerating the examples rewrote the WNBA example on every run — the committed file could never match a fresh generation. Demo dates now use the pinned clock, and the determinism test covers every supported league (it previously checked a hand-maintained list that omitted both).
v1.13.1 — Formula 1 constructor fixes
Formula 1's newest constructors now show their championship position
Audi and Cadillac rendered with no championship position and 0 points. ESPN publishes no abbreviation for either constructor, and the constructor-standings lookup matched on abbreviation alone — so it never found them and silently fell back to zeroes.
The lookup now matches on the constructor's ESPN team id first, falling back to the abbreviation for entries that only carry one.
| Before | After | |
|---|---|---|
AUDI |
no position, 0 pts | P8, 17 pts |
CAD |
no position, 0 pts | P11 |
No change for the other nine constructors — they still resolve by abbreviation.
Player-spotlight documentation corrected
The "Leagues without player spotlight" table claimed six leagues while listing eight, and grouped Formula 1 with the individual-athlete tours. Formula 1 tracks constructors, so it now has its own row with its real reason (a constructor board from a teams endpoint with no athlete roster), the count is correct, and the lookup guidance no longer sends Formula 1 users to the player directory.
New tests keep the README list, the generated team/player directories, and the validation allow-list from drifting apart again.
v1.13.0 — Five new soccer leagues
Five new soccer leagues
The supported-league count is now 39. All five new leagues have live standings, schedules, and full team rosters verified against ESPN's public API:
- Greek Super League (
greek) — 14 clubs - Austrian Bundesliga (
austria) — 12 clubs - Danish Superliga (
denmark) — 12 clubs - Norwegian Eliteserien (
norway) — 16 clubs - Swedish Allsvenskan (
sweden) — 16 clubs
All five reuse the shared soccer base class, so they get records, points, conference standings, the next fixture, recent results, and the player: spotlight along with the other soccer leagues.
- uses: 23seriy/readme-scoreboard@v1
with:
sport: austria
team: AUS
gh_token: ${{ secrets.GH_TOKEN }}Two clubs needed non-obvious team keys, because ESPN's own abbreviations are unusable as inputs: Austria Vienna and Rapid Vienna both report as VIE, so they are AUS and RAP here, and Örgryte's key is the ASCII ORG so it can be typed in a workflow.
Player headshots now scale alike
Headshots rendered at visibly different sizes between sports. Each league serves its headshots at a different aspect ratio — ESPN's are 600×436 landscape, MLB's are 213×320 portrait and the NHL's are 336×336 square — and the image was sized by width alone, so the rendered heights came out at 72×52, 72×108 and 72×72. A spotlight from one sport was more than twice as tall as another's. The image is now sized by height, giving every sport the same vertical footprint.
v1.12.1 — WNBA player spotlight
WNBA player spotlight
The player: input now works for sport: wnba, showing the player's season averages (points/rebounds/assists per game), most recent game, and headshot alongside the team board.
- uses: 23seriy/readme-scoreboard@v1
with:
sport: wnba
team: MIN
player: "Napheesa Collier"
gh_token: ${{ secrets.GH_TOKEN }}**🐆 Player Spotlight: Napheesa Collier**
<img src="https://a.espncdn.com/i/headshots/wnba/players/full/3917450.png" alt="Napheesa Collier headshot" width="72" align="right" />
20.1 PPG · 6.1 RPG · 3.1 APGWhy this is also a fix
The README listed the WNBA as unsupported, with the reason "ESPN returns an empty stat payload and an empty game log for every athlete." That is no longer true — ESPN now serves WNBA athletes the same avgPoints/avgRebounds/avgAssists splits payload and game log the NBA uses.
The other exclusions were re-verified against the live APIs rather than assumed. ncaab/ncaaw still return empty stat payloads, and ncaaf/gleague/ncaa_hockey still 404 on the stats endpoint with an empty game log, so those remain unsupported. The README now states a verified reason for each.
Documentation
- Corrected the "Leagues without player spotlight" table
- The
playerinput description no longer claims support is limited tonbaandmlb - New sample board:
examples/wnba-min-napheesa-collier.md
Full changelog: https://github.com/23seriy/readme-scoreboard/blob/main/CHANGELOG.md
v1.12.0 — Player headshots
Player headshots
A player spotlight now shows the athlete's headshot, right-aligned beside the "Player Spotlight" heading — matching how the team logo sits beside the team board.
**👑 Player Spotlight: Luka Doncic**
<img src="https://a.espncdn.com/i/headshots/nba/players/full/3945274.png" alt="Luka Doncic headshot" width="72" align="right" />
33.5 PPG · 7.7 RPG · 8.3 APGSupported everywhere player: is: NBA, MLB, NFL, NHL, and every soccer league.
Notes
- No new input or config. The athlete id was already being fetched by each roster lookup — it's now used, so there's no extra request.
- Optional by design. If a feed supplies no athlete id, the image is omitted and the board renders exactly as before.
- Compact mode stays text-only.
- Per-sport image sources, since one CDN doesn't cover everything: ESPN (NBA/NFL/soccer),
assets.nhle.com(NHL),img.mlbstatic.com(MLB).
Fixed
- Corrected several demo roster athlete ids that pointed at the wrong players — the NHL demo rosters had Panarin, McDavid, Draisaitl, Shesterkin and others mapped to the wrong ids, and the NFL demo roster reused a single id across two teams in four places. Every id is now verified against the live roster endpoint.
Full changelog: https://github.com/23seriy/readme-scoreboard/blob/main/CHANGELOG.md
v1.11.1
What's Changed
Fixed
- The MLB player spotlight Last Game now reports the player's most recent game. The MLB Stats API returns the game log in chronological order (oldest first), so the last game is the final entry, not the first one — previously the season opener was shown instead of the latest result (e.g. Mar 27 instead of Sep 7 for Vladimir Guerrero Jr.).
Full Changelog: v1.11.0...v1.11.1
v1.11.0
What's Changed
Added
- MLB player spotlight support for the
player:input. You can now feature a batter's season line and last game alongside an MLB team board, e.g.player: "Vladimir Guerrero Jr."withsport: mlbandteam: TOR. The spotlight shows the season batting average, home runs, and RBIs, plus the player's last game (hits, home runs, RBIs, batting average, opponent, and date). The Blue Jays demo board now includes Vladimir Guerrero Jr.
Fixed
- The ATP and WTA Last Match fields no longer show an upcoming (scheduled) match as a played result. ESPN's athlete competitions endpoint returns the player's most recent competition, which can be a future opponent with no result yet. The adapters now only report the most recent match that has actually been played (a determined winner or a
completedstatus), so a scheduled opponent isn't rendered with a fake score.
Full Changelog: v1.10.4...v1.11.0
readme-scoreboard v1.10.4
What's Changed
- Fix: the NBA player spotlight Last Game date was rendered in UTC, which shifted late-night games to the wrong day (e.g. a game on Apr 2 showed as Apr 3). It's now rendered in the league's timezone (
America/New_York) so the date shows the actual calendar day the game was played.
Full Changelog: v1.10.3...v1.10.4