Articles

From .proto to a typed TypeScript client: generating our whole stack from one contract
A step by step walkthrough of how one set of .proto files generates our C# services, REST API, OpenAPI document, TypeScript SDK and Node gRPC clients.

One AGENTS.md for Claude Code, Codex and Copilot: keeping AI instructions in one place
Why I build with two AI models, and how one AGENTS.md keeps Claude Code, Codex and Copilot working from the same rules, plus how we audit it.

Antigua, Lake Atitlán and El Paredon: our Guatemala itinerary
Our Guatemala route from Antigua to Lake Atitlán to El Paredon, how we got between stops, and what I'd change, including whether the beach is worth it.

San Pedro, San Juan, or San Marcos: which Lake Atitlán town?
We slept in San Pedro, shopped in San Juan and ate our way through San Marcos. Here's which Lake Atitlán town I'd pick as a couple next time.
Mount Washington vs Mount Ellinor: which Olympic peak near Hoodsport?
Mount Washington and Mount Ellinor share a road above Hoodsport and almost nothing else. Distance, gain, scrambling, passes and goats, compared.

Why I avoid third-party packages, and how AI helps
Why I write or vendor small pieces of code instead of adding third-party packages, how AI makes that practical, and when a package is worth it.

Contract-driven development: How we keep Taproot’s frontend and backend in sync
How Taproot uses protobuf contracts, generated clients, and drift checks to keep its frontend and backend in sync while building with AI.

Why documentation-first development helped us build with AI
How documentation-first development helped us build Taproot with AI, using working examples, shared language, and checks that keep docs connected to code.

How we enforce coding standards
How lint rules, architecture tests, and contract checks keep AI-written code consistent with our standards, and which decisions still need a person.

Why moving to a monorepo made AI-assisted development easier
How a monorepo made AI-assisted development easier on Taproot: fewer package releases, coordinated changes, migration costs, and the boundaries we kept.

From Y2K to AI: 26 years of figuring things out
From Y2K fixes and Visual Studio to mapping systems and Taproot: how 26 years of full-stack engineering shapes my approach to building software with AI.

We put our backlog in Git. Was that a good idea?
Why I keep Taproot’s backlog in Git, how it compares with GitHub Issues for AI-assisted development, and what we’re learning as we build Trellis.
Building Taproot I/O
I started building Taproot I/O because I wanted the coolest web platform on the planet, and WordPress's bloated ecosystem wasn't it.

A stop in Walla Walla: wine tasting and downtown wandering
Euri and I detoured through Walla Walla on the way to Spokane to wander downtown, taste wine at Saviah Cellars, and have dinner with friends.

El Paredon
Our hot, humid stop in El Paredon on Guatemala's Pacific coast: a van with a roped-on muffler, lots of pool time, black sand, and a great sunset.

San Marcos la Laguna
A boat ride from San Pedro to San Marcos la Laguna on Lake Atitlán: hippie footpaths, high prices, lunch at Lush, and a steep climb to Eagle's Nest.

San Juan la Laguna: color and craft
Our walk through San Juan la Laguna on Lake Atitlán: umbrella-covered streets, murals down the alleys, handmade textiles, and two shirts I brought home.

5 Days in Antigua, Guatemala: Volcanoes, Chocolate, and a Surprisingly Good Hobbit Village
A 5-day Antigua, Guatemala itinerary: colonial ruins, a Pacaya Volcano sunset hike with lava-roasted marshmallows, Hobbitenango, and chocolate tastings.

Jacob and Emma's wedding at the Wedding Bowl in La Jolla
My cousin Jacob married Emma at the Wedding Bowl in La Jolla. Aunt June took over the dance floor, the seals were out, and the houses cost a fortune.

A gray, drizzly day in Astoria, Oregon: sea lions, the Megler Bridge and The Goonies
A day in Astoria, Oregon, on the drive between Tacoma and the coast: a pile of sea lions, the Astoria-Megler Bridge, and lots of drizzle. Very Astoria.

Palm Springs for Euri's birthday: the tramway, Forever Marilyn and a lot of pool time
Euri's birthday trip to Palm Springs: the Aerial Tramway to the top of the mountain, Forever Marilyn, angel wings downtown, brunch and a lot of pool time.

A day on San Juan Island: the ferry, Friday Harbor, wine and Roche Harbor
Our day on San Juan Island: the ferry from Anacortes, lunch at San Juan Island Brewing, a tasting at San Juan Vineyard, and the old lime kilns at Roche Harbor.

Grand Park via Lake Eleanor: a big meadow with Mount Rainier at the end
Hiking to Grand Park via Lake Eleanor in Mount Rainier National Park: a quiet lake, a miles-long meadow, and Rainier filling the sky at the far end.