{{ t.teamName }}
based on {{ t.matchesPlayed }} earlier match(es)
@if (t.strength) {
fitness_center
Atk {{ t.strength.attackFactor }}
· Def {{ t.strength.defenseFactor }}
({{ t.strength.matchesUsed }} matches)
}
@if (t.oddsApiName) {
link Odds API: {{ t.oddsApiName }}
}
@if (!t.hasHistory) {
info No historical data in the selected window.
} @else {
sports_soccer
{{ goalsSummary(t) }}
@if (t.seasonAverages.hasData) {
Possession {{ t.seasonAverages.possession }}%
Shots {{ t.seasonAverages.shotsTotal }}
On target {{ t.seasonAverages.shotsOnTarget }}
Corners {{ t.seasonAverages.corners }}
Fouls {{ t.seasonAverages.fouls }}
Offsides {{ t.seasonAverages.offsides }}
Yellow {{ t.seasonAverages.yellowCards }}
Red {{ t.seasonAverages.redCards }}
} @else {
Detailed match stats: no data.
}
Form:
@if (t.form.length) {
@for (r of t.form; track $index) {
{{ r.result }}
}
} @else {
no data
}
Top scorers (goals + assists so far)
@if (t.topScorers.length) {
@for (s of t.topScorers; track s.playerName) {
{{ s.playerName }}
{{ s.goals }}G
{{ s.assists }}A
}
} @else {
no data
}
}
@if (t.prediction || t.openAiPrediction || t.actual?.hasData) {
@if (t.actual?.hasData && (t.prediction || t.openAiPrediction)) {
Predictions vs actual
} @else if (t.actual?.hasData) {
Match statistics
} @else {
Predictions (per this match)
}
Metric
@if (t.prediction) { LLM }
@if (t.openAiPrediction) { OpenAI }
@if (t.actual?.hasData) { Actual }
Goals
@if (t.prediction) { {{ t.prediction.predictedGoals ?? '—' }} }
@if (t.openAiPrediction) { {{ t.openAiPrediction.predictedGoals ?? '—' }} }
@if (t.actual?.hasData) { {{ t.actual!.goals ?? '—' }} }
@if (t.prediction || t.actual?.shotsTotal != null) {
Shots
@if (t.prediction) { {{ t.prediction.predictedShotsTotal ?? '—' }} }
@if (t.openAiPrediction) { — }
@if (t.actual?.hasData) { {{ t.actual!.shotsTotal ?? '—' }} }
}
On target
@if (t.prediction) { {{ t.prediction.predictedShotsOnTarget ?? '—' }} }
@if (t.openAiPrediction) { {{ t.openAiPrediction.predictedShotsOnTarget ?? '—' }} }
@if (t.actual?.hasData) { {{ t.actual!.shotsOnTarget ?? '—' }} }
Corners
@if (t.prediction) { {{ t.prediction.predictedCorners ?? '—' }} }
@if (t.openAiPrediction) { {{ t.openAiPrediction.predictedCorners ?? '—' }} }
@if (t.actual?.hasData) { {{ t.actual!.corners ?? '—' }} }
Fouls
@if (t.prediction) { {{ t.prediction.predictedFouls ?? '—' }} }
@if (t.openAiPrediction) { {{ t.openAiPrediction.predictedFouls ?? '—' }} }
@if (t.actual?.hasData) { {{ t.actual!.fouls ?? '—' }} }
Yellow cards
@if (t.prediction) { {{ t.prediction.predictedYellowCards ?? '—' }} }
@if (t.openAiPrediction) { {{ t.openAiPrediction.predictedYellowCards ?? '—' }} }
@if (t.actual?.hasData) { {{ t.actual!.yellowCards }} }
@if (t.openAiPrediction || t.actual?.hasData) {
Red cards
@if (t.prediction) { — }
@if (t.openAiPrediction) { {{ t.openAiPrediction.predictedRedCards ?? '—' }} }
@if (t.actual?.hasData) { {{ t.actual!.redCards }} }
}
@if (t.openAiPrediction) {
@if (t.openAiPrediction.model) { {{ t.openAiPrediction.model }} }
@if (t.openAiPrediction.confidence) { · {{ t.openAiPrediction.confidence }} confidence }
@if (t.openAiPrediction.predictedAt) { · {{ t.openAiPrediction.predictedAt | date: 'medium' }} }
}
@if (t.prediction) {
LLM model
@if (t.prediction.halfLifeDays) { · half-life {{ t.prediction.halfLifeDays }}d }
· trained {{ t.prediction.modelTrainedAt | date: 'mediumDate' }}
· saved {{ t.prediction.predictedAt | date: 'short' }}
}
}