
E10 Stories: An Automated Daily News Briefing
Where It Started
In December 2025 I was looking for a reason to actually use n8n beyond following tutorials. I'd been watching Nate Herkelman's content and the obvious next step was to build something real. A daily news briefing seemed like a sensible first project: simple enough to be achievable in an evening (so I thought), useful enough that I'd actually keep running it.
The problem I was trying to solve was a specific one. I'd found myself starting the day with a vague sense of what was happening in the world, built up from passive news browsing and social media scrolling that never really gave me a complete picture. I wanted something that covered the areas I actually care about (tech, politics, and finance) in one place, before the day started.
The first version was rough. It pulled articles from the Tavily API, passed everything to Claude, and sent the result as a plain text email. Most of the summaries included lines like "I don't have access to the full article" or "the full article isn't available." It was barely usable as a morning read and receiving a patchy email every morning made me desperate to get it working well.
The E10 Stories email header
How It Works
The workflow runs at 07:30 each morning via a schedule trigger. Three sequential Tavily API calls fetch the top stories from the previous 24 hours across technology, politics, and finance. Each call uses a curated allowlist of news domains and an exclude list to filter out paywalled or low-quality sources. In parallel, an Open-Meteo call fetches the current weather.
All of that feeds into Claude Sonnet, which acts as the writing agent. It receives the raw article data and produces a structured JSON output containing the full email: a subject line, an editorial introduction, article summaries across the three sections, and a "Why This Matters" takeaway for each article. Articles it can't adequately summarise are flagged for retry within that same output.
Before anything gets sent, the output goes through a quality gate. If a section has too many flagged articles (that are removed from the content), the workflow re-fetches from a broader domain list and runs the content through a repair agent, which patches only the problematic slots while keeping the good articles intact. After three retries it forces the output through regardless. A code node then assembles everything into a styled HTML email with colour-coded section headers (blue for tech, red for politics, green for finance), a weather widget at the top, and fully inline styles so it renders consistently across email clients.
The n8n workflow canvas
The finished email contains six to nine articles across the three sections, sent to a small group of people who asked to be added after I mentioned the project.
Getting There
Most of the changes came from using it daily and noticing what was wrong, not from planned development sessions. The domain allowlists came first: early on, too many sources were either paywalled or had essentially no real article behind the headline, just navigation content or fragments. Curating reputable outlets per category made an immediate difference to the quality of what Claude had to work with.
The quality scoring and retry logic came later, once I'd seen enough empty or thin sections to want a structural fix. The key design decision was embedding quality signals directly into the agent's output schema, rather than running a separate classifier afterwards. Each article can be marked as a retry candidate within the same structured JSON the agent already produces, which keeps the routing logic simple and the quality signalling with the content. The HTML formatting evolved gradually alongside all of this, from basic structure to consistent section colours to the weather widget to tightening up the card layout.
Four months of using it every morning made me realise more QA issues than any amount of upfront design would have.
How It's Held Up
The content has been consistently useful during periods when a lot is happening across categories simultaneously. The Iran oil price situation and its effect on equity markets, the Venezuela/Maduro developments, and the pace of AI releases and their economic knock-on effects over the past several months are all examples where having a cross-category briefing at 07:30 made a real difference to how much I was actually aware of.
The E10 Stories email layout
It's been running stably since early 2026 with no active development needed. Technically, this kind of scheduled agent could be moved to Claude Code routines, but porting it there would eat into Claude usage that's already stretched across other work. Running it via OpenRouter inside n8n sidesteps that entirely, so n8n is the right home for it for now, but definitely worth thinking of going forward.
The pattern at the core of this, quality checks embedded in the output schema with automatic retry and graceful degradation, is the part most worth reusing elsewhere. Any workflow where AI-generated content depends on variable-quality sources faces the same underlying problem, and the same general approach applies.
If you'd like the workflow, or discuss how I made it get in touch!
More Projects

Study LLM: A RAG-Based Academic Knowledge Base
A multi-user platform that ingests university course materials and answers questions grounded in the uploaded content, with citations back to the source. Full backend complete, frontend in progress.

Daily Stock Update: An Evening Portfolio Briefing
An n8n workflow that reads a personal stock portfolio from a Google Sheet, pulls live prices and 30-day history from Alpha Vantage, pairs the data with Tavily sentiment research, and emails a formatted report every evening at 21:30.