Skip to content
HockeyOS

Stats engine

Stats are derived from the game sheet, never typed. Fix the goal and everything downstream — points, standings, the widgets on your website — corrects itself.

demohockeyclub.ca/stats

Every number has a receipt.

Stats aren't typed in. They're derived from the game sheet — so when the bench records a goal, the scorer's points, the standings and every widget on your site agree, instantly.

The bench records a goal.

Period, time, scorer, assists, situation. On a phone, offline if it has to be. The sheet is the only thing anyone types.

Every stat is derived from it.

Points, PIM, save percentage, games played, standings, game-winning goals — recomputed from sheets, never edited by hand. Fix the goal and everything downstream corrects itself.

Your website updates itself.

Every widget reads the same numbers. The roster on your site, the standings in the sidebar, the scorers on the front page — one source, no copying.

Game sheet

P2  16:50  #44 SinghA: #9 Patel
P1  3:41  #11 OkaforA: #8 Lindqvist
P1  12:04  #9 PatelA: #27 Andreev

Derived stats

Singh · DGP 14 · 7 G · 12 A
Patel · CGP 14 · 12 G · 17 A
Blades2–1–0 · 5 pts · 1st

Your website

One goal, end to end

From the tap to the number, and back.

Three steps the engine takes every time the bench records something.

Blades U15vs Ridge Wolves
ScoreSheetLineupShots
Live · 3rd11:42

BLD

Blades

2vs1

WLV

Wolves

Goal · BLD Goal · WLV
Final — sign the sheet

This game

  • P3 11:42#44 Singh (#11 Okafor)
  • P2 06:18#9 Patel (unassisted)
  • P1 14:03Ridge Wolves goal
  1. 01 · The sheet

    A goal is recorded.

    The bench taps it in: period, time, scorer, assists, situation. That line on the sheet is the only thing anyone types.

  2. 02 · The engine

    Points, PIM, SV%, standings recompute.

    Goals, assists, points, penalty minutes, power-play and short-handed goals, the game-winner, games played, both goalies' save percentage and goals-against average — all derived from the sheet, none edited by hand.

  3. 03 · The receipt

    The click-through.

    Any number on a player's page opens the games behind it, down to the period, the time and the assist. Open the sheet from there. Fix the sheet, and the number fixes itself.

Games played

Honest games played.

When the bench sets a lineup, GP comes from it: dressed players get the game, scratches don't. A game entered by hand is flagged as manual, so a reader can tell a live sheet from a paper one.

  • GP from lineups when they exist
  • Scratches don't count
  • Manual-entry games are flagged
demohockeyclub.ca/teams/u15-dragons/stats

Standings

Standings that add up.

Wins, losses, ties, games played, goals for and against, differential and points, from finalized sheets only. Overtime losses appear as a column only when a team has one. Tournament standings break ties the way a tournament does: points, head-to-head, goal difference, goals for, wins.

  • W–L–T, with OTL only when there are overtime losses
  • GP, GF, GA, DIFF, PTS
  • Tiebreakers: points, head-to-head, goal difference, goals for, wins
demohockeyclub.ca/standings

Players

Player profiles and careers.

Each player has a public profile: headshot, number, position and a few optional bio fields the club chooses to show. Under it, every season with the club and a career line across them. A birthdate is never on a public page.

  • Headshot, number, position, optional bio
  • Career across seasons
  • Date of birth never public
AS

Blades U15

#44 Singh

Defence · shoots left

Third season with the club. Captain's assistant this year.

SeasonGPGAPTS
2024–25224913
2025–262461117
2026–271471219
Career60173249

Birthdate is never shown on a public page.

The details

What the engine gets right.

Honest games played

GP comes from the lineup when there is one. A scratch doesn't earn a game. A game entered by hand is flagged as manual.

The game-winner, computed

GWG is worked out from the goal log and the final score, not ticked by the scorer. Change the score and it moves.

Both goalies, fairly

Split nets attribute shots and goals against to the goalie who was in. Save percentage and GAA follow from that.

Season and all-time

A season switcher on every table. Career totals across the seasons a player has been with the club.

Paper games, flagged

Games scored on paper can be entered by hand or photographed with the Sheet Scanner. Either way they're marked as manual, so you know which numbers came from a live sheet.

Advanced stats on paid plans

Power-play goals, short-handed goals and game-winners are on the Team and Club plans. Points, PIM, goalie numbers and standings are on every plan.

Questions about hockey stats.

Can we type stats in?

For a game scored on paper, yes — manual entry exists, and the game is flagged as manual so everyone can tell it apart from a sheet scored live. The Sheet Scanner can read the paper sheet for you instead.

Do you track plus/minus?

No. The sheet records who scored and who assisted, not who was on the ice for every goal, so we don't publish a number we can't derive honestly.

Can we fix a mistake after the game?

An admin reopens the sheet, corrects it and finalizes again. Points, PIM, goalie stats, standings and every widget recompute from the corrected sheet. If the sheet had been signed, the signatures are voided with a reason and the trail is kept.

Are stats public?

The player stats and standings widgets are public on your club's website, and so are player profiles if the club turns them on. Birthdates are never shown anywhere public.

Do stats carry between seasons?

Yes. A player's profile shows each season and a career total across them, and every table has a season switcher with an all-time view.

Score one game and watch the numbers move.

Free for one team, forever. No card. The stats widgets are live on your website the same day.