Football data operations room
This page documents how Kickoff Lens keeps a public football database maintainable without turning it into a copied fixture directory, betting funnel, unofficial video index, or thin search page farm. It is written for readers, advertisers, search reviewers, and future maintenance agents.
The current product has two connected layers: a live World Cup dataset that proves the update workflow, and a five-league club-football framework that stays release-gated until source-backed club, player, matchweek, and recap modules are ready.
Current operating snapshot
| Structured teams | 48 |
|---|---|
| Structured matches | 104 |
| Finished matches | 81 |
| Pending result confirmations | 0 |
| Finished matches with incomplete event timelines | 4 |
| Five-league average foundation score | 84 |
| Long-tail club/player/matchweek pages | blocked-noindex-until-release-gate |
Automated maintenance loop
| Loop | Owner | What it does | Guardrail |
|---|---|---|---|
| Live score refresh | ops-agent Worker | Fetch public match state during post-match windows, keep final score and event timeline completeness as separate states. | Never treat an incomplete event list as proof that a confirmed score is unusable. |
| FIFA ranking refresh | scripts/sync-fifa-live-rankings.mjs | Refresh live rank and rank points, then validate numeric completeness, unique ranks, and rank-point ordering. | Do not hard-code one team's rank as a permanent truth. |
| Static archive rebuild | scripts/generate-seo-pages.mjs | Regenerate match, team, player, venue, daily, league, methodology, sitemap, RSS, and public data-room pages. | Do not generate thin long-tail club or matchweek pages before release gates pass. |
| Source freshness status | scripts/generate-source-freshness-status.mjs | Publish a machine-readable status that separates World Cup data freshness, club-football release gates, AdSense public-side readiness, and ops dry-run status. | Do not claim AdSense approval, Search Console clearance, or Bing account status from a local file. |
| Release gate checks | scripts/check-club-football-release-gates.mjs | Keep five-league public pages indexed while club/player/matchweek/recap long-tail prototypes remain noindex until source-backed fields exist. | Do not copy official fixture databases, logos, crests, article text, video, or match graphics. |
| Deployment verification | smoke:live + ops:audit | Confirm production homepage version, service worker cache, sitemap, feed, health endpoint, data endpoint, status page, and admin protection. | Do not submit search notifications until the deployed site passes checks. |
Agent responsibility map
Kickoff Lens can use automated agents for repeatable checks, but account dashboards, payment settings, passwords, tokens, deletion, domain moves, and ambiguous source conflicts remain human-confirmed operations.
| Agent lane | Mode | Allowed work | Manual boundary |
|---|---|---|---|
| Score and ranking agent | Automated | Live score sync, ranking sync, static fallback convergence, source freshness generation. | Can run dry-run checks without account changes. |
| Editorial/source agent | Human-reviewed | Correction notes, source gaps, event timeline transparency, rights-safe language. | Needs manual judgment when a public source conflicts or is incomplete. |
| Search distribution agent | Semi-automated | Sitemap generation, IndexNow submission, RSS refresh, search-status file update. | Google Search Console and Bing dashboards remain account-side truth. |
| Monetization readiness agent | Public-side automated | ads.txt, policy pages, ad script placement, no-guaranteed-result language, no official-affiliation claims. | Google AdSense approval, Policy Center, payments, and tax status require private dashboard checks. |
| Five-league growth agent | Release-gated | League topic pages, source registry, maturity scorecard, release candidates. | Club/player/matchweek/recap long-tail pages stay blocked until source-backed gates pass. |
Five-league maturity board
The five major league layer is public as a framework and data room. Individual club, player, matchweek, and recap pages remain blocked until the required source-backed fields are visible.
| League | Foundation score | Maturity band | Long-tail status | Next gate |
|---|---|---|---|---|
| Premier League | 84 | operational-framework | blocked-noindex-until-release-gate | Needs verified source timestamp on squad status, role dependency, and at least one source-backed matchweek context. |
| La Liga | 84 | operational-framework | blocked-noindex-until-release-gate | Needs source-backed squad-depth note, player-dependency note, and matchup context before indexing. |
| Serie A | 84 | operational-framework | blocked-noindex-until-release-gate | Needs source timestamp for squad state, tactical role notes, and at least one matchweek or post-match context link. |
| Bundesliga | 84 | operational-framework | blocked-noindex-until-release-gate | Needs verified source timestamp, squad-depth note, player-dependency note, and matchweek context before indexing. |
| Ligue 1 | 84 | operational-framework | blocked-noindex-until-release-gate | Needs source-backed squad status, player-dependency note, and update/correction trail before indexing. |
What automation is not allowed to publish
- No copied official fixture database, official logo, club crest, kit image, trophy art, mascot art, article text, broadcast screenshot, highlight clip, or unofficial stream link.
- No paid pick, betting language, odds funnel, guaranteed-result claim, financial-gain framing, or prompt that encourages invalid ad traffic.
- No invented scorer, minute, injury, suspension, lineup, player medical detail, or fixture when public source evidence is incomplete.
- No AdSense approval, Search Console clearance, Bing account clearance, payment readiness, or policy-center claim unless the private dashboard has been checked.
Search and monetization boundary
The public site can prove that ads.txt, trust pages, source pages, sitemap, RSS, IndexNow, quality pages, and release gates exist. It cannot prove from local files that Google has approved ad serving or that every search engine has indexed every page. Those account-side states are checked separately.
Search notifications should include only mature indexable routes. Noindex prototype routes and private admin pages are deliberately excluded from the sitemap and should not be submitted through IndexNow.
Related evidence
- Source freshness status JSONMachine-readable public data freshness, release gates, monetization public-side status, and ops status.
- Five-league maintenance status JSONProduct areas, source registry coverage, maturity scorecard, and long-tail release boundaries.
- Football source registryAllowed-use and prohibited-use boundaries for public verification links.
- Data coverage matrixReader-facing coverage and indexing boundaries.
- Quality standardsPublication checklist, correction flow, rights boundary, and ad separation.
- Advertising policyCommercial boundary, rejected categories, invalid traffic rules, and sponsor separation.
- Football intelligence hubHow radar, dossiers, matchweek briefs, recaps, and methodology work together.
- Five-league data roomPremier League, La Liga, Serie A, Bundesliga, and Ligue 1 reader entry.