← Portfolio

The Daily Brief

A personal morning briefing, built by me, for me — delivered to my inbox every day at 5am

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.

👦 Kids' News

A section just for the boys — Ishaan gets yesterday's NBA scorelines, and Zubin gets seasonal sports coverage (whatever's in season: NBA, IPL, soccer, cricket, and any active World Cups). Stories are tailored to their ages and interests.

🔍 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 automatically every morning on GitHub Actions. No server, no database, no ongoing maintenance.

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 GitHub repository and automatically deleted after 7 days.

There are small API costs across Claude, Deepgram, and Resend. GitHub Actions is free for public repositories.

Under the Hood

For the engineers — the full stack, openly published:

  • Claude API — web search, synthesis, and narration script generation
  • 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 →