Skip to content

DankTechnologies/Podds

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

21 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Podds

Podds logo

podcasts, simple and free


Table of Contents

What is Podds?

Podds is a local-first podcast web app geared towards simplicity, speed, and sharing. I built it as a weekend project that took 6 months, as is tradition.

There's no ads, no signups or accounts, no app stores or gatekeepers, no SaaS or costs. Instead, Podds runs on your device and uses the open web for easy distribution ✨

You can import podcasts from another app or use the search page to find podcasts and episodes.

Podds takes care of the rest - finding new episodes, handling downloads and playback, saving searches, chapter support, and so on. All of your data stays on your device.

Try it out at podds.io

Videos and Screenshots

demo-v1.mp4
light-mode chapters settings lock-screen

Tech Stack

Podds is a Progressive Web Application (PWA) and Single-page Application (SPA) geared towards mobile devices. It is hosted for free on Cloudflare Pages.

Data

UI

CORS Proxies

CORS proxies help web apps get equal-footing with native apps (Android, iOS), especially web apps that need to fetch third-party data, like a podcast app!

Podds is configured with two CORS proxies - a primary and (optional) backup. They help Podds sync podcast feeds, download artwork and audio files, and search iTunes for feeds and episodes.

Without CORS proxies, the browser will block network requests to other servers unless they allow CORS. In practice, most podcast servers do not allow CORS.

Default Proxies

By default, Podds ships with CORS proxies that I manage. The primary is a Cloudflare Worker and the backup is in Node and self-hosted.

You're welcome to use my proxies! I will try to keep the lights on, one way or another, and adapt + improve the proxies as I go.

Bring Your Own Proxy

You can easily create and use your own CORS proxies with Podds, which I recommend for a few reasons.

πŸ”’ Privacy => when you use a public proxy, its owner can see and modify the traffic between you and the target servers. Running your own CORS proxy eliminates that risk and gives you agency.

πŸ“œ The Long Now => maybe my CORS proxies hit quotas or fall over, maybe free tiers go away, maybe I'm hit by a bus while listening to a podcast. None of that should prevent you from continuing to use Podds.

🚲 It's Easy => the Cloudflare Worker way is free and takes a few minutes. The steps below handhold you through it.

The Cloudflare Worker Way

zero-cost, no credit card, email verification

Create Account

Create a Cloudflare account and do the email verification. The dashboard won't be usable until you do the email verification.

Create Worker

From the dashboard, go to Compute (Workers) and click Create. Choose the Start with Hello World template. Then click Edit Code and paste in this worker.js script.

In the worker's settings, you'll find its URL under Domains & Routes, i.e. <worker>.<account-name>.workers.dev. This URL is also shown when you create the worker initially.

Configure Podds

On the Podds advanced settings page, copy+paste your worker's URL as the primary or backup CORS proxy. Dunzo.

The Self-Hosted Way

This repo contains an equivalent NodeJS app and Dockerfile. Plumbing out to the internet is left as an exercise for the self-hoster.

Some good resources

Sharing

Podds makes it easy to share podcasts and episodes via links. Where supported, the Web Share API is used for rich, app-like sharing, e.g. QR code on Android.

If you configure custom CORS proxies, they are included in the share links. When the lucky recipient clicks the link, Podds will update their CORS proxy settings.

The sharing information is encoded in the URI fragment, which is processed client-side but not sent to the server. In other words, everything after the # symbol stays on your device.

https://podds.io/share#1725721050
https://podds.io/share#1725721050+1748258874
https://podds.io/share#1725721050+1748258874+yolo-cors.whatever.biz

Android

Share links open quite nicely on Android.

They open the Podds app if installed, and in the default browser otherwise. Podds is usable in the browser, as IndexedDB and the Cache API are shared between the browser and the app. You can switch between the browser and app without any issues.

share-android.mp4

iOS

Apple does not like the web and web developers and users suffer because of it, by design.

In terms of Podds, there are two roadblocks on iOS specifically

  1. share links open Podds in Safari even if you have installed the Podds app
  2. Nothing is shared between the Safari and app versions of Podds.

Together, this results in a disjointed experience for the user, in a way that makes Podds look broken.

Podds addresses these roadblocks by treating Safari and the app versions differently. The Safari version has two jobs

  1. help the user install the app
  2. help the user click the Share with app button, and have them go to the app and click the Receive button

The Receive button in the app version pastes the clipboard to gather the share link, and then loads the share page.

This is glorified copy and paste with buttons. It's stupid, but it works. Thanks Apple.

share-ios.mp4

Inspired By