v1.2.9 - 2026-08-31
🚀 * New Feature - Regular Season / Playoffs buttons on five team blocks: Season Record, Season Statistics, Team Rankings, Team Leaders and Player Averages. They used to count every game a season contains, so a team that made the playoffs read 50-44 over 94 games while the Standings table right below it read 45-37 over 82. Each block now opens on Regular Season and the other stages are one click away. A playoff view ranks a team against the teams that made the playoffs, not all 30, and Team Leaders lists only the players who played that stage. The buttons show up on seasons where every imported game carries its stage (NBA, NFL, Euroleague). Blocks reading live provider aggregates are unchanged, because that data arrives already totalled.
⚠️ * Note - These numbers change on your site after updating. Nothing is recalculated, the same games are counted differently. To keep the old numbers, set "Default Stats Stage" to All in Settings & Tools > Settings > Display. A one-time notice after the update explains this with a link to the setting, and each block can pick its own opening stage in the Layout Builder.
🟠 * Fix - Standings HOME and AWAY columns no longer disagree with the W-L on their own row. They counted every phase of the season together, so a team showed 45-37 beside HOME 25-22 and AWAY 25-22, which adds up to 94 games rather than 82. This was wrong on every league and worst on cups: a Champions League group table counted a team's whole European run instead of its 6 group games.
🟠 * Fix - "Upcoming Games" no longer lists playoff games that were never played. A bracket is imported with every game a series could need, so a series ending 4-1 left games 6 and 7 sitting in Upcoming forever. On a finished season that meant 33 games dated months in the past.
🟠 * Fix - A tab whose block has nothing to show is now dropped from the tab bar instead of opening an empty panel.
🟢 * Add - The Description block now ships in the default team, player and season layouts, so text you enter on an entity appears without editing the layout first.
⚠️ * Note - These numbers change on your site after updating. Nothing is recalculated, the same games are counted differently. To keep the old numbers, set "Default Stats Stage" to All in Settings & Tools > Settings > Display. A one-time notice after the update explains this with a link to the setting, and each block can pick its own opening stage in the Layout Builder.
🟠 * Fix - Standings HOME and AWAY columns no longer disagree with the W-L on their own row. They counted every phase of the season together, so a team showed 45-37 beside HOME 25-22 and AWAY 25-22, which adds up to 94 games rather than 82. This was wrong on every league and worst on cups: a Champions League group table counted a team's whole European run instead of its 6 group games.
🟠 * Fix - "Upcoming Games" no longer lists playoff games that were never played. A bracket is imported with every game a series could need, so a series ending 4-1 left games 6 and 7 sitting in Upcoming forever. On a finished season that meant 33 games dated months in the past.
🟠 * Fix - A tab whose block has nothing to show is now dropped from the tab bar instead of opening an empty panel.
🟢 * Add - The Description block now ships in the default team, player and season layouts, so text you enter on an entity appears without editing the layout first.
v1.2.8 - 2026-08-27
🚀 * New Feature - Playoff series standing - game pages and game cards now show where a playoff series stands: "Knicks lead 3-2", "Series tied 2-2", "Knicks win series 4-2". It reads the series score the data provider already sends with each playoff game, so there is nothing to configure and no extra API requests. Regular season games are left alone, and a series that hasn't started yet shows nothing. The three wordings are editable under Translations.
🟠 * Fix - An upcoming playoff game no longer shows the series standing frozen at the moment it was imported. A Game 6 imported after Game 3 used to read "leads 2-1" right up until tip-off, even after the series had moved to 3-2. The kickoff sync now refreshes it, at no extra API cost.
🚀 * New Feature - Per-season sync control (API & Import) - every season row has a new Sync column with Auto / On / Off. On Auto the plugin checks every 6 hours, starts syncing any season with upcoming games, and stops a league that has gone 30 days without one - that number is yours under API Config > Season Scheduling. Cups keep syncing until their season year has passed, since a knockout competition has no upcoming games between rounds. Seasons you set to On or Off by hand are never touched. Background sync stops spending API requests on seasons that ended years ago, and "Preview next run" shows what the next check would change before you leave it running.
⚠️ * Note - After updating, the first schedule check runs within a few hours. Until it does, background sync stays quiet - that is expected and nothing needs doing. If you switch "Schedule Seasons Automatically" off, only the seasons you set to On by hand are synced.
🟢 * Add - Player Splits now has the same season and stage buttons as the other player stats blocks - All, All {League}, and one button per season, plus Regular Season / Playoffs when a single season is selected. The Home/Away, Monthly and Wins/Losses tables all follow the selection, and each Splits block can choose which stage it opens on from its "Default Stage" option in the Layout Builder.
🟠 * Fix - The API & Import page now flags a linked sub-season you have not imported. NBA Cup games count as regular season games for the NBA, but the data provider files them under a separate season, so importing the NBA on its own left player regular season totals a few games short with nothing on screen to explain the gap.
🟠 * Fix - "Exclude from Stats" and "Include in Stats" on the Games list now work. The row action had never done anything since it shipped, so a game you excluded by hand stayed in the stats. The "Link to parent" action on the Seasons list was dead for the same reason.
🟠 * Fix - An upcoming playoff game no longer shows the series standing frozen at the moment it was imported. A Game 6 imported after Game 3 used to read "leads 2-1" right up until tip-off, even after the series had moved to 3-2. The kickoff sync now refreshes it, at no extra API cost.
🚀 * New Feature - Per-season sync control (API & Import) - every season row has a new Sync column with Auto / On / Off. On Auto the plugin checks every 6 hours, starts syncing any season with upcoming games, and stops a league that has gone 30 days without one - that number is yours under API Config > Season Scheduling. Cups keep syncing until their season year has passed, since a knockout competition has no upcoming games between rounds. Seasons you set to On or Off by hand are never touched. Background sync stops spending API requests on seasons that ended years ago, and "Preview next run" shows what the next check would change before you leave it running.
⚠️ * Note - After updating, the first schedule check runs within a few hours. Until it does, background sync stays quiet - that is expected and nothing needs doing. If you switch "Schedule Seasons Automatically" off, only the seasons you set to On by hand are synced.
🟢 * Add - Player Splits now has the same season and stage buttons as the other player stats blocks - All, All {League}, and one button per season, plus Regular Season / Playoffs when a single season is selected. The Home/Away, Monthly and Wins/Losses tables all follow the selection, and each Splits block can choose which stage it opens on from its "Default Stage" option in the Layout Builder.
🟠 * Fix - The API & Import page now flags a linked sub-season you have not imported. NBA Cup games count as regular season games for the NBA, but the data provider files them under a separate season, so importing the NBA on its own left player regular season totals a few games short with nothing on screen to explain the gap.
🟠 * Fix - "Exclude from Stats" and "Include in Stats" on the Games list now work. The row action had never done anything since it shipped, so a game you excluded by hand stayed in the stats. The "Link to parent" action on the Seasons list was dead for the same reason.
v1.2.7 - 2026-08-22
🟠 * Fix - Background sync could stall for good on games the data provider has deleted - usually "if necessary" playoff games that were never played. It retried the same handful of dead games every 30 seconds and never moved on, so scores stopped filling in and the wasted requests counted against your API plan. Those games are now marked as skipped after the first empty response, and the sync carries on.
🟠 * Fix - Background sync now takes a different sport each run instead of always starting with the first one, so a backlog in one sport can't stop the others from updating.
🟠 * Fix - The API & Import page now tells you when a background sync task is mid-run rather than idle. It shows how long the run has been going and warns if a run hasn't finished within a day - previously that looked identical to the task being switched off.
🟠 * Fix - Background sync now takes a different sport each run instead of always starting with the first one, so a backlog in one sport can't stop the others from updating.
🟠 * Fix - The API & Import page now tells you when a background sync task is mid-run rather than idle. It shows how long the run has been going and warns if a run hasn't finished within a day - previously that looked identical to the task being switched off.
v1.2.6 - 2026-08-19
🟢 * Add - New "Fill Stage Tags" button on the API & Import page fills the missing regular season / playoffs tag on MLB games you have already imported. The provider stopped sending that field for baseball in April 2026, which leaves a season half tagged and hides the stage buttons on player stats. The stage is worked out from bracket information the same import already stored, so it costs no API requests.
🟠 * Fix - Newly imported MLB games get their stage tag worked out during import, so a season you have filled in doesn't drift back to untagged as new games arrive.
🟠 * Fix - Newly imported MLB games get their stage tag worked out during import, so a season you have filled in doesn't drift back to untagged as new games arrive.
v1.2.5 - 2026-08-17
🚀 * New Feature - Regular Season / Playoffs filter on player stats - All / Regular Season / Playoffs buttons now sit on Stat Rings, Game Log, vs. Opponents, Career Statistics and Advanced Stats, and the league ranks under each ring follow the selected stage. The buttons appear only for leagues where every imported game is tagged with its stage (NBA, NFL, EuroLeague, MLB 2025).
🟢 * Add - Career Statistics and Advanced Stats filter every season row and the career total together. A season the provider left untagged keeps all its games and is marked with an asterisk, so a career spanning tagged and untagged seasons never hides games.
🟢 * Add - New "Player Stats Default Stage" setting (Settings & Tools > Settings > Display) chooses whether those five blocks open on Regular Season or All games. Any single block can override it from its "Default Stage" option in the Layout Builder.
🟢 * Add - The stage button labels (All, Regular Season, Playoffs, Other) and the untagged-season footnote are editable under Translations - rename "Other" to "Play-In" if you run the NBA.
🟠 * Fix - Re-updating a game no longer erases its stored stage tag when the provider leaves that field empty. Affects MLB, where the provider stopped sending it in April 2026.
🚀 * New Feature - Injury Report - new blocks for league, team and game pages plus an [anwphub-injuries] shortcode. Players are grouped under Out for season / Out / Day-to-day headings, each with the injury and the date they went out, newest first. On a game page the two teams sit side by side, and a side with nobody hurt says so. Built from injury data the plugin already imports with the roster, so there is no extra API cost.
⚠️ * Note - The NBA is currently the only competition the provider reports injuries for. Everywhere else the blocks hide themselves instead of showing an empty card.
🚀 * New Feature - Clean entity URLs - new per-type "Hub clean slugs" options (Settings > Permalinks) drop the hash suffix from game, team, player and season links, so /player/melton-max instead of /player/melton-max-1a2b3c. The "Permalinks / Slugs" card on the Settings page re-slugs existing entities in one click, and WordPress redirects the old URLs to the new ones.
🟢 * Add - Player, team and season pages now have a WordPress content editor, so the Description block can show a bio or an evergreen write-up. Imports and syncs never overwrite what you type.
🟢 * Add - Umpire crew (home plate and base umpires) now shown on finished MLB game pages. Enable the new "Umpire Crew" import option in API Config, then re-import.
🟠 * Fix - Finished games in lower-tier leagues now import their box scores and stats reliably, even when the provider leaves the "finished" flag empty. Previously these games were skipped and left blank.
🟠 * Fix - Finished games waiting on a re-check now jump the queue ahead of postponed and canceled fixtures, and the re-check runs every 8 hours instead of once a day, so late-finishing games fill in their stats the same day.
🟠 * Fix - API requests now fail fast during a provider outage (DNS failure, connection refused, repeated 5xx) instead of hanging on dead connections, so multi-sport imports and cron don't tie up server workers.
🟠 * Fix - A live game no longer stays stuck showing a frozen in-progress score during a long API outage. After 24 hours the LIVE badge clears and the game is marked finished, then refreshes with the real final score once the API recovers.
🟠 * Fix - Live score updates now pause while the browser tab is in the background and refresh instantly when you switch back, instead of polling every 30 seconds in a tab nobody is watching.
🟠 * Fix - Stalled requests no longer leave a spinner stuck on the page - live scores time out after 12 seconds, and the calendar, scoreboard, team schedule, pitching leaders and game hover cards after 8 seconds. Admin screens show a clear "request timed out" message instead of spinning forever, while long jobs like imports and AI generation keep a much longer allowance.
🟠 * Fix - Charts and stats tables no longer pile up duplicate resize watchers each time a live game page swaps its layout, and switching seasons on a team's player averages table now survives a later window resize.
🟠 * Fix - Admin toggle switches are now announced correctly by screen readers and can be operated from the keyboard.
🟢 * Add - Career Statistics and Advanced Stats filter every season row and the career total together. A season the provider left untagged keeps all its games and is marked with an asterisk, so a career spanning tagged and untagged seasons never hides games.
🟢 * Add - New "Player Stats Default Stage" setting (Settings & Tools > Settings > Display) chooses whether those five blocks open on Regular Season or All games. Any single block can override it from its "Default Stage" option in the Layout Builder.
🟢 * Add - The stage button labels (All, Regular Season, Playoffs, Other) and the untagged-season footnote are editable under Translations - rename "Other" to "Play-In" if you run the NBA.
🟠 * Fix - Re-updating a game no longer erases its stored stage tag when the provider leaves that field empty. Affects MLB, where the provider stopped sending it in April 2026.
🚀 * New Feature - Injury Report - new blocks for league, team and game pages plus an [anwphub-injuries] shortcode. Players are grouped under Out for season / Out / Day-to-day headings, each with the injury and the date they went out, newest first. On a game page the two teams sit side by side, and a side with nobody hurt says so. Built from injury data the plugin already imports with the roster, so there is no extra API cost.
⚠️ * Note - The NBA is currently the only competition the provider reports injuries for. Everywhere else the blocks hide themselves instead of showing an empty card.
🚀 * New Feature - Clean entity URLs - new per-type "Hub clean slugs" options (Settings > Permalinks) drop the hash suffix from game, team, player and season links, so /player/melton-max instead of /player/melton-max-1a2b3c. The "Permalinks / Slugs" card on the Settings page re-slugs existing entities in one click, and WordPress redirects the old URLs to the new ones.
🟢 * Add - Player, team and season pages now have a WordPress content editor, so the Description block can show a bio or an evergreen write-up. Imports and syncs never overwrite what you type.
🟢 * Add - Umpire crew (home plate and base umpires) now shown on finished MLB game pages. Enable the new "Umpire Crew" import option in API Config, then re-import.
🟠 * Fix - Finished games in lower-tier leagues now import their box scores and stats reliably, even when the provider leaves the "finished" flag empty. Previously these games were skipped and left blank.
🟠 * Fix - Finished games waiting on a re-check now jump the queue ahead of postponed and canceled fixtures, and the re-check runs every 8 hours instead of once a day, so late-finishing games fill in their stats the same day.
🟠 * Fix - API requests now fail fast during a provider outage (DNS failure, connection refused, repeated 5xx) instead of hanging on dead connections, so multi-sport imports and cron don't tie up server workers.
🟠 * Fix - A live game no longer stays stuck showing a frozen in-progress score during a long API outage. After 24 hours the LIVE badge clears and the game is marked finished, then refreshes with the real final score once the API recovers.
🟠 * Fix - Live score updates now pause while the browser tab is in the background and refresh instantly when you switch back, instead of polling every 30 seconds in a tab nobody is watching.
🟠 * Fix - Stalled requests no longer leave a spinner stuck on the page - live scores time out after 12 seconds, and the calendar, scoreboard, team schedule, pitching leaders and game hover cards after 8 seconds. Admin screens show a clear "request timed out" message instead of spinning forever, while long jobs like imports and AI generation keep a much longer allowance.
🟠 * Fix - Charts and stats tables no longer pile up duplicate resize watchers each time a live game page swaps its layout, and switching seasons on a team's player averages table now survives a later window resize.
🟠 * Fix - Admin toggle switches are now announced correctly by screen readers and can be operated from the keyboard.
v1.2.4 - 2026-06-23
🟢 * Add - Keyboard navigation and screen-reader support for the Tabs container (arrow keys + Home/End, ARIA tab roles, visible focus ring)
🟢 * Add - Live score updates now flash in the scoring team's colour
🟠 * Fix - Layout Builder SEO titles and descriptions now apply when an SEO plugin (Yoast, Rank Math, SEOPress) is active
🟠 * Fix - WordPress 7.0 admin compatibility (buttons, entity lists, import and shortcode panels)
🟠 * Fix - Active section-navigation button keeps its readable contrast on hover, focus, and click, and now shows a keyboard focus ring
🟠 * Fix - Import task list no longer duplicates a task when the same season is added again
🟠 * Fix - Layout Builder: Colours and Border options now apply only to container blocks, where they take effect
🟠 * Fix - Layout Builder drag-and-drop now places blocks reliably into rows and tabs
🟢 * Update - Freemius SDK updated to 2.13.2
🟢 * Add - Live score updates now flash in the scoring team's colour
🟠 * Fix - Layout Builder SEO titles and descriptions now apply when an SEO plugin (Yoast, Rank Math, SEOPress) is active
🟠 * Fix - WordPress 7.0 admin compatibility (buttons, entity lists, import and shortcode panels)
🟠 * Fix - Active section-navigation button keeps its readable contrast on hover, focus, and click, and now shows a keyboard focus ring
🟠 * Fix - Import task list no longer duplicates a task when the same season is added again
🟠 * Fix - Layout Builder: Colours and Border options now apply only to container blocks, where they take effect
🟠 * Fix - Layout Builder drag-and-drop now places blocks reliably into rows and tabs
🟢 * Update - Freemius SDK updated to 2.13.2
1.2.3 - 2026-04-27
🟠 * Fix - Live games no longer get stuck on a partial score when the API briefly reports "finished" mid-game (period-completeness check + admin audit endpoint to repair existing stuck games)
🟠 * Fix - Tab switching, live layout transitions, and chart refresh now work reliably on WP 6.9+ (continuation of earlier hook regression fix)
🟠 * Fix - Live game scores now update automatically on Calendar, Scoreboard, and Team Schedule shortcodes (regression on WP 6.9+)
🟠 * Fix - Calendar, Scoreboard, and game lists now switch upcoming games to live mode automatically when kickoff happens (no manual refresh needed)
🟠 * Fix - Custom text overrides on the Translations panel are now saved properly
🟠 * Fix - Playoff bracket matchups now align properly with their feeders (Wild Card → Divisional rounds no longer stack to the top)
🟠 * Fix - Playoff bracket now shows #1 seed bye slot at the bottom of the Wild Card column
🟢 * Add - YouTube thumbnails can now be stored locally to avoid sending visitor data to Google on every page view (new Highlights section in Plugin Settings)
🟠 * Fix - Team season records now include all played games (sync discovers games the API reschedules with new IDs)
🟠 * Fix - Player season averages, team rankings, and league leaderboards now include all imported games (existing data is corrected automatically on plugin update)
🟠 * Fix - Playoff games and brackets now import automatically after regular season ends
🟠 * Fix - Live basketball games now show the game clock (e.g. "Q3 5:55") on single game page and list cards
🟠 * Fix - Live baseball games now show the inning ("5th Inning") instead of "Halftime" or "P5"
🟢 * Add - American Football support (game/team/player/season pages, stats, import, box scores, team leaders, player averages)
🟡 * Performance - Faster XML sitemaps with lastmod support for better SEO crawling
🟠 * Fix - Tab switching, live layout transitions, and chart refresh now work reliably on WP 6.9+ (continuation of earlier hook regression fix)
🟠 * Fix - Live game scores now update automatically on Calendar, Scoreboard, and Team Schedule shortcodes (regression on WP 6.9+)
🟠 * Fix - Calendar, Scoreboard, and game lists now switch upcoming games to live mode automatically when kickoff happens (no manual refresh needed)
🟠 * Fix - Custom text overrides on the Translations panel are now saved properly
🟠 * Fix - Playoff bracket matchups now align properly with their feeders (Wild Card → Divisional rounds no longer stack to the top)
🟠 * Fix - Playoff bracket now shows #1 seed bye slot at the bottom of the Wild Card column
🟢 * Add - YouTube thumbnails can now be stored locally to avoid sending visitor data to Google on every page view (new Highlights section in Plugin Settings)
🟠 * Fix - Team season records now include all played games (sync discovers games the API reschedules with new IDs)
🟠 * Fix - Player season averages, team rankings, and league leaderboards now include all imported games (existing data is corrected automatically on plugin update)
🟠 * Fix - Playoff games and brackets now import automatically after regular season ends
🟠 * Fix - Live basketball games now show the game clock (e.g. "Q3 5:55") on single game page and list cards
🟠 * Fix - Live baseball games now show the inning ("5th Inning") instead of "Halftime" or "P5"
🟢 * Add - American Football support (game/team/player/season pages, stats, import, box scores, team leaders, player averages)
🟡 * Performance - Faster XML sitemaps with lastmod support for better SEO crawling
v1.2.2 - 2026-04-01
🟠 * Fix - Pitching leaders now shows late-night West Coast games on the correct date
🟡 * Performance - Faster season page loading on cold cache
🟡 * Performance - Faster season page loading on cold cache
v1.2.1 - 2026-03-29
🟠 * Fix - Pitch data fetch now processes only the imported season instead of all MLB seasons
= 1.2.0 - 2026-03-28 =
🟡 * Improve - Pitch data import now runs in parallel (10 min per game down to ~20 seconds)
= 1.1.9 - 2026-03-28 =
🟠 * Fix - Pitching leaders column legend displaying broken text
🟠 * Fix - Pitching leaders query error when walks exceed strikeouts
🟠 * Fix - Pitching leaders query error when walks exceed strikeouts
= 1.1.8 - 2026-03-28 =
🟢 * Add - Daily Pitching Leaders shortcode with date navigation, Game Score badges, K splits, milestone badges
🟢 * Add - Pitch-by-pitch data import (MLB only) - whiffs, SwStr%, CSW% columns
🟢 * Add - Games display on correct dates based on visitor timezone
🟠 * Fix - Background sync no longer re-checks postponed games repeatedly
🟡 * Improve - Large season sync splits into smaller batches to prevent timeouts
🟢 * Add - Pitch-by-pitch data import (MLB only) - whiffs, SwStr%, CSW% columns
🟢 * Add - Games display on correct dates based on visitor timezone
🟠 * Fix - Background sync no longer re-checks postponed games repeatedly
🟡 * Improve - Large season sync splits into smaller batches to prevent timeouts
= 1.1.7 - 2026-03-26 =
🔵 * Perf - Calendar always shows fresh game data (no stale page cache)
🔵 * Perf - Reduce memory usage in game list queries
🔵 * Perf - Reduce memory usage in game list queries
= 1.1.6 - 2026-03-25 =
🔵 * Perf - Reduce frontend DB queries with bulk warming and caching
🟠 * Fix - Flush rewrite rules on DB upgrade to prevent 404s after reset
🟠 * Fix - Flush rewrite rules on DB upgrade to prevent 404s after reset
= 1.1.5 - 2026-03-25 =
🟠 * Fix - Scoreboard slider cards briefly showing vertically before initialization
= 1.1.4 - 2026-03-25 =
🟢 * Add - Postponed and canceled game status display on game cards and game page header
🟠 * Fix - Postponed status text disappearing on game pages
🟠 * Fix - Postponed status text disappearing on game pages
= 1.1.2 - 2026-03-24 =
🟢 * Add - Dual-column stats comparison with previous season data on upcoming game pages
🟢 * Add - Standings auto-hide when no games have been played
🟠 * Fix - Odds moneyline check failing with non-sequential array keys
🟠 * Fix - Standings badges now respect team display setting
🟡 * Tweak - Hide odds block when only moneyline data available
🟢 * Add - Standings auto-hide when no games have been played
🟠 * Fix - Odds moneyline check failing with non-sequential array keys
🟠 * Fix - Standings badges now respect team display setting
🟡 * Tweak - Hide odds block when only moneyline data available
= 1.1.1 - 2026-03-24 =
🟠 * Fix - Fatal error on season/game pages when object cache returns unexpected type (HUB-BUG-054)
= 1.1.0 - 2026-03-24 =
🟠 * Fix - Games stuck as "Live" after import when not tracked by live pipeline
🟡 * Tweak - Scoreboard slider league label contrast and layout
🟡 * Tweak - Scoreboard slider league label contrast and layout
= 1.0.8 - 2026-03-24 =
🟡 * Tweak - Calendar league header game count wrapped in parentheses
🟠 * Fix - Empty spread pill visible on finished calendar games
🟠 * Fix - Missing country flag for International leagues in season header
🟠 * Fix - Empty spread pill visible on finished calendar games
🟠 * Fix - Missing country flag for International leagues in season header
= 1.0.6 - 2026-03-23 =
🟢 * Add - Sport menu icons for WordPress navigation menus (9 sports, CSS-only)
🟡 * Tweak - Calendar league header game count display simplified
🟡 * Tweak - Calendar league header game count display simplified
= 1.0.5 - 2026-03-23 =
🟢 * Add - "Delete with Data" action for seasons (removes games, stats, and cached data)
🟢 * Add - Manual run buttons for background sync tasks
🟠 * Fix - Live scores not activating for games scheduled later today
🟡 * Tweak - Games admin filter uses entity selector for season picking
🟡 * Tweak - Odds displayed as gray pill to differentiate from scores
🟢 * Add - Manual run buttons for background sync tasks
🟠 * Fix - Live scores not activating for games scheduled later today
🟡 * Tweak - Games admin filter uses entity selector for season picking
🟡 * Tweak - Odds displayed as gray pill to differentiate from scores
= 1.0.4 - 2026-03-23 =
🟠 * Fix - International league flags not saving (database column too narrow)
🟠 * Fix - Import falsely stopping with "Daily API limit reached" on paid plans
🟡 * Tweak - Calendar game count styled as pill badge, hidden when filter active
🟠 * Fix - Import falsely stopping with "Daily API limit reached" on paid plans
🟡 * Tweak - Calendar game count styled as pill badge, hidden when filter active
= 1.0.3 - 2026-03-23 =
🟠 * Fix - International league flags now display correctly (Euroleague, ABA, Eurocup)
🟠 * Fix - Fatal error during hierarchy import (undefined ANWPHUB_DIR constant)
🟠 * Fix - Fatal error on game pages with stale cache data
🟠 * Fix - Fatal error during hierarchy import (undefined ANWPHUB_DIR constant)
🟠 * Fix - Fatal error on game pages with stale cache data
= 1.0.2 - 2026-03-23 =
🟠 * Fix - Missing categories for international leagues (Euroleague, ABA, Eurocup) after hierarchy import
= 1.0.1 - 2026-03-23 =
🟠 * Fix - Missing flag icons for international leagues (ABA, Euroleague, Asian leagues)
🟠 * Fix - Stuck games recovery and duplicate key errors during import
🟡 * Update - Help links added to admin pages with import navigation guard
🟡 * Update - Season linking now applied automatically during import
🟠 * Fix - Stuck games recovery and duplicate key errors during import
🟡 * Update - Help links added to admin pages with import navigation guard
🟡 * Update - Season linking now applied automatically during import
v1.0.0 - 2026-03-22
🟢 * Add - Basketball support with 25-column box scores, aggregate stats, and advanced metrics
🟢 * Add - Baseball support with batting, pitching, and fielding stats (R/H/E display)
🟢 * Add - Layout Builder with game, team, player, and season page layouts per sport
🟢 * Add - 3 game state layouts (upcoming, live, finished) with automatic transitions
🟢 * Add - Row containers (fixed grid + fluid auto-fit) with responsive breakpoints
🟢 * Add - Tabs container with URL hash deep linking and resize hooks
🟢 * Add - Block navigation with scroll spy and sticky positioning
🟢 * Add - Code mode editor for layout builder (compact JSON, validation, enrichment)
🟢 * Add - Live scores with 4-phase backend pipeline and frontend polling
🟢 * Add - Live layout transitions (upcoming → live → finished) via AJAX swap
🟢 * Add - Background sync with 6 configurable tasks and smart season filtering
🟢 * Add - 13 shortcodes: games, calendar, bracket, standings, standings-full, scoreboard, leaders, roster, team-stats, leagues, game, entity-posts, highlights
🟢 * Add - Shortcode builder with live preview (auto-resize iframe, 3 width presets)
🟢 * Add - AI Writer for game reviews and previews (OpenAI integration + JSON export)
🟢 * Add - Odds display with 3 formats (fractional, decimal, American) and per-visitor preference
🟢 * Add - Bulk odds import (moneyline) and per-game enrichment (spread, total, period markets)
🟢 * Add - Video highlights with YouTube integration, validation, and auto-fetch cron
🟢 * Add - Entity selector with sport-aware grid layouts and inline filters
🟢 * Add - Color palette (9 slots) with Kadence theme auto-detection
🟢 * Add - CSS design tokens (border-radius, border-color, background-alt)
🟢 * Add - Text overrides (~140 strings) and entity translations with import/export
🟢 * Add - Entity links connecting blog posts to teams, players, games, and seasons
🟢 * Add - Custom logos with bulk manage (remove/re-fetch) and API overwrite protection
🟢 * Add - Per-sport configurable permalinks with collision-free hash slugs
🟢 * Add - Object cache integration with CDN-friendly immutable URLs and cache hash busting
🟢 * Add - Page cache support for 20+ caching plugins
🟢 * Add - Stale-while-revalidate pattern for aggregate stats with time-bucketed CDN URLs
🟢 * Add - Game peek hover cards (Floating UI) on game results across all templates
🟢 * Add - Automatic timezone conversion for visitor's local time
🟢 * Add - Theme template override system (child theme → parent theme → plugin)
🟢 * Add - Support for AllSportsAPI2, BasketAPI1, and BaseballAPI providers
🟢 * Add - 2 sports available (Basketball and Baseball) + 6 more coming soon
🟢 * Add - Baseball support with batting, pitching, and fielding stats (R/H/E display)
🟢 * Add - Layout Builder with game, team, player, and season page layouts per sport
🟢 * Add - 3 game state layouts (upcoming, live, finished) with automatic transitions
🟢 * Add - Row containers (fixed grid + fluid auto-fit) with responsive breakpoints
🟢 * Add - Tabs container with URL hash deep linking and resize hooks
🟢 * Add - Block navigation with scroll spy and sticky positioning
🟢 * Add - Code mode editor for layout builder (compact JSON, validation, enrichment)
🟢 * Add - Live scores with 4-phase backend pipeline and frontend polling
🟢 * Add - Live layout transitions (upcoming → live → finished) via AJAX swap
🟢 * Add - Background sync with 6 configurable tasks and smart season filtering
🟢 * Add - 13 shortcodes: games, calendar, bracket, standings, standings-full, scoreboard, leaders, roster, team-stats, leagues, game, entity-posts, highlights
🟢 * Add - Shortcode builder with live preview (auto-resize iframe, 3 width presets)
🟢 * Add - AI Writer for game reviews and previews (OpenAI integration + JSON export)
🟢 * Add - Odds display with 3 formats (fractional, decimal, American) and per-visitor preference
🟢 * Add - Bulk odds import (moneyline) and per-game enrichment (spread, total, period markets)
🟢 * Add - Video highlights with YouTube integration, validation, and auto-fetch cron
🟢 * Add - Entity selector with sport-aware grid layouts and inline filters
🟢 * Add - Color palette (9 slots) with Kadence theme auto-detection
🟢 * Add - CSS design tokens (border-radius, border-color, background-alt)
🟢 * Add - Text overrides (~140 strings) and entity translations with import/export
🟢 * Add - Entity links connecting blog posts to teams, players, games, and seasons
🟢 * Add - Custom logos with bulk manage (remove/re-fetch) and API overwrite protection
🟢 * Add - Per-sport configurable permalinks with collision-free hash slugs
🟢 * Add - Object cache integration with CDN-friendly immutable URLs and cache hash busting
🟢 * Add - Page cache support for 20+ caching plugins
🟢 * Add - Stale-while-revalidate pattern for aggregate stats with time-bucketed CDN URLs
🟢 * Add - Game peek hover cards (Floating UI) on game results across all templates
🟢 * Add - Automatic timezone conversion for visitor's local time
🟢 * Add - Theme template override system (child theme → parent theme → plugin)
🟢 * Add - Support for AllSportsAPI2, BasketAPI1, and BaseballAPI providers
🟢 * Add - 2 sports available (Basketball and Baseball) + 6 more coming soon
Customer support service by UserEcho