Justin's brain

I prototyped a full video podcasting app in a couple of days using Claude Code, and it's completely changed how I think about building new features for Transistor (the podcast hosting product I co-founded).

πŸ”₯ Timestamps:
0:00 – Why you should build fake products first
0:27 – The podcast countdown timer experiment
0:56 – Taking on video podcast hosting at Transistor
1:08 – Just start building it
1:47 – Demo: the video podcasting prototype
2:32 – What people actually want vs. what I assumed (HLS vs. simple upload)
3:53 – "Usage is oxygen for product realizations."
4:54 – Live demo: one-click publish to YouTube + Transistor
5:57 – Scheduling episodes and real user testing (the church sermon use case)
6:39 – Handling 15GB video uploads
7:25 – Why everyone should be building fake products
7:49 – Private podcasts β†’ unlisted YouTube playlists
8:28 – The FreshBooks "compete with yourself" story
9:44 – How does this change your product process?
10:17 – Claude Code + Slack: anyone on the team can start a PR
14:05 – YouTube analytics vs. audio downloads in one view
14:51 – Freedom to use a fresh tech stack
15:18 – Night and day: old codebases vs. new ones

β˜… More about me: β˜…
I'm Justin Jackson. I co-founded Transistor.fm (a podcast hosting and analytics platform).

I write, podcast, and make videos about bootstrapping, startups, marketing, calm companies, and business ethics.

My blog: https://justinjackson.ca
Bluesky: https://bsky.app/profile/justinjackson.ca

Creators and Guests

Host
Justin Jackson
Co-founder of Transistor.fm
Guest
Brian Casel
Building products with Ruby on Rails.Co-host πŸŽ™οΈ bootstrappedweb.comSaaS MVPs as a service πŸ‘‰ onemonth.appRails UI components πŸ‘‰ instrumental.devFounder πŸ‘‰ clarityflow.com

What is Justin's brain?

Hi, I'm Justin Jackson. Here, I'm sharing brief thoughts on building a better life, bootstrapping, improving society, growing older in tech, being a dad...

Justin Jackson:

I want to talk a little bit about building fake products. I feel like this was always true, but now the cycle times are so much shorter. The value of build first has just increased dramatically. Build first allows you to create something in a couple of minutes and start using it and start interacting with reality right away. So the podcast timer Countdown timer is a perfect example.

Justin Jackson:

In that app, we set up segments. We give it a timer. It counts down. As soon as I introduced that with you and I, it it added I noticed it added a little bit of anxiety. It's like, oh, man.

Justin Jackson:

I got time now counting down. So you start to feel a real interaction with the product right away. One of the things I've been talking about on this show forever is can we at Transistor figure out a way to do video podcast hosting? And it's just such a big hairy problem. It it feels like too much.

Justin Jackson:

And then a couple weeks ago, I said, I'm just going to start building it and see Hold my beer. How it feels. And not not because I want to build something that's production ready that we're gonna just drop into the app. But because for this very reason, I want to try start to experience both from the technical implementation side, but even more as a user. What do I run into?

Justin Jackson:

What do I want? What do how does this feel? And in the past, you just could not do this. Just to get to the point I'm at right now, I built a full video podcasting app in a couple days, the first version. And just to get to this point with pretty talented engineers would have taken six months, a year, maybe even two years.

Justin Jackson:

It would have taken a long time. But I got I've got a little app running. This is just a prototype I've built.

Brian Casel:

So we've got show a list of shows.

Justin Jackson:

You can

Brian Casel:

click into one.

Justin Jackson:

You can connect it to transistor and import an existing show. So let's say I import restaurant success here. And then I can connect it to YouTube, and it that works. I can I've got all the auth and connection to YouTube and everything working. And it again, I I

Brian Casel:

What makes it a I'm curious, like, what does it make what makes it a video podcast?

Justin Jackson:

Well, this is this is what I'm this is what was so helpful is previously, I thought the the way to do this is we have to do everything. We have to allow people to upload the video to us. We have to encode it for like, use HLS encoding, host it, etcetera. As I got into this, I started to realize that what people actually want is not that. Basically, they wanna upload a video, have it syndicated to YouTube and maybe Spotify video, And then create an audio only version that syndicates to all the audio platforms.

Justin Jackson:

It wasn't until I started working on this that this became very clear. Right? So we've been talking I think, you know, HLS maybe should exist for the nerds. But when I think about 90% of people I talk to who are doing podcasting, what do they want? They want to upload one video file.

Justin Jackson:

They want it to go to that to get get uploaded to Spotify and YouTube as a video episode. And then they want it transcoded and as an audio file and added to transistor. That's what 80% of people want.

Brian Casel:

Totally.

Justin Jackson:

And so I didn't experience that. I didn't fully realize that. That was in my brain. But I didn't fully realize that, honestly, until I had it create a breadboard for the different flows. And once I saw the breadboard, I was like, wait a second.

Justin Jackson:

And once I'm talking to Claude Code and it's like, yeah. Like, that HLS video component really adds a lot of complexity to this app.

Brian Casel:

That's that's like very similar to my process with any new new app. It's like, alright. Like, here's my concept. I think I wanna do it this way. And then and then you run to things and have back and forth with Claude.

Justin Jackson:

Yes.

Brian Casel:

Yeah. Then once you see the see the views, see it and like yeah.

Justin Jackson:

Well, and there's just so many things that you run into that until you're actually using it, usage has always been oxygen for product realizations, for actually understanding something. So here's another example. In my little prototype, I'm gonna click new episode. I'm gonna choose a video file, and it's starting to upload. That uploads to r two.

Justin Jackson:

I'm gonna say sample app for Brian. The other thing I like about this, by the way, is it's allowed me to play with a simple interface again. I even hid a lot of the advanced settings in this expand collapse UI here. I'm gonna click publish episode. This is now uploading to YouTube.

Justin Jackson:

That's completed. Now, it's extracting the audio that is processed and completed. If we click here and view it on YouTube still processing the video, but that will be live right away. And you click on transistor, YouTube embed has automatically embedded in the share page. The episode is playable.

Justin Jackson:

It all happens in one step. Nice.

Brian Casel:

So That's that's beautiful.

Justin Jackson:

That's I mean And and here's the other benefit. I've been playing with this. I've been using it.

Brian Casel:

Especially if you could you could schedule it.

Justin Jackson:

You can schedule it. I've already got that built in. The I'm now showing this to people. So my one buddy, he he does uploads all the sermons for his church. And he's like, dude, he's like, I wish I could just do this in one step.

Justin Jackson:

It's taking me so much time to first upload it to YouTube. Then I basically copy and paste the same title description, etcetera, over to a podcast host and then do it there. I just want it one stop shop. So I I can record a video for him. Eventually, he'll be able to use this.

Justin Jackson:

And now I'm gonna have a real person using it and will experience how does this work. Today, for the first time, I I had to we at Transistor right now, we don't have an uploader that can handle files bigger than a gig. So I had ClaudeCode build a file upload file uploader that can handle big files. Today, for the Marketing for Developers podcast, this Lars Lofgren interview was 15 gigabytes or something like that. It's like, okay.

Justin Jackson:

Well, let's let's see how this system handles a 15 gigabyte video. I'm also gonna be tracking the costs now on, you know, the different like, for hosting and for bandwidth and all that stuff. I can test all this stuff out before we implement it in our production product. And I think building fake products is going to People need to be doing this. This is this is the way to explore and truly feel and shape the entirety of the problem before you sit down and write a, you know, a implementation plan for your existing app.

Justin Jackson:

This is like, let's figure out everything now. Even something as small as like you'll notice this one says private. This is a private podcast. And then I as soon as I start using this, because I wanted to publish this episode today, I'm like, wait a second. A private podcast is going to have to have a different setup than a public podcast.

Justin Jackson:

And I'm like, what would I want personally as a user? Well, I might just want it to be an unlisted playlist and unlisted video on YouTube. Can I do that? Yeah. So now, if it's a private podcast, it automatically creates a unlisted playlist on YouTube, publishes an unlisted video.

Justin Jackson:

I wouldn't have thought of that beforehand. And Yeah. All of this reminded me of this great story from FreshBooks. This is a story that Mike McDermott told me ages ago. And I don't know if a lot of people have heard about this, but basically, they decided they they they had this problem back in who knows when this was?

Justin Jackson:

2017. They had this problem where they had this mature product, but they wanted to do a full rewrite. And Mhmm. So they decided they went through a bunch of ideas. But then Mike said, what if we just created a new company and competed with ourselves?

Justin Jackson:

A new company could have its own name, brand, logos, website, articles of incorporation, user agreement, service staff. We could use that to figure out if we could build a product that is truly better than the one we're offering. They built for so FreshBooks v two or v three or whatever it was, they created an entirely different company. And then they built the product, ground up from there, got real users using it, had its own pipeline and everything. And then only when it had proven itself with whatever it was, a 100 users, a 100 paying customers, did they switch it over and have it and have it as the main FreshBooks app?

Justin Jackson:

And then

Brian Casel:

I didn't know that they did that. That's really

Justin Jackson:

Yeah. I think cool.

Brian Casel:

I yeah. Like, this what you're describing, this whole this whole process of, like, you bring a new feature, at least in a in a concept or a prototype form, like, it it dovetails exactly with what we were talking about with with on the on the recent episode over here a couple weeks ago. It's like, I'm I'm curious to know for you with with your team at Transistor, like, what is how does this gonna change the process of bringing new features into Transistor? Like, I I just, this morning, I recorded my next YouTube video, and it's about the Claude integration with Slack.

Justin Jackson:

Mhmm.

Brian Casel:

And I at first, I was like, that's okay. It's just a little connector with Slack. That's kind of a nice to have. What's the big deal? And then I saw one of the one of the Claude, team members post an article on on X about it, and how they're using it in inside Claude.

Brian Casel:

And I realized, oh, there there are some real workflow breakthroughs here. And one what what you were just describing about, like, okay, transistor is its own thing. It's it's it's well established code base. It's got this whole user base on it.

Justin Jackson:

Like Mhmm.

Brian Casel:

You can't just, like, change change course or ship features, like, in a day like you can with a Vibe coded thing.

Justin Jackson:

Yep.

Brian Casel:

But but what they were doing what they're doing at Anthropic, apparently, is in Slack, you can like, with the Slack connector to Claude code

Justin Jackson:

Mhmm.

Brian Casel:

Anyone on the team, marketers, product people, go to market, sales, Anyone can at message Claude and kick off a Claude code project, and then Claude code goes and and works on it and creates a PR to the actual code base. Mhmm. So, like, so that's an interesting product process workflow for teams. Right? So it's like, instead of vibe coding a prototype, which is very different, and new, and shiny, and and separate from what your actual code base is, like, anyone can pull off a branch and Mhmm.

Brian Casel:

And vibe and essentially vibe code. Not even vibe code, but at least just start. Yeah. Like like, what what if we add a video uploading feature to our existing code base? What would that look like?

Brian Casel:

And and could we achieve this? Is that even technically possible? Anyone like, obviously, it'll depend on your on your own team's, like, strategy and workflow, but but you or anyone on your team could like, essentially at message cloud and at least start a PR. This isn't gonna ship tomorrow, but at least it's something that it's like, oh, this is technically possible. And and, like, it it could or or we will run into these technical challenges of it.

Brian Casel:

Like, now now we understand that. And then the engineering team can take a look at it, and it doesn't even necessarily have to be like a code review challenge. That could just be the the v one of this, or or or like a draft version of this feature, so that the engineer can see like, oh, okay. I see what I see what the product team is going for here. Yeah.

Brian Casel:

Let me rebuild this properly with so that it's ready for prime time. But, like, that's a much higher fidelity

Justin Jackson:

Yeah.

Brian Casel:

Vision than, like, a wireframe or even a Vibe coded prototype that's separate. Like, if it's a PR off of your real code base,

Justin Jackson:

you know. I think we're gonna do both. I mean, we're still stepping into this carefully. Yeah. I think we're gonna do both.

Justin Jackson:

For this particular project, it made sense to do it separate because we needed a separate r two bucket. I don't wanna use what transistor already has. We there's a bunch of things that I just wanted to keep separate because this is involves a lot more moving pieces.

Brian Casel:

So you're so you're gonna rebrand to AmpCast?

Justin Jackson:

I mean, there is a world in which we go, you know what? We don't want to add this to transistor. We're gonna rebuild it as a separate thing. Maybe a video first podcasting app. That could be true.

Justin Jackson:

I I think also the being able to to have something that I can hand over to my friend who's working at this church and have a limited subset of people actually using this workflow and just running into everything that could happen with use with usage, taking all those notes, and then using that to implement that in the main app. I think that's the other piece. And then the other thing is just being able to see think I've also connected it to the YouTube Analytics API and the Transistor Analytics API. And so now I have a a view of YouTube views versus audio downloads. Sweet.

Justin Jackson:

And so being able to do that in its own space and show it to people, show it to different users, friends of mine that I know are actual real podcasters, and eventually getting them to use it. I think there's just a real benefit to that. And yeah. Then using everything we learn to inform what we're doing with Transistor. The other reason to do it outside of your regular app is this also let me to to it's still a Rails app on the back end.

Justin Jackson:

But I said, on the front end, I don't care what you use. I you you can use whatever you think is best, Claude Code. Yeah. And Yep. You know, we we had when we built the transistor app, we had some strong opinions about how much JavaScript we were gonna use, what kind of JavaScript libraries we're gonna use.

Justin Jackson:

Totally. I wanted to go and run with scissors

Brian Casel:

Strip it

Justin Jackson:

all away. A little bit.

Brian Casel:

Fresh start. I I mean, yeah. Like, I'm I really see a night and day experience between literally apps that I started the code base six months ago or earlier Mhmm. And apps that began within the past three to six months.

Justin Jackson:

Yep. When