← back to logs
DAY 022

Sub-Markets and Market Making

Expanded Polymarket bot to kills O/U + game winner sub-markets, built two-sided market maker, fixed capacity deadlock, added chronological bet sheets, launched pickagame.fun.

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

🐉 YoshiZen Daily Build Log — Sunday, March 22, 2026

Polymarket Bot — Sub-Markets & Market Making

  • Added kills O/U and game winner sub-markets to the Polymarket bot — previously only traded series winner
  • Built Phase 2: two-sided market maker — places SELL orders via complementary token BUY (Polymarket's CLOB doesn't support naked sells), using actual sweep probability for BO2 fade pricing
  • Fixed a capacity deadlock on restart: _seed_inventory() was counting resting orders as cost_basis_usd, filling remaining_capacity to 0 and blocking all new quotes
  • Fixed penny-above-self oscillation — bot was repricing into its own resting orders in a tight loop
  • Fixed team alias resolution so predictions actually matched Polymarket market slugs
  • Bumped MAX_TOTAL_EXPOSURE to $5,000 for sub-market volume
  • Tuned kills edge thresholds: started at 10%, moved to 15% after observing fill rates
  • Built redeem_all.py — discovers and redeems all settled positions via Polymarket data API
  • Removed hourly Picklebet odds refresh from the bot (was unnecessary overhead)
  • 30+ commits to market_maker.py alone — heavy iteration day

Betting Infrastructure — Chronological Bet Sheets

  • Added chronological SVG output to generate_todays_bets — consolidates all daily scan JSONs into a single SVG showing how the bet sheet evolved across scans
  • Added start-time sorting — extracts scheduledStartTime from Picklebet Firestore API, threads through unified-odds → daily_scan → output JSON, groups bets by match kick-off in AEST
  • Fixed start_time backfill: when best odds come from Pinnacle/Bet365 (no start_time), looks up the time from Picklebet data for the same matchup

Picklebet Firestore Pagination

  • Discovered Firestore's default page size is 100 documents — events with many kills lines (9+ lines × 2 maps × 2 sides) silently drop markets beyond 100
  • BB vs REKONIX had 146 markets; 46 were missing including M1 43.5 kills O/U
  • Now requests pageSize=300 and follows nextPageToken if present

pickagame.fun — Day 4 App

  • Built and shipped pickagame.fun — a vibes-based board game matchmaker
  • Answer a few questions, get matched with games you'll actually want to play
  • Idea to live in a single Claude Code session

yoshizen.co — /lab Page & Polish

  • Built the /lab page — running log of the app-a-day experiment (4 apps listed)
  • Fixed stale /lab/blog permanent redirect in next.config.ts
  • Automated pickmy.ai tool database freshness via daily cron (8am AEST)
  • Fixed stale tags: GPT-4o → GPT-5.4, gen-3 → gen-4

Key stat: 45 commits, ~350k insertions across 185 files. The Polymarket bot went from series-winner-only to a three-market-type two-sided market maker in one day.