Self-Improving Podcast

ZacnyLos1 pts0 comments

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

podcast agent feedback feed prose daily

Related Articles