dcm31/self-improving-podcast | Val Town
Log inSign up
self-improving-podcast<br>/Home
Like3<br>Remix
dcm31<br>self-improving-podcast<br>Public<br>Self-improving daily podcast
MCPCLI
1 Branch2 Remixes
Val Town is a collaborative website to build and scale JavaScript apps.<br>Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
README.md
*:first-child]:mt-0 [&>*:first-child_*]:mt-0 prose max-w-none overflow-x-auto prose-pre:text-gray-700 dark:prose-pre:text-gray-300 prose-pre:bg-slate-100 dark:prose-pre:bg-slate-800 prose-code:rounded-[6px] prose-code:px-1 prose-code:py-px [&_pre_code]:p-0 prose-code:font-normal prose-code:bg-slate-100 dark:prose-code:bg-slate-800 dark:prose-invert prose-pre:text-sm">🎙️ Self-Improving Podcast
A daily podcast that generates itself — and improves itself based on your feedback.
Fork this val, add your API keys, and you have a personal daily audio briefing that gets better over time.
How it works
generate-daily.ts runs on a schedule (interval)
It checks for any unprocessed feedback and feeds it to the AI agent
The agent can edit the val's own source code (e.g. add new data sources, change the script format)
Then generate-podcast.ts fetches live data and generates a TTS episode via ElevenLabs
The episode is stored as a blob and served via feed.ts as an RSS feed
Subscribe in your podcast app. Leave feedback via the web form. The AI agent processes it before the next episode.
Files
FileTypeWhat it doesgenerate-daily.tsintervalCron trigger — processes feedback, then generates today's episodegenerate-podcast.tsscriptFetches data sources, builds script, calls ElevenLabs TTSfeed.tshttpRSS feed, episode audio serving, feedback form (/feedback)podcast-player.tshttpSimple web audio playeragent.tsscriptSelf-improving AI agent — reads own source, calls Claude, applies code editscover-art.tshttpPodcast cover artchangelog.mdfileLog of all agent-applied changesfeature-ideas.mdfileFuture ideas<br>Built-in data sources
Out of the box, the podcast script includes:
Weather — via Open-Meteo (free, no API key). Default: New York. Edit WEATHER_LOCATIONS in generate-podcast.ts to change.
Prediction markets — via Polymarket Gamma API (free, no API key). Empty by default — uncomment or add event slugs in POLYMARKET_EVENTS.
Want more? Just submit feedback like "Add top Hacker News stories" or "Include Bitcoin price" and the agent will wire it up.
Setup
Fork this val
Add environment variables:
KeyDescriptionELEVEN_LABS_API_KEYElevenLabs text-to-speech API keyANTHROPIC_API_KEYAnthropic API key for Claude (used by agent)TOWNIE_TOKENVal Town API token with write access (used by agent to edit its own files)
Update agent.ts — change VAL_UUID to your forked val's UUID
Set the interval schedule on generate-daily.ts (e.g. daily at 7am)
Subscribe to the RSS feed URL in your podcast app (see below)
Listening
Your feed URL is the endpoint for feed.ts — copy it from the Val Town dashboard.
Apple Podcasts (iPhone / iPad)
Open the Podcasts app
Tap Library at the bottom
Tap the ⋯ (three dots) in the top-right
Tap Follow a Show by URL
Paste your feed URL → tap Follow
Apple Podcasts (Mac)
Open Podcasts (or iTunes on older macOS)
Click File → Add a Show by URL…
Paste your feed URL → click Follow
Overcast (iOS)
Tap the magnifying glass icon
Tap Add URL
Paste your feed URL
Pocket Casts
Go to the Discover tab
Paste your feed URL into the search bar
Tap Subscribe
Podcast Addict (Android)
Tap + → RSS feed
Paste your feed URL
Spotify
⚠️ Spotify does not support subscribing to private/custom RSS feeds. You'd need to submit your podcast publicly through Spotify for Creators, which isn't really the point here. Use one of the apps above instead.
Feedback loop
Visit /feedback on the feed endpoint (linked in each episode description)
Submit text feedback — it's saved as a blob instantly
Next time generate-daily.ts runs, the agent reads all unprocessed feedback
The agent calls Claude with the full val source + your feedback
Claude outputs edit blocks → agent applies them via the Val Town API
Changes are logged in changelog.md
The (potentially updated) generate-podcast.ts runs to create that day's episode
Customization
Edit the constants at the top of each file:
generate-podcast.ts — WEATHER_LOCATIONS, POLYMARKET_EVENTS, ELEVENLABS_VOICE_ID
feed.ts — PODCAST_TITLE, PODCAST_DESCRIPTION, PODCAST_AUTHOR
Or just submit feedback and let the agent do it for you!
Blob storage layout
self-improving-podcast/<br>episodes/ — MP3 files (2026-03-25-1711234567890.mp3)<br>feedback/ — Feedback JSON blobs (timestamp.json)<br>agent-runs/ — Agent execution logs
Code<br>History<br>README.md3/25/2026
agent.ts3/25/2026
changelog.md3/25/2026
cover-art.tsdcm31--fb…f2.web.val.run<br>3/25/2026
feature-ideas.md3/25/2026
feed.tsdcm31--ed…f2.web.val.run<br>3/25/2026
generate-daily.ts3/25/2026
generate-podcast.ts3/25/2026
podcast-player.tsdcm31--f2…f2.web.val.run<br>3/25/2026