I’m building crap software left and right now! Feeling flush with success from building my own personal RSS feed builder I was compelled to build my own podcast app. Well… when I say build I mean Claude.ai built it while I told it what I want. It only took me a couple of weeks. I custom branded it to my website Podcast Idiot, which you can find conveniently at podcastidiot.com, and went with building a progressive web app (PWA) because it’s the easiest thing to build and implement. There is no need for an app store and it’s cross platform. It’s built for me after all so I’m the only customer that matters.
All I needed to build this is an API key from Podcast Index, the virtual private server I use to host this site, and Claude.ai. The first version came together surprisingly quick. Podcast search worked, audio played, it used my branding and everything looked functional. But as usual there were issues that I didn’t think of because I’m not a developer and some peculiar quirks.
The first problem was something called Cross Origin Resource Sharing (CORS). I curse CORS!! The browser talked to the Podcast Index API but started throwing some fits when the app tried pulling podcast RSS feeds directly. Some feeds allow it and some don’t. Claude suggested I use a proxy. When using a proxy the browser talks to my server then my server fetches the feed. Problem solved… sort of.
The first version of the proxy was too strict and blocked chapters and transcripts. These are features important to the Podcasting 2.0 crowd. Then the second version was too permissive. After enough back and forth, the app finally worked and doesn’t appear to be a huge security risk for my server. I say appear because I don’t truly know. I’m the only user right now.
Then I noticed that one of the podcasts I produce was showing an episode that no longer exists. That turned out to be a stale Podcast Index entry. I don’t know why it shows up there and I can’t get the index to purge that information. The episode is not in my RSS feed. It was at one point but I took it out. I used podping to send a signal that my feed is updated and I used the manual refresh function for Podcast Index to push the index to re-examine my feed. But none of it worked. So I told Claude to get the location of the RSS feed from the index but use my actual RSS feed as the source of truth instead of what the index displays. Poof! That ghost episode in my app is gone, although it still shows on the index.
Get the podcast idiot podcast player

Next up was chapters and transcripts. This is where XML namespaces made things difficult. Browser parsing failed, returned nothing, and offered no explanation whatsoever. After fighting with namespace handling, Claude abandoned the solution it originally chose and used something called regex against the raw RSS text instead (I have no idea what regex is or what Claude did to fix the issue.) But… it worked immediately!
Transcripts come in multiple formats, timestamps need parsing, and the listener needs auto-scrolling synced to audio playback so they can follow along. That didn’t work either at the start. After more back and forth Claude got it to work where the transcript now auto scrolls and highlights the text in yellow so the user can follow along.
It’s a pretty decent little podcast app now. It searches the Podcast Index for shows you want, it can save favorites, and allow you to export your favorites to a JSON file so you can transfer them between devices. You can add episodes to a queue and reorder it too. The podcast:funding tag is implemented so a listener can tap that support button to send the podcaster some fiat love. I didn’t implement full Value4Value as I don’t want to get into streaming payments. I think that is a little beyond what I want from the app.
The finished app is super simple. It pulls live data from RSS feeds, supports chapters, transcripts, and funding tags, runs in a browser, and you can install it to your computer or phone as it’s a Progressive Web App (PWA). It’s mainly an HTML file and a few bits and bobs to get it working. I don’t have to submit it to an app store and there is no backend infrastructure on my side other than that pesky proxy that sits on my server. Claude insists it shouldn’t cause me bandwidth issues. It shouldn’t unless this PWA becomes the most popular podcast app on the Internet!! Stranger things have happened in this world.
Go try it out at the link above. Install it on your phone. Let me know what you think of it… only as long as you have words of praise. Constructive criticism and knowledge of missing features are welcome. Everything else can get shoved up your wazoo!

Leave a Reply