I am a PHP, Go and TypeScript developer based in Minneapolis.
I work across the entire stack, but I’m happiest in the backend. Moving data, pushing bytes around, making things fast.
I ❤️ tiny reusable parts with single responsibilities and no side effects. I keep code simple, clear, and easy for anyone to read.
I’ve spent fifteen years in EdTech keeping old systems running and new ones from catching fire. Before that I built industrial and B2B tools where things had to work because people depended on them.
I’ve been busy building out Shielded.dev, including a new keyed image route for serving user-specific shields and improvements across its authentication, CLI, and GitHub Action tooling. The goal is to make badge updates easier to manage while keeping the hosted service and self-hosted pieces dependable. Serve shields through stable user-and-key URLs (github.com)
On my own projects, I’ve been tightening Boomerang’s validation and testing tools. I fixed closure-based validations so thrown errors become useful failed expectations instead of stopping the whole run, while also raising static-analysis coverage and modernizing the test setup. Turn validation-closure errors into readable test failures (github.com)
I keep coming back to simple software, strong QA, and keeping humans in control of AI-assisted development. AI can speed up implementation, but I still want small, reviewable changes, understandable code, and tools that preserve judgment rather than replacing it.
Last update: 2026-08-09