#459: I Built A Python SaaS with AI Transcript
00:00 We all know that tools like ChatGPT have really empowered developers to tackle bigger problems.
00:07 Are you using Tailwind CSS and need a login page?
00:09 Try asking chat, what is the HTML for a login page with the login, username, password, and a button
00:16 in its own section in the center of a page?
00:19 It will literally give you the first pass version of it.
00:23 But how far can we push this?
00:24 Frederick Tubiermont may have taken it farther than most.
00:28 He built a functioning SaaS product with paying customers by using only ChatGPT and Python.
00:36 It's fascinating to hear his story and see what he's built.
00:38 This is "Talk Python to Me" episode 459, recorded February 19th, 2024.
00:45 - Are you ready for your host, Dave?
00:48 - You're listening to Michael Kennedy on "Talk Python to Me." Live from Portland, Oregon,
00:52 and this segment was made with Python.
00:58 Welcome to "Talk Python to Me," a weekly podcast on Python.
01:01 This is your host, Michael Kennedy.
01:03 Follow me on Mastodon, where I'm @mkennedy, and follow the podcast using @talkpython,
01:08 both on fosstodon.org.
01:10 Keep up with the show and listen to over seven years of past episodes at talkpython.fm.
01:16 We've started streaming most of our episodes live on YouTube.
01:19 Subscribe to our YouTube channel over at talkpython.fm/youtube to get notified about upcoming shows
01:25 and be part of that episode.
01:28 This episode is sponsored by Mailtrap, an email delivery platform that developers love.
01:33 Try for free at mailtrap.io.
01:36 And it's brought to you by us over at Talk Python Training.
01:40 Did you know that we have over 250 hours of Python courses?
01:43 Yeah, that's right.
01:44 Check them out at talkpython.fm/courses.
01:48 - Brad, welcome to "Talk Python to Me." - So great to be here.
01:52 Thank you so much for the invitation.
01:55 Nice to be here.
01:56 - Yeah. - Yeah, it's lovely to have you.
01:58 We're gonna have a lot of fun talking about this app that you've built using a highly powered by AI
02:06 and in different ways.
02:07 It's both powered by AI, but also largely built with AI.
02:11 And I think it's gonna give people an interesting look into what is possible these days.
02:17 - What is possible and the journey of a middle-aged coder also maybe.
02:21 - That's really an interesting thing to discuss.
02:24 And maybe we could just start a little bit with the introduction about yourself
02:27 and then talk a bit about that.
02:28 So before we dive into talking about how you use ChatGPT to largely build this app that is a SaaS product service
02:37 on the internet, people pay, subscribe to, which is the dream of many people, it's awesome.
02:43 With AI, just tell people a bit about yourself and then we'll, I wanna talk about this journey.
02:48 - It's a long story because I'm turning 50 in June, 2024.
02:54 If you listen to this before June, 2024, I will be 49, after I will be 50.
02:59 So yes, that will be-
03:01 - You're a spring chicken.
03:03 I'm older than you, Fred.
03:05 - Oh, you're older than me.
03:06 Okay, cool.
03:07 I found someone older than me to talk to.
03:10 Oh, that's fine.
03:11 - You can still write code into your 50s.
03:13 Let me tell you, the keyboard still works.
03:15 It's amazing.
03:16 - And I started when I was 48, but maybe we'll get back to this later.
03:20 So originally my professional journey started as an interpreter, Russian, English to French.
03:27 So I graduated as an interpreter, so in languages.
03:31 And then I started being involved in music.
03:34 I was head of sponsorship for a big music festival in Belgium.
03:38 I had rock venues, live music venues for a few years.
03:42 And then I started being involved in tech as a head of product, head of paid acquisition
03:48 for a few startups.
03:49 I had my own startups.
03:50 I exited one startup in the FinTech space in the early 2000s.
03:55 I had a circus for two years.
03:57 That's quite- - A circus?
03:59 - That's quite an interesting story.
04:00 Yes, family circus with four big tents, eight tons of equipment.
04:05 So that was quite a story.
04:07 - Was this like Cirque du Soleil or was it with animals or what kind of-
04:11 - It was more like, I would say like Cirque du Soleil, but at a smaller, smaller scale, of course.
04:16 - Okay, amazing.
04:17 - But four tents and circus artists and actors and musicians.
04:23 And that was, yes, an original show, an original story.
04:26 I also produced rock bands.
04:28 Maybe I can give a shout out to one of the bands that I love, that I contributed to, The Boxer Rebellion.
04:34 Maybe you heard about them, The Boxer Rebellion?
04:36 - Yeah. - It's a British band based here in London, but with a singer from Nashville, Tennessee, Nathan Nicholson.
04:44 So I was involved in music, in tech, I mean, in all of those things.
04:48 And I think that the project that we're going to talk about is kind of a good mix between music, tech,
04:54 and all my passions.
04:56 I was also a radio DJ for you, so that's why.
04:58 - That's the audio side, right?
05:00 That kind of brings you some together in the music, I suppose, as well.
05:03 - Exactly. - Amazing.
05:04 You know, listening to you tell the story, first of all, what a diverse set of experiences.
05:09 That must've been really fun.
05:11 - It's not a career, that's the problem.
05:13 Unemployable. (laughs)
05:15 - Yeah, that's, but in terms of thinking about products and coding, I know when I experience different areas,
05:22 I always see like, oh, this could be way better, and that could be way better, and why is that so hard?
05:26 Surely we could create some software to fix these things.
05:29 You must've had a lot of ideas about programs you would like to see and stuff you'd like to work on.
05:35 - And multiple times, the solution for me was to hire people to do it.
05:40 I had my own startups in the past, and I always had a team of, let's say,
05:44 two to five developers working for me when we were doing that.
05:48 So I kind of understood all the structure, the architecture of the apps,
05:52 but I'd never really coded myself.
05:57 So I was always relying on other people.
05:59 The difference today is that I spent most of my days coding, which is quite different.
06:04 - Yeah, and you said you started coding when you were 48.
06:08 - Yes.
06:09 - Roughly, almost two years ago.
06:11 - Yes.
06:12 - That's awesome.
06:13 You know, I do hear from a lot of people, or see comments like, oh, I think I'm too old
06:17 to learn this, or, oh, you have to have done this when you were a kid, or maybe gotten a degree in college,
06:23 otherwise you're doomed.
06:25 You surely have an alternative viewpoint on that, given your success.
06:28 - I thought it would be like that also for me, because I would say I'm quite a perfectionist,
06:34 so if I learn something, I want to achieve something with what I learn.
06:39 And the problem, the issue with code for me for a long time had been that I could go through
06:46 the basic tutorials, the first lessons, watching some videos or reading some tutorials.
06:53 It was difficult for me to really achieve something meaningful, something that I could really share,
06:59 that could become a product, because you always end up doing the same little exercises and little tutorials,
07:06 and that doesn't end up anywhere.
07:08 - You learned how to do a loop, but then that doesn't really help you get any closer to an app, right?
07:12 - How to do a little to-do list or a little calculator, or something very simple, nothing that would be worth
07:19 sharing as a product, and especially as a paid product.
07:22 So I always thought, okay, if I want to build a SaaS, the only solution for me is to rely on a freelancer
07:29 or on an agency or on a team of people.
07:33 I was doing it until I discovered--
07:36 - That's a big risk, and it's also not that easy to hire a team to build your product,
07:42 when you're still trying to figure out what a product is and all these things, right?
07:45 - Even if you hire non-expensive developers, it has still a cost, and if you want to,
07:52 you know, just, if you don't want to take too much risk, and if you want to test your product to see if you have
07:58 product market fits, I mean, you don't want to spend 5,000, 10,000, 15,000 on a product.
08:03 It's difficult, and the alternative that people are most of the time advocating these days, it's no code.
08:10 So it's building stuff with, let's say, Bubble, which is pretty popular.
08:16 - Got Retool, they've been a sponsor of the show before.
08:20 - Retool, obviously, that's pretty nice, mostly for internal apps.
08:24 And also, you can just connect stuff through Zapier, through Make, formerly IntegraMAT.
08:30 You can achieve something, but you don't have the control on the UI, you don't really have the control exactly
08:37 on what's happening behind the scenes, and you don't have the flexibility that you have
08:42 if you really code yourself.
08:44 So if you can really get your hands dirty and code on your own.
08:47 So I use also to be a strong advocate of no code.
08:50 So I was using, I'm still using firstly Zapier, and then later on Make.
08:56 But once I discovered Python in August, September 2022, then everything changed for me,
09:05 because then I could really start doing my own stuff, and I started with the backend stuff,
09:11 with the backend scripts, for let's say to create competitive intelligence scripts,
09:18 things like that.
09:19 And I slowly moved into frontend, but first for a few months, it was mostly local scripts on my computer.
09:27 - That's really interesting.
09:28 The low code, no code stuff is super powerful.
09:31 I think it does make it possible for people to build apps.
09:35 I have a friend who built a platform a little bit on top of something that's kind of a low code thing.
09:41 And it's, what they're doing is really impressive.
09:43 And they've got lots of customers and it's going really well.
09:46 It's a vibrant business.
09:48 It's always you're beholden to whatever that platform does.
09:51 If the platform has downtime, you have downtime.
09:54 If they're changing their feature set in a way that doesn't quite line up with what you're trying to do,
09:59 well, that's too bad because, you know, that they've changed their direction or whatever.
10:04 And it's really powerful, but it's also a little bit of a risk, right?
10:08 To be built on top of that.
10:09 - A risk, yes.
10:10 But for me, it was even more, I would say, the arbitrage was even more about flexibility.
10:16 So when you code something on your own with Python, JavaScript, as I'm doing now,
10:22 it's faster in many cases than trying to figure out how to connect, let's say, Airtable with something else.
10:29 Then you've got to think about how the data is structured in Airtable, how the data has to be structured on the other side,
10:36 and then how to connect them together.
10:39 Sometimes it's easier if you just have a SQLite database or MySQL database, and then if you do your own stuff
10:48 on your own without trying to connect existing SAS together.
10:53 It was more about flexibility for me.
10:57 The main reason why I switched almost completely from no code to coding.
11:02 - That's really interesting.
11:03 I guess one more that would be worth considering is price.
11:06 Some of these low-code, no-code platforms are really powerful, but when you start to look at price
11:11 for a decent number of users using your app, a lot of them are built for internal use cases.
11:16 They're not really built for having a bunch of multi-tenant style users and so on,
11:21 but also they can just get real expensive real quick.
11:24 - Yes, because they are based usually on the amount of transactions or scenarios or zaps that can run.
11:32 So if you want to transfer one piece of data from one software to another one, it's one transaction.
11:39 If you have, let's say, 10,000 transactions per month for a certain price, then yeah,
11:44 you can run out of transactions pretty quickly.
11:46 And very quickly, you end up paying 25, 30, $40 for a pretty low amount of transactions,
11:56 API codes basically, between the different SAS.
12:00 - And if you glue them together, one tool connects to another, which connects to another,
12:04 then you've got to pay for kind of the traffic and the activity in all three.
12:08 It's not just like, well, I'm talking to my database.
12:10 I'm now talking to some other service that's got something going on.
12:14 - And the fact is also that there are a few tools that enable you to create a UI user interface
12:21 for your product, but you're limited to the building blocks usually that they offer, even if you can tweak them
12:25 with some code.
12:27 And it's a bit the same, I would say it's a bit also the same issue that I've experienced on WordPress,
12:32 let's say.
12:33 The problem is that if you use something like Bubble and you want to build something with it,
12:38 you bring to your app or the mothership, the core of the big app of Bubble as a whole,
12:45 when you want to build something on top of a platform like that.
12:49 It's a lot of things that you don't really need for your specific apps, but it has to be there
12:54 because the whole engine has to run.
12:57 That's usually what you also experience with WordPress, for instance, when you have a site on WordPress,
13:04 maybe sometimes or even most of the time, you don't need that big engine.
13:07 You could work with a static website with a few HTML, CSS, JavaScript pages, that would be much lighter.
13:14 There would be less code to activate to have your website up and running.
13:19 So in terms of performance, if you can code your own stuff, I think it's also a good reason to choose coding
13:27 versus no code, if you can do it.
13:29 - Totally agree.
13:29 Price, performance, control, all those things.
13:33 That said, you do have to understand more about the world.
13:37 Like one thing we were coordinating around is just like understanding web app architecture.
13:43 I don't know how you feel about it, but I feel like a lot of the guidance that is out there
13:48 is too intense.
13:50 There's too many moving parts.
13:52 Everyone thinks you need to have some kind of background worker service like celery,
13:57 and you need a caching layer, and you need this, and you need that.
14:01 And it just starts to be like, whoa, this is like running Netflix.
14:05 You know what I mean?
14:06 Whereas a lot of times what you need is a backend, a front end, and some kind of data store, and that's it.
14:12 And that data store, you mentioned it before, the data store can be in the early days,
14:16 could be SQLite, which doesn't require another server or another thing to maintain and connect and secure.
14:23 And it can just be a file that you back up.
14:25 - Exactly.
14:26 And you're proving out the idea, right?
14:28 So maybe you're coming from a place where you weren't a DevOps expert, you know, like how'd this transition go for you?
14:35 - When I started developing an app, for some reason I came across Flask as a solution for Python.
14:44 So I started developing the app on Flask.
14:47 And what I like about Flask is that if you compare it, let's say you use Flask,
14:54 and then for the pages you use HTML, CSS, and Vanilla JavaScript.
14:58 What I like is that you can deploy an app which comes from a single folder
15:03 and you've got everything there, your main Flask file, and then all the, let's say the sub files in Python
15:11 with all the business logic that you can isolate in one file or another.
15:15 It's one project.
15:17 And then you deploy the project to GitHub, and then let's say you connect GitHub to Railway.
15:21 I'm using Railway for my deployment.
15:24 So you connect GitHub to Railway.
15:27 And then once you update your code in PyCharm or in Visual Studio, then you have the automatic deployment to Railway.
15:36 But it's one project.
15:38 If you want to decouple completely the backend from the front end, let's say you work with something like Next.js,
15:45 for instance, and then you want to have a backend in something else, then you've got to have multiple instances
15:51 and connect them together.
15:52 It becomes more complicated.
15:54 But if you want to create something simple, you can keep it simple with one single Flask web app.
16:01 And that's what I've been doing so far.
16:03 Most of the Django maker that I built, that I've been building since September 23,
16:10 is a Flask web app.
16:11 So it's one project, one big project.
16:14 It's one project.
16:15 It's interesting that you mentioned, Celery, a few moments ago, because I'm about to ship a new app,
16:21 which is coming in the next two weeks or three weeks, I think.
16:24 And that's the first time after almost 18 months of development that I've considered using something like that
16:32 because I needed it for performance reasons to process something.
16:37 - Something you want to start off in the background and get back and just let it be done later, right?
16:42 Yeah.
16:43 - And it was not that easy.
16:44 We had a discussion with someone who is amazing on the Discord of Railway two, three days ago,
16:52 because if you're deploying things on Railway, you would usually use, and that's what they advise you to do as on Heroku,
17:01 a proc file.
17:02 And the proc file, you've got the start commands that will start your project.
17:07 But on Heroku, which is a competitor of Railway, you can start both the web app
17:13 and the worker in the same file.
17:17 But you can't do that on Railway.
17:18 You've got theoretically to have two different projects, which kind of defeats the purpose.
17:23 - You kind of deploy them both, right?
17:24 But then you get to more coordination.
17:27 - Yeah, but fortunately, and there is a discussion on the Discord between me and one of the guys there,
17:33 they had a way to create a custom JSON for me, which managed to start both the web app
17:40 and the worker in the same deployment.
17:44 But I had to fight, to be honest with you, for like four or five hours to find a solution.
17:49 Because sometimes the problem, and that's the issue that I've seen a lot,
17:53 is that traditional developers, like professional developers, not people like me, not random guys like me,
17:59 usually they assume that the people that they're supposed to explain things to
18:04 know much more than what they do.
18:07 And so they just write a few instructions, like cryptic instructions that nobody really understands.
18:16 And they would assume that everyone reading those instructions would understand
18:20 what they have to do to, let's say, use this worker service, for instance.
18:25 But that's not the case.
18:26 - I totally agree.
18:27 This portion of "Talk Python to Me" is brought to you by Mailtrap, an email delivery platform that developers love.
18:36 An email sending solution with industry-best analytics, SMTP, and email API SDKs for major programming languages,
18:44 and 24/7 human support.
18:47 Try for free at mailtrap.io.
18:50 You know, it's kind of the curse of knowledge.
18:53 Like once you know all of these things, it's really hard to remember, oh yeah, so then you just,
18:58 oh, just run that in Docker, and then link it and set up a network over there.
19:02 You're like, wait a minute.
19:03 - Yeah, I'll do it. - I don't know how to do that.
19:05 I'm just trying to run my Python app.
19:07 Like you're bringing a whole new thing in that you think makes it sound easy,
19:11 and it makes it sound real hard to me.
19:12 I totally agree this is a problem.
19:14 - So many moving pieces.
19:15 When you start coding, I mean, obviously you know that because you've been in this game for much longer than me,
19:22 but once you start coding, there are so many little things that you have to know
19:26 to make this thing work.
19:28 So it starts with how to just configure GitHub and connect it to your--
19:34 - How do you use Git?
19:35 If you have a Git conflict, you might be like, well, this is done.
19:38 I can't do anything else anymore.
19:39 It's broken. - Yeah.
19:41 - I mean, it's really overwhelming when you're new, right?
19:43 - Yeah, it's a lot.
19:44 And that's where AI today helps you because in most cases, if you know how to talk with the AI,
19:52 you will get answers that are much easier to understand than what you would have on Stack Overflow, for instance.
19:58 - I agree.
19:59 It's very interesting how helpful it is.
20:00 I think it's a good time to about jump into that.
20:02 But before we do, tell people about Railway a bit.
20:04 How does this work?
20:05 I haven't used Railways before.
20:07 - It's a platform where you can deploy your apps, basically.
20:11 It connects to your GitHub account.
20:16 It's not only, I mean, you have on Railway not only a possibility to deploy your Flask app
20:22 or other types of apps also, but they also offer all the database aspect.
20:29 So you can spin a Redis database.
20:33 You can have a MySQL database.
20:35 I think they also have Mongo.
20:37 I mean, they have most of the formats that you can expect.
20:40 And the great thing is that everything is on the same platform.
20:45 Let's say that I've got another project I'm involved with a developer, with a real developer.
20:50 Hi to Alex, if he listens to this podcast, a professional developer.
20:54 For that project, for instance, we have an app on Heroku.
20:59 We have a database on MongoDB Atlas, and we have the files uploaded to S3, to Amazon S3
21:10 for the file storage.
21:11 On Railway, you can, at least it's what I do, you can have at the same time, the deployment of the app,
21:17 so which replaces Heroku, and you can have the database also together.
21:22 And the cool thing is that they are, I would say even physically at the same location.
21:26 So in terms of performance, it's pretty easy to handle.
21:31 And it's very user-friendly.
21:32 I mean, very, very easy to use.
21:35 From what I saw, even easier to understand than Heroku.
21:39 And I tried also some things like Vercel or I use for some project also,
21:46 but that's more for static website, Netlify.
21:48 But for this type-
21:50 - Netlify is fantastic for static, but yeah.
21:51 - For static, Netlify is just amazing.
21:53 And just the one where you can just drag and drop a project, for instance, for a static website, so easy.
21:59 But for a more multi-tenant dynamic web app, like the Jingle Maker, Railway was really cool.
22:06 And as you can see from the presentation, it's very user-friendly.
22:10 - It definitely is.
22:11 And the pricing is actually really decent.
22:14 They have a free trial and then $5 a month.
22:17 But that gets you eight gigs of RAM and eight CPUs per service.
22:20 That is really good.
22:22 - I started it on the OBI plan.
22:24 And I think that today, just to give you an idea, with roughly 500 users coming to the app per day,
22:33 and a lot of them using the product, I pay for that roughly $15 a month.
22:41 - Incredible.
22:42 - For both the app deployment and the database, which is in MySQL for the Jingle Maker.
22:49 - That's pretty impressive.
22:51 Good one to know about, this is cool.
22:52 - Yes, nice one.
22:53 - They have good Python support?
22:54 - Yes, yes, very good.
22:56 And they have, as I said, like most people do today, a Discord server monitored also by volunteers.
23:03 And there was a guy the other day, I didn't even know he was not part of the official team of Railway,
23:08 and it really helped me.
23:09 He wrote some code for me to make this thing work with Celery.
23:13 So it was really, really amazing.
23:15 And it was on a Sunday in the evening.
23:18 So really nice.
23:19 - Yeah, that's amazing.
23:20 One thing I just wanna give a shout out to that I came across recently, and that's interesting is Coolify.
23:25 - Coolify.
23:26 - Which is, it's self-hosted Heroku Netlify Vercel alternative, and you just get pushed to it.
23:33 I don't know if it's better than this though, because you gotta have a decent server to run it on,
23:38 and you gotta run the Docker stuff and whatnot to sort of do it.
23:42 But yeah, anyway, speaking of interesting deployments.
23:44 - Yeah, you're gonna manage also.
23:46 Because the other day, I think it was 10 days ago, there was a DDOS attack, I think, against Railway
23:52 for the European part of their network.
23:56 But they were very quick jumping on it and managing all of that and doing all the mitigation against it.
24:03 If you run your own service, then you've got to take care of all of that
24:07 on your own security and all of that.
24:09 - There's benefits, but there's also drawbacks there.
24:12 All right, let's talk about, I think the right way to start talking about this,
24:17 how you're using AI and the journey you went through.
24:20 I mean, we've talked a lot about foundations already, but let's talk about your app.
24:24 You mentioned a couple of times AI Jingle Maker.
24:27 Tell people what it does.
24:28 - It's a web app that you can find on AIJingleMaker.com.
24:31 And if you enter the app, you can create your own sweepers, radio jingles,
24:38 podcast intros, audio promos, as if you were playing with Lego bricks, I would say.
24:44 It's not the usual DOE experience.
24:48 If you'll be using things like GarageBand or FL Studio or Pro Tools to edit your audio,
24:56 you can imagine those waves that you've got to move around to create your jingles or your sweepers.
25:03 If you're using, for instance, the open source Audacity software also on your computer,
25:08 you can do that.
25:09 But still, you've got to know how to move these things around and how to play with the volume, the fade in, the fade out,
25:17 the reverb, the chorus, the flanger, I mean, all the effects.
25:21 And I mean, it's not that easy for many people.
25:24 And so I thought that I could build something that made it as easy as pressing on a few buttons.
25:31 That's the idea of the product.
25:34 So the way you use it when you enter the product, you've got four different parts.
25:41 You've got the intro, the background, the outro, and the voiceover, which is on top of the background.
25:47 And the voiceover, you've got, now you've got three different options.
25:51 You've got the possibility to record your own voice.
25:53 So I rebuilt a voice recorder, an online voice recorder, where you can quickly record your voice,
26:00 add a few effects, and then, boom, use that as your voiceover.
26:04 You can also upload an existing recording that you have on your computer.
26:08 So if you've got something that you recorded with FL Studio or something else,
26:12 you can upload it and use it as a voiceover.
26:15 Or you can use AI.
26:17 So I'm connected to a bunch of text-to-speech API.
26:21 So I didn't develop the models myself.
26:23 I'm not someone smart enough to develop a foundational model, but I'm connected to the APIs,
26:29 and you can pick one of the voices.
26:32 You can write your text, generate the voiceover, and once you have the voiceover, you just select it.
26:38 And when you have the voiceover, you choose a background behind it.
26:41 So let's say groovy music, house music, rock music, romantic music, whatever.
26:47 You've got some pre-made sounds in the app.
26:51 You choose an intro, an outro, and then you press on generate jingle.
26:55 And in five seconds, you've got the jingle.
26:57 That's basically the idea.
26:59 - I'll put in the jingle so people know exactly what this sounds like.
27:04 I'll put it in right now.
27:05 (electronic music)
27:06 - Party time!
27:07 This is Martin Superstar, your number one favorite DJ in New York City.
27:11 - It's really cool, and it's something that I've seen people hire voiceover actors
27:19 on like Fiverr and stuff like that.
27:22 They'll maybe pay 30 bucks to have somebody do a couple of trials and throw some music on top of,
27:27 or something like that, right?
27:29 - And I'm a voiceover artist on Fiverr.
27:31 I'm doing that also.
27:32 So I know exactly what it is.
27:34 - Let me see if I can automate my job away.
27:36 - It was not really the idea of automating completely a job away.
27:40 It was more like the, how can you create something that's self-service and that can meet the needs of people,
27:47 as you said, who don't want to spend 50 bucks or 100 bucks for something,
27:51 but who want to have an easy way to create basic sweepers, jingles, or some other things.
27:58 And the first target was mostly indie radio stations or small podcasts.
28:06 But then I saw many brands coming, like I wouldn't say, like not the big brands,
28:12 but small brands coming, like apparel brands or coffee shops, or I had the other day,
28:19 a bar in Ibiza signing up and paying for credits to generate a promo for the bar in Ibiza.
28:27 So yeah, it's not only radio stations and podcasts.
28:31 It's also anyone who wants to create a promo for their business.
28:36 So that's also one of the services.
28:39 And when I started, it was only short sweepers, jingles, radio station IDs, stuff like that.
28:45 But then I added something which is called the promo maker, which you have in the jingle maker,
28:51 where you can create something which is up to 30 seconds long.
28:54 So more like a radio ad.
28:55 That's an, and there you can also use AI.
28:58 It's connected to open AI, to be honest, but you can also use AI to generate the text of your promo.
29:04 So just put the name of your business, what you're selling, your service, your product.
29:08 Then it will suggest the text.
29:10 Then you choose the voice, generate the AI voice, and then you add the sounds and then it's finished.
29:16 So let's say in 20 seconds, you've got a note you add.
29:19 So that's the promise or the promo maker.
29:22 - It's a cool app and it's really impressive to look at this and think that you built this
29:27 with less than a year of Python or really any coding experience, right?
29:31 Roughly that amount?
29:32 - To put things really in perspective so that people know what they can expect
29:37 if they start their coding journey.
29:41 So I started coding in Python in September, September, October, 2022.
29:48 For a few months, as I said, I was mostly coding scripts on my computer that helped me in my daily business
29:54 because I didn't tell you in the beginning, but most of my activity, it's online marketing.
29:59 It's working for startups and bigger companies also.
30:02 So I need scripts, you know, to, for competitive intelligence, for SEO, for even content production, this type of thing.
30:10 So I created a lot of scripts locally on my computer before considering the front end part.
30:17 Then that's when I discovered Flask.
30:19 That was just before the summer of 2023.
30:23 And yes, the first version of the Jingle Maker that I launched, it was just on the home page.
30:29 You couldn't basically tweak anything.
30:32 There were just four different jingles and just put the name of your radio station.
30:37 You press on generate and it generated one thing, the same for everyone.
30:41 And it started getting some traction between May, 2023 and August.
30:46 And then I said, okay, I'm gonna really dive into this project and develop something more sophisticated.
30:53 I started working on that on a Monday in September.
30:58 It was released on the Friday, the V2.
31:00 - And I gotta tell you, your website now looks really nice.
31:05 You've done a lot of good design work on it as well in the last couple of months.
31:09 - Yeah, it has evolved because maybe you saw it for the first time when we decided to do this podcast.
31:15 It was a white page.
31:17 The logo was the same, but it was different.
31:19 Originally, it was only in material design.
31:22 I was using material design via the CDN from Google.
31:27 But then I wanted to use Tailwind.
31:30 The new version that you see is using Tailwind.
31:33 So people might recognize the Tailwind vibe.
31:37 And I worked quite a lot on this thing that, okay, we said it's audio, so people don't see it.
31:42 But if you go on the website, you will see it.
31:44 There is this rotating list of things that you can create with the product.
31:51 It was inspired by some code that I found, but I had to retweak it for, you know,
31:55 make it responsive and all of that.
31:58 And you know, also a big shout out to my son, who is 18, you know, is learning Python a lot.
32:03 He coded a few things recently.
32:06 He's coding something to play darts at the moment, like to calculate the scores in darts.
32:11 And two months ago, he said to me that, "Your site is nice, but it looks ugly.
32:18 So could you make something that looks better?" I said, "Yeah, yeah, but you know, I kind of like it."
32:25 I said, "No, no, no, no, no, no, no, that.
32:27 It's not the way it should be.
32:29 So do something better.
32:30 I know you can do it." So that's why also we've got something which looks better today, thanks to my son, Maxim.
32:37 - It's a huge improvement from where it started.
32:40 So nice work on that.
32:41 All right, let's talk about some of the techniques that you used here to, first of all,
32:46 what LLM did you use to go on this journey?
32:49 - When I started, I wasn't even aware of GitHub Copilot.
32:52 So I started only with the ChatGPT.
32:55 I was an early premium user of ChatGPT.
32:59 So I started paying the 20 bucks very, very early for GPT+.
33:03 So I started using ChatGPT.
33:05 So basically switching between the ChatGPT UI and the IDE.
33:10 I started using PyCharm.
33:14 So that's the first one I used.
33:15 So I was creating some code in ChatGPT and then jumping to PyCharm, test the code.
33:23 And then if there was a bug, coming back to ChatGPT.
33:25 So this back and forth journey.
33:26 - You asked it at the beginning.
33:28 How do I make a Flask app?
33:29 Or what did you ask it in the beginning?
33:31 Like, how do I make a Flask app?
33:33 How do I make a Flask app that does audio?
33:36 Like, what did you?
33:37 - I knew that I wanted to use Flask.
33:40 So the first thing that you would ask is to ask a ChatGPT for a boilerplate of a Flask web app.
33:46 And it will give you pretty quickly the basic building blocks.
33:51 I don't know if it would give you straight away the architecture with a template
33:56 inside of the templates folder, but no, it gives you here.
34:00 - Hello world.
34:01 - Yeah, bring on hello world on the page.
34:03 But then if you know that you need HTML, then you will ask a ChatGPT to tweak it
34:09 to render index.html from the templates folder.
34:14 And there you see, there it starts.
34:17 And it gives you some boilerplate for the HTML that you put in the templates folder.
34:21 And then you learn that you need, ideally to have some JavaScript in a JavaScript file
34:29 and that you need some CSS in a CSS file.
34:32 And that those two files will be in the static folder of a Flask web app.
34:37 So now I've got, let's say my routine, I've got all of that ready.
34:41 And if I start a new app, I don't even need, obviously, a ChatGPT.
34:46 I just create my structure.
34:48 I put index.html, script.js, styles.css.
34:53 But then what you can also ask ChatGPT to do, for instance, is if you've got your HTML page,
35:00 you can say, "Restyle this HTML page "with Tailwind CSS using the CDN," for instance,
35:06 and it will give you a full restyling.
35:08 And then you can ask it, "Okay, I want on this page four buttons, "and those four buttons should do X, Y, Z."
35:16 And then you start moving into the JavaScript part of it for the interactions on the page.
35:24 And the interesting thing maybe, which would explain also why I haven't really started
35:30 using Next.js or Vue or things like that, is that by default, for some reason,
35:36 you've got to ask OpenAI why, maybe because of some legacy importance of vanilla JavaScript.
35:42 But if you ask ChatGPT to start creating some interactions on an HTML page, it won't just tell you,
35:50 "Okay, you know, these days people use React "or Next.js or something like that,
35:55 "so maybe you could, or you should consider that." It will go deep into vanilla JavaScript.
36:01 And after developing the Jingle Maker for a few months, I showed it to my friend Alex,
36:07 who is this developer I was talking about earlier, who has graduated, I would say,
36:12 from vanilla JavaScript to React, and he looked at my code and said, "Man, that's crazy.
36:17 "It's all vanilla JavaScript.
36:19 "There's not a single line of React.
36:21 "So everything in your app, "it's lines and lines and lines of JavaScript."
36:26 - That's a benefit and a drawback.
36:29 - He said that he would not even be able to write it this way from scratch today.
36:34 That's not something that he would really consider doing because it's more verbose,
36:39 there's more stuff to write to achieve what you want to achieve.
36:43 But the thing is that with ChatGPT or today with a GitHub copilot embedded in the IDE,
36:50 even if it's longer, that's not a problem because you don't write a single line of code.
36:55 I think it's important to point that out is that in the Jingle Maker, there is not one single line of code that I wrote, not one.
37:03 - That's insane.
37:04 - There's not a single line of code that I typed from the first curly bracket to the last curly bracket.
37:11 Nothing.
37:12 Everything is written like that.
37:14 Yesterday, for instance, I was working on something completely different now
37:18 for a friend who is also a client who are working on a Gmail add-on.
37:22 So I don't know if you're familiar with that, but you're using Apps Script from Google
37:28 and then create a manifest and blah, blah.
37:32 And I didn't know anything about Gmail add-ons until yesterday in the morning.
37:37 And after now five hours of work, we've got a fully working product in Gmail.
37:43 - That's amazing.
37:44 - That's crazy, 2024.
37:46 And it's only the beginning.
37:47 I really see that evolving super fast.
37:51 I think that now the most important thing is to be able to talk to the machine,
37:56 to explain the structure, the architecture of what you expect, and to be clear in your head
38:03 about the code has to be developed for the pages to interact, for the elements to interact together.
38:10 And if it's clear in your head, and if you can explain it clearly to the LLM,
38:15 it's just magic.
38:17 - It is like magic.
38:17 - Yeah. - Yeah.
38:18 It's pretty wild.
38:19 If you're a regular listener of the podcast, you surely heard about Talk Python's online courses,
38:26 but have you had a chance to try them out?
38:28 No matter the level you're looking for, we have a course for you.
38:31 Our Python for Absolute Beginners is like an introduction to Python, plus that first year computer science course
38:36 that you never took.
38:37 Our data-driven web app courses build a full pypi.org clone along with you right on the screen.
38:44 And we even have a few courses to dip your toe in with.
38:47 See what we have to offer at training.talkpython.fm, or just click the link in your podcast player.
38:52 So you can see on the side here, I have these really weird recent chats I had,
38:58 like a skilled baker Q&A and survive a plane crash in the wilderness.
39:03 And so these things are actually related.
39:04 And what I was trying to do was I was trying to understand how much prompt engineering
39:10 and sort of setting the stage for the questions matters.
39:14 So like this one, I said, you are a very skilled baker.
39:18 You have run a successful restaurant in the city for five years.
39:21 Now I will ask you questions.
39:23 As opposed to this one, you are a very skilled outdoorsman and you've been on multiple reality shows.
39:29 Now I'll ask you some questions.
39:30 And they were both the same question.
39:32 If I'm in a plane crash and I need to survive, what do I, I wanted to see how much like the baker
39:37 would focus on food and stuff versus the survivalist on others.
39:41 And I feel like, you know, that's a real clear way to understand this kind of stuff
39:46 in just a real general way.
39:48 But I think there must be a code aspect of that as well.
39:52 Like rather than just tell me how to do this in Python, like you have written this app in Python
39:58 or you're an expert on FastAPI.
40:00 Now I want to talk to you.
40:01 You may get different results, maybe better, maybe worse, I don't know.
40:04 But did you try any of this techniques or was it just straight down the middle?
40:08 Tell me how to do this with Tailwind.
40:10 - To be fair with you, because I was a total newbie in the beginning, I was making sure to ask the AI to explain to me
40:18 almost as if I were a five-year-old, you know?
40:22 - Yeah.
40:22 - Because I could have told the AI, you're an expert Python developer and then just give me the code.
40:31 But then I don't have all the explanations because then it behaves like an expert Python developer.
40:37 And there are many shortcuts that it will take and not really give you all the details,
40:43 documenting all the code.
40:44 So I'm still more like in a, explain to me in layman's terms, you know?
40:50 - Yeah.
40:51 - How to do this.
40:52 Because then also I understand the code.
40:54 So it's easier for me to debug it.
40:57 I usually take the analogy that when you said that sometimes you think it might be too late
41:02 to learn to code or to learn to do something.
41:05 Let's say that you want to learn to play music, to play the piano.
41:08 At a certain age, it becomes very difficult because you don't have the reflex, the muscles,
41:13 agility that you can have when you are a young kid to learn how to play the piano.
41:18 But still you could understand what's on the score written on the page from the music.
41:23 So in coding for me, it's kind of the same.
41:26 I would, to be honest with you, I would not be able to write most of the code
41:30 that is in my app myself, but I can read the score and I can see the connections
41:37 between the different building blocks in the code.
41:40 So I can understand if there's a problem, you know, a syntax issue, because there's some, you know, closing brackets
41:47 that are not properly closed.
41:48 I can see it.
41:50 I wouldn't be able to write the code properly in the first place myself.
41:55 You could argue it's a problem, but I say, you know, for me, the output is what matters.
42:01 It's the final product, which is what matters.
42:04 So as long as I understand what's on the screen, for me, it's okay.
42:08 - Yeah, well, let's loop it back to the original way we started this.
42:11 One way you could do this is you could hire people to build this for you, and then they give you the code
42:16 and you're in the same position.
42:17 Like here's a huge pile of code and you probably understand it.
42:20 I'm sure you understand it less well than if you went through step by step and built,
42:25 100% sure.
42:26 - I was in that position a few times where I was involved in some projects
42:31 and I was not involved in the actual coding of the project.
42:35 And then I inherited the project.
42:39 I mean, I had the code base, but I could, I mean, I could just put it on a shelf
42:42 because I would not be able to do anything with that.
42:46 Whereas now I understand every single section of what's written in the app.
42:51 So at the moment I'm repurposing some of the payment logic because I will switch from Stripe to Paddle
42:57 in the AI JINGLEMAKER.
42:59 And yeah, so I've got to rebuild the payment models.
43:02 I've got to rebuild the Flask route for the API endpoints for the payment confirmations and all of that.
43:09 So I know where they are and I know what they do.
43:12 So I know how to tweak them and I can highlight exactly what I want.
43:17 And then now I'm using, I would say 75% of the time I'm using GitHub Copilot straight in the IDE directly
43:24 because it's in context then.
43:25 You highlight the code and then if the suggestion is nice you just insert it to replace the code.
43:33 So yeah, once you've got something that you understand it goes faster and faster.
43:39 - Yeah, and you're still early in this project, right?
43:41 This is- - Yeah, super early.
43:42 - Five, six months or something.
43:44 - Like a baby.
43:45 - Yes, I imagine as you do more of this you might not choose to write a lot of code
43:49 but I bet you'll start to be able to write code kind of like language immersion.
43:53 You know, if you move to Brazil you would start to learn Portuguese.
43:57 - Yes.
43:58 - Eventually just 'cause you're in that environment so much, you know?
44:00 - But sometimes really, you know, with the suggestions it's, you wouldn't see why you would write the code.
44:09 For instance, I had earlier today I was creating a scraper to check the technology used
44:15 by different websites by looking in the source code for let's say WP for WordPress,
44:21 Odoo for Odoo, Squarespace, Weebly, you know, this kind of thing.
44:24 We just wrote together with the AI the first part and then we had to replicate the code
44:30 in beautiful soup for the scraper for each of them.
44:35 There's absolutely no reason why I would write each iteration.
44:39 And once you write two of them, then you with Copilot, you just go with your tab
44:46 to the next section and we understand that what you expect because you've got like three or four different technologies
44:53 that you want to track in your code that you declared before, they would have to write a block of six lines.
44:59 Boom, that's the block of six lines.
45:01 There's no reason in the world why I would write those six lines, you know?
45:05 - Amazing.
45:06 - That's crazy, that's crazy.
45:07 - One more prompt in engineering thing and you talked about it and I think it is a problem.
45:11 So I asked basically what's the boiler plate and it said, boom, here's the boiler plate
45:16 for Flask and ChatGPT.
45:18 Then I said, well, how do I use a template?
45:19 And it said, boom, here's the two pieces of code.
45:22 And you said, sometimes this can be really challenging.
45:25 You said one of the techniques used was to explain to me like a five-year-old.
45:28 Another thing that works really well is I just said, tell me this again, let's think step by step.
45:34 And it gave me a 10 step process.
45:37 Start one, install Flask, create a project directory, create the project script, import Flask.
45:42 And it was really much more like this is what each step you need to do.
45:47 And things like that are really neat.
45:49 When you really start learning, it's nice to do it step by step because some people they don't understand
45:54 and that's quite normal.
45:56 I would say that you've got to install those libraries before using them, simple things like that.
46:04 So in the beginning, it's nice to go step by step.
46:08 - It's really powerful.
46:08 And it's something people can check out.
46:11 There's a cool video, that's your channel, this one.
46:15 - Yeah.
46:16 - Prompt Engineering 101 by Patrick LeVere.
46:18 And yeah, it's like a 14 minute video, talks to you, has a bunch of advice
46:22 from places like Anthropic and others.
46:24 And like, here is how you go and some things you can try.
46:27 - It's also evolving.
46:29 Thanks also to the longer context windows that we have today in DLLM.
46:34 Because when I started doing that in 2022, the context window was maximum 4,000 tokens
46:43 or something like that.
46:44 So you had to really go by short section.
46:47 It was very difficult to debug long pieces of code, long sections of code.
46:52 Now the token window is 128,000 on OpenAI and even longer on Cloud or other LLMs.
47:01 Today it's possible to basically throw at some point 750 lines of code in a 1,000 lines of code in DLLM
47:10 and get some refactoring, debugging.
47:14 That's also really amazing.
47:15 When you need, let's say, you know that you created something cool in one app, some business logic,
47:21 something interesting, but you know that you want to just repurpose it in a small way,
47:26 like make little tweaks.
47:27 You just throw all the code into DLLM and you just explain the little changes that you want
47:33 and it will give you the adapted code fully functional in one go, one shot, which is also impressive.
47:40 - That is super impressive.
47:41 So it sounds like you use Google Copilot a lot.
47:43 Have you looked at GPT Engineer?
47:45 - Nope.
47:46 - So I haven't really either, but it basically, it's supposed to be kind of an iterative thing that goes,
47:52 it will generate all the multiple files for you and then like try to understand how all those pieces
47:59 fit together and work.
48:00 And so-
48:01 - More like an agent logic.
48:03 - Yeah, exactly, exactly.
48:05 So, but pretty.
48:07 - I started working with the GPTs from OpenAI, from ChatGPT.
48:11 I created a few of them.
48:13 It was a funny one, for instance, I'm working for an accounting firm for some marketing
48:18 and the boss of the company sent me a document of 350 pages explaining the accounting module on Odu,
48:27 which is a ERP system two weeks ago.
48:30 And he said, "Oh, you should read that "to be able to understand it "and answer questions about the module."
48:35 And I just threw it into ChatGPT, uploaded the PDF and I created a custom GPT.
48:41 So now I can ask the custom GPT questions about the accounting module.
48:46 So-
48:46 - Oh, that's insane.
48:47 - Instead of reading the...
48:49 And also another nice use case that I have, it's nothing about coding, but sometimes you're just on YouTube
48:57 and someone tells you, this is the five big important things you have to know in 2024,
49:03 which would change your life forever.
49:05 So I'm tempted, maybe I will watch this video because it might be interesting.
49:10 But I'm gonna say, no, it's probably not that interesting.
49:13 It's probably a lot of fluff.
49:14 So now usually what I do is that I've got a website called, I don't remember the name, sorry,
49:20 but one of the websites where you can get the transcript of a video.
49:26 So I go get the transcript, throw it into ChatGPT.
49:29 And then I ask, what are the five important things I should know that would change my life forever in 24?
49:36 And then I've got them in five seconds.
49:37 I don't need to watch a 35 minutes video.
49:40 - And then maybe you decide to watch it later.
49:42 - Maybe, maybe.
49:43 - You can filter it, right?
49:44 Yeah, awesome.
49:46 What an interesting story, Fred.
49:47 I think maybe we should wrap it up, but people can check out AIjinglemaker.com.
49:52 I'll put that in the show notes.
49:53 There's two other things from you that are noteworthy.
49:57 One is you have your AI Coding Club newsletter.
49:59 Do you wanna tell people about that?
50:00 - Yeah, that's a newsletter I started, which is connected to some of the videos
50:04 I posted on YouTube, where I would explain to people how to use AI for coding purposes.
50:11 I will start sending the newsletters soon, actually.
50:13 I started registering people, but I haven't sent the first edition yet, but I will start very soon.
50:20 I've got also a new app, as I said, coming up, probably within two weeks.
50:24 It will be called the AI Showmaker.
50:26 It's a way to create a podcast or a radio show with building blocks.
50:31 So it's the same concept as the Jinglemaker, but for longer form.
50:35 - That sounds really interesting.
50:36 All right, cool.
50:37 People can check it out here.
50:38 And by the way, I've been thinking a lot about email and newsletters and stuff.
50:42 I was doing a bunch with MailChimp for many, many years, and it's just got to be super, super expensive,
50:49 and I got frustrated with them.
50:50 So did a bunch of research on different platforms, looked at buttondown.email,
50:56 and actually chose ListMonk, which is self-hosted and Docker style thing.
51:01 But one of the ones that I came across at the end is Beehive, which looks pretty interesting.
51:06 Are you happy with Beehive?
51:07 - It's more competing with Substack.
51:08 I think it was co-created by one of the guys who co-founded Morning Brew, the newsletter Morning Brew.
51:15 So he knows what he's talking about.
51:17 And it's really, also really well coded, really well executed.
51:22 It's a pleasure to use.
51:24 And you can use it for free for up to 2,500 subscribers.
51:29 Yeah, that's it.
51:30 So yeah, it's a good one.
51:31 - The pricing is way, way better than things like MailChimp and stuff.
51:36 So it's nice.
51:37 Also cheaper than Substack.
51:41 So I don't know which cut they take from the subscription if you run a premium newsletter,
51:47 but it's much cheaper than Substack.
51:49 I think Substack takes 10% from like Patreon and other platform like that.
51:55 - Nice.
51:55 All right, and then one other thing is your, call me Fred.
52:00 - YouTube channel, yeah.
52:01 I've got some videos there.
52:03 Some of the videos are explaining how to use the Jingle Maker, the recent ones,
52:07 but also some of them are about this journey of how to code with AI.
52:14 There are some concrete examples also, like I coded recently a Chrome extension,
52:20 a bookmarking Chrome extension, all the code.
52:23 The explanations is on YouTube and the code on GitHub.
52:27 So I've got different projects like that.
52:29 And yeah, I'm usually documenting what I do on YouTube.
52:33 - Yeah, nice.
52:34 So people can check that out.
52:35 All right.
52:36 Well, I think that about does it for the time that we got together, but thanks for coming on and sharing your story.
52:42 I think it'll inspire a lot of folks.
52:43 - Thank you.
52:44 I hope that everything was clear, that I wasn't cursed to be too cryptic,
52:49 like the developers I was talking about, but yeah, so it's really exciting.
52:55 It's rejuvenating, as you could say.
52:59 - It's opening up a whole world of possibilities, right?
53:01 - I wish I would have started earlier, to be honest, because when I see my son, he's 18,
53:06 and what he already does today with Python, that's quite amazing.
53:13 So when you're 18, imagine where you will be when you will be 48 or 49.
53:19 It will be like really good.
53:21 So yeah, that's the beauty.
53:23 That's the beauty of it.
53:24 So don't wait too long if you're young, if you're listening to the podcast,
53:28 start today or yesterday even.
53:30 - Yeah. - It's amazing.
53:30 - Awesome.
53:31 Well, totally agree.
53:32 Thanks so much for being here.
53:34 And see you later.
53:35 - Thank you so much.
53:36 Bye-bye. - Bye.
53:37 This has been another episode of "Talk Python to Me." Thank you to our sponsors.
53:42 Be sure to check out what they're offering.
53:43 It really helps support the show.
53:45 Mailtrap, an email delivery platform that developers love.
53:51 Try for free at mailtrap.io.
53:54 Want to level up your Python?
53:57 We have one of the largest catalogs of Python video courses over at Talk Python.
54:01 Our content ranges from true beginners to deeply advanced topics like memory and async.
54:06 And best of all, there's not a subscription in sight.
54:08 Check it out for yourself at training.talkpython.fm.
54:12 Be sure to subscribe to the show.
54:13 Open your favorite podcast app and search for Python.
54:16 We should be right at the top.
54:18 You can also find the iTunes feed at /itunes, the Google Play feed at /play,
54:23 and the direct RSS feed at /rss on talkpython.fm.
54:27 We're live streaming most of our recordings these days.
54:30 If you want to be part of the show and have your comments featured on the air,
54:33 be sure to subscribe to our YouTube channel at talkpython.fm/youtube.
54:38 This is your host, Michael Kennedy.
54:40 Thanks so much for listening.
54:41 I really appreciate it.
54:42 Now get out there and write some Python code.
54:45 (upbeat music)
55:03 For more information drop us a line at www.freebiblecommentary.org