Skip to content
Castellano

News micropodcast

2026 · System in production

Ángel Martín, a Spanish comedian, stopped doing his morning news bulletin and I missed it: the day’s news in a few minutes, with no gravitas to it, while I made my coffee. So I built my own. It’s called 3 minutos de noticias, it’s in Spanish, it’s on Spotify and it goes out every night while I sleep: a system of agents picks the stories, writes the script, voices it and publishes it.

I did it by splitting the problem into pieces that do a single thing. A service extracts the news from the press and stores it. Some agents clean it up and classify it. Another one writes the script. A synthetic voice reads it, an image illustrates it and an RSS feed carries it to Spotify. Every piece is dumb on purpose: the less it decides, the easier it is for an agent to use it well.

It’s very cheap. Not free, cheap. I pay a Claude subscription, which covers the nightly routine and the agents; an ElevenLabs one, for the voice; the artwork of each episode, which goes per image and comes to a few cents; and Cloud Run, which at this usage is cents a month. The rest sits on free plans: the database on Supabase, the audio and the feed on GitHub Pages, the Spotify listing. A daily podcast for the price of a couple of subscriptions and a few cents a day. The big cost is already covered by anyone with a Claude subscription with room to spare; the rest is putting the pieces together.

And splitting the problem this way has another upside: it scales. A programme is a row in the database, which news categories go together and which editorial voice tells them. Technology and sport already have theirs; economy, science or a city would be one more row. All of this is in production and is watched through an analytics viewer built with Rill that reads the same database live.

The bigger idea, for later, is a self-served media platform: each listener defines the bulletin they want to hear and receives it every morning as a private feed. That’s the future. Today’s already plays while I make my coffee.

Part by part

  1. Extract the news

    A Go service that doesn't think. It reads fifteen feeds from the Spanish press, downloads the full article when the feed only carries the lede, stores it in Postgres and serves it through a keyed API and an MCP endpoint for the models. It doesn't rank, group or summarise. A full pass takes about eight seconds and runs every four hours on Cloud Run. The scraper finds the article body by anchoring on the lede, not on the page's CSS classes, and when it can't, it fails with a reason instead of grabbing whatever is there.

  2. Enrich and classify every article

    Every night a Claude routine comes in through the service's MCP and splits the day's articles among Haiku agents, twenty at a time with five stories each. Every agent rewrites its article as clean markdown, taking no facts out and putting none in, tags it with up to ten keywords and files it under a category from a closed taxonomy the service hands over and the database enforces. The service decides nothing: it lays out the tools and stores whatever the model returns. An enriched article is never touched again.

  3. Write the script and give it a voice

    An Opus agent plays the writer and follows a newsroom's order of work. First it asks for the day's map, which keywords carry weight and across how many outlets, then it reads the stories that stand out, one by one. From that it builds the rundown and writes a radio bulletin of about four hundred and fifty words: greeting, headlines, four or five stories by weight, a light closer and a different sign-off every day. It reads the two previous scripts so it doesn't repeat openings or stories, and stores with the episode a summary and keywords that become the memory of tomorrow's writer. Then ElevenLabs gives it a voice and Nano Banana the episode artwork, on a fixed layout where only the headline and the date change.

  4. Publish the episode

    Spotify has no upload API: it reads an RSS feed and polls it several times an hour. So an episode is published with a commit that pushes the audio, the script and the artwork to a public repo served by GitHub Pages and updates the feed at the same time. There's never an MP3 without a feed entry, or an entry without an MP3. The notice that it's written and voiced with artificial intelligence lives in three places: in the audio itself, in the description and in the feed. The show has been on Spotify since 7 September 2026, and every episode shows up there without anyone uploading it.

  5. One programme per topic

    A programme is a row in the aggregator: which categories it reads, how many stories, how many words and its writer's persona, that is, who they are and how they talk, written as text. The bulletin format is shared; that persona is what changes. So setting up a new programme means choosing which categories go together and writing who tells them, with no code involved. "3 minutos de noticias" (three minutes of news) reads politics, economy, world and society; "3 minutos de tecnología" and "3 minutos de deporte" are already defined, with their categories and their feed, waiting for their first episode.

  6. Watch the machine run

    To know what comes in, what gets enriched and what ends up on air, I didn't write a web app. I set up a local Rill project, all versioned YAML and SQL, reviewed in a pull request like any other change. It copies no data: DuckDB reads Postgres live and read-only, through views the aggregator commits to keep working. Five dashboards, no more: two panels you look at and three explorations you poke around in.