Every weekday morning this generates a fresh banking finance-function briefing, turns it into a natural-voice MP3, and publishes it as a private podcast. You subscribe once in your podcast app. After that: wake up, headphones in, play.
It runs entirely in the cloud on GitHub Actions, so your computer does not need to be on.
Cost is roughly a few cents of API usage per episode.
finance-pulse-podcast..github/workflows/ folder and the episodes/ folder).In the repo: Settings, then Secrets and variables, then Actions, then “New repository secret”. Add:
ANTHROPIC_API_KEY = your Anthropic keyOPENAI_API_KEY = your OpenAI key (if using OpenAI TTS, the default)ELEVENLABS_API_KEY = your ElevenLabs key (only if you switch the provider)Secrets are encrypted. They never appear in the code or the feed.
In the repo: Settings, then Pages. Under “Build and deployment”, set Source to
“Deploy from a branch”, branch main, folder / (root). Save.
Your site will be at:
https://<your-username>.github.io/<repo-name>
Open config.py and set:
BASE_URL to the Pages URL from step 3 (no trailing slash).PODCAST_AUTHOR, PODCAST_EMAIL, and the voice if you want a different one.ANTHROPIC_MODEL is a current model id (see https://docs.claude.com).Commit the change.
Open .github/workflows/daily.yml and adjust the cron line. It is in UTC.
0 10 * * 1-50 9 * * 1-5
Use https://crontab.guru to translate any time. Leave 1-5 for weekdays only,
or change to * for every day.Go to the Actions tab, choose “Daily Finance Pulse”, and click “Run workflow”.
Wait a minute, then check that feed.xml and a file under episodes/ appeared.
Open https://<your-username>.github.io/<repo-name>/feed.xml in a browser to
confirm it loads.
feed.xml URL.Set the show to auto-download new episodes. Done.
Each weekday morning a new episode is waiting. Open your podcast app, press play, and it streams to your headphones with normal lock-screen controls. The written briefing is in the episode notes if you want to read instead.
OPENAI_TTS_VOICE in config.py (alloy, echo, fable, onyx,
nova, shimmer). For studio quality, set TTS_PROVIDER = "elevenlabs".SYSTEM_PROMPT in generate.py.SYSTEM_PROMPT.cover.jpg (1400x1400 or larger) to the repo root.config.py.BASE_URL matches exactly.With OpenAI or ElevenLabs TTS, and with Claude’s web search, your briefing text is sent to those providers to be processed. That is fine for market commentary. Do not feed this pipeline confidential client material.