Changelog

What's new in OddsIntel — model improvements, new features, and fixes. Both pipeline (engine) and UI changes are listed here.

2026-06-06

Value bets density pass · Real-money tier badge · Calibration upgrade · WC infra · Calendar correction

  • FeatureValue bets page redesigned for density — the previous 5-section vertical stack (h1 + subtitle + tier explainer + Telegram banner + CLV trust card) collapses to a compact 2-line header with a clickable CLV pill (links to /performance for the full breakdown) and a small Telegram icon-chip. Recovers ~500-600px of vertical space on mobile = 4+ more value-bet rows visible above the fold
  • FeatureLive in-play picks now surface on /value-bets as a compact 1-row strip showing the top 3 live edges + a "→ /live" link, instead of duplicating the full live grid that lives on /live. Cleaner page, same access
  • FeatureElite-view per-row chip renamed from "Pro" to "Calibrated" — clearer that the marker indicates the underlying model + bot have cleared the calibration gate, not just that the pick is also in the Pro feed
  • FeatureAdmin / real-money decision tool: each pending paper bet on /admin/place now carries a composite "Real-Money Tier" chip — ✅ Bet / 🟡 Cautious / 🔬 Paper only. Folds model calibration tier, bot CLV+ROI history, and per-bet warning flags into one operator-only signal with hover-revealed breakdown. Bets are NEVER filtered — pure information
  • ModelSix markets received fresh Platt sigmoid calibration today (asian_handicap_away -0.5, btts_yes/no, double_chance_1x/x2, inplay_e_under_25). Average ECE improvement: 19% → 4.5% across the six. Bot probability outputs on these markets are now materially more honest
  • ModelIn-play strategy fixes: inplay_i Favourite Stall now applies a Bayesian Gamma posterior update on prematch xG (was ignoring the 0-0 score information) plus a model-vs-market gate to skip low-data-league overconfidence. inplay_n received the same model-vs-market gate. inplay_o quarantined 62 pre-fix tainted bets (€577 of inflated PnL removed)
  • ModelCLV backfill against Pinnacle's closing line (n=517, 60 days). bot_ah_home_fav promoted to calibrated cohort (+8.89% CLV). bot_ah_away_dog retired (−29.87% CLV). bot_aggressive_v2 retired (positive CLV but bad odds-band sizing). Five acca/combo bots retired (0W/42L combined)
  • InfraWorld Cup 2026 odds infrastructure: daily 06:30 UTC cron sweeps The Odds API for WC fixtures during the tournament window (Jun 11 → Jul 19). First sweep landed 5,858 rows across 24 bookmakers including Pinnacle (which is available on WC specifically, unlike other Odds API soccer competitions)
  • InfraWeekly threshold-check cron — Sunday 06:00 UTC, runs scripts/threshold_check.py and emails the gate-count snapshot via Resend. Prevents the "Key Thresholds to Watch" counts from going stale (the manual run had gone 13 days stale before today's audit)
  • FixAdmin / real bets page — "Won / lost" tile now shows "Won / lost / void" when voids exist. Hit-rate denominator excludes voids (won/(won+lost) not won/settled). Surfaces the missing-bet math operator-flagged this morning
  • InfraCalendar correction across PRIORITY_QUEUE.md + MODEL_WHITEPAPER.md — multiple body-text references confused dates with weekdays ("Sunday 2026-06-08" when 6/8 is actually Monday). Bundle name expectation updated: Sunday's cron output will be v20260607, not v_20260608 as some task bodies said
2026-06-05

Landing redesign · Mobile audit · SEO content engine · Unified marketing nav

  • FeatureLanding page condensed by 49% (706 visible words → 358) in a 4-day copy-density audit. Single load-bearing CLV hero stat replaces the previous 3-stat spread. Tier explainers collapsed. Telegram CTA tightened. FAQ trimmed 5 → 3. Pricing surface demoted to a single CTA on landing (full /pricing page remains)
  • FeatureMarketing pages now share a single MarketingNav component — landing, pricing, privacy, changelog, terms. Adds an auth-aware profile dropdown for logged-in users and a mobile drawer. Adding a new marketing page = one component import
  • FeatureMobile landing redesign (P0+P1+P2 batch) — hero fits above the fold on 393px Android, FAQ uses native expanders (~2400px scroll → 1 viewport), competitor matrix gets per-section header chips, animation placeholder copy removed, featured-on badges normalized
  • FeaturePast-fixture recap pages (SEO Phase 3) — every finished fixture now has a /matches/[id]/recap surface with model-quality framing, CLV display, and bot analysis. Includes SEO slugs + quality gates
  • FeatureTwo new /vs competitor comparison pages — /vs/sofascore and /vs/oddschecker. Plus 3 additional /vs entries (V2 batch). Landing competitor matrix now has every column linked to an in-app comparison page
  • FeatureLive scoreboard now shows stoppage-time minutes — "90+5'" instead of capping at "90'". Matches the BBC/ESPN convention
  • FeaturePer-bot drilldown modal on /admin/bots now has a "Performance breakdown" 3-row table — All-time / Since 2026-05-24 / Δ — so the post-model-batch cohort is visible alongside the all-time numbers
  • InfraPerformance improvements (Lighthouse Fix 2 + 3): team logos converted to next/image for proper optimization; 7 heavy SSR queries wrapped in unstable_cache for sub-second cold loads on /performance and /matches
  • FixGoogle Search Console Event-schema issues resolved across 6 page types — eventName, startDate.timezone, location.address structured-data fields filled out
  • FixVercel image quota workaround on team-logo headers (unoptimized flag where appropriate)
  • FixPostHog event ingestion had been silently blocked by CSP for weeks — connect-src now allows us.i.posthog.com
2026-06-04

WC infrastructure complete · Model card per match · Coolbet anonymous read · Drift signal

  • FeatureWorld Cup 2026 hub fully built — Overview, Schedule, Groups, Knockouts, Teams, Leaderboard, Top Scorers tabs. Group standings with 5,000-iteration Monte Carlo advancement probabilities. Tier-gated knockout AI predictions (Pro unlock). 17 WC components, 9 supporting libs, 8 backend jobs (achievement detection, bracket scoring, slot sync, daily email, lineup refresh, live xG, match previews, recap tweets)
  • FeaturePer-match model card with reasoning protected behind a UI layer — the model's debug payload (signal breakdown, edge computation) is summarized into model + market disagreement copy on /matches/[id] without leaking raw JSON
  • FeatureScore predictions and key-player chip on match detail — Poisson top-5 scoreline distribution plus a key-player surface
  • FeatureWin-probability route + chart component for live matches — /api/matches/[id]/wp returns goal-event timestamps + next-10-min goal probability; matched widget renders the live curve
  • ModelPinnacle drift signal landed — opening-vs-closing line move per outcome populated as a training feature. Backfilled across 219 matches via OddsPapi historical (CLV-BACKFILL groundwork). MFV columns pinnacle_drift_home/draw/away now feed the Sunday retrain
  • ModelFootball-data.co.uk CSV full-extract — 118K Betfair Exchange rows + multiple bookmakers' OU 2.5 closing across 9 bookmakers across ~8.5K matches. Backbone for the OU25-dedicated-model investigation
  • InfraCoolbet event-search now works anonymously (Imperva cookies only, no JWT) for the ingest path. Closes the silent 6-day outage that started 2026-05-28 when the manual JWT expired and ingest started returning 0 rows
  • InfraAsian Handicap prototype model (XGBoost on football-data CSVs) — first dedicated AH bundle reaches CV AUC 0.73 on n≈3,200. Not yet wired into production but available for the OU25-DEDICATED-MODEL-INVESTIGATE follow-up
  • FixCoolbet snapshot ingest banner — /admin/place now surfaces an amber warning when no Coolbet odds_snapshots have arrived in the last 60 minutes. Prevents the next silent outage from masquerading as a wall of "no event" chips
2026-06-03

Elite league filter · In-play minute + score · AH stake display · Bot calibration

  • FeatureElite tier: each value-bet row now shows a colour-coded badge with the model's 90-day hit rate in that league (emerald ≥50%, purple ≥45%, amber ≥40%, red <40%). New "★ N strong leagues" filter pill restricts the list to leagues where the model has historically performed at ≥45% — instant focus on the leagues where the model is sharpest
  • FeatureIn-play picks now show the match minute and score when offered — "In-play · 23' · 0-1" — so you can tell a 3' pick (close to prematch state, model reliable) from a 67' pick (highly path-dependent) at a glance
  • FixAsian Handicap picks on Elite were silently dropping the stake suggestion. Every Elite row with a recommended size now shows the units regardless of market
  • Fix100% of Asian Handicap picks had been storing NULL recommended_bookmaker, so /admin/place rendered "—" instead of the actual best book. Fixed — AH rows now surface their best accessible bookmaker like every other market
  • ModelPer-bot CLV audit against Pinnacle's closing line completed (60d, n=517). bot_v10_all confirmed at +17.5% honest total ROI on n=157 — strongest signal in the lineup. Retired bots' decisions all confirmed correct
  • ModelInplay strategy calibration audit: inplay_l (Goal Contagion) cleared the 5% ECE gate at 4.96% with +25.8% ROI on n=31, promoted to the calibrated cohort. inplay_i flagged for recalibration (ECE 24.6%, n=11). inplay_j silent failure root-caused to a Bayesian prior shrinkage mismatch and unblocked — strategy now uses a local conjugate Gamma update with lighter shrinkage matching the strategy's design
2026-06-02

World Cup 2026 hub · Pro tier overhaul · Bracket challenge · Global feedback widget

  • Feature/world-cup hub launched: full tournament UI with Overview, Schedule, Groups, Knockouts, Leaderboard, and Top Scorers tabs — BBC-style top-level navigation, mobile-first carousel, country flags everywhere
  • FeatureBracket Challenge game — pick the entire knockout bracket (R32 → Final), compete against 5 named AI ghosts + 40 anonymous "Player NNN" variants + the rest of the community on a combined leaderboard. Top 3 humans win 1 month of Elite, free
  • FeatureStage-gated bracket: each round opens after the previous resolves (BBC pattern), so you don't have to guess your R16 picks before knowing who advanced from the groups
  • FeatureShareable brackets — every saved bracket gets a unique share URL with an auto-generated OG preview card showing your top picks. Web Share API on mobile, clipboard fallback elsewhere
  • FeatureGroup standings predictor: pick the order of every group + the best 8 third-place teams (48 picks · up to +192 pts toward the leaderboard)
  • Feature15 World Cup achievements with badge icons — first to lock, all 12 groups perfect, beat the AI in R32, called the champion, vs-you streaks, and more. Detection runs every 15 minutes during the tournament window
  • FeatureGemini-generated AI match previews (80-120 words) on each World Cup fixture, surfaced as inline expanders on /world-cup
  • FeaturePro Tier V2: every value-bet row now shows the selection, odds, and recommended bookmaker (no more directional-only restriction). A new "Live now" auto-refreshing section above the main list surfaces fresh in-play picks every 60 seconds
  • FeatureCohort transparency: Elite tier sees picks from all 39 active bots; calibrated-cohort picks (also shown to Pro) get a "PRO" badge so you can tell the curated subset from the wider Elite-only set
  • FeatureLive in-play win-probability chart on every match detail page — updates as the match unfolds. Pro+ feature
  • FeatureUnified Value Bets feed: every pick now carries a Pre-match or In-play chip plus a status indicator that switches between countdown (4h 45m), pulsing LIVE, and Won/Lost/Void result pills as the match progresses
  • FeatureCLV trust banner — a single CLV-first hero shown across landing, /value-bets, and /world-cup. Pulls live 30-day ROI + sample size + average closing line value from a server-side cache, no client wait
  • Feature"Give feedback" button now appears on every page (was previously missing on logged-in routes). Copy rewritten to invite ideas and suggestions, not bug reports — "Tell us what to change"
  • FeatureBack button: a small top-left pill on every app page so you can always reverse one step without thumbs reaching for the browser chrome
  • Model70% confidence display cap: picks at >70% calibrated probability now render as "70%+" instead of the raw number. Calibration audit showed the model is overconfident above this threshold on small samples
  • DataWorld Cup fixtures, lineups, predictions, ELO ratings backfilled across 6,921 historical international fixtures (25 competitions). The national-team predictor runs nightly and feeds /world-cup directly
  • InfraSentry trimmed to feedback-only — error tracing dropped to zero sample rate so the free tier doesn't get capped. The feedback modal still ships every report
  • FixMobile polish: tighter /world-cup hero so content shows above the fold, knockout placeholder now a compact 5-row schedule (was 31 stacked TBDs), leaderboard de-cluttered, group carousel sync fixed (swiping cards updates the letter tabs)
  • FixStarted prematch picks on /admin/place no longer disappear — they stay visible with a "Started Nm" tag and a live in-play edge column so manual placement decisions during early minutes are possible
  • FixSettled bets dropped from the active Value Bets feed (they were showing as muted gray "LIVE" badges instead of being filtered out)
2026-05-28

426 more leagues · In-play fixes · DNB data fix

  • DataModel coverage expanded to 426 additional leagues — Kazakhstan, Estonia, Georgia, Ethiopia, Iraq, Peru, Uruguay, Indonesia, and many more. Picks in these leagues were previously filtered out due to insufficient historical data; they now go through the full model and value-bet pipeline.
  • ModelFixed 6 in-play strategies that were silently skipping 62% of matches because prematch predictions data only covers ~38% of leagues. Strategies now fall back to expected-goals data which has near-100% coverage.
  • ModelIn-play Post-Equalizer strategy capped at odds 5.0 — data audit showed −50% ROI at 5.0–6.0 and −59% above 6.0.
  • FixIn-play BTTS bots were silent for 4 days due to a missing column in the candidate query. Fixed — both bots now active.
  • FixDraw No Bet market data fixed — an API naming mismatch meant DNB odds were stored as zero since the market launched. Real prices now land correctly.
2026-05-27

UI polish · Copy accuracy · Off-season empty state

  • FixProfile page copy corrected: starred matches now accurately described as pinned to top of your feed
  • FixWatchlist alerts description updated to accurately say 'starred leagues' instead of saved matches
  • FixPredictions page now shows a clear off-season explanation (Aug–May cycle) instead of a confusing 'check back tomorrow' message
  • FixContrast improvements across several pages — low-opacity labels lifted to meet accessibility standards
2026-05-25

Value bets · Performance page · Draw No Bet · Meta-model

  • FeatureBot consensus chip ('N bots agree') now visible to all tiers on the value bets page, not just Elite
  • FeatureLine direction chip per pick: ↓ green means the market has moved toward our pick (sharpness signal), ↑ blue means the value is widening
  • FeatureCompact league, kick-off time, and best bookmaker subtitle on every value bet row for quick line-shopping
  • FeatureFree tier: highlighted pick now shows last-30-day ROI and sample size as a conversion hook
  • FeaturePerformance page: platform-wide cumulative P&L chart (90-day, daily buckets) as the headline trust signal
  • FeaturePerformance page: win streak and losing streak badges with sample-size disclaimer
  • FeaturePerformance page: calibration table (5 probability buckets) showing model accuracy vs actual outcomes
  • DataDraw No Bet (DNB) market now available on match pages — real DNB odds ingested from 13 bookmakers
  • ModelSecond-layer meta-model (B-ML3-V2) integrated into the pipeline — scores each pick's expected closing line value before selection; currently in passive monitoring mode
  • DataOvernight odds capture at 02:00 and 04:00 UTC — morning value picks now use significantly fresher line prices
2026-05-24

6 new model signals · Asian Handicap overhaul · BTTS in-play bots

  • Model6 new prediction signals added: season phase (fatigue and urgency patterns in early/mid/late-season matches), line velocity (how fast Pinnacle moves before kick-off), per-league draw rate, xG overperformance (regression-to-mean on expected goals), injury severity weighting (ACL/fracture counts 3× more than a knock), and rolling player ratings
  • ModelAsian Handicap model overhauled: retired the away-dog bot (12-day backtest: −31.8% ROI), re-activated with a handicap line floor that lifts it to +43% ROI in backtesting, and filtered the home-fav bot to avoid a miscalibrated handicap zone (was −49% ROI on +0 lines)
  • Feature2 new BTTS in-play bots: one fires on 1-0 / 0-1 score states with active shot creation, one targets 0-0 games entering the final 25 minutes with high shot volume — both calibrating on first real results
2026-05-19

Expanded league coverage · Model improvements · In-play signals

  • DataModel predictions now cover 13 additional leagues: USA, Brazil, Argentina, Mexico, Japan, Sweden, Norway, Poland, Austria, Denmark, Czech Republic, China, and Russia
  • ModelImproved in-play signal accuracy — in-play picks now go through stricter evidence filters before being surfaced
  • ModelAdded BTTS (Both Teams to Score) in-play signals — new market type available during live matches
  • ModelAdded Under 1.5 goals market to value picks
2026-05-17

Performance page accuracy · Retired strategies

  • FixPerformance page headline now shows active-strategy ROI separately from all-time ROI — no more mixing active and retired results
  • FixRetired strategies now shown in a separate collapsible section rather than polluting the active leaderboard
  • FixPerformance charts now correctly start at each strategy's starting bankroll (not first bet outcome)
  • FixStrategies with zero bets or no retirement reason hidden from the retired section
2026-05-13

New inplay strategies · Performance quality filter

  • Model2 new inplay strategies added: Underdog Hold (backs the underdog when the leading team stalls in the second half) and Post-Equalizer (picks up value in the minutes immediately after an equalizer)
  • FeatureQuality filter toggle on the performance page — switch between all strategies and high-quality-only view
  • FixValue bets: 'N bots agree' chip repositioned inline with the match name for a cleaner layout
2026-05-12

Value bets display · Odds quality · Mobile improvements

  • FeatureValue bets page now shows Pinnacle odds and a live edge indicator — see how much value remains vs the sharpest book
  • FeatureStale pick dimming: value bets where odds have moved significantly are visually dimmed with an explicit status badge
  • FixAsian Handicap labels now display correctly (e.g. Away +2 instead of Away -2)
  • FixValue bets page now shows calibrated probability instead of raw model probability
  • FixMobile layout for value bets replaced with a proper card layout — no more truncated table rows
  • FixPage load speed improvements: Lighthouse scores improved across SEO, accessibility, and LCP
2026-05-10

Odds quality · Duplicate fixtures cleaned up

  • FixOver/Under odds cleaned up: 3 unreliable sources removed, plus an implied-sum sanity check to catch malformed lines
  • Fix1,425 duplicate fixture entries removed — match list and predictions pages no longer show the same match twice
2026-05-07

Match detail redesign · Signal improvements · Predictions expansion

  • FeatureMatch detail fully redesigned with tabbed layout: Overview, Intel, Context, and Stats tabs
  • FeatureModel probabilities now shown in the Intel tab — see exact predicted win/draw/loss percentages
  • FeatureVenue and referee shown in the Context tab for all matches
  • FeatureTab badge counts — e.g. Intel tab shows number of active signals without opening it
  • FeaturePredictions pages now show league fixtures grouped by day with team crests and a 2-column grid layout
  • FixOdds and probabilities correctly hidden for finished matches — Intel tab promoted to primary view post-match
  • ModelTier D renamed to Tier C across the model — clearer coverage tier labelling
2026-05-06

Matches page UX · Today/Tomorrow tabs · Performance fixes

  • FeatureToday and Tomorrow tabs on the matches page — browse the next day's fixtures without refreshing
  • FeatureMatches page now covers all active leagues (previously limited to top-tier leagues)
  • FixLive scores shown in red, winning team bold — consistent with Flashscore-style visual conventions
  • FixMatch rows cleaned up on mobile: two-line team layout, slimmer headers, removed visual noise
  • FixMatch times shown in your local timezone (was showing UTC)
  • FixDuplicate match entries on predictions pages fixed (PSG, Bayern Munich, and cross-league name variants)
2026-05-05

Magic link sign-in · Branded auth emails · Auth flow improvements

  • FeatureEmail sign-in now uses one-click magic link — no more typing a 6-digit code
  • FeatureEntering an unknown email on the login page auto-redirects to signup with email pre-filled
  • InfraAuth emails (confirm, magic link) now sent from noreply@oddsintel.app via Resend — no more supabase.co sender
  • InfraBranded magic link email template with OddsIntel dark styling
2026-05-04

Bot detail modal · Alignment signals expanded · Matches fix

  • FeaturePayments live: Pro (€4.99/mo) and Elite (€14.99/mo) subscriptions now accept real payments via Stripe
  • FeatureBot dashboard: click any bot to see full bet history with bankroll progression chart
  • FeatureSharp bookmaker consensus signal: tracks whether Pinnacle, Betfair et al. agree with the model pick
  • FeaturePinnacle anchor signal: flags picks where the sharpest market confirms (+) or rejects (–) model probability
  • FixAlignment scoring: bets with no active signals now correctly show NONE instead of LOW
  • FixMatches page: shows today's matches + yesterday's still-in-progress only (was showing finished yesterday matches)
  • InfraTrack record page now reads from pre-computed nightly cache — significantly faster load
2026-05-03

Platt scaling calibration · Nightly dashboard cache

  • ModelPlatt scaling fitted on 400 real match outcomes — probability calibration error (ECE) reduced by 86–97% across all markets
  • ModelAuto-calibration triggers after settlement once enough data is available
  • InfraDashboard cache written at 21:00 UTC — track record, bot stats, and system status all served from cache
2026-04-29

16 bots live · Instant settlement

  • Feature6 new bots added (total 16): BTTS, O/U 1.5, O/U 3.5, draw specialist, and optimised variants
  • FixSettlement triggers instantly on full-time detection — no more waiting for nightly batch
2026-04-28

AI previews · Email digest · Live polling

  • InfraSmart live polling: 30s during live matches, 60s/5min when quiet — fully automatic
  • FeatureAI match previews published daily at 09:00 UTC (Gemini-powered)
  • FeatureEmail digest: daily picks summary sent to subscribers
2026-04-27

Match list UX · Track record redesign

  • FeatureTeam crests on match list and detail pages
  • FeatureCountdown timer to kick-off for upcoming matches
  • FeatureForm strip (last 5 results) shown per team
  • FeatureTrack record redesign: leads with Closing Line Value and alignment signals, not bankroll simulation
  • FeatureStatistical significance progress bars: tracks milestones toward credible sample size
2026-04-26

XGBoost ensemble · Sharp book classification · Signal system

  • ModelXGBoost blended with Poisson model (50/50) — improved on high-variance matches
  • ModelSharp bookmaker classification: 13 books scored by historical sharpness, feeds into signal weighting
  • ModelDixon-Coles correction applied to Poisson home/away rates
  • Feature11 signals tracked per match: odds movement, injuries, lineup news, form delta, ELO gap, H2H, referee, situational, sharp consensus, Pinnacle anchor
  • FeatureAlignment score per bet: NONE / LOW / MED / HIGH — measures how much supporting evidence exists
2026-04-25

Signal UX · Live odds chart · Bet explanations

  • FeatureSignal accordion on match detail: signals grouped by category with expand/collapse
  • FeatureSignal delta: shows what changed since your last visit (Pro)
  • FeatureIntelligence summary card on match detail — key signals at a glance
  • FeatureLive in-play odds chart for Pro users during live matches
  • FeatureBet explanations: Gemini generates natural language reasoning per pick (Elite)
  • FeatureTier system: Free / Pro (€4.99/mo) / Elite (€14.99/mo) with Stripe billing
2026-04-24

Data sources · Model foundation

  • DataOdds from 13 bookmakers including Pinnacle, Betfair, Unibet, and Bet365 — covering 13 top-tier leagues
  • DataSupplementary odds coverage extended to 41 additional leagues
  • ModelGlobal ELO ratings covering 8,385 teams
  • ModelPoisson model with 3-tier fallback (own history → league averages → league predictions)
2026-04-20

Launch

  • FeatureOddsIntel public beta launched
  • FeaturePublic matches page (no account required)
  • FeatureAuth: magic link OTP + Google OAuth
  • FeatureFree tier: match list, signal grades, today's picks teaser
  • FeaturePro tier: full signals, odds movement, lineups, injuries, value bets

OddsIntel is in public beta. All model predictions are for informational purposes only.