A four-state expected-goals race replayed on the match clock — cumulative xG staircases that grow only as far as the playhead, with real transport buttons, a running scoreline and goal chips that jump the clock.
Preview in your theme
Loading preview…
This component is part of Pro
The install command, prompt and concept map are included with a Pro license — one purchase unlocks every Pro component, forever.
status="ready", uncontrolled — 22 attempts of Ashford Rovers 2–2 Kestrel Bay. Press play to replay the match attempt by attempt, step with the arrow buttons, scrub the range, or press a goal chip to jump the playhead. Ashford finish on roughly twice the xG for the same two goals.
Expected goals · match replay
Sat 11 Apr · 14:00 UTC · Matchday 32
Ashford Rovers0xG 0.00
Kestrel Bay0xG 0.00
0′
Kick-off
Kick-off — press play to replay every attempt in clock order.
0/22
goal (0)
saved (0)
off target (0)
blocked (0)
Each step is one attempt — its height is that attempt's xG, so a big step with no goal shape is a chance spurned. The shaded bands are added time; the dashed rule is half-time.
Kick-off. Ashford Rovers 0, Kestrel Bay 0.
Every attempt in clock order, with its xG, outcome and the running score. The replay is paused after attempt 0 of 22.
Clock
Team
Player
xG
Outcome
Running xG
Score
14′
Kestrel Bay
M. Arslan
0.04
Blocked
0.00 – 0.04
0 – 0
16′
Kestrel Bay
L. Fenwick
0.02
Off target
0.00 – 0.06
0 – 0
17′
Ashford Rovers
J. Halloran
0.13
Blocked
0.13 – 0.06
0 – 0
18′
Ashford Rovers
J. Halloran
0.07
Saved
0.20 – 0.06
0 – 0
27′
Kestrel Bay
R. Delgado
0.06
Goal
0.20 – 0.12
0 – 1
42′
Ashford Rovers
J. Halloran
0.16
Blocked
0.36 – 0.12
0 – 1
43′
Kestrel Bay
M. Arslan
0.06
Saved
0.36 – 0.18
0 – 1
45+2′
Ashford Rovers
S. Petrov
0.31
Goal
0.67 – 0.18
1 – 1
46′
Ashford Rovers
S. Petrov
0.11
Off target
0.78 – 0.18
1 – 1
54′
Ashford Rovers
N. Adeyemi
0.18
Saved
0.96 – 0.18
1 – 1
56′
Ashford Rovers
J. Halloran
0.09
Off target
1.05 – 0.18
1 – 1
56′
Kestrel Bay
T. Bright
0.10
Saved
1.05 – 0.28
1 – 1
58′
Kestrel Bay
M. Arslan
0.79
Goal
1.05 – 1.07
1 – 2
60′
Ashford Rovers
N. Adeyemi
0.16
Off target
1.21 – 1.07
1 – 2
62′
Ashford Rovers
C. Marchetti
0.08
Blocked
1.29 – 1.07
1 – 2
67′
Ashford Rovers
J. Halloran
0.21
Blocked
1.50 – 1.07
1 – 2
77′
Ashford Rovers
N. Adeyemi
0.22
Off target
1.72 – 1.07
1 – 2
77′
Kestrel Bay
L. Fenwick
0.13
Saved
1.72 – 1.20
1 – 2
82′
Ashford Rovers
K. Doyle
0.11
Saved
1.83 – 1.20
1 – 2
84′
Ashford Rovers
N. Adeyemi
0.44
Goal
2.27 – 1.20
2 – 2
87′
Kestrel Bay
L. Fenwick
0.12
Off target
2.27 – 1.32
2 – 2
90+3′
Ashford Rovers
K. Doyle
0.62
Off target
2.89 – 1.32
2 – 2
Paused mid-match, and controlled: value + onValueChange live in this demo, so the playhead is at attempt 14 of 22 on first paint — the card screenshots as real playback state instead of at kick-off. Press play and this caption counts along.
Expected goals · match replay
Sat 11 Apr · 14:00 UTC · Matchday 32
Ashford Rovers1xG 1.21
Kestrel Bay2xG 1.07
60′
Second half
60′ Ashford Rovers · N. Adeyemi — 0.16 xG · Off target
14/22
goal (3)
saved (4)
off target (4)
blocked (3)
Each step is one attempt — its height is that attempt's xG, so a big step with no goal shape is a chance spurned. The shaded bands are added time; the dashed rule is half-time.
60′, attempt 14 of 22. Ashford Rovers, N. Adeyemi, 0.16 xG, off target. Ashford Rovers 1, Kestrel Bay 2. Expected goals 1.21 to 1.07.
Every attempt in clock order, with its xG, outcome and the running score. The replay is paused after attempt 14 of 22.
Clock
Team
Player
xG
Outcome
Running xG
Score
14′
Kestrel Bay
M. Arslan
0.04
Blocked
0.00 – 0.04
0 – 0
16′
Kestrel Bay
L. Fenwick
0.02
Off target
0.00 – 0.06
0 – 0
17′
Ashford Rovers
J. Halloran
0.13
Blocked
0.13 – 0.06
0 – 0
18′
Ashford Rovers
J. Halloran
0.07
Saved
0.20 – 0.06
0 – 0
27′
Kestrel Bay
R. Delgado
0.06
Goal
0.20 – 0.12
0 – 1
42′
Ashford Rovers
J. Halloran
0.16
Blocked
0.36 – 0.12
0 – 1
43′
Kestrel Bay
M. Arslan
0.06
Saved
0.36 – 0.18
0 – 1
45+2′
Ashford Rovers
S. Petrov
0.31
Goal
0.67 – 0.18
1 – 1
46′
Ashford Rovers
S. Petrov
0.11
Off target
0.78 – 0.18
1 – 1
54′
Ashford Rovers
N. Adeyemi
0.18
Saved
0.96 – 0.18
1 – 1
56′
Ashford Rovers
J. Halloran
0.09
Off target
1.05 – 0.18
1 – 1
56′
Kestrel Bay
T. Bright
0.10
Saved
1.05 – 0.28
1 – 1
58′
Kestrel Bay
M. Arslan
0.79
Goal
1.05 – 1.07
1 – 2
60′
Ashford Rovers
N. Adeyemi
0.16
Off target
1.21 – 1.07
1 – 2
62′
Ashford Rovers
C. Marchetti
0.08
Blocked
1.29 – 1.07
1 – 2
67′
Ashford Rovers
J. Halloran
0.21
Blocked
1.50 – 1.07
1 – 2
77′
Ashford Rovers
N. Adeyemi
0.22
Off target
1.72 – 1.07
1 – 2
77′
Kestrel Bay
L. Fenwick
0.13
Saved
1.72 – 1.20
1 – 2
82′
Ashford Rovers
K. Doyle
0.11
Saved
1.83 – 1.20
1 – 2
84′
Ashford Rovers
N. Adeyemi
0.44
Goal
2.27 – 1.20
2 – 2
87′
Kestrel Bay
L. Fenwick
0.12
Off target
2.27 – 1.32
2 – 2
90+3′
Ashford Rovers
K. Doyle
0.62
Off target
2.89 – 1.32
2 – 2
variant="difference", opened at full time with defaultValue — the same replay drawn as one home-minus-away swing around zero. The fill takes the colour of whoever is ahead on chances, and both halves of the axis are labelled so the colour is never the only clue.
Expected goals · match replay
Sat 11 Apr · 14:00 UTC · Matchday 32
Ashford Rovers2xG 2.89
Kestrel Bay2xG 1.32
90+3′
Second half
90+3′ Ashford Rovers · K. Doyle — 0.62 xG · Off target
22/22
goal (4)
saved (6)
off target (7)
blocked (5)
Each step is one attempt — its height is that attempt's xG, so a big step with no goal shape is a chance spurned. The shaded bands are added time; the dashed rule is half-time.
90+3′, attempt 22 of 22. Ashford Rovers, K. Doyle, 0.62 xG, off target. Ashford Rovers 2, Kestrel Bay 2. Expected goals 2.89 to 1.32.
Every attempt in clock order, with its xG, outcome and the running score. The replay is paused after attempt 22 of 22.
Clock
Team
Player
xG
Outcome
Running xG
Score
14′
Kestrel Bay
M. Arslan
0.04
Blocked
0.00 – 0.04
0 – 0
16′
Kestrel Bay
L. Fenwick
0.02
Off target
0.00 – 0.06
0 – 0
17′
Ashford Rovers
J. Halloran
0.13
Blocked
0.13 – 0.06
0 – 0
18′
Ashford Rovers
J. Halloran
0.07
Saved
0.20 – 0.06
0 – 0
27′
Kestrel Bay
R. Delgado
0.06
Goal
0.20 – 0.12
0 – 1
42′
Ashford Rovers
J. Halloran
0.16
Blocked
0.36 – 0.12
0 – 1
43′
Kestrel Bay
M. Arslan
0.06
Saved
0.36 – 0.18
0 – 1
45+2′
Ashford Rovers
S. Petrov
0.31
Goal
0.67 – 0.18
1 – 1
46′
Ashford Rovers
S. Petrov
0.11
Off target
0.78 – 0.18
1 – 1
54′
Ashford Rovers
N. Adeyemi
0.18
Saved
0.96 – 0.18
1 – 1
56′
Ashford Rovers
J. Halloran
0.09
Off target
1.05 – 0.18
1 – 1
56′
Kestrel Bay
T. Bright
0.10
Saved
1.05 – 0.28
1 – 1
58′
Kestrel Bay
M. Arslan
0.79
Goal
1.05 – 1.07
1 – 2
60′
Ashford Rovers
N. Adeyemi
0.16
Off target
1.21 – 1.07
1 – 2
62′
Ashford Rovers
C. Marchetti
0.08
Blocked
1.29 – 1.07
1 – 2
67′
Ashford Rovers
J. Halloran
0.21
Blocked
1.50 – 1.07
1 – 2
77′
Ashford Rovers
N. Adeyemi
0.22
Off target
1.72 – 1.07
1 – 2
77′
Kestrel Bay
L. Fenwick
0.13
Saved
1.72 – 1.20
1 – 2
82′
Ashford Rovers
K. Doyle
0.11
Saved
1.83 – 1.20
1 – 2
84′
Ashford Rovers
N. Adeyemi
0.44
Goal
2.27 – 1.20
2 – 2
87′
Kestrel Bay
L. Fenwick
0.12
Off target
2.27 – 1.32
2 – 2
90+3′
Ashford Rovers
K. Doyle
0.62
Off target
2.89 – 1.32
2 – 2
Degenerate feed — 40 minutes of added time (capped at 15), a 118th minute (pulled back to 90), an xG of 1.6 (clamped to 1), an unreadable minute (left out and counted), a 0.00 xG attempt that steps by nothing, a shooter whose name cannot fit, and an away side with no usable attempt at all. The footnote says what was moved and what was dropped; the geometry survives all of it.
Expected goals · match replay
Sat 11 Apr · 14:00 UTC · Matchday 32
Ashford Rovers0xG 0.00
Stonecross Athletic Reserves0xG 0.00
0′
Kick-off
Kick-off — press play to replay every attempt in clock order.
0/4
goal (0)
saved (0)
off target (0)
blocked (0)
1 attempt carries no usable minute or xG — left out of the replay and out of every figure above. 2 attempts sat outside the legal range (minute, added time or xG) and were pulled back to the edge.
Each step is one attempt — its height is that attempt's xG, so a big step with no goal shape is a chance spurned. The shaded bands are added time; the dashed rule is half-time.
Every attempt in clock order, with its xG, outcome and the running score. The replay is paused after attempt 0 of 4.
Clock
Team
Player
xG
Outcome
Running xG
Score
12′
Ashford Rovers
Konstantinos Papadopoulos-Whitfield
0.09
Saved
0.09 – 0.00
0 – 0
45+15′
Ashford Rovers
S. Petrov
1.00
Goal
1.09 – 0.00
1 – 0
66′
Ashford Rovers
K. Doyle
0.00
Blocked
1.09 – 0.00
1 – 0
90′
Ashford Rovers
—
0.31
Off target
1.40 – 0.00
1 – 0
One attempt, two frames — the shortest legal replay. Step forward once and the transport is already at full time: the forward button turns aria-disabled rather than vanishing under the finger, and play becomes replay.
Expected goals · match replay
Sat 11 Apr · 14:00 UTC · Matchday 32
Ashford Rovers0xG 0.00
Kestrel Bay0xG 0.00
0′
Kick-off
Kick-off — press play to replay every attempt in clock order.
0/1
goal (0)
saved (0)
off target (0)
blocked (0)
Each step is one attempt — its height is that attempt's xG, so a big step with no goal shape is a chance spurned. The shaded bands are added time; the dashed rule is half-time.
Kick-off. Ashford Rovers 0, Kestrel Bay 0.
Every attempt in clock order, with its xG, outcome and the running score. The replay is paused after attempt 0 of 1.
Clock
Team
Player
xG
Outcome
Running xG
Score
8′
Ashford Rovers
J. Halloran
0.27
Goal
0.27 – 0.00
1 – 0
status="empty" — the fixture exists but no attempt has been logged yet. A ready payload with zero usable attempts lands here too, rather than drawing two flat zero lines.
Expected goals · match replay
Sat 11 Apr · 14:00 UTC · Matchday 32
No attempts to replay yet
Both sides' running xG appears here once the first shot is logged — press play to walk the match minute by minute.
status="loading" — the skeleton keeps the ready layout (scoreline, plot, transport) so the card does not jump when the feed lands.
Expected goals · match replay
Sat 11 Apr · 14:00 UTC · Matchday 32
Loading match replay
status="error" + onRetry — the retry button only renders when onRetry is passed; here it swaps the card to the ready feed.