Loading today's and tomorrow's fixtures…
Every tracked competition, grouped by league — full-tier competitions
first, then everything else, by SofaScore followers within each band.
Scores show once a match has finished; there is no live layer yet
(deliberately parked — no polling, no in-play score). Star a league or
a team to pin it above. Click a fixture to open its dossier —
head-to-head, both teams' recent form, season-to-date rates and every
odds market currently quoted — built for the 45 full-tier leagues;
fixtures outside them expand to a plain line, on purpose, rather than
a half-built card. Contract: data/dossiers.json = a map
keyed on tid|home|away|kickoff (the fields every row here
already carries) → {h2h, hf, af, sc:{home,away}, odds},
produced by fixture_dossier.py.
Season = the current, live season only. L10/L38 (last 10/38
appearances) and home/away splits are marked paid — the free
tier is the season rate; deeper windows are the subscription, the
seam is already in the markup (data-tier="paid"), no
gate is wired yet. Contract this page reads:
data/stats-hubs.json → {health, hubs:{hub_key:
{meta, teams:[{team, league, season:{...}, l10, l38, venue, league_avg}],
screens:[...]}}}, produced by stats_hubs.py.
There are no predictions here yet, on purpose.
The models this section will eventually show are still in validation — walked forward, backtested, and held to a pass/fail gate before anything they say reaches a page. A model that has not cleared that bar is a guess with a spreadsheet behind it, and this product does not ship those.
What appears here once a market clears the gate: the model's number next to the market's number, the gap between them in plain language, and a public CLV ledger — every suggestion logged before kickoff and graded after, wins and losses both, so the track record is the pitch instead of a claim about one.
Until then: the Stats tab holds everything measured — rates, streaks, sample sizes — without a single model number attached to it.
Statistici, nu sfaturi financiare · 18+