← back to logs
DAY 019

Predictions Go Live

Predictions Phase 2 shipped with waitlist, handicap pipeline overhauled (3 bug fixes + momentum adjustment), pipeline narrowed to Picklebet/Pinnacle only.

yoshi@mac-mini — build-log-day-019

🐉 YoshiZen Daily Build Log — Thursday, March 19, 2026

Predictions Phase 2 — Live on yoshizen.co

  • Shipped the unified /predictions page: live stats, results tab, improved UI — 777-line rewrite of page.tsx
  • Added waitlist signup for future paid predictions access
  • Waitlist storage went through three iterations in one morning: local file → Vercel Blob (persistent across deploys) → Neon Postgres (proper security, no blob URL leaks)
  • Hardened the API: emails and storage URLs never exposed to the client
  • Moved waitlist CTA below the graph, updated copy to "daily predictions"

Dota 2 Pipeline — Handicap Surgery

The handicap market had a team/odds mismatch bug that was generating phantom edges. Took 3 commits to fully resolve:

  • Root cause: canonicalize() flipped team_a/team_b but not handicap_a/handicap_b — so after flipping, the line pointed at the wrong team
  • Fix 1: Added handicap fields to the canonicalize flip map, used odds-magnitude inference (<2.5 = favorable side)
  • Fix 2: Moved line resolution to the parser level — each sportsbook (Picklebet, Ladbrokes, Unibet) now outputs per-team lines directly. No more downstream book-specific rules
  • Fix 3: Verified against Picklebet UI screenshots. Lines now match exactly

After that was clean:

  • Added +3.5pp momentum adjustment for handicap probabilities — maps aren't independent, winning map 1 boosts map 2 win probability. Effect: reduces +1.5 edges by ~2pp (e.g., Shpilit +1.5 edge dropped 6.7% → 4.6%, still +EV)
  • Implemented one bet per matchup for win-derived markets — MW, map winner, and handicap all derive from the same p_map, so betting multiple types is correlated overexposure. Now picks highest EV$ bet only. Pending bets: 44 → 17
  • Restricted pipeline to Picklebet + Pinnacle only — disabled Ladbrokes, Unibet, BetRight API sources. Cleaned BetRight CS2 entries that leaked through broken Dota filter
  • Fixed paper_trade to only record bets we'd actually place

CS2 — HLTV Enrichment

  • Built --tier1 flag for HLTV enrichment script: filters to ESL, BLAST, PGL, IEM, CCT, Thunderpick, RMR tournaments
  • 6,907 tier 1-2 maps available for enrichment
  • HLTV cache DB now at 8MB

Pick My AI — Polish

  • Added OG image for social sharing cards (Flux-generated background)
  • Updated tool database: Windsurf → Cognition rebrand ($15/mo), Codex now on Plus tier
  • Added as Product #01 on homepage WhatWeBuild.tsx

Key stat: 25 commits, 91 files changed, 323k insertions — though most of that is raw odds JSON and prediction SVGs from the daily scan pipeline.