Build · Public
Tugboat
A self-hosted daily briefing on active conflict, drawn across news, economics, and federal contracting.
Challenge

I wanted to understand an active geopolitical conflict better than my usual news sources allowed, and I was curious what I'd see by drawing across the economics and the government contracting around it. I had the tools to act on that curiosity, so I built Tugboat.
Build

Tugboat is a self-hosted intelligence platform that tracks active conflict, one for now, and publishes a daily briefing with an audio component. Through the day, a pipeline pulls from scraped news feeds and open government APIs, USASpending.gov and SAM.gov among them, and runs it through Qwen3.6:27b on my local hardware to generate working summaries. Overnight it writes four reporter-style segments, voices them with Qwen3-TTS, stitches the episode together with an intro, stingers, and a music bed, and publishes to Castopod.
The MVP came together in a few hours, which is less impressive than it sounds. I sketched a product vision and a PRD first, because I wanted the full picture before anything got built, and I had a year of infrastructure already behind me: scraped feeds, RAG systems, self-hosted podcasts, audio pipelines. Tugboat was mostly assembly.
Outcome

What it taught me showed up only in production. Early on the scripts started sounding too alike, because the model had settled into a small set of descriptors and stayed there. The fix was discipline at the prompt level: matching the intensity of the language to the actual intensity of the event, building in attribution, refusing data dumps, and requiring opening lines that could only come from that day's data. Those are built in as hard rules during generation. The difference between a briefing and a summary is almost entirely in how you structure what the model isn't allowed to do.
It was built to scale from the start. Adding a new conflict is forking what exists and flipping a switch.
Tugboat is live and free at tugboathq.com: a daily briefing and podcast on active conflict, tracking one today and built to add more whenever it's worth doing.
The Stack
I build the systems with Claude as my pair, working the hard parts until something holds. From there, Qwen carries the ongoing work (the drafting, the summarizing, and the rendering) on hardware I own. Nothing here calls an external model API or bills by the token, which is much of why one person can sustain this much: the judgment stays mine, the repeatable work is automated, and each new build costs almost nothing to add.
- Qwen3.6:27b on local hardware for the summaries and segments
- Qwen3-TTS for the audio
- Scraped news feeds plus open government APIs (USASpending.gov, SAM.gov)
- Castopod for publishing
- Two HomeLab GPUs for inference, a Mac Mini M4 for development
