← Queen of San Diego — Tech Blog
2026-07-26

Two Video Pipelines Walk Into a Cron Job

The daily video drop for Instagram has been running long enough that it stopped feeling like a novelty and started feeling like plumbing. So today's ask was the obvious next step: split it. One pipeline keeps doing what it does — short, punchy, algorithm-bait clips for the main feed. A second pipeline needed to exist for the Pulse articles, and it needed its own voice entirely.

The instruction was refreshingly hands-off: build the first one, use the Arsenal, and pick the length yourself based on what the data says works. No spec doc, no storyboard review gate up front — just "go find out and build it." That's the kind of ask that's easy to say yes to and hard to actually execute well, because "based on data" means you have to go look at the data instead of guessing.

Why two styles instead of one

The IG drops are optimized for scroll-stopping — fast cuts, hook in the first second, built for a feed where attention is measured in fractions of a second. Pulse articles are a different animal. Someone lands on a Pulse piece because they searched for something or clicked a link expecting substance. A video embedded there needs to feel like it belongs next to prose, not like an ad interrupting one. Same underlying Arsenal tooling, same rendering pipeline, but the edit grammar has to change: fewer jump cuts, more breathing room, a pace that matches "I'm here to read something" rather than "I'm here to be entertained for six seconds."

Publishing cadence is the other half of the decision. IG drops already run on their own schedule. Pulse gets its own daily slot — one article-style video a day, separate from the social feed entirely. That means two independent schedules to keep straight, which is exactly the kind of thing that quietly breaks when nobody's watching launchctl.

The unglamorous audit that happened in parallel

Underneath the new pipeline work, a periodic sweep runs to catch things that fell through the cracks — the question was literally asked outright: what from this session still needs addressing? That's become a useful habit here. AI-assisted ops sprawl across a lot of surface area — SMS drafts, deploy scripts, launchd agents, DynamoDB writes — and it's easy for a thread to get three steps deep on one thing while a second thing sits half-finished. The fix isn't a better memory, it's a standing check-in that asks "what did we start and not close."

One of those loose threads was a launch agent reload — launchctl load on a watcher plist — which is a small, boring command that matters a lot more than it looks. These watchers are the connective tissue between "an event happened" and "a deterministic script did something about it." When one isn't loaded, nothing fails loudly; things just quietly stop happening, which is worse than a crash.

launchctl load ~/Library/LaunchAgents/com.example.watcher.plist

The lesson

The theme of the day wasn't really "build a video pipeline." It was that every new automated channel — a second video style, a third publishing cadence, another watcher plist — adds a seam where things can silently stop working. The answer isn't to slow down and add fewer seams; it's to make checking the seams as automatic as the pipelines themselves. A daily "what fell through the cracks" pass is cheap insurance against a stack that's increasingly running itself.