# Changelog

## May 2026

- Mark the result of a finished playoff series by striking through the eliminated team's tricode, and drop the redundant "(Final … wins)" tag on completed earlier rounds (both macOS menu and iPhone)
- Playoff section now lists every round played so far (ROUND 1 → current), in ascending order, instead of just the current round — on both macOS menu and iPhone
- Re-fetch the playoff bracket whenever a finished game in the window implies more completed games than the cached bracket records, so the ROUND series score and round advancement no longer get stuck on stale data after a cold launch or the NHL bracket endpoint's post-final update lag
- Tolerate optional `gameCenterLink` and `startTimeUTC` on TBD playoff matchups so the scoreboard decode no longer aborts (was leaving in-memory state frozen and showing stale yesterday rows)
- Reject API state regressions: never let a known game downgrade along the FUT→PRE→LIVE→CRIT→OVER→FINAL→OFF progression, so a brief `/scoreboard/now` glitch can't turn a finished game back into "-:-" on iOS cold launch

## April 2026

- New iPhone target (`IceGlass-iOS`): single-page SwiftUI app mirroring the macOS menu's playoff round + yesterday/today/tomorrow content, with a gear-icon settings sheet (display option + IndieAbout)
- Persistent JSON cache (`Shared/Services/NHLDataCache.swift`) stored in Application Support so iPhone cold launches paint last-known data immediately; surfaced with a stale-aware "Updated …" header (secondary → orange after 5 min → red after 30 min)
- Shared code refactored into a top-level `Shared/` directory consumed by both targets; introduced `MainServiceObserver` protocol so `MainService` no longer imports AppKit
- Team logo download pipeline now produces 128×128 transparent squares directly (via a new `Scripts/square_logo.swift` helper called from `download_team_logos.sh`), so notification attachments can ship the bundled PNG as-is and the banner thumbnail renders crisply without runtime compositing
- Game state tag (PRE / LIVE / CRIT / OVER / FINAL / OFF) now surfaced on each daily game row and on live series rows in the ROUND block
- Playoff series rows in the ROUND block are always clickable (open the NHL series page) and mark completed series as "Final"
- Goal notifications now include the scorer's sweater number, name, and strength tag (PPG / SHG / EN) when available (derived from `/gamecenter/{id}/play-by-play`)
- Regular-season game rows now show the league-wide game number (derived from the NHL gameId)
- New PLAYOFFS ROUND section lists every active series with series score, next game number, and upcoming tip-off time
- Playoff bracket fetched from `api-web.nhle.com/v1/playoff-bracket/{year}` only when needed (initial load and after a playoff game finalizes)
- Removed Team filter option (per-team filtering and team-specific menu bar icon)
- Initial project setup with macOS menu bar app
- NHL scoreboard API integration showing yesterday/today/tomorrow games
- Dynamic polling based on game state (7s live, 10min game day, 1hr idle)
- Click game to open NHL GameCenter, option-click for NHL Videocast
- NHL shield icon in menu bar
- About window using IndieAbout
- Launch at Login support
- Game start notifications (triggered on FUT→LIVE state transition)
- Goal scored notifications with scoring team logo
- 32 team logos downloaded from NHL CDN (SVG + PNG)
- Logo download script for seasonal updates (Scripts/download_team_logos.sh)
- Display Options: Yesterday/Today/Tomorrow, Today/Tomorrow, or Today only
- Game count shown next to menu bar icon
- Game count shown per day in dropdown headers
- Menu item format: "NYR @ WAS 0:2 (FINAL)" / "DAL @ TOR Today @ 7:30 PM"
- NHL shield renders with full color (not template silhouette)
