Writing

rss →

Notes on platform engineering, infrastructure, AI tooling, and shipping real products. 10 posts and counting.

agent-fleet-orchestration.md ai-agents

A supervisor, a status file, and a worktree per agent

Running several AI coding agents in parallel against one repo needs an orchestrator, not a chat window. The mechanics that make it work: disposable git worktrees, an append-only status protocol, and a watcher that sleeps until an agent actually has something to say.

Jun 26, 2026 · 7 min read read_
testing-a-real-saas.md testing

No testcontainers, no rollback: how I actually test a SaaS

Almost 500 test files behind a real product: unit tests that mock everything and run in seconds, integration tests against a real Postgres with manual cleanup, and a deliberate decision to never test the LLM. The pragmatic version, with the tradeoffs named.

Jun 24, 2026 · 7 min read read_
chrome-extension-capture.md chrome-extension

One keystroke to capture a job: inside a Chrome extension

A Manifest V3 extension that turns any job posting into a tracked application — JSON-LD first, site parsers as fallback, cookies for auth, shadow DOM for the UI, and an optimistic card that swaps to real data when the server finishes extracting.

Jun 22, 2026 · 6 min read read_
building-roleready.md roleready
Cover image for Building RoleReady: a year of solo product engineering

★ Building RoleReady: a year of solo product engineering

What it actually takes to ship a real SaaS alone — 100 Postgres tables, 19 typed AI functions, a Chrome extension, and a marketing site — and the decisions I would defend in a code review.

Jun 20, 2026 · 7 min read read_
routes-just-enqueue.md architecture

Your API routes should just enqueue

How a five-line rule — route handlers authenticate and enqueue, workers do the work — removed an entire class of timeouts, double-charges, and lying spinners from a real product.

Jun 18, 2026 · 5 min read read_
baml-ai-pipeline.md ai

I stopped writing prompts as strings

Nineteen AI features in production, every one with a compile-time return type, a retry policy, and a different fallback model. How BAML turned LLM calls into ordinary typed functions.

Jun 16, 2026 · 5 min read read_
agents-md-operating-manual.md ai-agents

AGENTS.md is the operating manual, not a vibe

Running several AI coding agents in parallel against one codebase, and the 29 non-negotiable rules — plus three enforcement layers — that keep them from destroying each other’s work.

Jun 14, 2026 · 6 min read read_
drizzle-push-postgres-fts.md postgres

No migration files: Drizzle push and one hand-written trigger

Why a 100-table production schema syncs with `drizzle-kit push` instead of generated migrations — and the one place I drop to raw SQL: a weighted Postgres full-text search trigger.

Jun 12, 2026 · 5 min read read_
tech-stack-reality.md devops

The stack vs. the reality: shipping a Next.js app to Cloud Run

A multi-stage Bun Dockerfile, zero .env files, Doppler secrets mounted as JSON, and Cloud Run over Vercel for the heavy app. The infra decisions that don’t show up in a stack list.

Jun 10, 2026 · 6 min read read_
1000-prs-merged.md milestone
Cover image for 1000 PRs Merged

★ 1000 PRs Merged

A small milestone for my solo project journey

Mar 22, 2026 · 1 min read read_