All Play w/ Ryan Hefner
All Play w/ Ryan Hefner

All Play w/ Ryan Hefner

Ryan Hefner

Overview
Episodes

Details

Follow along as I, Ryan Hefner, build products and tools, while sharing the learnings and challenges along the way.

Recent Episodes

038 — Extensions of Me
JUL 17, 2025
038 — Extensions of Me
The OpenGraphs browser extensions are live! Well, at least some/most of them!! I share the latest updates on what I am working on for https://www.opengraphs.com, along with some browser extension inconsistencies.You can find the OpenGraph Browser Extensions here:Chrome - https://chromewebstore.google.com/detail/opengraphs/kiifpjdcadbbbhoocoobahkogpnmngioFirefox - https://addons.mozilla.org/en-US/firefox/addon/opengraphs/Microsoft Edge - https://microsoftedge.microsoft.com/addons/detail/opengraphs/cfhfplinkfammfoljdakadohdgggkmchAnd, here’s the link to the post on IndieHackers:https://www.indiehackers.com/post/dirt-for-sale-breaking-ground-on-opengraphs-com-gkZlrGXD4nH5381idGWqWatch the episode on YouTube: https://www.youtube.com/watch?v=FD1yMVA40nE---Welcome to the wacky world of browser extensions in 2025. Between varying manifest version support, as well as inconsistencies in the user experience and capabilities of browser extensions on the same browser engine (looking at you Arc and Dia, on Chromium), it can be hard to provide a consistent nice experience between them all, but I am doing the best I can. So far, the best experience across the extensions are in both Google Chrome (native) and Microsoft Edge.The thing that makes the experience so good is the Side Panel support, which was introduced with the rollout of Manifest V3. The beauty of the Side Panel API is that it allows the extension to remain open while you are navigating a site within a tab, or even changing tabs, which makes it great when you are trying to review the open graph/Twitter|X Card/meta data for sites and pages. Unfortunately, the Side Panel API is not yet supported in Firefox, nor Opera, and the semi-annoying thing is that it is unfortunately not consistently implemented on other Chromium-based browsers, like Arc and Dia. Basically, I have some work to do on the extension for Chrome if I want to make it usable in these non-standard browsers, but I’ll be getting to that at some point, and also sharing all the inconsistencies in the Browser Extension world across the board, both within browser ecosystems and across them.Other than the browser extensions, I have been working on the OpenGraphs site, mainly focused on the copy and wrestling with the resistance as I try to showcase what OpenGraphs can be, how it can help automate a lot of busy work, and makes it a breeze when you want to go back and mass update the open graph images and data for big sites. The goal is to have an updated home page, browser extension pages, and tool page up and live by the next recordings.To follow along, you can find me at https://www.ryanhefner.com, follow me on Bluesky @ryanhefner.com (https://bsky.app/profile/ryanhefner.com) and keep up with the show on https://www.allplay.fm and @allplay.fm (https://bsky.app/profile/allplay.fm).Help yourself, while supporting the show, by trying some of the services that I use, and highly recommend:Transistor FM (https://transistor.fm/?via=allplay)Fathom Analytics (https://usefathom.com/ref/EKONBS)#buildinpublic #podcast #startups #webdevelopment  #webdesign #bluesky #indiedev #bootstrapping #indiehackers
play-circle icon
11 MIN
037 — No Waves
JUL 2, 2025
037 — No Waves
Or, you can watch the video on YouTube: https://youtu.be/iU2PMrYUNIQAfter attempting and failing to get an episode out the last couple of weeks, I am happy to say that I finally recorded one, and I am getting it out early this week.A lot of stuff has happened over the last 2.5 weeks, so here’s a quick run down, along with links:Optimizations were made to the https://www.opengraphs.com renderer, that is currently powering the open graph image generation for both https://www.allplay.fm and https://www.ryanhefner.comWhile integrating OpenGraphs into the All Play site, I noticed the audio players were no longer playing anymore, so after a bit of back-and-forth with Transistor (https://www.transistor.fm), I decided to rip out the custom waveform generation stuff I was doing and just play the mp3 directly in an `audio` tag. Hence, No Waves. I do plan on getting back to a solution for adding the waveforms back, but for the sake of getting things working, and working on other stuff, this quick hack will have to do. Probably a lesson in there about focusing on the right things, and how not everything has to be bespoke and custom built.Along that front, the whole No Waves thing got me thinking about Justin Jackson’s (https://justinjackson.ca) analogy about finding the right wave, and how I feel the same way trying to find the right product and revenue generator as I did back in the day when I started surfing. Heading out on the crap days to get more comfortable with my board and doing a lot of paddling to get into shitty waves, but all that time in the water and paddling made it easier for me to catch waves when I would eventually get out on the good days and was presented with good waves.Speaking of Justin Jackson, I was able to snag some time with him last Thursday for an impromptu Jam Sessions episode. I was feeling a little off in this one, but have a watch and let me know what you think: https://www.youtube.com/live/2_nuzJa3AJ0?si=JYB2WWNhlMphWu14On the OpenGraphs front, I have been busy making a few optimizations to the render, but mostly focusing on the marketing site and building some tools, and browser extensions (!) to launch before the full offering is available. And, a side note, the current state of browser extension development somehow feels even more fragmented and disjointed than ever, but I’ll save my thoughts and issues there for another episode.The goal this week is to get the browser extension submitted to at least one of the stores/directories this week, along with updates to the OpenGraphs marketing site to support it/them. And, get one—maybe two!—tools deployed to the site as well. My thinking is that if I can start to bake in some early tools that are nice and people like to use, hopefully that will keep people coming back, subscribing to the newsletter, and aware as new stuff keeps rolling out to the site, leading up to the full-on service becoming available. I’ll keep you posted on how that goes as things progress.To follow along, you can find me at https://www.ryanhefner.com, follow me on Bluesky @ryanhefner.com (https://bsky.app/profile/ryanhefner.com) and keep up with the show on https://www.allplay.fm and @allplay.fm (https://bsky.app/profile/allplay.fm).Help yourself, while supporting the show, by trying some of the services that I use, and highly recommend:Transistor FM (https://transistor.fm/?via=allplay)Fathom Analytics (https://usefathom.com/ref/EKONBS)#buildinpublic #podcast #startups #webdevelopment  #webdesign #bluesky #indiedev #bootstrapping #indiehackers
play-circle icon
13 MIN
036 — Pedal to the Metal
JUN 15, 2025
036 — Pedal to the Metal
Watch the video on YouTube: https://youtu.be/rLRNnlzIOQMI connected with Vercel this past week to discuss how I could both optimize and try to control the costs that https://www.starterpacks.net was accumulating. I did walk away with some techniques that I will try on the next site I launch on Vercel where I need to try to maintain a consistent bill. Most notably:Fluid Compute is good and does reduce function use/chaosControlling the cache key to maintain the cache between deploys (when possible)Play with Cache-Control headers to see if it's possible to increase the number of cached edge request hits, and ultimately skip the function rendering for each cached pageSo, some good pointers to keep in mind for the next site that takes off on Vercel.On the client front, it was a busy week, but I was able to play around with writing my own Cache Handler to support the Render deploy of the frontend. I played around with various approaches trying to write a Cache Handler backed by a Redis instance, but ultimately had to back out of that approach since I wasn’t able to fully grasp the life cycle flow for when a cache handler is initialized and abandoned, resulting in either too many Redis connections remaining open and overloading the instance, or clients cleaning themselves up too early and causing errors when get/set methods were called. Instead, I ended up writing a Cache Handler that is using a LRU cache, and it seems to be enough to smooth out the instance, serve things fast, but without all the complexity of the Redis stuff. I might circle back to a Redis-based solution down the road, but the LRU approach seems to be working for now.After a long week of client work and troubleshooting, I wanted to make progress on something new that I have been putting off for a while, so I sat down on Friday on got the first instance of the open graph images renderer setup and deployed for https://www.opengraphs.com. OpenGraphs is essentially a re-write/re-imagination of a previous service that I wrote and was using  to generate open graph images for my projects, but I have some plans to both optimize and expand that previous services vision, and hopefully customers, which I will be focusing on as I continue to build out the admin portions of the app.Along with getting the OpenGraphs renderer deployed, I was able to publish an update to the library that I use to handle the open graph data in my NextJS sites. You can check it out here: https://github.com/ryanhefner/next-metaAnd, don’t think that I have forgot about https://www.skylounge.social. After getting Starter Packs stabilized and no longer sucking money out of my wallet, and getting the OpenGraphs renderer setup and deployed, I should have the headspace available to wrap up a few of the remaining features on Skylounge and start inviting some early people to host sessions on the site and see how well it either does, or does not, work 🤞 More on that to come... To follow along, you can find me at https://www.ryanhefner.com, follow me on Bluesky @ryanhefner.com (https://bsky.app/profile/ryanhefner.com) and keep up with the show on https://www.allplay.fm and @allplay.fm (https://bsky.app/profile/allplay.fm).Help yourself, while supporting the show, by trying some of the services that I use, and highly recommend:Transistor FM (https://transistor.fm/?via=allplay)Fathom Analytics (https://usefathom.com/ref/EKONBS)#buildinpublic #podcast #startups #webdevelopment  #webdesign #bluesky #indiedev #bootstrapping #indiehackers
play-circle icon
13 MIN
034 — Who’s ready to Jam!?
MAY 21, 2025
034 — Who’s ready to Jam!?
A quick update on this glorious hump day, just in time before I head out to the Atlanta PHP meetup (https://phpxatl.com).Tomorrow, May 21st at 11:30am EDT I’ll be chatting with Brian Casel (https://briancasel.com) about his recent launch of Instrumental Components (https://instrumental.dev). Join us in the stream and if you have any questions for Brian or myself you can get them answered live!Subscribe and join the stream: https://youtube.com/live/LyMjPhkHk3kI am also going to be streaming to https://stream.place, a new streaming platform geared towards the Bluesky/ATProto community. So it should be fun adding another destination to consume the stream from. And, I floated the idea out on LinkedIn to see if people would be interested in watching the stream there, but just waiting to see if I can get a good signal from there or not to justify adding it.Weigh-in on the LinkedIn stream: https://www.linkedin.com/posts/ryanhefner_jam-session-launching-instrumentaldev-activity-7331038582549147650-CmcPSo, with that said, hopefully you can find the stream wherever you prefer to consumer your streaming content and we look forward to seeing you there.And, on the Starter Packs front, https://www.starterpacks.net, I ended up getting a pretty big hosting bill last month that would make the project unsustainable if it were that high moving forward, so in an attempt to reduce costs, and because I was meaning to explore it anyways to make navigating the site potentially faster, I converted all `/profile/...` pages to use ISR (Incremental Static Regeneration). My hope is that by rendering and caching these pages indefinitely, I will serve more cached versions of the pages and reduce some of the edge requests and function invocations previously required to serve those pages. It does introduce some complexity when it comes to revalidating those pages in the future, but this is just a means to try to cap costs, and if it works I can figure out how to keep everything fresh, while still being optimized. So stay tuned...Other links:https://www.skylounge.socialhttps://www.linkedin.com/in/ryanhefnerTo follow along, you can find me at https://www.ryanhefner.com, follow me on Bluesky @ryanhefner.com (https://bsky.app/profile/ryanhefner.com) and keep up with the show on https://www.allplay.fm and @allplay.fm (https://bsky.app/profile/allplay.fm).Help yourself, while supporting the show, by trying some of the services that I use, and highly recommend:Transistor FM (https://transistor.fm/?via=allplay)Fathom Analytics (https://usefathom.com/ref/EKONBS)#buildinpublic #podcast #startups #webdevelopment  #webdesign #bluesky #indiedev #bootstrapping #indiehackers
play-circle icon
8 MIN