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.
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.
docker-compose.yml · Dockerfile · .github/workflows/deploy.yml (push→main = deploy via homelab-ops reusable workflow, health /healthz)homelab-ops SYSTEM.md §7 + scripts/set-env-secret.sh (per-stack .env in GH secrets); opportunity_harness/.github/workflows/ci.ymlopportunity_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}.pyconnectors/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.pysports-analytics src/index.ts:649-676 · src/routes/lines.ts:15-34 · ARCHITECTURE.md:56-61 (harness reads /api/lines)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)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 GBhomelab sidecar/src/bench.js:33-70 (/api/actions poll) · harness api/app.py:1321homelab-ops SYSTEM.md §4-5 (app catalog, ports) · §6 (LLM contract :11434/v1, agent run-log, backups 03:00→/mnt/raid)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)harness alerting/{email,daily_digest,funding_digest,pred_alerts}.py — Resend SDK; pred-crossing alerts every cycle, digest ≥7am ETblake-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 pushspin-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~/src/postfiat/pipeline-*.sh with *-before/*-after.log, *-clippy.log, *-fmt.log · ~/.postfiat/wallet-proxy-8080 · ss -ltnp :8080 listeningTask 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