Skip to content

Testing#36

Open
alastair-punler wants to merge 20 commits into
nguyenank:mainfrom
alastair-punler:testing
Open

Testing#36
alastair-punler wants to merge 20 commits into
nguyenank:mainfrom
alastair-punler:testing

Conversation

@alastair-punler

Copy link
Copy Markdown

No description provided.

alastair-punler and others added 20 commits April 17, 2026 14:36
- Strip to NHL and IIHF rinks only; NHL rink is now the home page
- Remove all other sports HTML files
- Auto-select team based on click side + period; zone labels on rink
- Remove Player field; shot types reduced to Shot and Goal
- Add Player Stats panel with roster (hits, turnovers, FO win/loss)
- Roster seeded with Perth Thunder 2026 squad
- Roster stats recorded to main shot table with period tracking
- Shaped markers on ice: triangle=turnover, diamond=hit, circle=FO
- Roster stat legend added to rink legend
- CSV upload/download for roster
- Rink size switcher (NHL ↔ IIHF) in Customize Setup modal

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
nginx:alpine serves static files; PORT injected via envsubst template.
Redirects / → /html/ and handles extensionless HTML URLs.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Fix nginx: add explicit index directive, serve root directly instead
  of 301 redirect (avoids Railway health check issues)
- Roster: add minus button per stat cell to undo most recent entry
- Roster: move add-player form and CSV controls below the table
- Fix stat cell text alignment with absolutely-positioned minus button

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Wrap page content in Bootstrap Inputs/Summary tabs
- New js/summary/summary.js: D3-drawn rink, period filter, shot counts
- Rink dimensions fully dynamic from cfgSportA (works for both NHL and IIHF)
- Period 2 shots X-flipped so home always attacks right in summary view
- Dots coloured by team; Shots For/Against counts shown above rink

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Clone live rink SVG (with faceoff circles, dots, all markings)
  instead of simplified D3-drawn version
- Rename cloned clipPath IDs (s-clipBorder etc.) to avoid
  document-level ID conflicts with the inputs rink
- Relabel zones as Offensive Zone / Defensive Zone
- Add Shots / Hits / Turnovers toggle buttons
- Hits render as red diamonds, turnovers as purple triangles
- All event types normalised for period 2 end-switch

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Add Faceoffs toggle to summary event type bar
- getFaceoffDots(): hardcoded positions from SVG for both NHL (200x85)
  and IIHF (60x30) — 9 dots each matching actual SVG circle/spot coords
- aggregateFaceoffs(): nearest-neighbour clustering of normalised FO
  Win/Loss events to each faceoff dot
- renderFaceoffAnalytics(): W/L count + % badge at each dot with data;
  green % >= 50%, red % < 50%; white semi-transparent background
- Period filter applies to faceoff analytics the same as other events

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Each dot now shows P1/P2/P3/OT above it so it's clear why
  a P2 hit on the right correctly appears on the left (defensive zone)
- Normalisation is correct: P2 right = defensive zone → left in summary
- Fallback to period "1" if rowData.period is missing (hidden column edge case)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Inputs tab:
- Dots on the rink now show only the current period's events
- Period change hides/shows dots via CSS class (period-hidden !important)
  so it layers cleanly on top of the existing table-filter visibility system
- All events remain in the table regardless of period selection
- Also applied on page load when restoring saved dots

Summary tab:
- Stats tables rendered at top before the rink, always showing all periods
- Shots table: Home / Away / Total per period + game total
- Player stats table: Hits / Turnovers / FO Win / FO Loss / FO% per period + total

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Top-right of header, requires confirmation before wiping localStorage
and reloading — clears all shots, roster stats, and settings.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Export/import now use a canonical 6-column schema (Period, Team, Type,
Player, X, Y), decoupled from the visible shot-table headers. Stat rows
export as (Type=Label, Player=#NN) and are rebuilt on import with
isStatRow=true + applyImportedStat() so player counters, ice markers,
and the Summary tab all restore correctly. Previously every imported
row was drawn as a regular shot dot.

- js/csv.js: fixed CSV_HEADER schema, STAT label<->key maps; rewrite
  downloadCSV and processCSV; reset roster state before parse and
  renderRoster on complete
- js/roster/roster.js: add applyImportedStat (increment stat + push
  event + drawMarker with id == row id) and resetRosterForImport
- CLAUDE.md: document the new CSV schema and breaking change
- 4.19.2026-15.28.csv: round-trip sample data in the new schema

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
CSV: fix roster stat round-trip via fixed schema
"Defensive Zone / Offensive Zone" was confusing on first use; now shows
"[Away] Shoots" / "[Home] Shoots" so the attacking direction is obvious.
Shot count bar updated to match.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Matches the summary tab change — labels now read "[Team] Shoots"
instead of just the team name.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant