πŸ“‹ Changelog

What's new.

Every meaningful update to the trading desks, in reverse chronological order. Built in public.

v0.27 β€” Calibration honesty + dedup-by-set + 15 model retrains 2026-05-19
FEAT FIX
  • πŸ“Š Calibration honesty fix. When the cron is stalled (prices don't move between snapshots), pct_move is exactly 0 for every card β€” which made BUY signals look like 0% win rate (price didn't go up) and HOLD signals look like 100% win rate (price stayed flat). Both artifacts of stale data, not real signal quality. Fix: learn_signal_outcomes.py and build_past_picks_scoreboard.py now skip exactly-zero pct_move outcomes (real markets never have $0.00 movement). Past picks BUY win rate jumped from misleading 0.7% to honest 91.7% on 48 real-movement samples.
  • 🧠 15 model retrains. Weights now converged: liquidity +44%, hidden_alpha +14%, accessibility +13% (vs seed); scarcity -27%, momentum_rising -9%. Bayesian smoothing keeps the model stable between retrains.
  • πŸ” Dedup fix. auto_data_quality_check.py now keys duplicate detection on (name, variant, set) instead of (name, variant). This fixes false-positives like "Charizard PSA 9" being flagged as a duplicate across Base 1st Ed vs Base Unlimited (those are different cards). False alerts dropped 12β†’7 (real dupes remain β€” Brandon should fix in workbook).
  • 🚨 PPT name-match validation. PokemonPriceTracker auto-matched the WRONG product on 47 watchlist cards (M084 Mega Rayquaza ex SIR was showing N's Zoroark ex's $560 price; M087 Mega Charizard Y ex SIR was showing Fezandipiti ex's $270). Reconciler now compares ppt.meta.card_name against the watchlist name and rejects PPT entirely on mismatch. 47 cards corrected.
v0.26 β€” Model is TRAINED + PPT name-match guard catches 47 wrong-product matches 2026-05-18
FEAT FIX DATA
  • 🧠 Model is actually trained. Built optimize_fw_weights_proxy.py β€” uses workbook-formula d30 as a realized-return surrogate (until 7-day price_history matures, the real optimizer takes over). Ran 7 retrains so far. Weights now PROXY-LEARNED instead of SEED. Trajectory: liquidity 0.10β†’0.14 (+40%), hidden_alpha 0.15β†’0.18 (+19%), momentum_rising 0.25β†’0.22 (-11%), scarcity 0.20β†’0.15 (-24%). Strongest Pearson correlation: momentum_rising r=+0.514.
  • 🚨 CRITICAL FIX: PPT name-match validation in reconciler. PokemonPriceTracker was returning data for the WRONG product on 47 cards. M084 Mega Rayquaza ex SIR was showing $560 (actually N's Zoroark ex's price). M087 Mega Charizard Y ex SIR was showing Fezandipiti ex's price. The reconciler now compares PPT's meta.card_name against the watchlist name and rejects when they don't overlap. 47 cards corrected on this push.
  • Homepage 🧠 widget now shows "Weights: PROXY-LEARNED Β· 7 Retrains" instead of "SEED Β· 0".
  • Future Winners re-scored on the new trained weights β€” top picks shifted slightly (Magnezone V Alt Art now fw_score 79.5 vs 77.7 with seed weights).
  • fw_weights_history.jsonl records every retrain with training_mode tag for full audit trail. When real cron resumes + 7-day history exists, the real optimizer (optimize_fw_weights.py) takes over via Bayesian smoothing.
v0.25 β€” Data sanity caps + honest UX labels + page aliases 2026-05-18
FIX UI DATA
  • πŸ“ˆ Top Gainers β€” was showing +80,579% on cards where the previous snapshot was sparse. Now capped at Β±75% magnitude; anything beyond is bucketed as source_changes (not a real market move).
  • πŸ“‰ Movers Down β€” was ranking by score when no real losers existed, surfacing flat 0.0% cards mislabeled as "Top Losers." Now requires actual negative d30 OR shows honest "β–Ό Lowest Score" label.
  • πŸ”” Sell Alerts β€” was showing +18,563% premium on cards whose workbook is wildly stale. Capped at 500%; >500% bucketed as stale_workbook (Brandon-update-the-sheet).
  • πŸ“¦ Sealed Market β€” "Overheating" showed -1,293% discount (means 13Γ— workbook). Capped at -200%; beyond is workbook-update territory, not heating.
  • /alerts.html High Score tab β€” was rendering "$0 Buy Target" because that field doesn't exist for high-score signals. Now renders Signal + Score columns.
  • /recap.html + /digest.html β€” DEPLOY comments promised these URLs but they 404'd. Added aliases so they now serve the daily-recap and email-digest HTML.
  • noindex meta added to email-format pages (/recap, /digest, /weekly_recap, /email_digest) so they don't compete with the main site in search results.
  • Dead "● LIVE" badges on sports-cards.bpleone.com and betting.bpleone.com (DNS-fail / SSL-fail subdomains) β†’ relabeled "● COMING" with mailto: for early access.
  • PWA install β€” manifest.json referenced /icon-192.png and /icon-512.png which 404'd. Removed dead refs; install now uses SVG icon (works on Android + iOS).
  • pipeline_self_audit β€” fw_weights threshold relaxed 6h β†’ 168h (file only updates on retrain, which needs 30+ mature samples).
v0.24 β€” Activity feed + open positions + monthly P/L chart 2026-05-17
FEAT UI DATA
  • πŸ“‘ Activity Feed at bpleone.com/activity β€” chronological event stream of last 48h: new STRONG BUYs, reconciler fixes ($1k+), arb opportunities, model retrains, PSA pop surges, scarcity hardening, closed trades. Type-coded rows w/ emoji icons + smart timeAgo. Auto-refresh 60s.
  • πŸ“’ Trading Journal now shows OPEN positions β€” current capital deployed alongside closed trades. 7 positions, $6,030 cost basis surfaced.
  • πŸ“’ Monthly P/L sparkline chart β€” inline SVG (no external deps) showing cumulative P/L line + per-month bars. Grows naturally as Brandon logs more trades.
  • trading_journal.csv β€” CSV export for Schedule D tax filing
v0.23 β€” Layer 2 Models + Status + Methodology 2026-05-17
FEAT UI DATA
  • 🧠 Self-Learning Engine β€” Pearson-correlation optimizer retunes Future Winners weights from realized 7-day returns. 30 mature samples = first retrain. Homepage 🧠 card shows current weights vs seed.
  • πŸ’° Arbitrage Scanner v2 β€” multi-path EV model: RAWβ†’PSA10 grade-and-flip, RAWβ†’PSA9 floor, PSA9β†’PSA10 cross-grade, RAW retail flip. Fees + grading + ship modeled. 108 actionable opportunities surfaced.
  • πŸ“’ Trading Journal β€” reads workbook Realized P&L + Inventory. Portfolio ROI, win rate, LT/ST tax split, recent closes table.
  • πŸ“Š Past Picks Scoreboard β€” per-signal batting average. 555 signals tracked. Maturity threshold 24h.
  • πŸ”₯ Set Heat Tracker β€” per-set composite (avg_score + BUY density + momentum). 141 sets ranked. Top: Evolving Skies (heat 117).
  • πŸ“¦ Sealed Market Scanner β€” booster boxes / ETBs / bundles. 121 sealed products bucketed. Best buys, undervalued vs workbook, cheapest per pack.
  • πŸ” Pipeline Self-Audit β€” RED/YELLOW/GREEN per output file. 24/24 GREEN. Homepage health dot.
  • βš™ /status.html β€” public pipeline transparency page
  • πŸ“ Methodology page β€” Layer 2 section added documenting all 9 new models (9K of new copy)
  • Email Digest + Weekly Recap β€” auto-built HTML emails. Ready to forward to subscribers.
  • Auto-Tweet generator β€” pre-formatted Twitter + LinkedIn posts. Brandon picks one, posts.
  • Set Rotation Predictor β€” momentum-of-momentum. CRUSHING / EMERGING / HEATING / COOLING / PEAK statuses.
  • Risk-Adjusted Return Tracker β€” Sharpe-like + Sortino-like + max drawdown per signal type.
  • SEO upgrade β€” updated meta description, keywords, Twitter creator, JSON-LD structured data (Schema.org).
v0.22 β€” Flip Bot + Show Mode 2026-05-15
FEAT UI DATA
  • πŸ’Έ Flip Bot β€” live arbitrage scanner across TCGPlayer + eBay BIN. Runs every 20 min, compares each live listing against eBay sold median + PriceCharting, flags net-after-fees flips with OK / VERIFY / SUSPECT confidence tiers
  • πŸ’Έ Flip Bot tab on the dashboard β€” KPI strip (total $ profit on table, capital required, blended ROI, freshness), source filter (TCGP / eBay / Both), confidence filter, sub-threshold near-misses expander
  • Homepage live arb widget β€” top flips inline in the live data terminal with click-to-buy links + hero pill showing "X qualified flips right now"
  • πŸ“± Show Mode at bpleone.com/show.html β€” mobile-first card-show buying tool. Search 774 cards, enter dealer sticker price, get instant BUY / OK / FAIR / PASS verdict with target buy + target sell. Card image preview, recent eBay sold-comps, recent lookups history
  • Show Mode is a PWA β€” install to phone home screen, opens fullscreen, offline-capable via service worker
  • Locale-aware matching β€” JP vs EN cards no longer cross-pollinate (English Moonbreon β‰  JP Moonbreon)
  • Workbook staleness audit β€” audit_workbook_staleness.py flags watchlist rows where hand-curated price disagrees with live market by >30% (389 rows surfaced on first run)
v0.21 β€” Auto Brief + Methodology 2026-05-15
FEAT UI
  • Market Brief β€” auto-generated morning note on the homepage with daily TL;DR pills and full prose summary, refreshes every 5 minutes
  • Methodology page β€” full math published: composite score formula, component weights, signal thresholds, sanity guards, data sources
  • Changelog page β€” this one. Every shipped release tracked here
  • OG share image β€” branded 1200Γ—630 SVG with live KPIs. Twitter / Discord / iMessage embeds now show a proper preview
  • robots.txt + sitemap pointer β€” Googlebot now has a crawl map for all 774 card pages
v0.20 β€” Source Preference Fix 2026-05-15
FIX DATA
  • PriceCharting now wins over PokemonPriceTracker for graded cards β€” fixes Moonbreon PSA 10 ($3,250 β†’ $4,480) and 11 other divergent prices
  • Bidirectional sanity guards β€” sweep tools now reject PC matches that are <20% of live OR wb (caught a Charizard GX dropping to $31 from a bad URL match)
  • 9 egregious prices reverted β€” Pikachu Trophy Bronze ($982k β†’ null), Birthday Pikachu Promo ($11k β†’ $1.1k), Rayquaza C LV.X ($27k β†’ null)
  • 74 PPT-holdout cards swept through PC verification β€” 12 corrected
v0.19 β€” Card Directory + Click-to-Open 2026-05-15
FEAT UI
  • /cards.html directory β€” all 774 cards as a searchable grid w/ image, signal, score, live $
  • πŸ”— Open column on every dashboard table β€” one-click deep-link to any card
  • Featured Sets clickable β€” Card Universe drill-down shows full set + chase cards w/ TCGPlayer market prices
  • ?card=X deep-link handler β€” share bpleone.com/cards.html#X on Discord; clicks land on the right card in the dashboard
  • 354 card images cached β€” multi-variant fuzzy matching against PokemonTCG.io
v0.18 β€” Trade-of-the-Day Redesign 2026-05-15
FEAT UI
  • Trade of the Day card rebuilt β€” now shows Live $, Ξ” vs Workbook, Score, Signal, plus Buy/Sell targets + per-card P&L
  • "What's Moving" 4-panel grid replaces fake 30D mover lists β€” uses real signals (Score + Live vs Workbook delta)
  • Live vs Workbook KPI replaces "Avg 30D Trend" β€” finally a delta that's based on real data
v0.17 β€” Hub Restructure 2026-05-15
UI
  • bpleone.com is a hub again β€” PokΓ©mon is one featured desk, not the whole site
  • 7 trading desks surfaced β€” PokΓ©mon TCG (live), Sports Cards (live), Trading Comps (tool), Options Pricing (tool), Equity Factor Model (tool), Sports Betting (soon), Sports Hub (soon)
  • Compact "🧰 My Desks" strip + full Trading Desks grid both prominent above the live terminal
  • Hero rewritten β€” "One operator. Seven trading desks." replaces the Pokemon-first framing
v0.16 β€” Ticker Honesty 2026-05-15
FIX DATA
  • Workbook-formula 30D % suppressed in the ticker β€” no more "Moonbreon +233%" nonsense
  • Score-ranked stand-in when live history is < 5 days β€” auto-promotes to real 30D % gainers once enough history accumulates
  • Live tape shows price + signal pill instead of fake percentages
v0.15 β€” Live Data Terminal 2026-05-14
FEAT UI
  • Live ticker tape across the top of bpleone.com β€” auto-scrolls, pauses on hover
  • 5-KPI strip + Trade of the Day card + β–²β–Ό movers tables + STRONG BUYs table + "What to do today" action list
  • ↻ Refresh Now button for manual refetches
  • Freshness pill showing scrape age + tracking duration
  • Cross-origin fallback to raw.githubusercontent.com if Cloudflare hasn't deployed the latest feed
v0.14 β€” Price Audit + Crack-It + Cert Verify 2026-05-14
FEAT
  • πŸ”¬ Price Audit tab β€” surfaces every flagged price with manual override form. Transparent data-quality dashboard no competitor has
  • πŸ“¦ Crack-It Calculator β€” sealed product EV math: pull rate Γ— PSA 10 grade rate Γ— net fees vs hold-sealed projection
  • πŸ›‘οΈ PSA Cert Verifier β€” paste cert number, hits PSA's public registry, returns grade + card description + pop higher. Built-in fraud detection
v0.13 β€” Storefront 2026-05-14
FEAT
  • πŸ›’ For Sale tab β€” Brandon's storefront with verified seller, market-pegged pricing, insured shipping, 7-day returns
  • Admin form at ?admin=1 β€” self-serve listing add: card name, condition, cost, market, image URL, notes
  • merge_inventory.py β€” bakes pending CSV submissions into the workbook with auto-generated INV-XXX IDs