Jonty Garrard

Five internal systems · One operator

Internal systems. Built end to end.

Not flat cards or screenshots. Each section below is one of the systems I run day to day, embedded live. Start with the Control Room — the hub I built to track and manage everything else.

Start the tour
01 Hub

Control Room

Designed & built · 2026

A single command surface for every project I run. The Control Room is the face for the Polymarket dashboard and the three production tools below — bot status, deploys, content ops, and market intelligence all reachable from one place.

Why I was running five separate apps across different ports and tabs. The Control Room is what unified them — one matrix-style login, one launcher, real-time service status, and a consistent design language across the suite.

  • Flask
  • Vanilla JS
  • WebSocket status
  • Matrix auth
  • systemd
jontygarrard.com/control-room
02 Trading floor

Polymarket Trading Dashboard

Designed & built · 2026

Live operations console for five Polymarket trading bots — FVG, ARB, PTB, SM_ARB, and MM. Real-time PnL, positions, claimable redemptions, per-bot logs, latency probes, and one-click start/stop/deploy across the fleet. Every bot pipes fires, fills, claims and losses into a dedicated Telegram channel for instant push notifications.

Why Bots run on a remote VPS with SSH-only access. The dashboard pulls live status, polls the Polymarket Data API for completed-roundtrip PnL, and gives me a single pane to control everything without ever opening a terminal — and Telegram keeps my phone in sync the moment anything fires.

  • Flask
  • Polymarket Data API
  • Chart.js
  • SSH bridge
  • Stale-while-revalidate cache
Open in full
jontygarrard.com/polymarket-dashboard
F
FVG bot
FVG D2 DOWN @ 0.5000
📈 BTC $75828.75 vs strike $75960.70
📊 d2=-1.32 fair= 0.7893 edge= 2863bps
💵 8sh cost=$3.85 EV= +$2.03
exec=298ms post=298ms
💰 session: P&L $+45.35 | 1 open ($3.85 deployed) | avail $16.39
🔍 confirm=3ms
19:50
FVG CLAIMED +$7.70
📅 down-5m-1779821400
🔗 tx: 0xc1415e64798b67241f
💵 balance: $127.99
💰 session: P&L $+49.20 | avail $23.95
19:55
🔄 [FVG] Auto-wrapped $127.99 USDC.e → pUSD
19:55
🔥 FVG D2 DOWN L1=0.4600 vwap=0.4600
📈 BTC $75690.27 vs strike $75799.96
📊 d2=-1.10 fair= 0.7503 edge= 2873bps
latency=0ms 270s left
📐 vol= 0.450 sz=$3.22
🟫 max avail: 757sh / $363.61
23:40
FVG LOSS -$3.57
📅 own-15m-1779834600
🏆 winner: up
💰 session: P&L $+45.63 | avail $140.54
23:45
P
PTB bot
🏁 WINDOW CLOSED [PTB]
📅 own-15m-1780009200
no trade best= 1.0100 (+0.0700 over)
💬 skip: combined= 1.0100>=0.9400
00:15
🪟 WINDOW OPEN [PTB]
📅 own-15m-1780010100
🕔 286s remaining
🎯 threshold: 0.9400 gap: $7.56
00:25
🔥 PTB combined=0.9300 5m_UP + 15m_DOWN
📊 asks: 0.6100 + 0.3200 gap=$7.56
💵 17sh floor=$1.19
latency=0ms
00:25
PTB FILLED
📊 5m_UP + 15m_DOWN
📈 leg A: 17.56sh @ $0.6100 = $10.71
📈 leg B: 18.06sh @ $0.3200 = $5.78
💵 total: $16.49
📦 claimable: 17.56sh
📈 expected_pnl: $+1.07
💰 session: P&L $+2.97 | 1 open ($16.49 deployed) | avail $5.53
00:25
PTB CLAIMED +$17.56
📅 btc-updown-15m-1780010100
🏆 winner=up
🔗 tx: 0x22d3388ae6d34d5de6707d6d7a18eaa2…
💰 session: P&L $+4.04 | avail $4.28
00:32
🔄 [PTB] Auto-wrapped $362.54 USDC.e → pUSD
00:32
🏁 WINDOW CLOSED [PTB]
📅 own-15m-1780010100
traded
00:32
S
sARB bot
💰 session: P&L $-1.06 | avail $113.75
03:20
🔥 SEQ_ARB PHASE1 UP L1=0.6900 vwap=0.6900
📈 BTC $78149.46 vs strike $77939.66
📊 d2=+2.13 fair= 0.8934 edge= 2004bps
latency=0ms 204s left
📐 vol= 0.497 sz=$13.23
06:21
SEQ_ARB FAILED UP
📈 BTC $78149.46 d2=+2.13
💬 engine error: Validation error: order couldn't be fully filled. FOK orders are fully filled or killed.
exec=1776ms
06:21
🔥 SEQ_ARB PHASE1 UP L1=0.7500 vwap=0.7500
📈 BTC $78414.72 vs strike $78223.33
📊 d2=+1.61 fair= 0.8329 edge= 799bps
latency=1ms 270s left
📐 vol= 0.520 sz=$5.00
06:25
SEQ_ARB PHASE1 UP @ 0.7400
📈 BTC $78414.72 vs strike $78223.33
📊 d2=+1.61 fair= 0.8329 edge= 799bps
💵 7sh cost=$5.32 EV= +$0.55
exec=354ms post=352ms
💰 session: P&L $-1.06 | 1 open ($5.32 deployed) | avail $108.43
🔍 confirm=3ms
06:25
🔒 [SEQ_ARB] PHASE2 LOCKED (FOK fallback)
P1: UP @ 0.7400
P2: DOWN @ 0.2000 (7sh)
combined=0.9400 floor=$0.43
total_cost=$6.76
06:26
SEQ_ARB CLAIMED +$7.05
📅 down-5m-1776835500
🔗 tx: 0x16532a083707326b9c
💵 balance: $113.84
💰 session: P&L $-0.63 | avail $113.84
06:31
03 Editorial desk

Content Hub

Designed & built · 2026

Full social media operating system — calendar planning, campaign structures, odds-led content ideas, AI drafting flows, reply tooling, and Telegram-ready workflows.

Why Marketing for a sports-betting product is content-velocity work. The Hub gives me a calendar, a draft surface, an odds-aware idea generator, and a reply pipeline — all in one app rather than five Notion pages.

  • Flask
  • Vanilla JS
  • AI drafting API
  • News + holidays feeds
jontygarrard.com/content-hub
04 Market intelligence

Odds Terminal

Designed & built · 2026

Live odds movement, matchup analysis, futures snapshots, Polymarket cross-checks, and game-intel cards. A Bloomberg-style read on the sports-betting market — paired with a Telegram agent that automates the work of watching it: a 24/7 scanner that fires tweet-ready drafts with full news context the moment a signal hits.

Why I needed a terminal to see odds spreads, movement over time, and where money was actually being placed — all on one screen. Once that worked, I bolted on a Telegram agent to scan it 24/7 for divergence and volume signals, paired with a context agent that hands back tweet-ready copy the second the odds move.

  • Flask
  • Polymarket API
  • Sportsbook feeds
  • WebSocket updates
Open in full
jontygarrard.com/odds-terminal
A
Akshun post bot
11 May
🔔 Large position ⭐
Tottenham Hotspur v Leeds United · soccer_epl · today
Polymarket 24h volume: $120,297
Up $26,021 since last check
Draft:
"Spurs are 17th, one point clear of the drop, hosting Leeds today.
Win takes them four clear of West Ham.
$26k flowed into Polymarket on this match in the last 24 hours. Volume now $120k on a relegation scrap with a worst-since-1991 home record attached."
11:23
/tweet man city crystal palace
11:24 ✓✓
🔔 Manual request
Manchester City v Crystal Palace · soccer_epl · in 2d
Draft:
"City need the points. They're 2 behind top on 74, no Rodri, no Gvardiol, and they just drew 3-3 with Everton.
Bookmakers have them at 80% to beat Palace. Kalshi sits at 83%.
Palace are mid-table but their minds are on a Conference League semi."
11:24
05 Beta

App Mockup

Designed & built · 2026

Arena scoreboard for live games — clean, dense, animated. The visual layer of the betting product, designed to feel like a real venue display.

Why An exploration of how the product should look when shown to a user, not an operator. Tight typography, live score animation, sport-aware accent colors.

  • Vanilla JS
  • CSS animations
  • Live score feed
jontygarrard.com/sports-terminal

End of tour

Want to talk about how I'd build for you?

Same Codex/Claude Code workflow, same end-to-end ownership, applied to whatever you're building.