system map · repos at main · 2026-10-20

Harness City ///

Every building is a real service; every animated dot a real control or data path, traced from the code at latest main across opportunity_harness · sports-analytics · homelab · homelab-ops · blake-bet · spin-preflop · postflop-spots · the Post Fiat forks. Click a building to spotlight what it talks to · scroll to zoom · drag to pan · click legend rows to filter layers · Esc resets.

Zoom to
bradsbots/* [2]bradsbots/* + forks Actions [2]CI + reusable deploy env secrets [2]per-stack .env www.blake.bet [16]DFS lineups · live bradblake.dev [17]this site opportunity_harness [1]:8090 · 8s loop Harness Postgres [1]pg16 :5432 otel·tempo·prom [1]grafana :3009 homelab lab view [8]:3002 Post Fiat network [19]L1 node (Rust) · Task Node tina-homelab [11]:8092 sports-analytics [5]:3003 Lines API blake-bet pipeline [16]cron · NFL/NHL/NBA WG VPN+SOCKS5 [6]sports-vpn LiftApp [11]:8088 stonk-screener [11]:8000 UI :5173 [5]sunset dev-pg [11] Ollama · RTX 5060 Ti [7]:11434 · gpt-oss:20b resident Kalshi [3]REST + WS rabbitmq [11] SearXNG [7]:8888 NPM [11] solver batches [17]docker · rust:1 · CPU The Odds API [3] Polymarket [3]gamma·clob·lb·ws Open WebUI [11]:3000 desk · Claude Code [8][19]Windows dev box portainer [11] Gemini preds [3] Pinnacle·Bovada [3]reference ESPN [3]schedule truth glances [11] Novig [3]read-only ProphetX [3]order book Post Fiat rig [18]~/src/postfiat · cargo/npm/py inbox [15] DraftKings [6]VPN-only scrape Hyperliquid [4]funding·wallets DeFi lend ×3 [4]Aave Kamino Morpho DFS sources [16]FantasyPros·RotoGrinders·DailyFaceoff Perp DEXs ×7 [4]dYdX OKX BP PDX AEVO… Jupiter [4]spot + preds CEX spot ×4 [4]CB KR GM BS Goods APIs [3]eBay Brickset Kroger Llama·DexScr·Gecko [4]yields · pairs Resend [15]email API NFL data [14]Sleeper·nflverse·ECR deploy on push odds+preds pull funding·spot·DeFi pull goods+NFL pull Playwright via WG /api/lines 60s /api/actions ~160 jobs/day + ask-the-desk alerts + digests inbox browse :8090/:3002 DFS refresh (cron) docker exec refresh + export commit + push public/data Vercel deploy on push Vercel deploy on push git push (Claude Code) ssh · builds + solver runs ssh · docker run PR branches (forks) upstream PRs puzzles JSON VERCEL deploys on push GITHUB CLOUD bradsbots/* · Actions CI/CD RACK BOX · 192.168.40.222 ubuntu-MS-7C95 · Ryzen 5800X · RTX 5060 Ti · Docker POST FIAT upstream · Task Node SPORTS + PREDICTION VENUES pull every 8s cycle CRYPTO DATA PLANE funding · spot · DeFi · on-chain GOODS · NFL · EMAIL OPERATOR desk + inbox
scroll = zoom · drag = pan · click = inspect

Inspector

Legend · click to filter

Buildings — click a row to toggle
opportunity_harness — decision tower · solver batches
sports-analytics · blake-bet — Lines API · DFS pipeline + site
homelab — read-only lab view
VPN / NFL / DFS sources
AI stack — Ollama GPU · SearXNG · bradblake.dev
Post Fiat — rack rig + upstream network
personal apps — tina · LiftApp · goods
infra strip — pg · mq · proxy · monitors · stonk
flat pads — external APIs
Paths — click to toggle
data pull — scheduler fetches
control — deploy · git push · ssh
VPN egress — DK via WireGuard
email push — Resend digests
operator/lab reads
LLM calls — narrated jobs · ask-the-desk

How this city runs

Push to main is the only deploy. Every stack ships the same way: a GitHub Action calls the reusable workflow in homelab-ops, SSHes into the rack box, writes the per-stack .env from a GitHub secret, and compose-builds. The rack box is one Ubuntu Docker host — every tower on the big platform is a container. Ollama is the one thing on the rack that runs bare on the host.

The tallest tower is the loop. opportunity_harness runs an in-process scheduler: an 8-second detection cycle (3s when an arb or crossing is live), a 30-minute maintenance window that grades every signal lane against realized outcomes, and ~20 read-only connectors pulling the sports/pred plane, the crypto plane, and the goods pads. Two special inputs: sports-analytics feeds it bettable book lines over /api/lines (DraftKings is scraped by Playwright that must egress the WireGuard sidecar — an IP-proof gate refuses otherwise), and the AI stack answers ask-the-desk questions with the rack GPU + SearXNG web search. The GPU is busy: ~160 narrated jobs a day run off the detection loop (listing classifier, launch and candidate memos, nightly memo, event scout, airdrop intel), and the same container hosts the Blake.bet DFS refresh that the box cron runs around the clock in season.

Everything else reads, never decides. homelab polls the harness actions feed for its bench; the operator browses :8090/:3002 and blake.bet and gets Resend digests in the inbox. The loop closes from the desk: Claude Code pushes branches to GitHub — the bradsbots repos, the two Vercel sites, and the Post Fiat forks whose PRs are built and tested on the rack rig first.

Numbered flows

  • deploy on push — Actions → rack, per-stack reusable workflow [1][2]
  • odds+preds pull — Kalshi/PM/ESPN/books → harness connectors, 8s cycle [3]
  • crypto pull — funding ×8 venues, CEX spot ×4, DeFi ×3, on-chain [4]
  • VPN scrape — DK → WireGuard+SOCKS5 → sports-analytics [6]
  • /api/lines — sports-analytics → harness collector bridge, 60s poll [5][6]
  • ask-the-desk — harness ⇄ Ollama :11434 + SearXNG :8888 [7]
  • narrated GPU jobs — harness → Ollama gpt-oss:20b, ~160 a day off the loop: listing classifier, launch + candidate memos, nightly memo, event scout, airdrop intel [7]
  • DFS refresh — DraftKings/FantasyPros/RotoGrinders/DailyFaceoff/Bovada/NHL API → harness /data/dfs, cron-driven, cross-checked [16]
  • export + push → Vercel — box cron: docker exec refresh + export → commit public/data → push → Vercel deploys www.blake.bet [16]
  • /api/actions — homelab bench polls the harness verdict feed [8]
  • alerts + digests — harness → Resend → operator inbox [15]
  • git push (Claude Code) — desk → GitHub: the bradsbots repos, the two Vercel sites, the Post Fiat forks [8][19]
  • solver batches — desk → ssh → rust:1 containers on the rack → puzzles JSON on bradblake.dev [17]
  • Post Fiat PRs — rack rig builds + tests every patch (cargo/npm/pytest before + after) → fork branches → upstream PRs on the Post Fiat org [18][19]

Citations — the files behind the map

  1. docker-compose.yml · Dockerfile · .github/workflows/deploy.yml (push→main = deploy via homelab-ops reusable workflow, health /healthz)
  2. homelab-ops SYSTEM.md §7 + scripts/set-env-secret.sh (per-stack .env in GH secrets); opportunity_harness/.github/workflows/ci.yml
  3. opportunity_harness connectors/core/* — pred_markets.py, espn_schedule.py, odds_api.py, book_feeds.py, prophetx_direct.py, novig_direct.py, gemini_pred.py; collectors/{ebay,brickset,kroger,gtrends}.py
  4. connectors/core/{hyperliquid_funding,dydx_funding,backpack_funding,okx_funding,dex_perp_funding,cex_spot,defi_lend,jupiter_spot}.py · collectors/{defillama_yields,dexscreener,cross_chain,airdrop_radar}.py · tracking/hl_smart_money.py
  5. sports-analytics src/index.ts:649-676 · src/routes/lines.ts:15-34 · ARCHITECTURE.md:56-61 (harness reads /api/lines)
  6. sports-analytics docker-compose.yml:60-93 (WG + SOCKS5 sidecars) · src/services/scrape-policy.ts:68-94 (assertVpnEgress) · harness connectors/core/collector_lines.py:54 (_SKIP_VENUES)
  7. harness engine/scheduler.py `_spawn_llm_job` (listing_classifier, launch_memo, candidate_memo, nightly_memo, event_scout 8h, airdrop_intel 12h, crosswalk_proposer, position_postmortem) · factory/*.py · factory/llm_tools.py:31 (SearXNG) · `docker logs opportunity-harness --since 24h | grep llm_job.done` = 158 on 2026-10-20 · nvidia-smi: gpt-oss:20b resident 12.7 GB
  8. homelab sidecar/src/bench.js:33-70 (/api/actions poll) · harness api/app.py:1321
  9. homelab-ops SYSTEM.md §4-5 (app catalog, ports) · §6 (LLM contract :11434/v1, agent run-log, backups 03:00→/mnt/raid)
  10. harness scripts/{dfs_apply_projections,bestball_build_pool,apply_prior_usage}.py — Sleeper API, nflverse stats_player_reg_2025.csv, dynastyprocess ECR → committed seeds (no live fetch in the loop)
  11. harness alerting/{email,daily_digest,funding_digest,pred_alerts}.py — Resend SDK; pred-crossing alerts every cycle, digest ≥7am ET
  12. blake-bet pipeline/box/{cycle,cycle_nhl,cycle_nba}.sh + crontab (rack crontab -l 2026-10-20) · opportunity_harness research/{dfs_refresh,nhl_refresh}.py · Vercel builds main on push
  13. spin-preflop README (postflop loop) · postflop-spots src/bin/terminal_ev.rs · ~/spin/out on the rack · bradblake-portfolio scripts/spin-json.mjs → public/puzzles/spin.json
  14. ~/src/postfiat/pipeline-*.sh with *-before/*-after.log, *-clippy.log, *-fmt.log · ~/.postfiat/wallet-proxy-8080 · ss -ltnp :8080 listening
  15. Task Node ledger via the tasknode MCP (113 rewarded tasks, 2026-10-16) · bradsbots forks → upstream PRs on the Post Fiat org · homelab-ops SYSTEM.md