Daily Dispatch: a digest and podcast of my links

I send myself links all day. Daily Dispatch turns them into a daily digest, a two-host podcast and an app for phones, e-ink tablets and desktops.

The app runs on Android phones and e-ink tablets, iOS, the web, macOS, Linux and Windows.[1]

I send links from my phone all day, and I wanted them back once a day as something I would actually read. Daily Dispatch turns the links you send from your phone during the day into a daily news digest and a two-host podcast episode.[1] Both land in a small reading app styled after the old Yahoo News Digest, which Yahoo launched in January 2014 and stopped publishing in June 2017.[1][2][3]

It started as a 5 PM digest for me, and I don’t like building one-offs, so I put the whole thing in one public repo that anyone can run.[4]

What it does

Every day the same links become three things, starting with a written digest: the daily-digest skill for Claude Code turns the day’s links into a digest page and rebuilds the archive.[5] The second is a podcast, a “two-host, call-in style podcast episode.”[6] The third is the app, where the digest, the archive and the episode live.[1]

How it works

You send links with Pushbullet, whose API lets other programs “build on the Pushbullet infrastructure.”[7] A Python pipeline captures them and writes the digest.[1][5] The daily-dispatch command line tool writes the podcast script and voices it.[6]

The script writer and the voice are both swappable, with four script writers to choose from: Anthropic, OpenAI, Ollama, and any command you choose.[8] There are six voice providers: ElevenLabs, OpenAI, Google, Amazon Polly, Azure and a local voice server.[9] The link-talk-podcast skill voices the two hosts with ElevenLabs Text to Dialogue, which makes multi-speaker dialogue in one call.[10][11] Paid providers always start as a dry run, and nothing spends money until you add --confirm.[6]

The show’s style guide asks for “two hosts, Car Talk-brothers style.”[12] Car Talk was NPR’s call-in show where two hosts joked their way through people’s car problems.[13] The same guide says to “Cut the joke rate roughly in half compared to your first draft.”[12] I tried to hold this post to that rule too.

A daily episode is optional, and when you turn it on, the tool installs a job with systemd, cron, launchd or Windows Task Scheduler, whichever your machine uses.[14]

New editions and episodes come with a notification: Android and iOS use Expo push, the web uses Web Push, and the desktop app checks for news every 5 minutes.[15][16][17]

Where it runs

The app runs on Android phones and e-ink tablets, iOS, the web, macOS, Linux and Windows.[1] The e-ink version is a grayscale build of the same app.[1][18]

On the desktop it is the same React Native code as the phone app, drawn by react-native-impeller-platform.[19][20] “There is no Electron and no web view.”[19] That platform is another of my open-source projects.[21]

The desktop screenshots come from the repo’s desktop check, a 480x900 window drawn by the engine.[22]

The Impeller post in the desktop app's article reader on Linux
An article in the desktop app on Linux

Quick start

The README’s quick start runs the desktop app on sample editions, writes a podcast script from example stories, and runs the pipeline’s tests, and none of it needs an account or an API key.[1]

git clone https://github.com/blbaker/daily-dispatch.git
cd daily-dispatch/app
npm run desktop:install
npm run desktop:demo

The podcast tool is on npm as @blbaker/daily-dispatch.[23] It needs Node.js 22 or newer, plus ffmpeg to make audio.[6]

How it’s tested

The latest build on main made the Android phone and e-ink apps, an iOS simulator app, the web export and desktop packages for macOS, Windows and Linux.[24] Its script tests passed 44 of 44.[24] The podcast package passed 176 tests with one skipped, and its release checks passed 113 of 113.[25] Before a release, CI publishes the package to a throwaway local registry and runs it by name.[26]

What’s missing

  • iOS is a simulator build for now, since a device build needs an Apple developer account.[1]
  • The macOS desktop app isn’t signed or notarized yet.[19]
  • Without a release key, the Android apps are signed with the public debug key.[27]
  • The Android build used for the push tests was a debug build that never ran on a real phone.[15]
  • A real Web Push to the browser used in testing fails, because Google’s push service answers 410.[15]

Daily Dispatch is on GitHub at blbaker/daily-dispatch under the MIT license, with docs at blbaker.github.io/daily-dispatch.[28][29]

More open source from Baker

Sources

  1. daily-dispatch README
  2. Yahoo Launches News Digest, Its First App Based On Summly (TechCrunch)
  3. Yahoo News Digest for iOS to Shut Down on June 30th (iPhone in Canada)
  4. GitHub REST API: repos/blbaker/daily-dispatch
  5. Claude Code skill: daily-digest
  6. @blbaker/daily-dispatch package README
  7. Pushbullet API documentation
  8. Script writer adapter registry (writers/registry.ts)
  9. Voice provider adapter registry (voices/registry.ts)
  10. Claude Code skill: link-talk-podcast
  11. Text to Dialogue (ElevenLabs documentation)
  12. Link Talk podcast style guide
  13. The Best of Car Talk (NPR)
  14. Daily schedule installer code (schedule/install.ts)
  15. App-side push notifications doc (push-clients.md)
  16. Expo push notifications setup (Expo documentation)
  17. Push API - Web APIs | MDN
  18. App builds and release artifacts doc (builds.md)
  19. Desktop app doc (desktop.md)
  20. npm registry: react-native-impeller-platform
  21. react-native-impeller-platform GitHub repository
  22. Desktop gate (app/desktop/scripts/gate.mts)
  23. npm registry: @blbaker/daily-dispatch
  24. GitHub Actions run 39444559563 (Build workflow, job: CI script tests)
  25. GitHub Actions run 39444559412 (package workflow, job: package)
  26. GitHub Actions workflow: package (package.yml)
  27. GitHub Actions workflow: Build (build.yml)
  28. LICENSE file
  29. Daily Dispatch documentation site home page

About the author

Brandon Baker is a Solutions Architect in Ames, Iowa. He builds Daily Dispatch, OpenVoid and react-native-impeller-platform.

hello@bbaker.dev

All writing