Payments, auth, and platform infrastructure — built to hold.
I design and build backend systems where multiple moving parts must work together reliably. Rust, Go, Python. Small teams, hard problems, clear business impact.
What I work with
What I've done
Featured work
Neverlight Mail
One engine, four clients. Native JMAP mail across platforms.
A from-scratch email engine implementing RFC 8620 and RFC 8621 (JMAP Core and JMAP Mail) directly — no IMAP, no SMTP, no protocol abstraction layers. The engine handles connection management, delta sync, full-text search, and offline caching through a single Rust crate.
Four independent frontends consume the same core: a COSMIC desktop client for Linux, a ratatui terminal client for Linux and macOS, and native SwiftUI clients for macOS and iOS. The Swift clients bridge to the Rust engine via swift-bridge FFI — real native on both sides, no Electron, no webview.
└ JMAP client — RFC 8620/8621, reqwest, SSE push
└ Cache layer — SQLite, FTS5, async handle pattern
└ Body engine — mail-parser, HTML→markdown
neverlight-mail (COSMIC/iced) — Linux desktop
neverlight-mail-tui (ratatui) — Terminal, Linux + macOS
neverlight-mail-macos (SwiftUI + swift-bridge FFI) — macOS + iOS
PGTOP
Postgres performance monitoring in your terminal.
A Ratatui-based terminal interface for PostgreSQL performance monitoring. Built with Cornucopia-generated typed queries, it surfaces slow queries, locks, active transactions, and connection state with minimal overhead. The kind of tool you leave running in a tmux pane when you're debugging why prod is slow.
GAP — Game Agent Protocol
Multi-agent LLM system that plays Diablo cooperatively with humans.
A real-time AI companion for Diablo 1 (via DevilutionX) powered by local LLM inference. 16 specialist agents — combat, healing, loot, shopping, exploration, chat — evaluate game state through a compact DSL protocol and vote on actions via weighted council. Constraint satisfaction solvers validate positioning and resolve conflicts. Grammar-constrained output (GBNF) guarantees valid commands — no hallucinated actions.
Persistent SQLite memory gives each companion character its own personality, episodic memories, and learned strategies across sessions. A Rogue remembers kiting tactics; a Warrior remembers face-tanking failures. ~9,000 lines of Python orchestration, 682-line DSL parser, custom C++ game engine hooks.
└ DSL protocol — 100-200 bytes/tick, 80-120 tokens
Orchestrator (Python) — 16-agent council + CSP solvers
└ Combat, Healing, Loot, Spell, Shopping, Chat, ...
└ Spatial CSP, Equipment CSP, Coordination CSP
└ SQLite memory + per-character personality
Ollama (local GPU) — qwen2.5:3b / llama3.1:8b
└ GBNF grammar → guaranteed valid DSL output