I'm a product engineer who builds production systems end to end: AI dev tooling, data platforms on Postgres and AWS, and the real-time apps on top.
By day I build a production compliance platform and the AI tooling around it. On nights and weekends I'm building a browser FPS with its own authoritative multiplayer server.
| crucible v0.3 | crucible, the open-source AI PR reviewer I built: every finding has to survive an attempt to disprove it before anyone reads it |
| 3,030 PRs · 88% merged | The past year on GitHub: 6.2k commits across 41 repos, 242 active days |
| 94k lines · 1,190+ commits | Dragon Front: a browser FPS I built from an empty folder, solo, with AI pair-programming under my review |
| ~5k-line authoritative server | My own Node netcode: binary delta snapshots, client prediction, lag compensation, bot backfill |
| 4 live apps you can open now | DotSlayer, NEON SPIN, The Edge Board, Draft War Room, plus my own Arch Linux distro |
crucible is the AI code reviewer I built and maintain. Every open-source PR I send goes through it first; it never posts, I submit. MIT, Python standard library only.
| Version | What it added |
|---|---|
| v0.1 | The core loop: a reviewer on a different model from the one that wrote the change, a verification pass that tries to disprove every finding, verdicts pinned to one commit, and an answer (fixed, refuted, deferred) for every finding |
| v0.2 | Runs the project's own build and tests, learns its house style and maintainer rules from merged PRs, executes code to verify a finding, and checks PR readiness (linked issue, tests, description) |
| v0.3 | A labelled eval of planted bugs that every change is scored against, tiered verification (a cheap model first, the strong one on what survives: same recall, 24% cheaper), and incremental re-review of only what changed |
| next | One-command install, cheaper routing for docs-only rounds, a warning when another open PR edits the same lines, and Python execution in the verifier |
A recent catch. It flagged a signal race in Valve's gamescope reaper. The same window was in another contributor's fix for that bug; they reproduced it under gdb, fixed it and credited me (Reported-by).
pipx install git+https://github.com/JROtto5/crucible- three-mesh-bvh: packed WebGPU vertex attributes tightly into one
u32buffer and addedgetVertex/getVertexPositionshader functions; a second UV set used to read zeros from padding, and a position + two UV sets now takes 28 bytes per vertex instead of 48. The maintainer is porting his path tracer to it. #969, merged. - colyseus: stopped the matchmaker from telling clients a room was "already full" whenever a seat reservation failed for another reason (a throwing remote room, an IPC timeout on a healthy process, a local throw); the real cause now reaches the client, 3 new MatchMaker tests fail without the fix. #1001, merged and released in @colyseus/core 0.18.28.
- three-mesh-bvh: made a failed parallel BVH build reject instead of hanging, which also left the worker stuck for every later build; reworked to the maintainer's single-handler design in review, worker change down to ~25 lines, new WorkerPool tests (2 of 3 fail without the fix). #963, merged.
- three-mesh-bvh: made WebGPU geometry packing copy vertex attributes straight from their backing arrays instead of through per-vertex accessors: 2.1x faster for positions and up to 7.2x with normals and UVs on 12.6M vertices, byte-identical output. #958, merged.
- Lutris: repaired broken Pango markup that left nine UI strings blank in five translations (Greek, French, Brazilian Portuguese, both Chinese), plus a test that parses every translated markup string. #7006, merged.
- Lutris: stopped a missing Wine version from silently upgrading a game's plain Wine prefix to Proton, a one-way conversion; reworked to the maintainer's narrower rule in review, 7 tests (3 fail without the fix). #7004, merged.
- three-mesh-bvh: fixed WebGPU camera rays losing precision far from the world origin (up to 42 px off at 1080p). #956, merged.
- MangoHud: added
cpu_max_core_load, so a single-thread bottleneck shows up next to the averaged CPU load. #2198, merged. - colyseus/schema: found an
ArraySchema.sort()client desync with a differential fuzzer; co-author of the fix in 5.0.44, with my regression tests in the release (#250). Also reported asplice()desync, fixed in 5.0.45 (#252).
Many of these PRs are opened by coding agents I orchestrate. Every one gets AI review and a human approval before it merges. Generated from the GitHub API by tools/gen_stats.py.
- I write it down first. Dragon Front has 35 design docs. At work, changes to customer-facing paths start with a short design note and a golden-output diff.
- I test like a player. Headless bots play my game and screenshot every match; I'd bring that habit to your QA and perf budgets.
- I measure before I automate. Shadow mode, precision targets, then rollout.
- I work across the whole stack: rendering and netcode, Postgres and AWS, kernel and driver debugging.
- I use AI tools with guardrails, and I can tell you exactly where they help and where they don't.
A fast, boots-on-the-ground military FPS that runs in the browser. Jade Dragons vs Crimson Tigers, 2049. It has Steamworks integration, is in pre-release, and its source stays private until launch. There's no engine: Three.js plus plain ES modules, so I own the render loop and the network loop.
| 📈 Scale | 1,190+ commits · 324 modules · 94k lines of JS · 150 test scripts · 35 design docs (art bible, balance, campaign scripts, store page, release checklist) |
| 🌐 Netcode | My own authoritative Node match server (~5k lines): binary delta-snapshot codec, client prediction, lag compensation, lobby host hand-off, server browser, parties, spectator/caster mode, bot backfill, and a packaged dedicated server |
| 🎮 Content | 10-mission campaign with cutscenes · 20 maps · 52 weapons · Domination, Hardpoint, S&D, CTF, Gun Game, Infected, Gunfight 2v2 · Ranked seasons · Dynasty Defense co-op horde · Ground War: 20v20 with bot backfill, five flags, vehicles |
| 🤖 AI | Squad-level bot director (attack/defend orders) and per-bot LOD (frustum + distance tiers) for 40-combatant Ground War matches |
| ✨ Rendering | Custom post pipeline (GTAO, bloom, SMAA, color grade), procedural PBR textures, HDRI lighting, per-map weather |
| 🕹️ Platforms | Gamepad with aim assist and rumble · Steamworks, Workshop and Steam Input · Steam Deck mode · touch controls for phones |
| 🧪 Quality | Headless bots that play matches and screenshot them · map validators · perf harnesses · a deterministic trailer pipeline (the clip above is its output) |
| 📜 Licensing | Every third-party asset is logged with its source and license, with CC0/CC BY credits in game |
→ Read the engineering case study: the netcode, the bot AI, rendering budgets and automated playtesting. I'm happy to demo it live.
Day job. I build and run a production compliance platform end to end: Postgres (Supabase) with the business logic in the database, scheduled and queue-driven AWS Lambda jobs in Python, TypeScript/React clients, and the AI development tooling the team uses to ship it.
Proprietary work, so no details here. I'm glad to talk about it in person.
📊 The Edge Board · sourceA sports forecasting system for the NFL and college football with a public, self-grading track record. It's an installable PWA.
JS · Vercel serverless + cron grading · Vercel Blob · web push · MIT |
|
🔬 crucible: my open-source AI PR reviewer (details above).
🏈 Draft War Room: a fantasy-football decision tool. It runs Monte Carlo survival and title odds, builds a start/sit consensus across three providers, and has a waiver radar and trade sims. It's an MIT-licensed, zero-build PWA that auto-deploys to Vercel.
✂️ Clipper: paste a video link and get vertical, captioned highlight Shorts. Claude picks the moments from the transcript, FFmpeg renders them, and the YouTube Data API uploads them as drafts. Re-runs are idempotent and cached.
🔵 Dot Universe · ▶ playTwo browser games on one account: DotSlayer, a 150-floor roguelike shooter with 6 classes, a boss every 10 floors, challenge modes and global leaderboards, and Dot Clicker, an idle empire with prestige. Progress in each one boosts the other. Next.js 14 · Phaser 3 · Supabase auth, cloud saves, leaderboards An idle/incremental game in one self-contained HTML file with no build step: up to 7 reels, 40 upgrades, 39 achievements, VIP perks and an Ascension prestige layer. |
A 4-minute animated short where every frame is drawn in Python (pycairo + numpy, 1080p/24fps). It uses a timeline-driven scene system, synthesized voices, and a mixed score and SFX. A tiny robot lighthouse keeper gives up its own heart to light the lamp.
|
SITH OS: my own Arch Linux distribution
It's built with archiso: an installable live ISO with a Calamares graphical installer, ~240 curated packages and 11 custom commands, themed end to end from bootloader to Plymouth, SDDM, KDE Plasma and the Kitty terminal.
I daily-drive Arch on a 4-monitor RTX 5070 Ti workstation, write my own Plasma 6 widgets and KWin effect patches, and debug the kernel/driver/compositor stack myself. One example: tracing a multi-monitor lag problem to an nvidia-open driver regression that dropped the GPU's PCIe link to Gen 1.
Open to product engineering, platform and game dev roles. I'm happy to demo Dragon Front or walk through any architecture above.











