← Portfolio

The Daily Brief

A personal morning briefing, built by me, for me — searched, synthesised, narrated, and delivered to my inbox at 5am local time

The Problem

I was spending too much time every morning piecing together what was happening in the world — and still feeling behind.

The Economist, NYT, BBC, TechCrunch, AI newsletters, podcasts — all in different apps, different inboxes, different formats. The signal was buried in the noise. By the time I'd cobbled something together, half my morning was gone.

What I wanted was a single briefing — structured by topic, sourced only from outlets I trust, deep enough to feel genuinely informed, and ready before I hit the road. So I built it.

What Arrives Every Morning

At 5am, an email lands in my inbox. It contains:

🌤 Weather

Today's high, current conditions, and a clothing recommendation for both home and work — so I know what to wear before I leave the house.

📰 Categorised News

World & Politics · India · Tech & AI · Business & Finance · Science & Health · Sports. Four to five stories per section, with real summaries — not just headlines — and a "Why it matters" note on the top stories.

🔍 Explore

A rotating discovery section that surfaces stories from sources outside my usual rotation — WIRED, MIT Technology Review, Quanta Magazine, Hacker News, Aeon, and more — to keep me from reading the same perspectives every day.

🎙 Deep Dive

A persistent curated backlog — one longform read and one podcast episode, each with a day counter so I know how long it's been queued. Also tracks what I'm currently reading and listening to (book + audiobook). Items sync from my reading and listen lists; a nudge appears after Day 7.

🎧 Audio

The entire brief is narrated and delivered as an MP3, linked directly in the email. On days when I can't read, I listen instead.

How It Works

A Python pipeline runs on GitHub Actions. No server, no database, no ongoing maintenance.

Currently paused — the scheduled run is switched off while the content model is being reworked. Everything below describes the pipeline as built, and it still runs on demand.

It's also travel-aware — by reading my Google Calendar ICS feed, it detects multi-day trips, figures out the destination timezone, and shifts delivery to 5am local time wherever I am. No manual changes needed.

1 · Search

Claude uses live web search to gather today's top stories across all categories, pulling from trusted outlets: The Economist, NYT, BBC, TechCrunch, Stratechery, and more.

2 · Synthesise

Claude cross-references stories across sources and writes substantive summaries — not headline rewrites. Sources I subscribe to carry more weight. A post-synthesis validation layer then catches cross-section duplicates, meta-items, hallucinated sources, and explore stories without real URLs — code-level guardrails that work regardless of prompt compliance.

3 · Narrate

The brief is converted to a natural spoken script and sent to Deepgram's text-to-speech API, which produces the MP3 in your chosen voice. The audio covers the news sections and the Explore segment — the Deep Dive links are email-only.

4 · Deliver

An HTML email is generated and sent via Resend. The HTML and MP3 are committed to the repository so the email can link the audio at a public URL, then pruned by a retention step after 7 days. The Deep Dive section is email-only — it never reaches the public archive.

It costs roughly $1.00–1.15 per run, about $30–35 a month if it runs daily — almost entirely Anthropic API usage, dominated by the web searches and the tokens their results carry. Deepgram and Resend are pennies. GitHub Actions is free for public repositories.

Under the Hood

For the engineers — the full stack, openly published:

  • Claude API — Sonnet 4.5 for story gathering and synthesis; Haiku 4.5 for the narration script, since converting finished prose to speech text is mechanical and costs a third as much
  • Quality layer — an AI-prose linter, a reading-time word budget allocated by section weight, and a rolling 30-day coverage log that suppresses repeats and lets today's brief correct yesterday's
  • Deepgram Aura — text-to-speech audio generation with configurable voice; MP3 linked in the email
  • Resend — transactional email delivery
  • GitHub Actions — scheduled automation, HTML and MP3 storage, and 7-day cleanup
  • Python — the pipeline that ties it all together

Sources and categories are configurable via a single config.json file. Everything else is environment variables.

Want to build your own?

The full source code is on GitHub. Fork it — the README will walk you through setup.

View on GitHub →