FHFH logo
Buy me a coffee

Native xG Player Surface

Player Underlying Stats

Compare skaters and goalies through one shared filter contract. This route is the landing surface for the sortable player table and the entry point for player drill-down pages.

Default Season Span

2025-26

Canonical landing defaults come from the shared filter-state module, not page-local constants.

Initial Table Family

On-ice counts

Landing and detail pages will resolve the same family contract from mode + display state.

Primary Controls

These dropdowns now drive the canonical landing filter state for season span, season type, strength, score state, stat mode, and display mode. The page now also round-trips that state through the canonical URL contract for reloads and shared links, and the table now fetches through a dedicated server route. Position filtering is aligned to canonical roster codes rather than UI labels.

2025-26Regular season5v5All scoresOn-ice countsScope: NoneCombined traded-player rowsServer query ready

Loading landing rows

Preparing player underlying stats filters...

Primary controls now drive the canonical landing filter state. Mode and display changes reset the default sort for the newly active table family.

Expandable filters cover team context, venue, position, TOI threshold, mutually exclusive scope windows, and combine or split traded-player rows.

On-Ice Counts · default sort xgfPct
Preparing player underlying stats filters...

The landing table now requests data through /api/v1/underlying-stats/players using canonical filter, sort, and pagination params. Native row aggregation is the remaining step.

FHFH logo