J. Hofer stole it
J. Hofer stopped 25 of 25 (1.000) — +3.38 goals saved above expected in a 4-goal game.

St. Louis shut out Dallas, 4-0, with J. Hofer playing the game of his life in goal. The Blues were relentless off the rush. Dallas created scoring chances but never finished.
The offensive workload told a different tale. Dallas controlled play with 51% of shot attempts and led in expected goals, 3.38–2.90, yet left empty-handed. The Stars underperformed their workload by 3.38 goals—a gulf between process and result. St. Louis overperformed by 1.10.
Hofer stole the evening. The Blues goaltender posted 25 saves on 25 shots while facing 3.38 expected goals and allowing zero—a performance 3.38 goals better than predicted. St. Louis and Dallas created the same high-danger chances (4–4), but only the Blues finished. J. Oettinger faced 2.90 expected goals but allowed four, and that gap decided the game.
M. McTavish opened from 11 feet off a rebound—a 14% chance—just 3 seconds after C. Parayko's shot from the point. D. Dvorsky added the second from 23 feet off the rush, a 19% chance. Two empty-netters—J. Snuggerud from 64 feet, P. Suter from 58 feet, both 14% chances—sealed the shutout.
Special teams misfired for both (F for both). St. Louis was undisciplined; Dallas was not. The biggest transition concern: 32 rush shots worth 2.81 expected goals allowed, yet Dallas converted none.
What the numbers can't tell you. Whether the finishing was luck or skill, why the benches were run the way they were, who was hurt, and anything said in the room. That is the beat's story, and it is worth reading.
Blues shut out the Stars, 4-0
The Stars deserved better.
The board read STL 4, DAL 0. The chances read STL 2.9, DAL 3.4.
The Stars left 3.4 goals on the table against what their chances were worth.
D. Dvorsky makes it 2–0.
The Stars went 0 for 4 from the slot.
Blues shut out the Stars, 4-0
A model, not a newsroom. Every number on these frames comes from the NHL's play-by-play and our own models. Nothing was watched, guessed or heard from anyone.
Read the full breakdownSnap shot from 11 feet, a 14% chance (a rebound), past J. Oettinger. 3s after a STL shot by C. Parayko. Win probability moved 14 points.On the ice: C. Fowler, P. Buchnevich, B. Carlo, C. McMichael, M. McTavish · against T. Myers, M. Rantanen, W. Johnston, L. Bichsel, J. Hryckowian
Snap shot from 23 feet, a 19% chance (off the rush), past J. Oettinger. Win probability moved 16 points.On the ice: C. Fowler, B. Carlo, R. Thomas, D. Holloway, J. Snuggerud · against E. Lindell, M. Rantanen, M. Heiskanen, W. Johnston, J. Hryckowian
Wrist shot from 64 feet, a 14% chance.
Wrist shot from 58 feet, a 14% chance.
score reads STL–DAL
DAL went 0-for-22 from medium danger on 2.32 expected goals — 2.3 left on the table.
STL finished +1.1 against expected, DAL -3.4.
Snap shots carried the volume: STL went 2-for-15, DAL 0-for-29.
Two things happened in this game: who created the better chances, and who put the puck in the net. They are not the same thing, and this page separates them on purpose.
The one to watch is expected goals— the best single read on who deserved to win. When it disagrees with the scoreboard, that disagreement is usually the story. Nothing here is a projection; every figure is computed from this game's play-by-play. Full glossary →
A+ ≥ +2.5 saved above expected · A ≥ +1.5 · B+ ≥ +0.75 · B ≥ +0.25 · C ≥ −0.25 · D ≥ −0.75 · F below −1.5
A+ ≥ +2.5 saved above expected · A ≥ +1.5 · B+ ≥ +0.75 · B ≥ +0.25 · C ≥ −0.25 · D ≥ −0.75 · F below −1.5
Best skater on the ice by our rating: J. Snuggerud (STL), 18:59 of ice, 1-1, 68% of the expected goals while he was out.
| Skater | TOI | G-A | SOG | ixG | xG% | PD/PT | Impact | /60 | Grade |
|---|---|---|---|---|---|---|---|---|---|
| J. SnuggerudR | 18:59 | 1-1 | 4 | 0.51 | 68 | 0/0 | 2.07 | 6.55 | A+ |
| M. McTavishC | 14:36 | 1-0 | 3 | 0.47 | 93 | 0/0 | 1.39 | 5.70 | A+ |
| P. SuterC | 14:25 | 1-1 | 4 | 0.31 | 18 | 0/0 | 1.34 | 5.57 | A+ |
| C. McMichaelL | 13:03 | 0-1 | 1 | 0.19 | 87 | 0/0 | 1.01 | 4.66 | A |
| P. BrobergD | 23:08 | 0-1 | 1 | 0.37 | 42 | 2/0 | 1.09 | 2.82 | A |
| D. DvorskyR | 13:03 | 1-0 | 2 | 0.31 | 28 | 0/0 | 0.69 | 3.16 | A |
| C. ParaykoD | 20:27 | 0-1 | 2 | 0.17 | 22 | 0/0 | 0.60 | 1.76 | B |
| D. HollowayL | 19:21 | 0-0 | 1 | 0.10 | 68 | 0/0 | 0.38 | 1.18 | C |
| A. JiricekD | 16:35 | 0-0 | 2 | 0.14 | 59 | 0/0 | 0.28 | 1.02 | C |
| C. FowlerD | 22:38 | 0-0 | 2 | 0.05 | 55 | 0/1 | 0.09 | 0.23 | C |
| P. BuchnevichL | 17:11 | 0-0 | 0 | 0.19 | 52 | 0/0 | 0.08 | 0.27 | C |
| B. CarloD | 15:27 | 0-0 | 0 | 0.00 | 48 | 2/2 | 0.01 | 0.06 | D |
| R. ThomasC | 22:59 | 0-0 | 0 | 0.00 | 47 | 0/0 | -0.06 | -0.16 | D |
| R. JohnstonL | 9:56 | 0-0 | 0 | 0.00 | 0 | 0/0 | -0.10 | -0.60 | D |
| J. BerggrenR | 13:48 | 0-0 | 0 | 0.00 | 41 | 0/0 | -0.12 | -0.52 | F |
| T. LindsteinD | 15:13 | 0-0 | 1 | 0.00 | 27 | 0/0 | -0.20 | -0.77 | F |
| A. ToropchenkoR | 5:08 | 0-0 | 0 | 0.00 | 6 | 0/0 | -0.15 | -1.75 | F |
| J. NeighboursL | 13:03 | 0-0 | 1 | 0.09 | 28 | 0/2 | -0.52 | -2.40 | F |
| Skater | TOI | G-A | SOG | ixG | xG% | PD/PT | Impact | /60 | Grade |
|---|---|---|---|---|---|---|---|---|---|
| S. SteelC | 11:19 | 0-0 | 3 | 0.32 | 100 | 0/0 | 0.65 | 3.44 | A |
| W. JohnstonC | 21:49 | 0-0 | 4 | 0.47 | 67 | 0/0 | 0.77 | 2.10 | A |
| A. HyryR | 13:07 | 0-0 | 1 | 0.21 | 78 | 2/1 | 0.57 | 2.63 | B |
| J. RobertsonL | 19:39 | 0-0 | 2 | 0.45 | 67 | 0/0 | 0.63 | 1.92 | B |
| J. BennL | 10:03 | 0-0 | 0 | 0.14 | 100 | 0/0 | 0.48 | 2.85 | B |
| R. HintzC | 16:57 | 0-0 | 0 | 0.14 | 74 | 1/0 | 0.58 | 2.05 | B |
| M. RantanenR | 22:10 | 0-0 | 1 | 0.32 | 65 | 1/0 | 0.59 | 1.61 | B |
| T. SeguinC | 14:55 | 0-0 | 4 | 0.62 | 64 | 0/2 | 0.42 | 1.67 | B |
| M. HeiskanenD | 26:45 | 0-0 | 1 | 0.15 | 58 | 0/0 | 0.49 | 1.10 | C |
| T. MyersD | 13:13 | 0-0 | 1 | 0.14 | 60 | 0/0 | 0.32 | 1.46 | C |
| N. LundkvistD | 15:22 | 0-0 | 2 | 0.14 | 58 | 0/0 | 0.33 | 1.30 | C |
| J. HryckowianC | 17:12 | 0-0 | 1 | 0.03 | 53 | 0/0 | 0.19 | 0.68 | C |
| T. HarleyD | 20:59 | 0-0 | 1 | 0.01 | 64 | 0/1 | 0.07 | 0.19 | D |
| E. LindellD | 18:43 | 0-0 | 1 | 0.01 | 35 | 0/0 | 0.01 | 0.03 | D |
| L. BichselD | 16:02 | 0-0 | 0 | 0.00 | 43 | 0/0 | -0.07 | -0.24 | D |
| J. KivirantaL | 10:18 | 0-0 | 2 | 0.09 | 11 | 0/0 | -0.09 | -0.55 | D |
| R. FaksaC | 11:07 | 0-0 | 1 | 0.15 | 21 | 0/0 | -0.10 | -0.54 | D |
| O. BäckC | 12:03 | 0-0 | 0 | 0.00 | 12 | 0/0 | -0.18 | -0.92 | F |
xG% = share of expected goals while on the ice · PD/PT = penalties drawn / taken · “in N min” = a per-60 rate far above the raw total. Impact = 0.75 G + 0.7 A1 + 0.55 A2 + 0.075 SOG + 0.05 BLK + 0.15 penalties drawn − 0.15 taken + 0.01 faceoff wins − 0.01 losses + 0.3 individual xG + 0.5 on-ice xG for − 0.5 on-ice xG against. Rating = 65% impact + 35% impact per 60, as a percentile among the skaters in this game.
Scratched, STL: D. Dube, J. Barron, Z. Dean. Scratched, DAL: C. Blackwell, K. Capobianco. Referees Chris Rooney and Corey Syvret; linesmen Ryan Gibbons and Matt MacPherson.
STL Created 2.90 xG against a ~2.70 league-average game; 4 high-danger shots (0.82 xG) and 21 rush shots (2.13 xG).
DAL Created 3.38 xG against a ~2.70 league-average game; 4 high-danger shots (0.78 xG) and 32 rush shots (2.81 xG).
STL Allowed 3.38 xG against a ~2.70 league-average game; conceded 4 high-danger shots (0.78 xG) and 32 rush shots (2.81 xG).
DAL Allowed 2.90 xG against a ~2.70 league-average game; conceded 4 high-danger shots (0.82 xG) and 21 rush shots (2.13 xG).
STL Rush shots 21–32, rush xG 2.13–2.81 (rush-based; public data has no zone entries).
DAL Rush shots 32–21, rush xG 2.81–2.13 (rush-based; public data has no zone entries).
STL 0-for-4 on the power play (0%; league ≈21%) with 0.53 PP xG.
DAL 0-for-4 on the power play (0%; league ≈21%) with 0.95 PP xG.
STL +3.38 goals saved above expected on 25 shots against.
DAL +0.90 goals saved above expected on 22 shots against.
STL Took 6 penalties for 26 PIM vs 5 for 15 on the other side.
DAL Took 5 penalties for 15 PIM vs 6 for 26 on the other side.
Grades bounces, not skill — C is neutral
STL Finishing +1.10 goals vs xG plus +3.38 GSAx of save luck = +4.48 total. This grades luck, not skill — C is neutral, A is very lucky.
DAL Finishing -3.38 goals vs xG plus +0.90 GSAx of save luck = -2.48 total. This grades luck, not skill — C is neutral, A is very lucky.
J. Hofer stopped 25 of 25 (1.000) — +3.38 goals saved above expected in a 4-goal game.
Scored 0 on 3.38 xG — -3.38 vs expected. The looks were there; the finish will come back.
Gave up 32 rush shots worth 2.81 xG (0 goals) — transition gaps were there every period.
Tighten neutral-zone structure and keep D gaps closed on entries.
Gave up 21 rush shots worth 2.13 xG (1 goals) — transition gaps were there every period.
Tighten neutral-zone structure and keep D gaps closed on entries.
Took 6 penalties for 26 minutes (opponent: 5 for 15).
Cut the stick infractions — the penalty differential is a controllable.
0 goals on 32 rush shots worth 2.81 xG.
Each club shoots toward its own end — STL left, DAL right — the way you would watch it. A dot's size is how dangerous the look was, from distance and angle; it is a proxy for shot quality, not the xG model the article is written from. Hover a dot for the shooter and the clock.
Dallas is favored by a narrow margin in a game between evenly matched teams. The model projects a 2.8–3.2 outcome with the Stars at 56% win probability—a lead so thin it's barely an advantage.
Goaltending will decide this. When two teams are this close across all measurable categories, the play between the pipes determines who wins.
The Stars' most productive scoring zone over their last five games has been the point. Dallas has scored 3 goals on 15 shots from the perimeter (20%), a rate that shows their primary threat. St. Louis must deny that lane; allowing the Stars to work freely from the point is an easy way to fall behind.
Data: NHL API, Backcheck expected goals model
DAL by 12 points of win probability — a modest lean. Projected score STL 2.8–3.2 DAL; 17% chance it's tied after 60.
Their most productive scoring zone over last 5 games.
Most goals from point (3G on 15 shots, 20%) — deny that lane
Lineups are the players who dressed in each club's last game, with their minutes; clubs confirm tonight's at warm-up. Every player this preview names was in that lineup.