Back to Projects

Football World Cup 2026

Started Page updated
A personal event experience

A look beneath the surface of a live World Cup experience, exploring where the data comes from, how it moves, and what happens before a prediction reaches the screen.

ProductExperiment
StatusBuilding in public
StackSalesforce, Data 360, Headless360, Heroku
Football World Cup 2026 live command centre

Signals arrive

Let’s see what’s happening under the hood.

The original four signals still meet before a match reaches the screen, now joined by a fifth: a free live source beside the retained provider, Salesforce records, rankings and weather.

  1. SportMonks

    Live football · original paid feed retained

  2. SportScore

    Free live match feed

  3. Salesforce records

    Canonical truth

  4. FIFA rankings

    Published context

  5. Open-Meteo

    Weather at kick-off

Source convergenceWorld Cup ingestion aperture

The control plane

Catch it without losing control.

Each pull is authenticated, rate-aware and broken into safe, repeatable jobs.

  1. Named Credential

  2. Rate-limit guard

  3. Bounded work

The transformation

Turn noise into something useful.

Provider JSON becomes a stable football model, safely upserted by external ID.

Incoming payload

  1. fixture.id
  2. state.developer_name
  3. scores.CURRENT
  1. Match
  2. Teams + players
  3. Line-up + events
Before / after

INPLAY_1ST_HALFLive

The context layer

Give the tournament a memory.

CRM streams add governed relationships and calculated context without replacing the live Salesforce path.

Salesforce records
Calculated insight

The Agentforce layer

Give the data a voice.

Johnny B Good routes every football question through one read-only Salesforce action before he replies.

?
  1. Instructions
  2. Query World Cup Data
  3. Grounded reply
Two sentences.Every fact grounded.
Canonical Salesforce records

Agentforce Service Agent · v13 active · one read-only action

If the data does not say it, neither does he.

I started this days before kick off to test Headless360. It became a broader experiment in making live football data trustworthy, explainable and useful across the entire journey, from the first API call to the answer Johnny gives a supporter.

Update · July 13, 2026. I originally bought one month of access to SportMonks so I could get the first live football version moving quickly. When that subscription ended, I still wanted the experience to feel as close to live as a personal project reasonably can, without pretending that a free feed is the same thing as a contracted broadcast data service.

I did not remove the SportMonks integration, its historical records or its identifiers. Instead, I built a provider neutral route beside it and switched the active match day mode to HybridFree. SportScore is now the primary source for scores, match state, the clock, incidents and whatever line up or statistical detail is available. An API Football adapter can supplement missing statistics and events within its free tier allowance, but it remains optional. If I renew SportMonks later, the original route is still there.

The important part is that the rest of the system did not need to change. Every provider is translated into the same canonical Salesforce records, and the existing CRM data streams continue carrying those records into Data 360. After a live snapshot is saved, Salesforce publishes a Platform Event so the command centre can refresh immediately; a 60 second browser refresh remains as a safety net.

There is one honest limitation. SportScore is a cached REST source rather than a WebSocket, SSE or webhook stream, so the upstream feed is usually around one or two minutes behind broadcast time rather than sub second. The screen reacts as soon as Salesforce receives the change, while its source and freshness indicators make that boundary visible instead of disguising it. For me, that trade off is part of the experiment: the provider can change, but the trusted data model, lineage and supporter experience remain intact.

Project record

Provenance and sources

This is a first party account by the project author. Page content was last updated on 2026-07-13. The private repository last changed on 2026-07-11. Linked repositories and live services may change independently.