[HN Gopher] Show HN: I Made an iOS Podcast Player with Racket
___________________________________________________________________
Show HN: I Made an iOS Podcast Player with Racket
Author : Bogdanp
Score : 162 points
Date : 2025-01-27 08:56 UTC (14 hours ago)
(HTM) web link (defn.io)
(TXT) w3m dump (defn.io)
| hoofedear wrote:
| Just want to say, I love the design of your website!
| Bogdanp wrote:
| 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/
| ashton314 wrote:
| Is that font Valkyrie on your blog?
| Bogdanp wrote:
| Yep, it's one of Matthew Butterick's fonts[1].
|
| [1]: https://mbtype.com/fonts/valkyrie/
| fandorin wrote:
| yeah, really good looking page, congrats! btw - out of
| curiosity - what tool did you use to create app screenshots
| for AppStore?
| Bogdanp wrote:
| Thanks! I used Pixelmator Pro to put the images together. I
| just made one long image that I cropped at the end into the
| screenshots you see on the App Store. For the iPhone
| templates, I think I exported a template from Sketch, but I
| later found out that Pixelmator also has them (you can find
| them under the Mockups category in the New dialog).
| oidar wrote:
| For those of unfamiliar with Racket, could you go over what it
| takes to run a Racket app on iOS?
| the-chitmonger wrote:
| I'd love to know as well - I found some documentation on the
| Racket site, but I'm not entirely sure what I'm looking at
| here.
|
| https://docs.racket-lang.org/inside/ios-cross-compilation.ht...
| Bogdanp wrote:
| 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
| hbn wrote:
| Looks very nice.
|
| I see Windbreaker Podcast featured in those screenshots on the
| App Store listing. A Zero Punctuation Fully Ramblomatic fan?
| Bogdanp wrote:
| Yep!
| hbn wrote:
| Yahtzee is one of my favorite writers. I need to get back
| into the last couple books of his I haven't read.
| giuliomagnifico wrote:
| Cool thanks! (I also realized I'm not the only one who loves
| listening to podcasts during the shower eheh)
| freeplay wrote:
| 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!
| Bogdanp wrote:
| 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!
| pvg wrote:
| _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.
| petercooper wrote:
| 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..
| newsclues wrote:
| I've considered the multiple apps to manage content
| consumption but it's such an inelegant solution I've been
| unwilling to try it.
|
| I want to be able to categorize content. I want a category of
| podcast to work to, work out to, go to sleep to, or to simply
| sit a learn. I want different categories of music. I want to
| be able to set a group of content on YouTube that I will
| watch everything on, and one that I can sort through and pick
| the few videos I want to watch.
|
| Given the value of that data in just my sorting and
| prioritizing of content, I don't know why I don't have the
| tools so that data can be harvested and sold.
|
| I think it will lead to better content.
| mixmastamyk wrote:
| 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.
| Bogdanp wrote:
| Every podcast has its own RSS feed. As for the index, I use
| Podcast Index[1] and the iTunes API.
|
| [1]: https://podcastindex.org/
| willemlaurentz wrote:
| Check out this, it might help you with downloading podcasts to
| the filesystem: https://news.ycombinator.com/item?id=42841416
| criddell wrote:
| Does it work with CarPlay?
| Bogdanp wrote:
| Not yet, but it's on the list!
| adlpz wrote:
| 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 wrote:
| 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 wrote:
| 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!
| wenbin wrote:
| Good job! If you need episode search, check out PodcastAPI.com
| anonzzzies wrote:
| Well done; will test and possibly switch. But, for me more
| importantly, using Racket for this is more really nice. Thanks
| for that.
| baggachipz wrote:
| 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.
| jonathonlacher wrote:
| 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 wrote:
| 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.
| sneak wrote:
| > _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 wrote:
| 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.
| nashashmi wrote:
| I did not use this app yet, but I want to share my issue with the
| current native podcast player in iOS.
|
| Some podcasts are news related and require hearing the latest
| episode. Other podcasts are more serial like history narrations
| and require hearing the series in the order it appears. Download
| options should be reflective of these two functions. And "play
| next" should also be reflective of these two functions.
|
| Some podcasts have fast speakers and need to be slowed down.
| Other podcasts have slow speakers and need to be sped up. The
| speed setting should be saved per podcast.
|
| New View: A play next queue list should be present. Swipe right
| to play. Swipe left for other options
|
| Condensed View: Upon expanding an episode, swipe left to see
| other episodes in the list ordered by date based on preference.
| Scroll down to see options for the episode. Scroll up to see
| other episodes in Queue.
| Svoka wrote:
| Native iOS podcast player allows to customize per-podcast
| episode order (newest first/oldest first) I guess playback
| speed is a global playback property though.
| sghiassy wrote:
| Racket has been on my bucket list of languages to learn. Seems
| really intriguing
| jonathanyc wrote:
| 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 wrote:
| 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.
| astound473 wrote:
| Any plans to implement podcast 2.0 features like boosts or sat
| streaming?
| teekert wrote:
| I streams sats to creators but also to the podcast app. I
| wonder what an app like Castamatic or Podverse or Fountain
| makes...
| mszyndel wrote:
| Bug report: go to Discover, serach for Mike Duncan, tap on
| Revolutions, exception pops up
| Bogdanp wrote:
| Thanks! I'm not able to reproduce this on my end, but if you
| send me the exception (here or via e-mail), I'd be happy to
| take another look!
| sortatired wrote:
| kudos well done! looks really cool
| KristijanM13 wrote:
| 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 wrote:
| > 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.
| tao_oat wrote:
| 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/
| philsnow wrote:
| 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
| philsnow wrote:
| 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._
___________________________________________________________________
(page generated 2025-01-27 23:00 UTC)