Writing

I write about what I build and what broke along the way. Posts live on my blog.

I Stopped Watching the Dialer and Built Something to Watch It for Me

A CLI tool became a loop. The loop grew and had kids for a year. Then I stopped building and started writing a spec. Here’s what rebuilding dialer automation from scratch actually …

How to Automate YouTube Shorts with Python and FFmpeg

One recording session, a month of Shorts. OBS captures, Python extracts the beats, FFmpeg assembles with title cards and normalized audio. Here’s the full pipeline and the three …

The DNC Request That Used to Take 15 Minutes Now Takes 3 Seconds

Every minute a flagged number stays active is a minute of compliance exposure. Here’s what it looks like to close that window — and what happens when the tool that’s supposed to …

How to Manage AI Coding Agents Without Losing Control

AI coding agents optimize for appearing done rather than being done. Here’s the three-layer methodology — Director, Pipeline, Agent — with the proof standard and directive format …

The Boring Layer That Made the Other Two Work

Neither of the other two tools I’ve written about recently would exist without this one, and it’s the one I almost didn’t write about, because on its own it doesn’t have a moment. …

A Year In, I Realized I Had Automated My Job Away

Six months learning the friction. Six months building. By month twelve, the job was monitoring itself — and I knew exactly what that meant.

How to Handle Reassigned Phone Numbers in Outbound Calling

Standard DNC scrubbing doesn’t catch reassigned numbers — it checks opt-outs, not ownership. Here’s what the FCC Reassigned Numbers Database is, why your lead list may contain …

Two Numbers That Looked Close Enough to Share a Formula, Until I Checked

The forecasting tool projected two things off the same underlying curve: how many contacts to expect by end of day, and how many of those contacts would turn into appointments. It …

I Didn’t Build the Pipeline I Planned. I Built the One That Worked.

I set out to build a fully automated AI content pipeline. No recording, no editing, no me. What I actually built was a FFMPEG pipeline that runs while I sleep — and the gap between …

How to Build a TCPA Compliance Audit Trail for Your Contact Center

A TCPA complaint has one question: can you prove the call was compliant? If the answer requires reconstructing removal history from four systems by hand, the documentation problem …

Every Room Looked Different, and That’s Exactly What Told Me They Were All the Same Bug

I’d asked an agent to verify something specific about a puzzle solver I’d been building: were the “dead zones” — tiles a player could never actually reach or use — genuinely …

I Lost the Plot on My Own Project

The Telegram error log doesn’t lie. Ollama 404ing every five minutes. All four free-tier APIs throttled by morning. An autonomous loop called RALPH burning 144 LLM calls a day on …

How to Automate Lead List Import in Convoso

Convoso’s manual list import is a CSV upload — one file, one campaign at a time. Here’s how to automate it with the pre-import hygiene that prevents compliance exposure before the …

The Rule Said 0.25%. The Math Said It Was Actually Enforcing 0.056%.

There was a rule that had been running for a long time: if a list’s contact rate drops below a fixed number after enough attempts, cut it and move to something else. Simple, …

Weekend Warrior Mode

It’s 8PM on a Saturday. My daughter is asleep. The Tower is running at my parents’ place — a Dell OptiPlex 5050 I’ve got humming in their corner for $40 a month. I open the laptop …

How to Integrate Convoso with Zoom Contact Center

Running Convoso and Zoom Contact Center together means compliance actions need to reach both systems. Here’s how to build the unified fan-out — and why partial failure is the …

The Number Was Wrong by 2x, and I Found It by Predicting the Wrong Number in Advance

The forecast had been “very inflated” for weeks. Nobody could say by how much, or why — just that the projected end-of-day numbers didn’t match what actually happened, often enough …

I Shipped a Game to Android and the Web From the Same Codebase

The game is called VoidDrift. You mine ore in orbit around a dying star, build a production chain, and feed a black hole that is slowly eating everything. It runs in a browser. It …

Two Forecasting Systems, and Only One of Them Was Real

The forecast was wrong, and everyone knew it was wrong, and nobody knew why. That’s the specific, uncomfortable place to start a debugging session from. Not “there’s a bug” — …

The Pipeline That Runs While I Sleep

I woke up on a Wednesday and checked Tower before I checked anything else. RALPH had fired at 2:47am. Detected a pattern in the task queue, ran a research chain, summarized the …

Everything on the blog →