Senior full-stack engineer based in Madison, Wisconsin. 10+ years building production Rails and Next.js applications for SaaS companies. Most recently maintaining SaaS applications as sole engineer at Levee Labs, and modernizing mission-critical APIs that serve 100,000+ users daily.
What I'm working on now: moving deeper into AI engineering. Bringing the same rigor I bring to backend infrastructure, evals, observability, cost tracking, the boring parts that make systems actually work, to LLM applications. Currently focused on RAG evaluation, agentic workflows, and multimodal systems.
You can see one of my AI systems running today: the chatbot at windsordevelopmentstudio.io lets you talk to either of my dogs, Gus or Mitch, each with a distinct personality powered by RAG and the Claude API.
- Tollgate: Why I Built a Confirmation Layer to use with AI agents (and Wrote My First Go Project to Do It) - A way for me to feel more comfortable working with AI agents.
- AI Isn't a Tool. It's the New Lumber. — on treating LLMs as raw material rather than finished products
- Ruby Can Be Async Too (You're Just Not Using It) — async patterns Rubyists tend to skip
- Building a RAG Chatbot with Pinecone and the Claude API — how Gus and Mitch got their voices
📖 Software Design X-Rays by Adam Tornhill — relevant to the AI engineering work I'm moving into, since the same "let the data show you where to look" mindset applies to evals and observability.
🌐 windsordevelopmentstudio.io · 📍 Madison, WI
Currently building an evaluation harness for the chatbot mentioned above — turning a working RAG system into a measured one. Repo coming soon.


