{
  "version": 2,
  "reviewedAt": "2026-09-09",
  "scope": "Primary product/help/rules/pricing review of 15 named product lines, plus supplier and governing-body sources; not exhaustive hidden-feature parity or hands-on competitor QA.",
  "audience": "Global sports fans, initially football friend groups; minimal external cash budget with an existing development team.",
  "mainRecommendation": "Connect a source fact to personal scouting/fantasy relevance, discussion and correction history. Expand real playable coverage sport by sport.",
  "sources": [
    {
      "id": "S01",
      "publisher": "Developer via Google Play",
      "title": "Developer listing",
      "url": "https://play.google.com/store/apps/details?hl=en_GB&id=com.livescore",
      "publishedOrUpdatedAt": "Updated 2026-08-28",
      "accessedAt": "2026-09-09",
      "sourceType": "official developer listing",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S02",
      "publisher": "Flashscore",
      "title": "Mobile",
      "url": "https://www.flashscore.com/mobile/",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S03",
      "publisher": "Flashscore",
      "title": "player alerts",
      "url": "https://www.flashscore.com/news/follow-your-favourite-football-stars-and-stay-up-to-date-with-new-player-notifications/bX1BZzYQ/",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S04",
      "publisher": "Sofascore",
      "title": "Product",
      "url": "https://corporate.sofascore.com/about",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S05",
      "publisher": "Sofascore",
      "title": "maps",
      "url": "https://www.sofascore.com/news/introducing-sofascores-new-maps-a-smarter-way-to-read-the-game",
      "publishedOrUpdatedAt": "2025-11-26",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S06",
      "publisher": "Developer via Apple App Store",
      "title": "Developer listing",
      "url": "https://apps.apple.com/us/app/fotmob-soccer-live-scores/id488575683",
      "publishedOrUpdatedAt": "Version 1241 shown 2026-08-29",
      "accessedAt": "2026-09-09",
      "sourceType": "official developer listing",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S07",
      "publisher": "Developer via Google Play",
      "title": "Developer listing",
      "url": "https://play.google.com/store/apps/details?hl=en&id=de.motain.iliga",
      "publishedOrUpdatedAt": "Updated 2026-09-07",
      "accessedAt": "2026-09-09",
      "sourceType": "official developer listing",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S08",
      "publisher": "Premier League",
      "title": "Season announcement",
      "url": "https://www.premierleague.com/en/news/4680722/fpl-is-live-pick-your-202627-squad-now",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S09",
      "publisher": "Sorare",
      "title": "Scoring",
      "url": "https://sorare.com/help/a/4402904001809/-",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S10",
      "publisher": "Sorare",
      "title": "rules",
      "url": "https://sorare.com/game-rules",
      "publishedOrUpdatedAt": "Updated 2026-07-29",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S11",
      "publisher": "Sorare",
      "title": "Scoring",
      "url": "https://sorare.com/help/a/7245592557725/how-are-player-scores-calculated-in-sorare-nba",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S12",
      "publisher": "Sorare",
      "title": "Scoring",
      "url": "https://sorare.com/help/a/13000512179997/how-are-player-scores-calculated-in-sorare-mlb",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S13",
      "publisher": "Sorare",
      "title": "gameplay",
      "url": "https://help.sorare.com/hc/en-us/articles/5795314078877-How-do-I-play-Sorare-MLB",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S14",
      "publisher": "Sleeper",
      "title": "Football",
      "url": "https://support.sleeper.com/en/articles/1876010-intro-to-sleeper-fantasy-football",
      "publishedOrUpdatedAt": "Updated 2026-04-30",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S15",
      "publisher": "Sleeper",
      "title": "Lock-In",
      "url": "https://support.sleeper.com/en/articles/6522833-lock-in-mode-details",
      "publishedOrUpdatedAt": "Updated 2026-02-18",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S16",
      "publisher": "Fantrax",
      "title": "Product",
      "url": "https://www.fantrax.com/game/nhl",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Official indexed text used where direct page body was blocked or JavaScript-only."
    },
    {
      "id": "S17",
      "publisher": "Yahoo",
      "title": "Scoring",
      "url": "https://help.yahoo.com/kb/SLN6868.html",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Official indexed text used where direct page body was blocked or JavaScript-only."
    },
    {
      "id": "S18",
      "publisher": "Yahoo",
      "title": "messaging",
      "url": "https://help.yahoo.com/kb/SLN26785.html",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Official indexed text used where direct page body was blocked or JavaScript-only."
    },
    {
      "id": "S19",
      "publisher": "ESPN",
      "title": "Settings",
      "url": "https://support.espn.com/hc/en-us/articles/4669530389908-Scoring-Settings",
      "publishedOrUpdatedAt": "Updated 2026-07-15",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S20",
      "publisher": "ESPN",
      "title": "formats",
      "url": "https://support.espn.com/hc/en-us/articles/360003914032-Scoring-Formats",
      "publishedOrUpdatedAt": "Updated 2026-08-18",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S21",
      "publisher": "Electronic Arts",
      "title": "Evolutions",
      "url": "https://help.ea.com/en/articles/ea-sports-fc/ultimate-team-evolutions/",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S22",
      "publisher": "Electronic Arts",
      "title": "probabilities",
      "url": "https://www.ea.com/en-gb/games/ea-sports-fc/news/fc-pack-probabilities",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S23",
      "publisher": "Electronic Arts",
      "title": "release dates",
      "url": "https://www.ea.com/games/ea-sports-fc/fc-27/news/fc-27-editions-and-release-dates",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S24",
      "publisher": "2K",
      "title": "Official announcement",
      "url": "https://newsroom.2k.com/news/nbar-2k27-myteam-new-player-xp-a-more-powerful-exchange-and-limited-time-modes",
      "publishedOrUpdatedAt": "2026-08-18",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S25",
      "publisher": "2K",
      "title": "mode guide",
      "url": "https://support.nba2k.com/hc/en-us/articles/54276003253907-NBA-2K27-Game-Mode-Breakdown",
      "publishedOrUpdatedAt": "Updated 2026-08-20",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S26",
      "publisher": "LiveScore Group",
      "title": "LiveScore announcement",
      "url": "https://livescoregroup.com/press-news/livescore-group-announces-transformational-partnership-with-x-and-xai-to-drive-the-future-of-integrated-sports-media-and-betting/",
      "publishedOrUpdatedAt": "2025-09-17",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S27",
      "publisher": "Premier League",
      "title": "Premier League announcement",
      "url": "https://www.premierleague.com/en/news/4338015",
      "publishedOrUpdatedAt": "2025-07-01",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S28",
      "publisher": "Sofascore",
      "title": "Rating explanation",
      "url": "https://corporate.sofascore.com/about/rating",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S29",
      "publisher": "MLB",
      "title": "MLB glossary",
      "url": "https://www.mlb.com/glossary/standard-stats/innings-pitched",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S30",
      "publisher": "MCC",
      "title": "MCC Law 17",
      "url": "https://www.lords.org/mcc/the-laws/the-over",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S31",
      "publisher": "API-Football",
      "title": "Pricing",
      "url": "https://www.api-football.com/pricing",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S32",
      "publisher": "API-Football",
      "title": "terms",
      "url": "https://www.api-football.com/terms",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S33",
      "publisher": "Sportmonks",
      "title": "Fantasy plans",
      "url": "https://www.sportmonks.com/football-api/solutions/fantasy-football-api/",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S34",
      "publisher": "Sportmonks",
      "title": "technical FAQ",
      "url": "https://docs.sportmonks.com/v3/faq-1",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S35",
      "publisher": "SportsDataIO",
      "title": "Access options",
      "url": "https://sportsdata.io/developers",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S36",
      "publisher": "SportsDataIO",
      "title": "licensing",
      "url": "https://sportsdata.io/help/data-rights-and-licensing-questions",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S37",
      "publisher": "Premier League",
      "title": "Premier League terms",
      "url": "https://www.premierleague.com/en/terms-and-conditions",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S38",
      "publisher": "Sorare",
      "title": "Sorare API terms",
      "url": "https://sorare.com/api-terms",
      "publishedOrUpdatedAt": "Updated 2025-05-16",
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S39",
      "publisher": "LiveScore Group",
      "title": "LiveScore model",
      "url": "https://livescoregroup.com/",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S40",
      "publisher": "LiveScore Group",
      "title": "advertising",
      "url": "https://livescoregroup.com/advertise/",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    },
    {
      "id": "S41",
      "publisher": "Sleeper",
      "title": "Sleeper",
      "url": "https://sleeper.com/fantasy-football",
      "publishedOrUpdatedAt": null,
      "accessedAt": "2026-09-09",
      "sourceType": "primary official page",
      "accessNotes": "Advertised/documented capability, not hands-on quality or performance verification."
    }
  ],
  "products": [
    {
      "id": "livescore",
      "name": "LiveScore",
      "category": "Scores and media",
      "verifiedFeatures": "Team/competition hubs, follows, player statistics, personalised reporting and audio.",
      "sourceIds": [
        "S01"
      ],
      "confidence": "high",
      "limits": "Announced X/xAI ambitions do not establish implementation of every described feature."
    },
    {
      "id": "flashscore",
      "name": "Flashscore",
      "category": "Multi-sport scores",
      "verifiedFeatures": "Synced favourites, official highlights and football-player event alerts.",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "confidence": "high",
      "limits": "Sports-wide directory breadth does not imply identical statistics in every event."
    },
    {
      "id": "sofascore",
      "name": "Sofascore",
      "category": "Multi-sport analytics/community",
      "verifiedFeatures": "Match chat, local organiser inputs, algorithmic ratings and factual action maps.",
      "sourceIds": [
        "S04",
        "S05"
      ],
      "confidence": "high",
      "limits": "Do not adopt its marketing accuracy/superiority claims as independently proven."
    },
    {
      "id": "fotmob",
      "name": "FotMob",
      "category": "Football companion",
      "verifiedFeatures": "Deep player data, lineup builder, commentary interaction and declared accessibility/localisation.",
      "sourceIds": [
        "S06"
      ],
      "confidence": "high",
      "limits": "Features are developer declarations, with event/platform variation untested."
    },
    {
      "id": "onefootball",
      "name": "OneFootball",
      "category": "Football media",
      "verifiedFeatures": "Transfers, reporting, selected streams/highlights and regional viewing discovery.",
      "sourceIds": [
        "S07"
      ],
      "confidence": "high",
      "limits": "Media and TV-guide territory restrictions remain material."
    },
    {
      "id": "fpl",
      "name": "Fantasy Premier League",
      "category": "Official football fantasy",
      "verifiedFeatures": "Live leagues, bonus projection, career comparisons and end-of-round recaps.",
      "sourceIds": [
        "S08"
      ],
      "confidence": "high",
      "limits": "Season-specific scoring and finalisation must not silently overwrite ARENA Classic rules."
    },
    {
      "id": "sorare_football",
      "name": "Sorare Football",
      "category": "Real-performance collectible fantasy",
      "verifiedFeatures": "Separate player and card scores, contest eligibility and progression.",
      "sourceIds": [
        "S09",
        "S10"
      ],
      "confidence": "high",
      "limits": "Generic help describes one lineup example; current contest rules decide eligibility."
    },
    {
      "id": "sorare_nba",
      "name": "Sorare NBA",
      "category": "Basketball collectible fantasy",
      "verifiedFeatures": "Native weighted actions and a best-game scoring period.",
      "sourceIds": [
        "S11"
      ],
      "confidence": "high",
      "limits": "The documented rule is Sorare-specific, not an ARENA implementation."
    },
    {
      "id": "sorare_mlb",
      "name": "Sorare MLB",
      "category": "Baseball collectible fantasy",
      "verifiedFeatures": "Accumulated periods, batting/pitching roles and collection competitions.",
      "sourceIds": [
        "S12",
        "S13"
      ],
      "confidence": "high",
      "limits": "The older help page has current content; do not treat its original 2022 timestamp as the current season rule date."
    },
    {
      "id": "sleeper",
      "name": "Sleeper",
      "category": "Social fantasy",
      "verifiedFeatures": "Integrated chat/drafts/commissioner tools and basketball Lock-In.",
      "sourceIds": [
        "S14",
        "S15",
        "S41"
      ],
      "confidence": "high",
      "limits": "Do not repeat its own market-wide uniqueness or best-platform claims."
    },
    {
      "id": "fantrax",
      "name": "Fantrax",
      "category": "Configurable fantasy",
      "verifiedFeatures": "Advertised keeper/dynasty/redraft hockey and automatic Best Ball selection.",
      "sourceIds": [
        "S16"
      ],
      "confidence": "medium",
      "limits": "Official indexed page text; direct body requires JavaScript. No complete premium-feature/pricing audit."
    },
    {
      "id": "yahoo",
      "name": "Yahoo Fantasy",
      "category": "Multi-sport fantasy",
      "verifiedFeatures": "Multiple scoring formats, correction handling and league/direct messaging.",
      "sourceIds": [
        "S17",
        "S18"
      ],
      "confidence": "medium",
      "limits": "Official indexed help text; direct retrieval intermittent. Rules vary by sport."
    },
    {
      "id": "espn",
      "name": "ESPN Fantasy",
      "category": "Custom/standard fantasy",
      "verifiedFeatures": "Scoring configuration, transaction logs and PPR/non-PPR distinctions.",
      "sourceIds": [
        "S19",
        "S20"
      ],
      "confidence": "high",
      "limits": "Its retrospective recalculation is evidence, not a recommended default for ARENA public contests."
    },
    {
      "id": "ea_fc",
      "name": "EA SPORTS FC",
      "category": "Videogame collection/progression",
      "verifiedFeatures": "Objective-based upgrades and disclosed pack-category probability semantics.",
      "sourceIds": [
        "S21",
        "S22",
        "S23"
      ],
      "confidence": "high",
      "limits": "FC 27 remains announced; game assets and player OVRs are not available for ARENA reuse."
    },
    {
      "id": "nba_2k",
      "name": "NBA 2K MyTEAM",
      "category": "Videogame collection/progression",
      "verifiedFeatures": "Player XP, exchange, discovery and rotating modes.",
      "sourceIds": [
        "S24",
        "S25"
      ],
      "confidence": "high",
      "limits": "Platform constraints apply; controller-game performance is not real-world fantasy."
    }
  ],
  "opportunities": [
    {
      "id": "O01",
      "priority": "Next pilot",
      "name": "Evidence-linked match room",
      "hypothesisAndTest": "Keep chat beside stats; attach a published play/stat with timestamp. Measure return visits and useful replies, not message volume alone.",
      "dependencies": "Existing room permissions, factual IDs, reporting/moderation",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S04",
        "S14",
        "S18"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "acceptanceCriteria": [
        "Changing the selected stat preserves the conversation and keyboard focus.",
        "Attached evidence records fixture/entity, source field, scope, as-of time and revision.",
        "Posting requires explicit user action; private lineup or notebook contents are never auto-shared.",
        "A corrected source fact marks an attachment superseded without editing the original message.",
        "Guests can read; authorised members alone can post; report/mute/rate-limit controls work."
      ],
      "implementationGapStatus": "partial",
      "implementationAudit": "Adjacent chat and reviewable source/time/cache-labelled drafts implemented. Structured immutable evidence references and correction-aware supersession remain.",
      "implementationEvidence": [
        "app/arena/leagues/Matchday.tsx",
        "app/arena/community/FanDiscussion.tsx"
      ]
    },
    {
      "id": "O02",
      "priority": "Next pilot",
      "name": "Player scouting passport",
      "hypothesisAndTest": "One profile joins identity, source-labelled performance, next fixtures, private notes and a relevant fantasy decision. Measure saved players revisited.",
      "dependencies": "Canonical IDs; provider-rating permission; owner-scoped notes",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S06",
        "S28"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "acceptanceCriteria": [
        "Match rating, season metrics, fantasy score, fan vote and forecast have separate names and units.",
        "Country labels reflect the supplied field; missing or ambiguous country remains unknown.",
        "Only sourced professional coach information is shown; no generated managerial rating.",
        "Private notes are account-scoped and never returned through a public profile endpoint.",
        "Missing ratings and unlicensed portraits have explicit, usable fallbacks."
      ],
      "implementationGapStatus": "partial",
      "implementationAudit": "Source-linked identities, country fields, memberships, dated performance and contextual Scout links implemented. Private shortlist/decision history remains.",
      "implementationEvidence": [
        "app/arena/athletes/Athletes.tsx",
        "app/arena/athletes/Performance.tsx",
        "app/arena/clubs/Clubs.tsx"
      ]
    },
    {
      "id": "O03",
      "priority": "Preserve/test",
      "name": "Fair collection reveal",
      "hypothesisAndTest": "A short original pack reveal ends in a receipt, duplicate outcome and immediate squad action. Measure completed reveals and next-session collection use.",
      "dependencies": "Existing committed draws, fixed economy, original artwork",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S22",
        "S24"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "acceptanceCriteria": [
        "The server commits the draw and charge exactly once before revealing.",
        "Refreshing, retrying, skipping and replaying produce the same receipt and outcome.",
        "Odds specify per-card versus per-pack basis and the pool version.",
        "Duplicates resolve at the published fixed value; credit origin is preserved.",
        "Reduced motion, mute, keyboard reveal and immediate Reveal all all work."
      ],
      "implementationGapStatus": "implemented",
      "implementationAudit": "Committed cosmetic-rarity Clubs reveals, reduced-motion/Reveal all, odds and duplicate receipts implemented; Founders remains a separate economy.",
      "implementationEvidence": [
        "app/arena/clubs/Clubs.tsx",
        "app/api/clubs/route.ts"
      ]
    },
    {
      "id": "O04",
      "priority": "Later / validate demand",
      "name": "What changed since my last visit",
      "hypothesisAndTest": "A personal cutoff shows new events and corrected facts with their effect on followed teams or players.",
      "dependencies": "Versioned factual events; reliable correction history",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S17",
        "S08"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "implementationGapStatus": "partial_demo",
      "implementationAudit": "Selected synthetic rewind/correction examples exist; personal real-event revision history remains unimplemented/provider dependent.",
      "implementationEvidence": [
        "app/arena"
      ]
    },
    {
      "id": "O05",
      "priority": "Later / validate demand",
      "name": "My fantasy impact layer",
      "hypothesisAndTest": "Tap a play to see its ARENA rule contribution, captain effect and provisional league movement.",
      "dependencies": "Exact per-fixture scoring; frozen lineup and rules",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S14",
        "S19"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "implementationGapStatus": "partial",
      "implementationAudit": "Final stat-by-stat receipts, prior source/score revisions and delta credit corrections implemented. Reliable current match-to-league movement remains source dependent.",
      "implementationEvidence": [
        "app/arena/clubs/RoundReceipt.tsx",
        "app/lib/clubs-results.ts",
        "app/api/clubs/results/route.ts"
      ]
    },
    {
      "id": "O06",
      "priority": "Later / validate demand",
      "name": "One attention budget",
      "hypothesisAndTest": "Rank followed events and deadlines across sports; allow quiet hours, spoiler delay and a daily digest.",
      "dependencies": "Accurate schedules; real delivery service for push",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S03",
        "S01"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "implementationGapStatus": "partial_demo",
      "implementationAudit": "Following and local alert-rule replay exist; unified production deadline digests and actual push delivery remain.",
      "implementationEvidence": [
        "app/arena"
      ]
    },
    {
      "id": "O07",
      "priority": "Next pilot",
      "name": "Fair friend challenges",
      "hypothesisAndTest": "Identical eligible pools and fixed budgets; short rounds let newcomers join without season-long disadvantage.",
      "dependencies": "Fully settled stats; anti-multi-account controls",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S10",
        "S08"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "implementationGapStatus": "implemented_core",
      "implementationAudit": "Five-sport daily friend leagues, readiness counts, private pre-lock picks, post-lock player inspection and equal-evidence rank gate implemented. Persistent round recap/correction history remains.",
      "implementationEvidence": [
        "app/arena/clubs/Clubs.tsx",
        "app/api/clubs/league/route.ts"
      ]
    },
    {
      "id": "O08",
      "priority": "Later / validate demand",
      "name": "Cooperative club missions",
      "hypothesisAndTest": "Friends complete modest scouting or participation goals together for cosmetics. No reward for repetitive chat or excessive screen time.",
      "dependencies": "Transparent objectives; abuse limits; event completion",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S13",
        "S21"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "implementationGapStatus": "missing",
      "implementationAudit": "Shared cosmetic missions are not implemented; avoid repetitive engagement farming.",
      "implementationEvidence": []
    },
    {
      "id": "O09",
      "priority": "Next pilot",
      "name": "Decision journal and review",
      "hypothesisAndTest": "Save the reason for a captain choice before deadline; compare with what was knowable, without rewriting the past.",
      "dependencies": "Timestamped choices; cutoff-safe history",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S08"
      ],
      "incrementalExternalCost": "Low if existing licensed data and app services suffice; labour, moderation and rights are additional.",
      "implementationGapStatus": "missing",
      "implementationAudit": "Private pre-lock reasoning and separate retrospective review not implemented.",
      "implementationEvidence": []
    },
    {
      "id": "O10",
      "priority": "Later / validate demand",
      "name": "Monthly sponsor ladder",
      "hypothesisAndTest": "A fresh monthly table keeps late arrivals involved; publish prize funding, eligibility and tie rules before entry.",
      "dependencies": "Actual sponsor agreement, regional fulfilment, contest review",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S10"
      ],
      "incrementalExternalCost": "Operational or provider dependent; no zero-cost promise.",
      "implementationGapStatus": "planned_not_redeemable",
      "implementationAudit": "Partner/monthly rewards remain proposals, with no funded redeemable voucher programme.",
      "implementationEvidence": []
    },
    {
      "id": "O11",
      "priority": "Later / validate demand",
      "name": "Portable private-league history",
      "hypothesisAndTest": "Import user-authorised standings with provenance; retain original rules and distinguish imported from ARENA-scored seasons.",
      "dependencies": "Safe import; commissioner permissions; reconciliation",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S41"
      ],
      "incrementalExternalCost": "Operational or provider dependent; no zero-cost promise.",
      "implementationGapStatus": "missing",
      "implementationAudit": "Portable imported private-league seasons not implemented.",
      "implementationEvidence": []
    },
    {
      "id": "O12",
      "priority": "Later / validate demand",
      "name": "Community coverage programme",
      "hypothesisAndTest": "Approved local organisers submit structured results and corrections under contributor identity.",
      "dependencies": "Verification, permissions and dispute operations",
      "classification": "original ARENA workflow recommendation; components have established competitors",
      "uniqueness": "Components have documented competitors. This review does not establish absence across the market or measured superiority.",
      "sourceIds": [
        "S04"
      ],
      "incrementalExternalCost": "Operational or provider dependent; no zero-cost promise.",
      "implementationGapStatus": "missing_operations_dependent",
      "implementationAudit": "No verified organiser contributor and dispute programme implemented.",
      "implementationEvidence": []
    }
  ],
  "sportFamilies": [
    {
      "family": "Football",
      "recommendedDisplay": "Opening XI, bench, formation, minutes, chance creation, discipline",
      "rulesToDefine": "Per-fixture thresholds, captain/vice fallback, double rounds, clean-sheet rules and corrections",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Basketball, including WNBA",
      "recommendedDisplay": "Starting five, minutes, shooting splits, rebounds, assists, turnovers",
      "rulesToDefine": "Sum, average, best-game or declared lock-in; DNP/rest and category versus points contests",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Tennis",
      "recommendedDisplay": "Draw, surface, sets, service/return points and breaks",
      "rulesToDefine": "Singles/doubles identities; retirement, walkover, tournament rounds and match completion",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Cricket",
      "recommendedDisplay": "Format, innings, runs/wickets, valid balls, batting/bowling figures",
      "rulesToDefine": "T20/ODI/Test rules, abandoned games, substitutes, fielding attribution and innings limits",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "F1/motorsport",
      "recommendedDisplay": "Session, grid, positions, laps, pit stops and penalties",
      "rulesToDefine": "Driver versus constructor, sprint/qualifying/race windows and later classifications",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "NFL",
      "recommendedDisplay": "Positions, active/inactive status, drives, targets and snaps",
      "rulesToDefine": "Per-game locks, byes, PPR choice, defence/team units and stat corrections",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Baseball",
      "recommendedDisplay": "Batting order, probable/actual pitcher, inning, outs and bases",
      "rulesToDefine": "Batting/pitching eligibility, doubleheaders, pitcher changes and suspended games",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Hockey",
      "recommendedDisplay": "Lines, goalie status, shots, saves, special teams and time on ice",
      "rulesToDefine": "Skater versus goalie scoring, shootout treatment, starts and postponed fixtures",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Combat sports",
      "recommendedDisplay": "Bout, weight class, rounds, result method and judges' cards",
      "rulesToDefine": "Cancellation, no contest, overturns, replacement opponents and missing judging data",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Golf",
      "recommendedDisplay": "Round, hole, par-relative score, cut and field",
      "rulesToDefine": "Withdrawal/disqualification, incomplete rounds and placement versus action scoring",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Rugby",
      "recommendedDisplay": "Code, positions, tries, kicks, tackles and cards",
      "rulesToDefine": "Union/league/sevens separate rules; replacements and team-size eligibility",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Volleyball",
      "recommendedDisplay": "Sets, rotation/position, attacks, blocks, serves and reception",
      "rulesToDefine": "Rally versus action totals, libero handling and actual roster appearances",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    },
    {
      "family": "Esports",
      "recommendedDisplay": "Game title, patch, roster, series, maps and objectives",
      "rulesToDefine": "Separate game schemas; substitutions, remakes, forfeits and tournament patches",
      "status": "Design contract; not a declaration of shipped fantasy coverage"
    }
  ],
  "ratingTaxonomy": [
    {
      "kind": "provider_match_rating",
      "requires": "Named provider, permission, exact scale, fixture and updated-at; provisional/final state."
    },
    {
      "kind": "recorded_statistic",
      "requires": "Field definition, unit, season/match/recent scope and missingness."
    },
    {
      "kind": "arena_fantasy_points",
      "requires": "Versioned sport rule, eligible fixture, frozen position and lineup; correction ledger."
    },
    {
      "kind": "forecast_or_scenario",
      "requires": "As-of cutoff, inputs, validation context and uncertainty; never relabel historical totals."
    },
    {
      "kind": "community_opinion",
      "requires": "Explicit fan-vote label, number of votes and anti-abuse controls."
    }
  ],
  "dataBudget": {
    "pricingAsOf": "2026-09-09",
    "entryPlans": [
      {
        "provider": "API-Football",
        "price": "$19/month",
        "quota": "7500 requests/day",
        "scope": "Football; league/season/field coverage and asset permissions must be checked.",
        "sourceIds": [
          "S31",
          "S32"
        ]
      },
      {
        "provider": "Sportmonks",
        "price": "EUR29/month excluding VAT",
        "quota": "Five selected leagues; verify per-entity limits and add-ons in contract.",
        "scope": "Football; predictions/xG and other add-ons must be confirmed.",
        "sourceIds": [
          "S33",
          "S34"
        ]
      },
      {
        "provider": "SportsDataIO",
        "price": "Commercial quote required",
        "scope": "Personal Discovery Lab and scrambled trial do not license a live commercial global fantasy product.",
        "sourceIds": [
          "S35",
          "S36"
        ]
      }
    ],
    "illustrativeLoad": {
      "matches": 20,
      "endpointsPerMatch": 2,
      "pollsPerMinute": 1,
      "minutes": 120,
      "requests": 4800,
      "excludes": [
        "discovery",
        "retries",
        "assets",
        "other events"
      ],
      "classification": "Arithmetic scenario, not measured provider performance."
    },
    "rightsGates": [
      "Competition-specific factual data and redistribution",
      "Athlete portrait/likeness",
      "Club/league marks and kits",
      "News/clip/commentary reproduction",
      "Derived ratings/AI outputs",
      "Target-territory supplier and payment availability"
    ],
    "publishedEntryRanges": [
      {
        "provider": "API-Football",
        "range": "USD19–29 per month",
        "tiers": "7,500 / 75,000 requests per day",
        "sourceIds": [
          "S31"
        ],
        "classification": "Dated published prices; chosen competition/field/rights validation required."
      },
      {
        "provider": "Sportmonks",
        "range": "EUR29–99 per month excluding VAT",
        "tiers": "5 / 30 selected football leagues",
        "sourceIds": [
          "S33",
          "S34"
        ],
        "classification": "Dated published prices; add-ons not assumed included."
      }
    ],
    "unquotedCosts": [
      "Other-sport commercial feeds",
      "Photo/mark/media rights",
      "Hosting and database usage",
      "Engineering and moderation",
      "Acquisition, payment fees and taxes",
      "Actual sponsor fulfilment"
    ],
    "financialAssumptionBoundary": "No verified all-in minimum, customer-acquisition cost, retention benchmark or revenue forecast. Entry supplier tiers are alternative football plans, not an all-sports production budget."
  },
  "auditBoundary": {
    "checkout": "/Users/projectprysm/Documents/ChatGPT/Scores",
    "changesByThisTask": "None",
    "observedExisting": [
      "Five-sport Clubs with account-owned collection/lineups/private leagues",
      "17,938 distinct player IDs and source-linked identity/flags",
      "Historical performance receipts with experimental points index",
      "Reviewable factual chat drafts beside match statistics/timeline",
      "Committed animated pack reveals with cosmetic rarities and duplicate refunds",
      "Player-to-Scout context; sport/round-preserving invites; ready counts and locked lineup names",
      "Classic fantasy/planner, Founders collection, passports and bounded trades"
    ],
    "v8Status": "Completed v8 implementation inspected after integration. Three initial navigation/evidence gaps fixed during audit; historical performance panel integrated.",
    "sourceCaveat": "Prior Worker ESPN requests returned 403; cached records are not real-time or a contracted licence.",
    "evidenceArtifact": "implementation-audit.json",
    "method": "Read-only source inspection and decoded bundled JSON; not browser QA, production deployment verification or measured user research."
  },
  "sourceConflictsAndLimits": [
    "Supplier marketing full-access wording must be read alongside add-on documentation.",
    "Current Sorare contest rules outrank older generic five-card descriptions.",
    "FC27 early access is after the review date.",
    "Fantrax/Yahoo direct extraction was limited, so confidence is reduced.",
    "No independently verified market-wide absence or superiority.",
    "No invented competitor revenue, acquisition cost, retained-user benchmark or supplier SLA."
  ],
  "status": "Post-implementation v8 code/data audit complete; no browser/deployment or retention certification.",
  "coverageAudit": {
    "counts": {
      "schemaVersion": 1,
      "generatedAt": "2026-09-09T16:54:53.462308+00:00",
      "provider": "ESPN",
      "uniquePeople": 17938,
      "membershipRows": 20434,
      "sourceRosterRows": 20435,
      "rosters": 688,
      "uniqueManagers": 289,
      "currentManagersVerified": 0,
      "rightsNote": "Public provider records; no open redistribution, photography, crest or trademark licence established. Private prototype use requested; commercial/data redistribution permissions remain to be reviewed.",
      "scopeNote": "A roster membership is source-listed for a published season, not proof of current contract or availability. National rosters are not guaranteed latest call-ups. Birth country never implies nationality. Coach fields include known legacy appointments, therefore all appointments remain unverified.",
      "rostersWithPlayers": 633,
      "emptyRosters": 55,
      "competitionsWithRosterResponses": 29,
      "sports": 17,
      "providerLeagueRecords": 356,
      "verifiedLeagueBadges": 12,
      "verifiedFlags": 256,
      "peopleWithPortraitURL": 6340,
      "peopleWithBirthDate": 17361,
      "peopleWithBirthPlace": 5150,
      "peopleWithBirthCountry": 5345,
      "peopleWithBirthCountryCode": 5305,
      "peopleWithExplicitNationality": 12199,
      "managerMemberships": 368,
      "completedMatchSamples": 6
    },
    "peopleChecks": {
      "rows": 17938,
      "uniqueIDs": 17938,
      "membershipRows": 20434,
      "sportCounts": {
        "basketball": 768,
        "american-football": 2487,
        "baseball": 837,
        "hockey": 1067,
        "football": 12779
      }
    },
    "performance": {
      "schemaVersion": 1,
      "generatedAt": "2026-09-09T17:07:07.691Z",
      "rulesVersion": "Arena Clubs 1.0",
      "inputSnapshotEntries": 429,
      "inputMatchSnapshots": 101,
      "confirmedFinishedMatches": 37,
      "skippedMatchSnapshots": 64,
      "playersWithRecords": 1853,
      "performanceRecords": 1967,
      "scoredRecords": 946,
      "indexRatedRecords": 850,
      "unratedRecords": 1117,
      "statusCounts": {
        "scored": 946,
        "missing": 496,
        "unsupported": 525
      },
      "recordsBySport": {
        "football": 400,
        "basketball": 144,
        "american-football": 1291,
        "hockey": 76,
        "baseball": 56
      },
      "recordsByLeague": {
        "pl": 400,
        "nba": 101,
        "nfl": 1291,
        "nhl": 76,
        "mlb": 56,
        "wnba": 43
      },
      "ratingLabel": "Experimental ARENA points index",
      "scope": "Dated source snapshots only; not live results, complete career history, independent player ratings or a reward-settlement source.",
      "roleBasis": "Production Clubs roles using exact athlete ID + roster league/team membership; first published supported role, matching calculateClubRound. These are dated roster roles, not recovered historical user picks.",
      "normalizerPlayerRows": 1967,
      "boxscoreCategoryRows": 1921,
      "categoryOccurrencesMerged": 354,
      "conflictingStatRows": 0,
      "sourceCodeHashes": {
        "app/arena/leagues/normalise.ts": "437209b86db06df7f8a7a825da9ef91c424ad02f3f0ad33d51d76d3852ed6ce0",
        "app/arena/clubs/scoring.ts": "bc6d1607e3c50bf7e17d8bc6feb5aaa45fa235e05e41257f5aa64b00f3e24494",
        "app/arena/clubs/club-types.ts": "2b5f185ad74127938cd634e695f4ebad5f049a3de5b864eb3ac92c8d5a860724",
        "app/arena/leagues/config.ts": "adbd83109b21adec6f0fb275589f93fdf0e9a808bfaffcd2e6117717101090ce"
      },
      "aggregateSHA256": "635ad66defdf1173f2cdae4d173b1558dd607c81acdaa762fbb4aeebe0951ce2"
    },
    "implementedFantasySports": [
      "football",
      "basketball",
      "american-football",
      "baseball",
      "hockey"
    ],
    "futureSportCandidates": [
      "tennis",
      "cricket",
      "motorsport",
      "golf",
      "rugby-union",
      "rugby-league",
      "volleyball",
      "combat-sports",
      "esports",
      "australian-football"
    ],
    "futureScope": "Ten proposed roadmap candidates, not implemented games or validated feeds. Taxonomy differs from provider index.",
    "caveats": [
      "17 provider sport index entries, but 16 categories with nonempty league lists. Cricket returned no league references.",
      "633 of 688 roster responses contain players; 55 AFC responses empty.",
      "6,340 portrait URLs do not establish image availability or rights.",
      "289 coach records; zero current appointments verified.",
      "Experimental points index is not an independently validated scouting grade.",
      "Historical performance samples are not live contest settlement evidence.",
      "Current external Worker source failures can keep new awards pending."
    ]
  },
  "finalRecommendations": [
    {
      "id": "R1",
      "name": "Correction-aware evidence discussion",
      "opportunityIds": [
        "O01",
        "O04"
      ],
      "implementedBase": "Adjacent chat, reviewable factual draft and retained individual scoring-receipt correction history.",
      "missingJourney": "Link immutable fact/scope/as-of/revision references to discussion messages and notify/mark affected discussion when source evidence is corrected, without editing the author.",
      "firstIncrement": "Use existing scoring receipts and stored correction differences. No universal live revision history claim.",
      "acceptance": [
        "User previews and explicitly posts.",
        "Private lineup is never auto-shared.",
        "Fact references preserve source, time and scope.",
        "Unavailable revision history is stated."
      ],
      "measure": "Evidence opens, useful replies, disputes needing intervention.",
      "sourceIds": [
        "S04",
        "S14",
        "S17"
      ]
    },
    {
      "id": "R2",
      "name": "Private pre-lock decision and review journal",
      "opportunityIds": [
        "O02",
        "O09"
      ],
      "implementedBase": "Identity, source-labelled history, membership and correct Scout navigation.",
      "missingJourney": "Save chosen player/round and reason before lock; keep later reflection separate.",
      "firstIncrement": "Local-device private notebook using current dated source records; label storage and tamper limitations.",
      "acceptance": [
        "Original note and later reflection remain distinct.",
        "No broad accuracy claim from sparse history.",
        "Export warns if local-only/unverified timestamps.",
        "No automatic public posting."
      ],
      "measure": "Notes revisited and subsequent round entry.",
      "sourceIds": [
        "S08",
        "S06",
        "S28"
      ]
    },
    {
      "id": "R3",
      "name": "Saved group round recap",
      "opportunityIds": [
        "O07",
        "O05"
      ],
      "implementedBase": "Invites, correct round lineup actions, readiness count, locked lineup names and consistent rank gate.",
      "missingJourney": "Save/export round lineup, source status, calculation and correction explanation; return to it before the next round.",
      "firstIncrement": "Explicit user export from existing member/result data; no automatic messaging or new feed.",
      "acceptance": [
        "Pending rank never appears final.",
        "Correction supersedes prior settlement visibly.",
        "Private picks remain hidden before lock.",
        "Export labels source check and cached/current state."
      ],
      "measure": "Recap use and groups entering another round together.",
      "sourceIds": [
        "S08",
        "S19"
      ]
    }
  ],
  "roadmap": [
    {
      "days": "1–30",
      "work": "Complete cross-sport correctness/UX checks; instrument full group journey; test missing recap/journal/correction flows with existing evidence."
    },
    {
      "days": "31–60",
      "work": "Contract one narrow football competition, validate a full round and correction cycle; retain friend groups before paywall experiments."
    },
    {
      "days": "61–90",
      "work": "Expand only on evidence completeness and economics; quote/validate one additional sport separately; maintain ten gated future sport candidates."
    }
  ]
}
