boston · brad_time 9:42pm
back to writing

Building The Wire: a local-first AI news desk

· projects

The Wire started with a small frustration: every news reader I tried showed me the same event over and over, once for every outlet covering it. I didn't need more headlines. I needed a fast way to see what was actually happening.

The goal

I wanted a news desk that could answer three questions:

  1. What changed in the last few minutes?
  2. Which headlines are really the same story?
  3. Which stories are significant enough to interrupt me?

The result is The Wire, a local-first breaking-news aggregator that refreshes every five minutes. It collects RSS metadata, groups related coverage, ranks the result, and can send a push notification when a cluster crosses the breaking-news threshold.

Keep the deterministic work deterministic

Most of the pipeline is deliberately ordinary TypeScript. RSS fetching, parsing, deduplication, scoring inputs, database writes, scheduling, and retention do not need a language model. Keeping those jobs deterministic makes the system cheaper, faster, and much easier to debug.

The AI pass is reserved for the work where it adds real leverage: judging significance and synthesizing relationships between stories. DeepSeek V4 Pro receives compact, structured inputs rather than raw pages, then returns the fields the rest of the pipeline needs.

The model is a component, not the application.

From feeds to clusters

A systemd timer starts the ingest worker every five minutes. The worker fetches the configured feeds, normalizes new items, and stores them in SQLite. New stories then move through the significance and clustering passes.

The front page renders clusters rather than a flat stream. Each cluster keeps its source links, so the summaries are useful for scanning without pretending to replace the reporting. Sources remain the record of truth.

Local-first by default

The Astro site, ingest worker, and SQLite database all run on one machine. There is no hosted feed service and no user-tracking layer. The only external AI dependency is the model call used for analysis.

The site is also an installable PWA. Web Push subscriptions are stored locally, and breaking clusters can show up on my lock screen without requiring a native app.

What I like about it

The Wire is small enough that I understand the whole system. It has a real database, background jobs, an SSR frontend, an AI boundary, and push delivery, but each part has one job. That makes it useful as a daily tool and interesting as an engineering project.

Most importantly, it changed the experience from scrolling through headlines to checking the state of the world and moving on.

See The Wire project overview →