bradsbots · interactive isometric system map · repos at main · 2026-08-17

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 · job-finder · agent-runner. Click a building to spotlight what it talks to · scroll to zoom · drag to pan · click legend rows to filter layers · Esc resets.

same topology, other renderings: metro map →3D night city →
Zoom to
bradsbots/* [2]13 repos Actions [2]CI + reusable deploy env secrets [2]per-stack .env opportunity_harness [1]:8090 · 8s loop Harness Postgres [1]pg16 :5432 agent-runner [10]:8484 · claude -p otel·tempo·prom [1]grafana :3009 homelab lab view [8]:3002 Ollama 3B [11]:11434 tina-homelab [11]:8092 sports-analytics [5]:3003 Lines API job-finder [9]:5000 · 13:00 UTC WG VPN+SOCKS5 [6]sports-vpn LiftApp [11]:8088 UI :5173 [5]sunset dev-pg [11] Ollama · RTX 5060 Ti [7]:11434 gpt-oss:20b·qwen3:8b Kalshi [3]REST + WS rabbitmq [11] SearXNG [7]:8888 NPM [11] The Odds API [3] Polymarket [3]gamma·clob·lb·ws Open WebUI [11]:3000 desk browser [8] portainer [11] Gemini preds [3] Pinnacle·Bovada [3]reference ESPN [3]schedule truth Android phone [10] glances [11] Novig [3]read-only ProphetX [3]order book inbox [15] DraftKings [6]VPN-only scrape Hyperliquid [4]funding·wallets DeFi lend ×3 [4]Aave Kamino Morpho 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 LinkedIn + ATS [9]GH·Lever·Ashby·Workday deploy on push git push branch job POST odds+preds pull funding·spot·DeFi pull goods+NFL pull Playwright via WG /api/lines 60s /api/actions jobs feed ask-the-desk fit score alerts + digests inbox browse :8090/:3002 boards pull GITHUB CLOUD bradsbots/* · Actions CI/CD RACK BOX · 192.168.40.222 ubuntu-MS-7C95 · Ryzen 5800X · RTX 5060 Ti · Docker MACBOOK M1 · 192.168.40.145 launchd, LAN-only SPORTS + PREDICTION VENUES pull every 8s cycle CRYPTO DATA PLANE funding · spot · DeFi · on-chain GOODS · NFL · EMAIL OPERATOR desk + phone + inbox
scroll = zoom · drag = pan · click = inspect

Inspector

Legend · click to filter

Buildings — click a row to toggle
opportunity_harness — the decision tower
sports-analytics — collector + Lines API
homelab — read-only lab view
job-finder / VPN / NFL
AI stack — Ollama GPU · SearXNG
agent-runner — phone Claude jobs
personal apps — tina · LiftApp · goods
infra strip — pg · mq · proxy · monitors
flat pads — external APIs
Paths — click to toggle
data pull — scheduler fetches
control — deploy · git · jobs
VPN egress — DK via WireGuard
email push — Resend digests
operator/lab reads
LLM calls — ask-the-desk · fit score

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 (agent-runner is the exception: launchd on the MacBook, LAN-only).

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.

Everything else reads, never decides. homelab polls the harness actions feed and job-finder for its bench; the operator browses :8090/:3002, gets Resend digests in the inbox, and can fire a phone job at agent-runner, which runs headless Claude Code on a repo and pushes a branch back to GitHub — closing the loop.

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]
  • /api/actions — homelab bench polls the harness verdict feed [8]
  • boards pull — job-finder ← LinkedIn/Greenhouse/Lever/Ashby/Workday, daily 13:00 UTC; LLM fit-score via rack GPU [9]
  • alerts + digests — harness → Resend → operator inbox [15]
  • phone job — Android → agent-runner :8484 → headless claude -p → git push branch → GitHub [10]

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. edge/docs/local-inference.md (GPU contract) · harness factory/llm_tools.py:31 (SearXNG) · factory/agent.py:148 (Ollama /v1) · factory/ai_health.py · live /api/tags 2026-08-17: gpt-oss:20b 13.8GB + qwen3:8b
  8. homelab sidecar/src/bench.js:33-70 (/api/actions poll) + :21-22 (job-finder) · harness api/app.py:1321
  9. job-finder app.py:30-40 (in-process daily 13:00 UTC) · sources/__init__.py:5-9 (LinkedIn, Greenhouse, Lever, Ashby, jsearch, Workday) · llm.py:19-28 (Ollama fit score). No emailer in code — delivery is the web UI
  10. agent-runner agent_runner/main.py:65-121 (JobSummary contract) · runner.py:192-350 (git branch→claude -p→push) · launchd/com.bradsbots.agent-runner.plist
  11. homelab-ops SYSTEM.md §4-5 (app catalog, ports) · §6 (LLM contract :11434/v1, agent run-log, backups 03:00→/mnt/raid)
  12. 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)
  13. harness alerting/{email,daily_digest,funding_digest,pred_alerts}.py — Resend SDK; pred-crossing alerts every cycle, digest ≥7am ET