Build in Public

What I'm building, what broke, what I learned. AI agents, full-stack systems, and the messy reality of shipping software.

·4 min read

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.

build-in-publiccqrscdcclickhousepostgresdata-engineering
·6 min read

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.

build-in-publicllm-evaluationobservabilitylangfuselanggraph
·4 min read

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.

build-in-publicsecuritycloudflarezero-trustnextjsrust
·5 min read

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.

build-in-publicrustsolananextjscloudflaressereal-time
·3 min read

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.

build-in-publicrusttypescriptarchitecturesolana
·3 min read

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.

uxdesignnextjsshadcnbuild-in-public
·3 min read

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.

aicontentnextjsclaudeseobuild-in-public
·5 min read

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.

claude-codetoolsarchitecturecareerai
·5 min read

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%.

postgresqlclickhousearchitectureperformancebackend
·5 min read

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.

ailangchainarchitecturenestjs
·1 min read

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.

introblog