top | item 42838875

Show HN: I Made an iOS Podcast Player with Racket

226 points| Bogdanp | 1 year ago |defn.io | reply

85 comments

order
[+] freeplay|1 year ago|reply
I don't know if this is a good place for feature requests, but the only thing keeping me from switching to this at at the moment is download settings per podcast.

For example, some podcasts I don't want to miss an episode and I want them all downloaded. Other podcasts I only check in on occasionally and would only want the latest episode to be kept on device.

I subscribe to a lot of podcast and downloading and keeping every episode is going to eat up a lot of storage.

Besides that, love the simplicity of it. Well done!

[+] pvg|1 year ago|reply
I don't know if this is a good place for feature requests

If you've checked out the thing being showhn enough to have a feature request, you're doing Show HN right.

[+] Bogdanp|1 year ago|reply
Thanks! That makes a lot of sense. It actually only downloads at most 2 episodes per podcast at a time, but that's still not great for your use case. I do plan to add per-podcast settings in probably the release after next, so stay tuned for that!
[+] petercooper|1 year ago|reply
I have the same requirements but started to think these use cases might be different enough to warrant different apps. So I’ve gradually shifted to those “don’t miss” ones in a dedicated podcast app and the occasional ones to Spotify. Could probably do with another app for the tiny daily ones too..
[+] strunz|1 year ago|reply
"Boost voices" is a cool feature a lot of apps have, but what is really needed is a "compress voices" feature. So many podcasters speak loudly 75% of the time, but then trail off randomly or almost whisper. Then you turn it up and they're projecting loudly again and blow your ears out. It's especially annoying in the car trying to compete with road noise.
[+] Bogdanp|1 year ago|reply
That's a great point! Shouldn't be hard to add.
[+] oidar|1 year ago|reply
For those of unfamiliar with Racket, could you go over what it takes to run a Racket app on iOS?
[+] Bogdanp|1 year ago|reply
Sure! I have a whole library dedicated to integrating Racket and Swift and you can find some of the nitty-gritty details there[1]. The gist of it is:

1. You build Racket for iOS in an interpreted mode (regular Racket works a bit like a JIT in that it needs to load code into memory at runtime, which is a no-go on iOS)

2. You link to it as a regular static library.

3. You call Racket's C API[2] to load and run Racket code.

Here's[3] a somewhat outdated video I did a while back on using that library for Mac app development. Many of the things in this video are now much simpler/more straightforward, but maybe it serves to give you an idea. I also have some source-available Mac apps built this way that you can take a look at[4, 5].

[1]: https://github.com/Bogdanp/Noise?tab=readme-ov-file#usage

[2]: https://docs.racket-lang.org/inside/cs.html

[3]: https://www.youtube.com/watch?v=aTvU0j4hBR0

[4]: https://github.com/Bogdanp/remember

[5]: https://github.com/Bogdanp/Franz

[+] KristijanM13|1 year ago|reply
I support a number of podcast creators on Patreon, and apparently they’ll (at some stage) allow creators to have multiple RSS feeds. Until then, I’d love to be able to regex match on titles for download. This one creator I follow has about 6-7 different shows on the same feed, but I only listen to 2 of them.

I’ve been a Pocket Casts users since I can remember. I’ll +1 the CarPlay support that you mention was already on your list. The other, which they’ve recently introduced, is to disable Lock Screen scrubbing. Been a life saver!

Looks great though! I’ll keep an eye on the change long as it evolves.

[+] hbn|1 year ago|reply
> The other, which they’ve recently introduced, is to disable Lock Screen scrubbing

I was so happy I happened to read through their recent changelog and caught that. WAY too many times I accidentally swiped along the scrub bar and put myself at a random place in a 4 hour podcast episode and had to spend 5 minutes trying to figure out where I was.

[+] Graziano_M|1 year ago|reply
Wow! I have searched for the feature in the settings so many times after losing my spot in a long podcast. Thank you for pointing that out!
[+] tao_oat|1 year ago|reply
I have the same problem with Patreon feeds -- I use [siftrss][1] to manage this for now. Though it's slightly hacky, it works!

[1]: https://siftrss.com/

[+] hoofedear|1 year ago|reply
Just want to say, I love the design of your website!
[+] Bogdanp|1 year ago|reply
Thanks! It's built with Chakra UI[1] so I can't take full credit for it.

EDIT: Oh, I just realized you might be referring to my blog, in which case I _can_ take credit for that :P. Thanks again!

[1]: https://www.chakra-ui.com/

[+] sneak|1 year ago|reply
> It's also free, has no ads or tracking, and it's local-first except for the podcast directory and sync.

The app privacy label says it tracks diagnostics.

[+] Bogdanp|1 year ago|reply
The app store labels are somewhat broad, but that refers to the error tracking that the app does. When an unhandled exception occurs in the app, that error is sent to Sentry.
[+] anonzzzies|1 year ago|reply
Well done; will test and possibly switch. But, for me more importantly, using Racket for this is more really nice. Thanks for that.
[+] philsnow|1 year ago|reply
I’m getting an error going to the Discover tab and also when hitting “search” after typing a search term (newlines added):

  string::1: bytes->jsexpr: 
  bad input starting #"error code: 502" context..: 
  .../syntax/readerr.rkt:15:2: -raise- read-error 
  .../private/arrow-val-first.rkt:486:18 
  .../private/backend.rkt:45:9: get-trending-podcasts 
  .../noise-serde-lib/backend.rkt:69:22
[+] Bogdanp|1 year ago|reply
A botched deploy that I didn't notice ended up crashing the server, which then failed to recover when the systemd unit tried to restart it (it couldn't bind the port and ran out of retries quickly) overnight, so that's why that was failing. It's back up now and I'll put a fix in today.
[+] philsnow|1 year ago|reply
Went looking for the source, but when following a link to podcatcher.net, Cloudflare is saying the podcatcher.net backend is “502 Bad Gateway”ing.

edit: oh right,

> I am still debating whether or not I want to make the app itself source available, like I've done for Franz and Remember. Maybe if there's interest.

[+] jonathanyc|1 year ago|reply
The app looks really good! Based on the title I thought it’d be something you made most as a testbed for Racket so I was surprised to see the app itself actually looks great :D

I tried looking through your blog but couldn’t find anything except the 40 minute YouTube video for your other app. It sounds like both the UI and the audio-related code are in Swift? What code ends up actually being in Racket then?

[+] Bogdanp|1 year ago|reply
That's right, the UI and the Audio Engine bits are in Swift, because it's easier to interface with those Frameworks directly from Swift (and not fight the platform). Everything else (the Database management & the models, the download manager, ID3 parsing, parsing release notes, syncing with the backend server, etc.) is implemented in Racket and is portable.
[+] sghiassy|1 year ago|reply
Racket has been on my bucket list of languages to learn. Seems really intriguing
[+] baggachipz|1 year ago|reply
This is great! I just switched over from Overcast. Very nice and simple interface, no clutter, and not a ton of unnecessary features. Love it.
[+] adlpz|1 year ago|reply
Looks cool! If I may, a couple of feature suggestions:

1. You mentioned it already but bookmarks. In particular bookmarks that can be added through iOS Shortcuts (so we can each build whatever crazy automation we need) and that can be exported (so we can keep LARPing productivity in our Obsidian vaults).

2. An "undo" function, somehow. I know this is weird but I've misclicked the seek bar so many times (esp. in the lock screen) and lost where I was... a solution for that would be so cool.

I've been using the same podcasts app for... well over 10 years. But yours looks really cool, I may just switch.

[+] Bogdanp|1 year ago|reply
Noted! There is already an undo function, though. If you seek, an undo button pops up. Also, if you go to settings, there's a "History" view where you can also undo from.
[+] wuliwong|1 year ago|reply
I will definitely check it out. I've never done iOS development but I have been considering doing this very thing as a way to learn and to give myself the podcast player I really want. :) Good luck!
[+] astound473|1 year ago|reply
Any plans to implement podcast 2.0 features like boosts or sat streaming?
[+] teekert|1 year ago|reply
I streams sats to creators but also to the podcast app. I wonder what an app like Castamatic or Podverse or Fountain makes…
[+] jonathonlacher|1 year ago|reply
Can it handle feeds that aren't available on the public internet?

I have a personal feed that I can connect to over TailScale. But I've found that most podcast clients have a server-side component, which means their backend server must be able to access the feed.

I tried adding my private feed to Podcatcher and am getting "Server Error (500)".

[+] Bogdanp|1 year ago|reply
Yup, unfortunately Podcatcher works the same way and that explains why you'd be getting that error, since the server can't access your feed. That's certainly something that it could support though, but you would obviously not get any push notifications for that feed.
[+] giuliomagnifico|1 year ago|reply
Cool thanks! (I also realized I'm not the only one who loves listening to podcasts during the shower eheh)
[+] mixmastamyk|1 year ago|reply
Where does one learn how to interface with the podcast directories? Who provides free downloads? I had heard something about rss at one point.

Couldn’t find a good app for phosh and was thinking of writing one.

[+] wenbin|1 year ago|reply
Good job! If you need episode search, check out PodcastAPI.com
[+] andro_dev|1 year ago|reply
Four things that matter to me in a podcast app

- Privacy

- OPML support

- Ability to import from Apple Podcast

- Dark theme

[+] hbn|1 year ago|reply
Looks very nice.

I see Windbreaker Podcast featured in those screenshots on the App Store listing. A Z̶e̶r̶o̶ ̶P̶u̶n̶c̶t̶u̶a̶t̶i̶o̶n̶ Fully Ramblomatic fan?