Thoughts & travels
Notes on what I’m building, the gear I keep, and the trips I take when I step away from the screen.

Getting My Data Out of One Basket
For more than ten years I kept my whole digital life inside two companies, and called it convenience. Then I read about someone who lost every photo they owned when Google closed their account over...
Read the journalAll posts
Getting My Data Out of One Basket
For more than ten years I kept my whole digital life inside two companies, and called it convenience. Then I read about someone who lost every photo they own...
The New Software Engineer: What Remains After AI Writes the CRUD
A model can now write a CRUD API faster than I can describe one. That has not made me less necessary. It has moved the work to where it always belonged. The ...
Real Approval Workflows in Rails: The Use Cases That Made Me Build Signoff
Every serious Rails app eventually needs records that can't just be created or updated: they need a human to review and sign off. Here are the concrete use c...
How I Built ErrSight: A Rails Monolith, a Rust Ingestion Sidecar, and Eight SDKs in Lockstep
ErrSight is not one program. It grew into four cooperating ones (a Rails monolith, a Rust ingestion sidecar, an SSE service, and eight client SDKs), and the ...
Sharing Authentication Between Rails and a Rust Axum Microservice
After your first Rust endpoint ships, the next question is always 'how does Rust know who the user is?' This post walks through JWT verification, Rails cooki...
Streaming Responses and Server-Sent Events with Axum
Streaming is one of the workloads that Rails handles poorly and Tokio handles natively. Here's how to build a real-time push endpoint in Axum, from your firs...
Why I Chose a CASIO G-Shock Over a Smartwatch
I spend my whole working day looking at screens. The last thing I want strapped to my wrist is a fifth one. Here is why my daily watch is a CASIO G-Shock GW-...
Wrapping a Rails-Owned Postgres Database with Rust and Axum
ActiveRecord hides a lot behind the curtain: callbacks, counter caches, enum mappings, polymorphic associations, soft deletes. Here's how to talk to a Rails-...
Building an Error Monitoring Tool Without Pricing Overages
Picture the worst version of a Tuesday. You ship a deploy, a downstream API starts timing out, and your retry logic turns one failure into forty. A single br...
Getting Started with Axum: Building High-Performance Microservices in Rust
A teaching guide to Axum and Rust microservices, with every snippet explained line by line, from your first /hello route to a production-ready service that f...
My Experience Studying at University of the People: Bachelor of Computer Science
Starting the Bachelor of Computer Science at University of the People while working full-time: first impressions of a tuition-free, online, globally-recogniz...
Trip to Udupi
A photo journal from Udupi: coastal beaches, St. Mary's Islands, the Varanga Lake Jain Temple, and endless paddy fields.