Commit Graph

58 Commits

Author SHA1 Message Date
josh 7d1649d278 feat: cache-control overhaul so visual changes propagate immediately
CI / Lint (push) Successful in 14s
CI / Test (push) Successful in 12s
CI / Build & Push (push) Successful in 32s
Per-file content-hash versioning on every /static reference, immutable cache
headers on versioned URLs, no-cache on HTML, auto-bumped service worker cache
name with stale-while-revalidate for assets, and a controllerchange listener
that silently reloads the page when a new SW takes control.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 20:11:36 -04:00
josh aaa0899506 style: scale up the bracket on wide displays so it actually fills the screen
CI / Lint (push) Successful in 8s
CI / Test (push) Successful in 10s
CI / Build & Push (push) Successful in 21s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 19:43:14 -04:00
josh 9b8b671e24 fix: even out the two team columns on the series page after dropping the middle versus block
CI / Lint (push) Successful in 6s
CI / Test (push) Successful in 10s
CI / Build & Push (push) Successful in 27s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 19:22:57 -04:00
josh 303db46cc3 refactor: simplify series page — drop redundant versus/headline, blank out placeholder scores, make round badge the bracket link
CI / Lint (push) Successful in 10s
CI / Test (push) Successful in 16s
CI / Build & Push (push) Successful in 32s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 19:18:41 -04:00
josh dc3bfd13b3 style: add soft white glow to team logos so dark crests (TBL) read on dark cards
CI / Lint (push) Successful in 12s
CI / Test (push) Successful in 20s
CI / Build & Push (push) Successful in 26s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 19:01:15 -04:00
josh e0a1c033cf fix: freeze PP clock during intermission so it stops ticking toward zero
CI / Lint (push) Successful in 16s
CI / Test (push) Successful in 11s
CI / Build & Push (push) Successful in 25s
tickClocks iterates every [data-seconds][data-received-at] element. Rendering the PP indicator with those attrs during an intermission made the clock bleed seconds even though play is paused and the penalty isn't running. Drop the ticking attrs when game['Intermission'] is true — render a plain static "PP MM:SS" that resumes ticking on the next live payload.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 18:51:12 -04:00
josh 9eb8a8534a refactor: move power play indicator onto the team row, drop the team name
CI / Lint (push) Successful in 11s
CI / Test (push) Successful in 12s
CI / Build & Push (push) Successful in 27s
The header PP badge repeated the team name that was already visible a row below. Put the indicator on the team that actually has the advantage: "PP 01:47" appears inline next to SOG, and the old ppBadge + .badge-pp styling go away.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 18:45:14 -04:00
josh f1e11a2dc4 style: tighten playoff banner, series, and bracket at ≤480px
CI / Lint (push) Successful in 9s
CI / Test (push) Successful in 9s
CI / Build & Push (push) Successful in 21s
Adds a consolidated narrow-phone breakpoint so the playoff UI reads
cleanly on 375–428px viewports: banner meta stacks vertically (killing
the dangling dot separator), title and trophy shrink, series hero padding
and logos tighten, and the bracket accordion's matchup rows get more
breathing room.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 14:38:53 -04:00
josh 5cdcb2a319 style: soften playoff UI edges and harmonize banner
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 16s
CI / Build & Push (push) Successful in 15s
Swap border-image for the gradient-border trick on the banner and playoff
cards so rounded corners survive. Retone banner bg to a soft radial over
charcoal, replace the hard gold underline with a fading divider, normalize
radii (badges 6px, banner link 10px), add card depth + hover lift, and
rebalance gold usage toward the muted cup-gold-1 tone.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 13:48:06 -04:00
josh 8468655bcf refactor: make the whole playoff banner clickable instead of a Bracket pill
CI / Lint (push) Successful in 8s
CI / Test (push) Successful in 8s
CI / Build & Push (push) Successful in 14s
Wrap the trophy + title + meta group in the bracket link itself so the
whole Stanley Cup Playoffs element doubles as the entry point. Cleaner
banner, one fewer control to style.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 13:15:17 -04:00
josh 64b2e4b5e1 refactor: auto-prompt for notification permission, drop OT alerts button
CI / Lint (push) Successful in 7s
CI / Test (push) Successful in 10s
CI / Build & Push (push) Successful in 19s
Browsers already gate Notification.requestPermission behind a native
prompt, so a dedicated button was redundant UI clutter. Prompting on
load (only when permission state is "default") keeps the flow and
clears space in the banner for future notification types.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 13:12:01 -04:00
josh 4ea6b87326 style: center trophy + title + meta within playoff banner
CI / Lint (push) Successful in 7s
CI / Test (push) Successful in 10s
CI / Build & Push (push) Successful in 14s
Switch the banner to a 3-column grid (1fr auto 1fr) so the main group
sits truly centered regardless of the right-side action cluster width.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 13:08:27 -04:00
josh a88e2edef0 fix: anchor Day N to each round's first game instead of lazy first sighting
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 9s
CI / Build & Push (push) Successful in 19s
The banner read "Day 1 of ~60" on day 2 of the playoffs because the old
anchor recorded whatever date we first polled a playoff game as Day 1.
Now round start dates come from /v1/schedule/playoff-series, so Day N
is authoritative and resets at each round boundary. Drops the noisy
"of ~60" denominator.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 13:03:08 -04:00
josh ebe770fecd feat: make scoreboard playoff-aware with banner, bracket, and series drill-down
CI / Lint (push) Failing after 8s
CI / Test (push) Has been skipped
CI / Build & Push (push) Has been skipped
Turn a regular-season-looking Tuesday into a full playoff experience:

- Playoff banner with round + day + series + elimination counts, gold/silver
  Cup theme toggled by body.playoff-mode
- Series context on each playoff card: round chip, series score, stake badges
  (GAME 7, CLINCHER, PIVOTAL), and one-line blurb
- Game 7s pin to a new Spotlight section above Live
- Playoff OT renders with SUDDEN DEATH badge and pulsing gold border
- Client-side OT notifications via bell button in the banner
- New /series/<id> drill-down with headline, next-game, and game-by-game history
- New /bracket page: 7-column desktop grid, accordion on mobile
- Day N banner count auto-anchors on first playoff scoreboard hit
- SQLite cache for bracket + per-series schedules, stale-on-failure up to 24h

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 12:47:31 -04:00
josh 108b77ed39 feat: inline power play indicator as compact badge in card header
CI / Lint (push) Successful in 45s
CI / Test (push) Successful in 8s
CI / Build & Push (push) Successful in 1m8s
Moves the PP team + countdown into the badges row next to period and
clock, freeing up a full line of vertical space on each live card.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 11:05:38 -04:00
josh 7784eaf9ce feat: overhaul hype score algorithm with 9 hockey-driven improvements
CI / Lint (push) Successful in 6s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 16s
- Empty net detection: pulled goalie triggers +150-250 bonus, stacks with PP
- Playoff series importance: Game 7 Cup Final = 200, elimination games scale
  by round; fallback of 100 when series data unavailable
- Period-aware score differential: 2-goal deficit penalty DECREASES in final
  2 min of P3 (goalie-pull zone), 3+ goal games get harsher penalties late
- Persistent comeback narrative: tracks max deficit, sustained bonus for 2+
  goal recoveries instead of one-shot spike (0-3 to 3-3 = 150 persistent)
- Shootout special handling: flat base 550 with no time component; ranks below
  dramatic close P3 games (skills competition, not hockey)
- Multi-man advantage: parses situationCode for 5v3/4v3, applies 1.6x PP mult
- Non-linear time priority: elapsed^1.5 curve weights final minutes more
- Matchup multiplier rebalance: P1/P2 from 2.0/1.65 to 1.5, tiebreaker not
  dominant factor
- Frontend gauge max raised from 700 to 1000 with adjusted color thresholds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 19:02:43 -04:00
josh f652743333 feat: add intermission section separate from live games
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 7s
CI / Build & Push (push) Successful in 18s
Games in intermission now appear in their own section between Live and
Scheduled. The section is hidden when no games are in intermission,
matching the behavior of the other section headings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:50:47 -04:00
josh 429c42e7b0 fix: scale badges and hype label at desktop breakpoints
CI / Lint (push) Successful in 6s
CI / Test (push) Successful in 8s
CI / Build & Push (push) Successful in 21s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:43:27 -04:00
josh cf0dec3513 fix: scale section headings with desktop breakpoints
CI / Lint (push) Successful in 6s
CI / Test (push) Successful in 8s
CI / Build & Push (push) Successful in 17s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:26:30 -04:00
josh 58c31d6766 feat: responsive desktop scaling for game cards
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 18s
Adds two desktop breakpoints (900px, 1400px) that progressively
increase card width (290→340→400px), logo size (40→48→56px), score
font size (1.6→1.9→2.2rem), and team name size. Adds max-width on
main to keep layout centred on ultra-wide screens.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:23:47 -04:00
josh 3d77c7cd5a feat: PWA support with hockey puck icon
CI / Lint (push) Successful in 7s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 17s
Adds full PWA compliance: web app manifest, service worker with
cache-first static / network-first scoreboard strategy, and a
generated hockey puck icon (512, 192, 180, 32px) on the app's
dark navy background. Includes all required meta tags for iOS
standalone mode and a /favicon.ico route.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:04:33 -04:00
josh 8945b99782 feat: power play indicator with live countdown clock
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 14s
Shows a red pill below the team rows when a PP is active, displaying
the team on the power play and a ticking countdown. PP clock always
resyncs from the API (no local anchoring) since 2-minute penalties
are short enough that accuracy matters throughout. Removed the old
inline PP text from team rows.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 14:58:31 -04:00
josh 257e2151c8 fix: smooth intermission clock by preserving local anchor across renders
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 16s
Snapshot the locally-computed clock state before each re-render and
restore it afterwards, so the API response doesn't cause a visible
jump. Only resync to the API value in the final 60 seconds, where
accuracy matters.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 14:55:48 -04:00
josh 96529c4705 feat: smooth clock countdown for intermission and live play
CI / Lint (push) Successful in 6s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 17s
Store seconds + received-at timestamp on time badge. A 1s interval
decrements locally so the clock never stutters between API polls.
Drift-corrected: always computed from the anchored API value, not
accumulated ticks. Re-render on each API response reanchors to the
real value.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 14:51:05 -04:00
josh 62afc1001e feat: amber top border for intermission games
CI / Lint (push) Successful in 7s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 15s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 14:10:02 -04:00
josh 56feb0a5f2 polish: improve game card aesthetics
CI / Lint (push) Successful in 19s
CI / Test (push) Successful in 8s
CI / Build & Push (push) Successful in 18s
- larger scores (1.6rem), logos (40px), and card width (290px)
- green top border accent on live game cards
- section headings reduced to small muted caps
- more breathing room in team rows
- slightly larger card radius and gap

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 14:00:18 -04:00
josh ed05d6adfc refactor: replace shots bar with inline SOG on team rows
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 15s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:57:00 -04:00
josh 889f429dc6 feat: move shots bar between team rows for cleaner layout
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 14s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:53:40 -04:00
josh 1394b21fb3 fix: use monochromatic near-white and slate gray for shots bar
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 14s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:49:52 -04:00
josh cb712245c2 fix: show shots bar during intermission
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 14s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:46:42 -04:00
josh 869a7a91b7 fix: use cyan and lime for shots bar
CI / Lint (push) Successful in 9s
CI / Test (push) Successful in 7s
CI / Build & Push (push) Successful in 13s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:44:59 -04:00
josh 66fff68e6a fix: use sky blue and pink for shots bar to improve contrast
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 11s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:42:41 -04:00
josh bada8c0b7b fix: use perceptually balanced colors for shots bar
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 6s
CI / Build & Push (push) Successful in 13s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:40:59 -04:00
josh 9ad563ed3f feat: add shots on goal bar to live game cards, clean up gitignore
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 13s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 13:19:59 -04:00
josh da277e41a4 fix: center game boxes on page
CI / Lint (push) Successful in 4s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 14s
2026-03-29 09:48:47 -04:00
josh d1d711828c fix: center and resize page title and section headings
CI / Lint (push) Successful in 5s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 16s
2026-03-29 09:45:18 -04:00
josh 10d7cb9b02 refactor: rewrite UI with clean layout, fetch API, and proper card structure
CI / Lint (push) Successful in 4s
CI / Test (push) Successful in 5s
CI / Build & Push (push) Successful in 14s
2026-03-29 09:41:34 -04:00
goddard daabae1e49 fix: add shootout indicator 2024-02-25 01:17:04 -05:00
goddard f059d4228b fix: raise gauge ceiling to 700 2024-02-22 23:04:38 -05:00
goddard 3edb84c333 fix: change scale to 650 instead of 600 2024-02-22 01:16:31 -05:00
goddard dfb86f6fd5 changes hype meter scale to 600 instead of 700 2024-02-22 00:14:14 -05:00
goddard 4da3c2dfdd fix: live game adjustments 2024-02-21 23:42:41 -05:00
goddard fe7449537b fix: minor header adjustments 2024-02-21 18:34:26 -05:00
goddard dd8d1ca12b fix: adjust pre and final state 2024-02-21 01:30:00 -05:00
goddard d285314a28 hotfix: define font size for more consistent look 2024-02-21 01:00:03 -05:00
goddard 53f0e69cc5 feature: adds hype meter to replace game score 2024-02-21 00:40:35 -05:00
goddard 31b4846287 fix: styles.css adjust live games 2024-02-20 22:09:45 -05:00
goddard a329c2e8b2 fix: styles.css adjustments 2024-02-20 14:32:17 -05:00
goddard 24de212b98 remove unnecessary comments 2024-02-20 01:35:24 -05:00
goddard 6abcd2e448 fix: change spacing between rows 2024-02-20 01:27:19 -05:00