An open-source morning briefing pipeline โ researched, synthesised, narrated, and delivered to your inbox before you wake up. Fork it, set your secrets, and it runs.
Keeping up with the news takes more of the morning than it should โ and still leaves you feeling behind.
The Economist, NYT, BBC, TechCrunch, AI newsletters, podcasts โ all in different apps, different inboxes, different formats. The signal is buried in the noise, and by the time you've pieced something together, half the morning is gone.
This pipeline produces the alternative: a single briefing, structured by topic, sourced only from outlets you choose, deep enough to leave you genuinely informed, and waiting before you're out the door.
At 5am local time, an email arrives. It contains:
Today's high, current conditions, and a clothing recommendation for two locations โ home and work by default โ so you know what to wear before you leave the house.
The example set ships as World & Politics ยท India ยท Tech & AI ยท Business & Finance ยท Science & Health ยท Sports โ categories and sources are yours to redefine in config.json. Several stories per section, with real summaries rather than headlines, and a "Why it matters" note on the top stories.
A rotating discovery section that pulls from a separate pool of sources outside your daily rotation โ WIRED, MIT Technology Review, Quanta Magazine, Hacker News, Aeon and more in the shipped config โ so you aren't reading the same perspectives every day.
An optional persistent backlog โ one longform read and one podcast episode, each with a day counter showing how long it has been queued, plus what you're currently reading and listening to. A nudge appears after day seven. The queue is personal data, so it is read from a private store you point at with an environment variable; leave it unset and the section is simply omitted.
The whole brief is narrated and delivered as an MP3, linked directly in the email โ for the mornings when listening beats reading. Optional: skip the Deepgram key and you get a text-only brief.
A Python pipeline runs on GitHub Actions. No server, no database, no ongoing maintenance.
It's travel-aware: point it at a calendar ICS feed and it detects multi-day trips, works out the destination timezone, and shifts delivery to 5am local time wherever you are (the hour is a constant in the generator, not a setting). Update your calendar and it adjusts โ nothing to change in the repo.
Claude uses live web search to gather the day's top stories across your categories, restricted to the outlets on your allowlist and held to a per-section word budget.
Claude cross-references stories across sources and writes substantive summaries, not headline rewrites. Sources you mark as subscriptions 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 hold regardless of whether the model followed the prompt.
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 โ Deep Dive links stay email-only.
An HTML email is generated and sent via Resend. The HTML and MP3 are committed back to your repository so the email can link the audio directly, then removed by a 7-day retention step so the archive can't grow without bound. The Deep Dive section is stripped from the committed copy โ it reaches your inbox and never the archive.
Expect roughly $1.00โ1.15 per run at the default 10-minute reading budget โ about $30โ35 a month running daily. That is almost entirely Anthropic API usage, dominated by the web searches and the tokens their results carry; Deepgram and Resend cost pennies. GitHub Actions is free on public repositories and metered on private ones.
Five steps, no infrastructure to provision:
Fork the repository to your own account. Nothing personal is committed anywhere in it โ recipient, sender domain, weather locations and calendar all arrive through Actions secrets; the reading queue is read from a private store you mount, and the section stays empty without one.
Only ANTHROPIC_API_KEY is required. Email delivery, audio, weather and calendar keys are all optional, and each feature degrades gracefully when its key is missing.
One config.json holds your sources, categories and word budget. Everything else is environment variables.
Trigger the workflow manually with dry run enabled: full generation, but no email, no audio and no commits. The output lands as a run artifact so you can read the brief before anyone else does.
Uncomment the schedule: block in the workflow. It then runs hourly and delivers only at 5am local time โ scheduled runs ship disabled so a fresh fork can't email anyone by accident.
A news pipeline reads your calendar, writes to your repo and sends mail on your behalf. The template treats that as a privacy surface rather than an afterthought:
NOTICE.For the engineers โ the full stack, openly published:
The full source is on GitHub under MIT. Fork it, add one API key, and dry-run it โ the README walks through the rest.
View on GitHub โ