Build in Public
What I'm building, what broke, what I learned. AI agents, full-stack systems, and the messy reality of shipping software.
Query-based CDC over WAL: keeping a CQRS Postgres → ClickHouse read model fresh
Query-based CDC vs log-based (WAL) for a CQRS Postgres→ClickHouse read model: watermark polling, ReplacingMergeTree, reconcile-by-key-diff, and freshness-lag alerts.
Two planes of quality: making meal-plan generation both evaluable and observable
How Melio's meal-plan pipeline splits quality into two planes — online validation and offline evaluation — plus the observability layer that makes them measure the same things, and the reasoning behind which metrics are allowed to block a deploy.
Hiding an Internal API the Right Way: Why a Proxy Isn't Security
Putting your API behind a proxy feels secure. It isn't — until the origin literally can't be reached any other way. A walk through the Cloudflare Tunnel + Access token + BFF pattern, and why "hiding the URL" is the part everyone gets wrong.
Streaming Live Solana Trades Through Cloudflare Workers (The Wire-Splice Trick)
How I move on-chain data end to end — ingesting Solana into a database from a Rust server, then streaming it live to a Next.js app through a Cloudflare Worker that acts as a zero-copy SSE wire splice.
Three boundaries, one source of truth: sharing types across Rust and TypeScript
I almost unified my Rust backend and TypeScript frontend under one protobuf schema. The better answer was matching the tool to each boundary — tied together by one codegen rule.
How I Redesigned a Meal Planning App UX: From Panel to Modern Food-First Design
Melio worked, but looked like a back-office admin panel. Here's how I redesigned the entire meal-planning app UX across 47 routes — a research-driven, 9-wave approach that kept every feature intact.
Building an AI Content Engine for a Gov Contracting Platform
Government contracting is jargon-heavy and the content gap is huge. Here's the four-layer AI content engine I built for GovChime: a research agent, rubric scoring, an approval queue, and SEO-ready Next.js publishing.
Agent Builders Are Changing How I Ship Code — Here's My Actual Workflow
I've been shipping production features as a solo engineer on a complex multi-service codebase. The secret isn't working harder — it's building custom AI agents that know my architecture. Here's the exact setup I use with Claude Code.
PostgreSQL + ClickHouse: The Dual-Database Pattern That Made 70M-Row Dashboards Instant
Running analytics on 70M+ rows in PostgreSQL made our dashboards unusable — queries took seconds, joins killed performance. Here's the dual-database architecture I built at GovChime that cut query times by 100-300%.
Why I Moved AI Out of NestJS and Into a Dedicated Python LangGraph Service
Our NestJS AI chain hit a wall — unreliable outputs, no observability, zero crash recovery. Here's how I replaced it with a 5-node LangGraph StateGraph in Python FastAPI, and why splitting AI into its own service was the right architectural call.
Hello World — Welcome to My Blog
First post on my new blog. Here I'll share thoughts on software engineering, AI development, and lessons learned building products.