087: func AudioToVideo(input Podcast) (Podcast, error)

Dominic:

Hello, Gophers. You're listening to Go Podcast. I'm Dominic StPierre.

Morten:

And I'm Morten.

Dominic:

And I should say you're listening or watching because we are trying something this this week. Maybe trying to to do video podcasting, I guess. Yeah. I'm not even I'm not even sure it will work. I I don't know.

Dominic:

I I I thought it was going to be easy, like, just ope upload an m p four instead of an m p three, and I don't know. Seems to seems to me that it should be that, but I I don't I don't know exactly how how it will work. So we will see.

Morten:

Yeah. Try to figure it out.

Dominic:

Yeah. Yeah. What's what's going on with you, Martin?

Morten:

Well, I sold my soul to Bill Gates this week or last week, which hurts. But some of the listeners might have heard on the last few episodes, my audio has not been not been amazing, which is essentially comes down to the fact that I'm trying to make a Rode microphone sound good on Linux. And that has just been my my huge issue, I think, for two years now. So this weekend, I I wiped Linux off my laptop. I installed Microsoft and installed the the Rode Central Manager hardware, and the sound is amazing.

Morten:

It's it's so good compared to to how it used to be on on Linux. I don't have to do any any settings. I don't have to fiddle with easy effects. It's just the the hardware or the software on the microphone is working. So that's probably been been a big thing this week.

Morten:

But, yeah, I have good sound now. I think that's my my biggest takeaway.

Dominic:

Are you saying that well, when you say you wipe with Linux on your laptop, is it your work laptop? So are you are you, like, moving away from Linux in your day to day as well?

Morten:

No. No. No. No. No.

Morten:

No. I didn't sell my sold that much. I only sold part of it. Oh, no. No.

Morten:

I only sold for the content creation. Yeah. Yeah. But, yeah, my my my laptop now has Microsoft 11 on it, and then my desktop is still fully fully Linux where I'm running on Machu right now.

Dominic:

Yeah. That that that is my that is my concern with with trying Linux. Because at some point, if I don't have audio and and and you're talking about audio input, that's one thing. But for me, audio was always difficult on Linux and whatnot. And if I lose that, I I just cannot do anything.

Dominic:

So I am very I don't know. It it turned me off very very much, I would say. Yeah. Yeah. Sad.

Dominic:

It's sad because it's a it's a great operating system. I I I was loving I I wasn't looking at my channel the other day because I was preparing to to post this this podcast on my channel, and I was looking at at old videos that I was doing. I don't know, 2034, 2015, and I was losing Arch with I three and and things like that. I was like, wow. I'm missing that so much at the moment.

Dominic:

It Yeah. My my setup is not bad. I'm I'm you know, it it's not bad with with w WSL and and the Windows terminal. It's it's way better than what it was, and I I've learned, you know, all the the shortcut keys on of course, I I never use a mouse and whatnot, but but it's not I don't know. It it it's not like I three or any any tiling window manager and whatnot.

Dominic:

So that was pretty pretty good.

Morten:

Yeah. So that's also another part that I I had to figure out how to get my how do I record or stream my Linux desktop and run everything through Windows. So I'm also I got a a cheap capture card so I can actually broadcast whatever I have on my Linux system to the world while still having proper audio and and all of those kind of things. So that's nice, at least.

Dominic:

Okay. So the so the, you know, the the screen capture is coming from your desktop Linux, and and the audio is is coming from elsewhere. Wow.

Morten:

Yeah. So so the camera you're seeing right now is actually just coming directly through Microsoft because that was another of my Linux issue was that I bought an iPhone. And, of course, that thing doesn't wanna connect

Dominic:

to to

Morten:

Linux. Right? So I had to whenever I was streaming or creating videos, I had to go over Wi Fi, and our Wi Fi is not that stable. Our whenever I plug in for for the cable, it's it's perfect. It's fine.

Morten:

We have, I think, 600 megs down or something like that and 300 up. So it's it's a decent connection. It doesn't it just doesn't work well on on on Wi Fi, and now I can actually plug in and connect my iPhone directly through cable. So it's only my my desktop that I will capture with the capture card, and then then everything else goes through the micro Microsoft machine. And and this is turning out great.

Morten:

I had when I did my my web development or full stack web development course for for Golang, I spent so much time dealing with these things. It took me so long to create that course simply because of the fact that whenever I was recording, I was getting the raw input from the condenser mic. So, you know, like, a a mouse moving upstairs or someone sneezing down the street will get caught in this microphone because it is very sensitive, and none of the software on the microphone was catching it. Right? So so this is this is a whole new world for me having decent or very good audio working out of the box.

Morten:

That's that's nice, at least. You know? The right they use the right tools for the job. You know? That's that's probably the biggest the biggest takeaway from this little journey.

Dominic:

Sure. Sure. Sound sound for me. When when I started the podcast, I and I I don't know if we we should keep talking about that because that has nothing to do with going whatnot. But, I mean, it sound to me always like and I I started to follow this guy on YouTube.

Dominic:

I think it was called like AudioJunkie or something like that. And and the guy build a build a a soundproof room. It's this was like imagine a I don't know. If a four by four four four feet by four with with audio isolation and whatnot, and and he was entering that room, well, quote unquote, with with a computer in there, and the sound was crazy. And I was like, I need that.

Dominic:

But but yeah. Of course of course, that that's way out of my league. I'm I'm not a manual person, of course. So the cheapest that I could do was was buying those, like like you were saying at the beginning. This is is the first time that we are doing something visual.

Dominic:

So you you did not saw my my setup. So just those are just, you know, blankets, and I have on my wall all around my my office. I have those I don't know. Let's say two by two audio how do you how do you call that? Audio it's like a piece of wood with with some and I I don't have the word in English.

Dominic:

Whatever it is, it absorbed the reverberation and whatnot, you know, and yeah. It's it's crazy. It it makes a huge huge difference.

Morten:

Yeah. Yeah. I I don't really wanna build, like, a shed or something where I can proper do all of that because my wife will not allow me to to probably soundproof this apartment. It would also probably be a very expensive adventure to to try and get these Finwalls into something that that is actually working for a studio.

Dominic:

Yeah. I'm I'm lucky to have an external office, so that's not you know, we we own school large our our kids all all all their, you know, high school and all through high school and whatnot. So at some point, I was I was in the house and they were they were there, not not very often, but when they were, I mean, I I could not concentrate and whatnot. So, yeah, I was I was lucky to build an an external office. So I'm I'm very very quiet in here.

Dominic:

Nice. Yeah. Let's I mean, let's talk a little bit about Go, I guess. And or or, you know, some some tech and whatnot. This last week was was interesting for me.

Dominic:

I I'm near the how can I say that? You know, I'm I'm I'm near the the stage where I will be fully using all the features of static back end in the product that I'm building, which I'm I'm starting to to feel more and more interested and confident about static back end. I I I I know I I might have a a kind of drop two or three weeks ago and whatnot, and it's it's interesting because now the the last piece that I'm I'm going to use is the, you know, all the the real time communication. So between some some user of of a certain app, you know, you you could have, like, I don't know, collaboration or messaging between them and and whatnot. So that that's the last piece.

Dominic:

And yeah. And and that's nice because because the the the thing that I used last week was the the scheduled task. So static back end has this this feature where it's it's like a you can you can think of it like like Chrome in a sense, but you can run server side function or you can run some or or just call some HTTP endpoint and whatnot and and things like that. So so basically, running some background task on the server at a certain interval, and and that was great. That was really great.

Dominic:

Oh, yeah. Oh, yeah. Really. It's it's coming nicely. It's coming nicely.

Dominic:

So so let me give you a concrete example of what I did. So I have this this CRM module in in the SaaS that I'm building, and at some point, I wanted to have it like full text search for having a central search in the app. So there there there's a couple of person. We are we are now like four or five that are using the the product now, which which is coming, like, you know you know, quote unquote nicely. It's not bad.

Dominic:

But I wanted to to backfill, if you will, all the contacts that that were created in all the apps so far. So I I, you know, I I took the CLI and I I build a function to to run once. So that function was executed with with all the privileges. So what it means is that it can access all the all the accounts, if you will. So all all the contacts from all the accounts because I am the owner of of this application in static back end.

Dominic:

So now I I have a a certain token that lets me let me do database operation on behalf of other user of that application, if you will. And that that started to make a lot of sense. You know, the the this feature is there for a long time because let let me let me back a little bit. The the the permission the permission scheme of static back end is by default, if you don't have any custom permission on the on the database table, if you will, The creator of the record as all all, you know, obviously can read and write. The same user in in the same account as the creator can read, and every other authentication authenticated user cannot do anything with that.

Dominic:

And and, know, that started to to make a lot of sense. And I I know when I talked to with the founder of Supabase at some point, they they mentioned me that the the permission scheme or how I am handling permission was pretty elegant. They they were they they do have a a row base permission as well on their on their passgres. You know, Supa base is mainly just, you know, something on top of Postgres. But I, you know, I went one one step further with something that is very very similar to how Linux file system works.

Dominic:

And and yeah. That that that that all started to make sense at some point because now I I was creating this function which ran as the the root user which which bypass, if you will, those permission because I needed to, you know, grab all the contacts for all the accounts and now create the the full text search index, which was pretty great to see to Sigrun. So that that that was one feature that I use of static back end last week, you know, via the CLI. So all all of this was done, you know, without any GUI or any anything like that. So I I was able to deploy, you know, deploy the function.

Dominic:

So I run like back end function, create, and now I pass the the source, which is which is like a JavaScript file because server side function on static back end run on a special runtime like I was explaining, and and I I mean, yeah, it's just beautiful. And after that, I added a a function which reacts to when someone creates up or update or delete a contact in their account. And now this function is triggered anytime that that is that is something that like that happens. So I can, you know, I can sync the full text search index. I mean, yeah.

Dominic:

It's just it's just exciting when when when you see all of this coming coming to life, I guess. I I just I I don't know. I I have a small regain of energy towards static back end. You know? This thing this thing was great.

Dominic:

And, yeah, I'm I'm just excited, I guess.

Morten:

That's nice. And then what how how did it go with the client you onboarded?

Dominic:

Very good. Very good. Yeah. Yeah. They paid.

Dominic:

That that's that's already a good thing. Yeah. I I when when the Stripe confirmation entered, I was like, oh, I I should post that on on on socials, but and I had some time, was like, oh. Anyways, no. Every everybody is is doing that.

Dominic:

So and I'm I'm afraid that the next one will be will kind of be long to get. I don't know why exactly, but but, you know, the there there's some other in the pipeline. It's not I don't know. Yeah. I'm I'm I'm just I'm just eager to reach, I don't know, like, 100 or or $500 in MRR and things like that, but I I don't know.

Dominic:

I don't know where where for that particular client, yeah, it it was great, but they did not open the the gate yet.

Morten:

So okay.

Dominic:

I yeah, I asked them you know what because because like I was saying they they are using this I don't know what to call that you know that they don't handle shipping and and you know trading the boxes and and things like that. So it's a it's a third party company that do that and we, you know, and, you know, we we send them a I don't know, like an Excel file with with a zip file of all the PDF of the of the packing slip and whatnot. So that that's pretty great, but yeah. I advised them to do a small test. So so last week, they they had a, you know, multiple $100 of of orders, which which was which was still it's impressive when you are looking at someone that do have a huge audience.

Dominic:

Yeah. So that person just, you know, went in in in a in a three or five minutes range. They posted a message and they they delete the message. And with within that window, they got like $500 worth of orders. I was like blown away.

Dominic:

It was like, imagine if you if you leave that message. So so yeah. So so it it will be today as well. So today today will be will be an interesting day because they are opening the gate. So Nice.

Dominic:

They, you know, they will receive between zero and, you know, x amount of thousands orders. Not money,

Morten:

but orders.

Dominic:

So yeah. So it will it will be it will be a good first test for I I won't say scale because, you know, that that that's still nothing. I I I'm pretty sure that Go will will handle that, you know, no worries. But it's it's all the small things. It's all the small things.

Dominic:

So so they they received a couple of feedback and and video, you know, people had difficulties with creating an account during checkouts and whatnot, you know, typical user, you know, not technical user behavior, if I can say that. So so may maybe the application is not that easy or that so, you know, for example, someone just were were in the checkout phase and they I I don't know. They they they click somewhere in in their phone and now they they are in a state where I I I did not really anticipated that someone would exit exit the checkout process and return this. So, you know, those small things that which which I I would call, you know, real production problem. Real user production problem that you as a as a programmer, you don't really think about when when you're building your application.

Dominic:

So so yeah. So this is where we are. I'm I'm pretty confident today. But, yeah, I'm I'm very happy that that, you know, I I finally have finally have a a a real customer because my my wife is using that. So so she have this this agency and whatnot, and and, you know, they are processing order not orders because she she's doing invoices and proposal and whatnot.

Dominic:

So that that's another part of the of the application. And yeah. This is working. Yeah. I'm That's cool.

Morten:

Yeah. Yeah. Yeah. Yeah. That's cool.

Morten:

This this is It's also Like, it's also where you you like, you need real users to test out things. So they're like we love to do all these kind of planning site, and then some user user say that's like, this is broken. And I was like, what are you talking I I had my dad check out my checkout process for my course as well at one point, and he just couldn't go through it. I was like, what what do you mean? Like, what do you mean?

Morten:

You just click three buttons and then you're signed up. But it's also because you sit in this product for so long. Right? So you know it by by the back of your hand. So, yeah, it's always

Dominic:

Oh, yeah.

Morten:

It's always good to get those those experiences in because it always results in a better product at the end.

Dominic:

Yeah. And I and I think we don't really we we don't really put enough efforts into the first onboarding process, you know. And I I say we, I I mean, programmers that are building product because this this is, you know, this is where where it's at. You will lose a lot of customers in in the first. And I know that my product is is not easy yet for sure.

Dominic:

I'm trying to, you know, I I have this this floating button at at the bottom right where they can click and and there's a context contextual help. But, you know, nobody's going to click on that. So for me at the moment, I'm trying to focus on having, you know, finding maybe ambassador is is this weird word, but let's say let's say other agencies that that will want to to deploy their their clients on there or want to build, you know, for for example, I you know, we we have someone else in the pipeline. So it's a it's a it's a some something regarding you know, when when kids needs to have paper to to prove to the school that they need the the I mean, when when we are not talking about tech, I have so much difficulties finding my words in English. But but, you know, to to determine if someone is dyslexic or autism and whatnot.

Dominic:

So anyways, so so they are very interested because they need they need a phone. And I do have a phone system in that thing, and they need to to send invoice. And now they they they are interested because now they would have the website there, the CRM there. So so finding people that that's, you know, have already a relationship with with with these small businesses will probably be easier than me trying to to run after all of them without having any kind of relationship. So I've built like an affiliate program already in in the app.

Dominic:

So any anytime that someone finds someone, they so so they each time that their their clients pay, they they receive like 20% and whatnot. Mhmm. So that is something that I'm I'm I'm I'm thinking that this could this could be something. So that's another channel that that's what I'm saying so far. Nice.

Dominic:

So yeah, instead of instead of me trying to, you know, to find all of the customers, I would I would I would love to give some money to to some some agency that already have, you know, connection with with, you know, people in small businesses that would need such such a product. Because so far that that's what we are hearing the the you know, the support that they are getting on platform like Squarespace and Wix and whatnot. They they you know, it's it's just it's just not there. So No. So yeah.

Dominic:

This this is this is what what I'm offering in in Quebec as well in French. So that that to me that to me is is is something I should have done, like, twenty years ago and whatnot. I've I've always I've always like blocked myself because we are so small in here. But but that that's a niche, so that that's a natural niche niche in fact. So so that, you know I don't know.

Dominic:

We will see. We will see where where we are. So I I have a I have one paying customers at the moment.

Morten:

So That's amazing.

Dominic:

Yeah. That's

Morten:

nice. That's the big step to get over. Right? Like, it might not sound like a lot, but it is it is it is a lot. You know?

Morten:

So that's really cool, man. Congratulations on getting Yeah. On getting the first the first step on the road.

Dominic:

Yeah. Hopefully, they they were still there next Monday, and the the server will not explode today because that that was their concern. What what if what if I have, like, 3,000 orders? I was like, well, that's not a problem. 50.

Morten:

No. You

Dominic:

know? 200, 500,000, I I would I would be extremely nervous, but, you know, 3,000, we we are good.

Morten:

But that's also like, I I've encountered it a lot of times when, like, talking to clients or stuff like that. Like, how do we deal with this? It's like, you're good. It's fine. You're not Facebook or something like that.

Morten:

And that's a good thing because it allow us so many lazy solutions in a way because, I mean, first of all, we're using Go. It can handle a lot. If you spend like a thousand dollars on serverless or VPS or whatever, you know, you're gonna be smooth sailing until, until you can hire a person to just fix the infrastructure. Right?

Dominic:

Did you say 1,000 or 100?

Morten:

Like $1,000 A thousand dollars and you are good for a long, long, long, long time. Right? And in the grand scheme of things, for a lot of businesses, a thousand dollars in infrastructure is not

Dominic:

Oh, yeah. But but but yeah. Even even that, you you can you can scale a lot. So I I I don't have much redundancy at the moment. So this is this is one aspect.

Dominic:

But, you know, as soon as I have, let's say, a couple of of clients that that would pay for that, so I would I would just just, you know, just bump a new server. So at the at the moment, what I like to do myself is first, I I take a floating IP on DigitalOcean. So that that's all that's already saved me once. So what what it what it means is that all my DNS binds to the app to the IP. If anything is to happen to my server, you know, I just provision a new server and and boom, just move the floating IP and and my my digital server broke last summer.

Dominic:

And I knew that because I, you know, one one customer called me because it's not it's I'm I'm hosting some some old consulting customers on on on my my droplet. And they called me, and I was like, oh, I know. I I know.

Morten:

That's the worst that's the worst kind of calls.

Dominic:

Yeah. Oh, thank you very much for notifying me, which I should have received a automatic notification, but so try to log in to the server. Everything you know, nothing works on on the UI. I don't I don't I don't recall exactly, but let's say the the button is is like disable. I cannot open the server.

Dominic:

Try to open a ticket and I I I said, you know, after five minutes, I said, screw that. I'm I'm just I'm just taking the last backup or snapshot whatever. I just boot a new droplet and boom, I I remapped the floating IP and I was I was up. I called I called the the customer and say, oh, I'm sorry. We we are we are back.

Dominic:

So all in all about, you know, ten minutes age, you know, top. But but, yeah, that that is that is where I am at the moment. So I'm I'm using the, of course, the managed database. And and as soon as soon as I'm I'm starting to have some kind of revenue, I I will I will just just use a second at least a second instance so to have some kind of redundancy and whatnot.

Morten:

Nice. Yep. Alright. A lot of things?

Dominic:

Oh, yeah. It was it was great. It was it was nice. Static backend is cool. I mean, this yeah.

Dominic:

Yeah. This is this this is great. And now the the last piece will will be the real time component, which I'm going to use this week and next week during development. So

Morten:

Nice. Yeah. Yeah. I actually have a bit of kudos. Is that the right word?

Morten:

Not kudos. Kudos. I thought I said it right way. Because last week we spoke about my telemetry setup and you're like, dude, just just use Postgres. Right?

Morten:

So I just use Postgres. So I like, yeah, thanks for reminding me that simplicity is often the way to go. So yeah, now I am actually storing node exporter metrics just in Postgres and just doing twenty four hours retention window on everything. And it's only my stuff that's running on there right now, so it's not gonna So, explode. Yeah, I I took your advice to heart and and implemented it, and it took, I don't know, thirty minutes.

Morten:

That's it. You know? So have you

Dominic:

used any anything, or is the raw Postgres directly the

Morten:

It's just raw progress. Yeah. Yeah. Postgres because I'm

Dominic:

got Nice.

Morten:

Whenever this becomes, quote, unquote, serious volume, I'm I'm I'm gonna do the the click the click the house click house database setup. Right? Oh, yeah. But also

Dominic:

I I think that's a great decision that you took.

Morten:

Yeah. Yeah. Also, because I I would really want to get, again, quote, unquote, managed databases into the products. So this just allows me to push that decision away for a longer period of time.

Dominic:

Are you? So The the the managed database seems to be a huge I mean, the yeah. Have have have you have you managed a lot of database so far? Because you you need you need to have sharding at some point, you know. There there will be client that will want to have multiple read read instance and and a master write and things like that.

Dominic:

You know, it's it it seems to be very involving, you know, more than what it looks. To me, I don't know.

Morten:

So I think this is a product description step as well because the plug rate mainly aims towards startups and and s m SMBs. S and Ps. Right? So the the the the scale of things shouldn't really reach that point, but those things are necessary. So it's also not gonna be managed managed.

Morten:

It's mainly getting the basics down to a secure server that is running on, getting backups, and getting recovery in, and then getting, like, maintenance. And, like, those are the main things. And then I cannot I can start to play around with adding PD Bouncer. I was just well, I forgot the name. I was also researching how to do high availability.

Morten:

I could do that down the road, but the main thing was being like, here is a database server that is set up with backups that you own, and you can always move if if you get to the point. Right? Because I think if you get to the point where the database gets so big that it becomes real in a sense, Yeah. Yeah. Then I don't think you want to be on my product, at least not for now.

Morten:

That's not the aim. The aim is not to be able to have huge companies. It is aimed at a certain level of, like, you can run profitable business on top of the project. But if like, my guiding company thingy is always Laravel Forge, but Laravel Forge doesn't run on Laravel Forge. Right?

Morten:

It runs on AWS infrastructure. So they also progressed towards that point to be able to offer this catalog of services that they have because they also have managed databases. They also have their own level four databases, which basically comes from the fact that they have so many servers on AWS that they get special deals. Right? This takes time.

Morten:

I'm pretty sure when Taylor Ordwell did this in the beginning, they also did not have quote, unquote proper managed databases like they they have now. Right? So so I have run my own databases for a long time. Right now, I am on a managed database from DigitalOcean predominantly for dealing with backups, but this is gonna be gonna be the next gonna be the next step. And then, you know, duck feeding, duck fooding all the way until it that part is is is stable, but it's a little bit down the road.

Morten:

It allows like, the whole change from just doing telemetry data in Postgres allows me to to get to that point. And then, of course, OpenTelemetry will have to wait a little bit. Maybe I could do that in Postgres as well. But because I have locks, and now I also have server observability, and that's kind of the two big things, I also introduced health checks so I can do continuously health checking. So most of the things you want in application platform as a service is there to make to ensure that your application is running, that you ensure that it's deployed correctly, that what version is running.

Morten:

I can also do a little bit of latency calculations on the health check endpoints. It's not what you wanted. You can't really debug. Right? But at least you get a little bit of, like, how long did this request actually take me?

Morten:

Again, then, you know, there is something with with with where in the world the customer server is and all of those kind of things. Right? But the basics the basics are there for, like, managing applications now, which is also really exciting. Really exciting.

Dominic:

So who's who's responsible to do to do this health check, for example? Is it is it like the the the agent that are installed on the servers?

Morten:

No. The so we have just two parts. The the the agent that's running on the server has its own health check that I'm then that I'm also checking, and then the users are responsible of providing me with an application endpoint that's that they want to check for health.

Dominic:

Okay. So so your your service is going to to pull that that ur URL and and check for HTTP status, for example?

Morten:

Yeah. Yeah. Yeah. Okay. Okay.

Morten:

So right now, it's it's very, very naive implementation. It's literally just give me an endpoint, give me the HTTP methods, and give me the expected response code. That's it. And, of course, that can be expanded upon. And another important note is Deploy Crate's own uptime monitoring is not done with Deploy Crate.

Morten:

That is done with Uptime Robot right now. Okay. So I don't I don't do the GitHub trick of just reporting my own incidents. So everything is good, bro. Trust me.

Morten:

Yeah.

Dominic:

Nice. Okay. That's cool. That's cool. Yeah.

Dominic:

So but but what about, you know, self hosting users? Are you going to offer that as well for them?

Morten:

Self what do you mean with self floating users?

Dominic:

Well, if I if I'm if I'm going to because from what I understood, it it will be possible to use the product without a subscription. Right? Or maybe I'm wrong there.

Morten:

They will be able to the the agent that is running, they will be able to interact with that themselves.

Dominic:

So Okay. Okay. Okay.

Morten:

So they would so all the management part of the server, they would have to deal with themselves.

Dominic:

Okay.

Morten:

And integrate with the endpoints. There is an OpenAPI spec. It has the basic endpoints of grabbing metrics, of checking for updates, of applying updates, self upgrading, deploying, changing routes, all of those, deleting, start stopping, restarting applications, all of that is integrated into the operator that's running on the server. So if they don't wanna be on the platform anymore, they can just cancel their SAP and then, you know, integrate with the API themselves if they wanted to.

Dominic:

Yeah. I got it. So what what would what would be the, the flow? Let's say let's say I want to test your product. So I I guess I I I open an account at at at your service and I I, what, I upload my SSH key, for example, and and I say, you know, those are my servers IP and please please do your magic.

Dominic:

I

Morten:

am not dealing with existing servers right now. Okay. So it's only new servers. And I wanna get to a point where I can onboard existing servers. But I do whenever we I onboard a new server, do a lot of configuration as well.

Morten:

Server hardening, changing ports, fail to ban, like, the basics is getting done. Right? We also rely a lot on KADI. We deal a lot with, like, the KADI admin API. So so when you onboard, you will get prompted to create a server.

Morten:

You will give me an API key to Hetzner or DigitalOcean. Currently, that's the only one on support. You will select the SSH port you want to open. It then goes in, configure the servers configure the server, install the agent, and then you're basically ready to create applications. And right now, you can connect your GitHub account and pull binaries.

Morten:

You can also connect Docker Hub or DHCR and run stuff in Docker if you want to. I force currently that you have a staging and production environment because the Heroku model was a lot of the inspiration for this as well. You then upload your your environment value variables that gets encrypted, and then you basically add server targets that you want to deploy this application to, and then you're off to the races. Nice. Okay.

Morten:

Okay. Okay.

Dominic:

So when you say binary, I guess it's after some kind of GitHub action would have run, build the application, and now what? Tag tag your service, say, hey. This binary is here or directly upload upload to your service?

Morten:

Yeah. So currently, it's done through webhooks or not really it's not really webhooks. It's more like an API. So the way that Deploy Grid gets deployed is whenever I push to master, it triggers a new build, and then it releases new assets, notifies Deploy Grid about a new release. It then pulls the binary onto the target servers.

Morten:

It's so I use blue green as your downtime deployment for for the staging and production environment. It will spin up the new binary on the on the server, verify that it's good, and then switch traffic in TADI, and then you're good to go. So you can you can just point to whatever like, the environment you set up will have the details of where the the artifact or the asset is. Pull it down on the like, create, like, a link to download it. And right now, it's, like, done through GitHub.

Morten:

Right? But I also wanna do Cloudflare and stuff like that. Download the link. Send it to the operator. The operator downloads it.

Morten:

It creates a backup of the current running instance, spins up the new binary in the if you're using blue green, it spins up in the in the other the not running slot, verifies that it's running, switch traffic, cleans up the binary. And if all of that fails, we spin down, and you you will get a notification of the deployment failing. Nice.

Dominic:

Yeah. Is is caddy already have something? When you say when you say you know, you seems to be mentioning that there has to slot, what what it means. So so is it in CADI world that I I can either send the traffic to a or send the traffic to b?

Morten:

Is that Yeah. CADI CADI does load balancing as well. So it's just a weighted traffic right now. So I just you have, like whenever you do zero downtime, you have blue green. So the the one that is running is receiving all of the traffic.

Morten:

And then when the new one is running, it's just a call to the admin the Kedi API that switches the the traffic over. So you will the customer will be in charge of graceful shutdowns. Right? So they they will be in charge of of gracefully shutting down the services, and then we whenever that is shut down, we we switch the traffic over. Right?

Morten:

And it's it's just a weighted weighted traffic switch.

Dominic:

Okay. But, you know, for for example, when when I'm sending traffic in in CADI, I'm I'm using the their proxy thing. So I'm I'm calling an IP address with a port. So what it what it means for you? So when when you're deploying the green version, what what it is exactly?

Dominic:

Is it like a new port? Or

Morten:

Yeah. Let's just stick with blue green. Whenever you create the application, I create two systemd services, and I'm a little bit trying to nail down the terminology, but it's like fingerprint mess instances. And especially if you do binary, you need two ports. Right?

Morten:

You need eighty eighty, eighty eighty one, something like that. One of them gets spin up, validated that they are running, and then the traffic slot in in Kedi gets switched to that that that address. And it's it is very low key. It's literally just, what is it called, home home port, like, 127 blah blah blah port. Yep.

Morten:

Okay. Yeah. That gets the traffic right. And then the other system d service is just disabled, and then the switch will go through the process of spinning that up, validating that it's running, and then switching the traffic. Nice.

Morten:

And then you get all of that in the main application so you can see, like, what routes has what ports. So it's literally self updating binaries. It's the same thing with with with the operator that is running on the server. Right? They they self update and then spin back and can can kind of deal with it.

Morten:

Yeah.

Dominic:

So each time you're deploying, it's it's automatically knowing that, okay. Yeah. My eighty eighty one is running now, so the green will be eighty eighty, and next time it will be the other way around. Is is that it?

Morten:

So I I I just do I just check which service is running, and we only have one service running at a time. Oh, yeah. Yeah. Yeah. And then from that, it can also from the service name, we know the port that is running right because this is what the user will provide.

Morten:

And then it's also it's it's their responsibility to have, like, either hard coded that that port in the application or provide an EMV variable with that port. Right? But if they if I say eighty eighty and eighty eighty one for those two, then then it's what those two services will be listening on. And then we can detect which one is running, switch the traffic to the one that's not running, validate us up, and then we we we are good to go.

Dominic:

Interesting. Interesting. What what about a system that needs to run any kind of comments before a deployment? And I, you know, I think, like, Django, for example, or Rails, which will need to do any kind of DB migrate or whatever it is. So how how would you how would you do that in those case?

Morten:

I have not built in migration flows. Again, if you take back to at least how I used to use Heroku, this was like you deploy, you release, like you need to figure out your own deployment. Right?

Dominic:

Yeah. Yeah. Yeah.

Morten:

So if they wanna run migration up on whatever an app start, you know, feel free. Whatever I do is always, like, apply the migration myself, safely release, and then make sure that whenever like, if it's it's something that could break, you know, you have to do the migrations in steps to get into the state where I can migrate, release, migrate, release. I probably will not allow them to I mean, they could, the stats server. They can SSH in and do whatever they want to. Maybe that could also be part of it.

Morten:

A part of the process, I'm not I'm not against opening up for that if if if it's something that users want. But now we're more so we're like, we need to need to get the users on right and actually hear what they want. But it's Yeah. It's definitely not without without out of the question. I am exploring a sidecar concept.

Morten:

This also goes into the database so you can kind of, like, define a sidecar to your to your environment that it's running. And then you could probably do something there during the deployment process. If you know we need this sidecar loaded with different kinds of things, then that becomes a possibility as well.

Dominic:

Nice.

Morten:

Yeah. Okay. But, yeah, it's getting to a stable point now. I actually, I opened up for alpha users on the website. People can go in and say, hey, I wanna I wanna test it out, at least apply it to test it out.

Morten:

So I'm I'm opening up for free free users of the product while it's still in in alpha beta phase. But it's just you get the big plan, and you can do whatever you want while while it's still getting shaped. Yeah. So also getting to an exciting place right now, but I also need to to get some users on the the platform now.

Dominic:

Do you have an idea about any kind of pricing yet, or you're not really there at the moment?

Morten:

I'm gonna do, I think, $5 for the hobby plan, 19 for the medium or professional, and then I can't remember what I called the big one business, 39 that includes x amount of servers, and then you get access to different levels. So in the small hobby plan, you will you will get access to only one team and one team member. You get access to a very limited data retention window, and then it basically just increase from there. And then you can add servers on for an extra cost. So I'm gonna be doing like, you can do $5 and then $5 for next server and next server and next server.

Morten:

So that is kind of the the pricing model right now where, yeah, just putting it out there and then seeing Yeah. Yeah. Yeah. Seeing if it sticks right. And then on the on the big plan, I'm kind of planning on doing cheaper extra servers if you need them.

Morten:

So you get, like, x I think it's, like, six servers right now you get on the on the big plan. Yeah. But it is very much up in the air right now. I'm I'm That's cool. I think that's that's what you said last week.

Morten:

It's not really about the money right now.

Dominic:

It's

Morten:

more You're about getting feedback. Getting feedback. Right? Because I I do think this is at least this is what I wanted to have for my own projects and my own small businesses to to run on, whereas, like, it's really, really, really focused on running applications on a platform and getting the tools to monitor and track them, which is is there right now. I I still have some some work to do around backups, applying upgrades, and doing those kind of things, right, in a secure manner.

Morten:

But but, yeah, the core features is actually there now. So that is that is quite cool. So now it's, like, a lot of content and and hopefully hopefully convincing some people to to give it a go.

Dominic:

And and how does the users consume these these logs or or the telemetry and whatnot? Do you have any kind of CLI, or it's all on the UI at the moment?

Morten:

It's only on the UI right now. So for now, I just give people access to direct directly to the logs that is running on the server. So they like, whenever, you know, it's running in system d, we can use journal CTL

Dominic:

Mhmm.

Morten:

Pull the logs from there, and then I showcase those in the UI. Right now, it's either just static or live pulling of the locks. I am gonna add something where you can add, like, duration or how long how long ago you wanna how long back you wanna look and those kind of things. But for the the proper lock setup, I I would need probably the click based telemetry data setup so I can probably search them and and and count, like, errors and, you know, all of these kind of things. Yeah.

Morten:

But for now, at least that is locked. And now those locks, I don't limit because it's their server. It's just running on their server. Right? It's only when we get to the proper telemetry setup where I will limit them to time range that you can look into simply for data storage optimization.

Morten:

Right? So you can just look at however long you wanna look at your general CTL servers. Right? Yeah. Yeah.

Morten:

Yeah. Yeah.

Dominic:

Oh, that's cool.

Morten:

So it's it's all UI, and it's it's it's the bare bones. Is there a secret management also because the DHH and and Basecamp did did a tool as well for for spinning up spinning up servers where it's, like, it's all in the CLI, and and think that's

Dominic:

that's Are you referring to Cam Camel Camel? Something like that.

Morten:

It might be Camel that they edit the CLI. They updated this. He did a demo not too long ago, which was probably Camel. Okay. Yeah.

Morten:

Where, again, you use your provision of server. You deploy it through it. And that is also like a a a good model, but then you come over all the, like, the monitoring, the maintenance, the secrets, the rotation of secrets, and all of those kind of Yeah. Elements that are starting that at some point you you need to you need to deal with. Right?

Morten:

So, yeah, that's

Dominic:

Oh, that's cool. That's good. It's shaping up. It's

Morten:

It's it is shaping up. Yeah. So that's also I mean, I've now is getting more around the UI, which is nice to not have to the whole deploy the the operator on servers and then monitoring and then three like, it's just it's a lot of steps compared to just, you know, doing some UI work, so that's that's really cool.

Dominic:

Yeah. Yeah. Yeah. Feels like finish finishing touches and whatnot, I suppose. Yeah.

Dominic:

Yeah. Alright. So Morten is looking for for users, so if anyone wants to.

Morten:

If you wanna have run your own servers without getting completely wrecked by the serverless builds, then, you know, it's it's another option in the in the space.

Dominic:

Nice. Yeah. Cool. Have you have you heard of zero length? So so Shay Shay posted that on on the on on the channel, which if you are not there, it's go podcast on the go for Slack, by the way.

Dominic:

I was not aware of that, to be frank. And when I when I saw the post, I was, like, very curious. It seems to be a language for agents, which immediately when I when I read that in the Slack channel, I was like, oh, no. We are we are we are there. I don't know.

Dominic:

It's it's feel very, very wrong. I don't know what they are doing. I think it's it's Vercel that that are behind this, and I was Yeah. Oh, come on, man. Let's go.

Morten:

I did read about it.

Dominic:

Everyone is creating a language at the moment. We have enough of those. I'm sorry. Wow.

Morten:

But it also feels a little bit like reading tea leaves. Like, what are you like, how would Vessel actually know what a language for agents should look like? You know? Does Anthropic know? Does OpenAI know?

Morten:

Does any of the Chinese model companies know? I don't know. I I don't know. It's I mean, why if if this was a thing that would actually benefit, wouldn't wouldn't like, why would the big like, why would Anthropic acquire

Dominic:

Yeah. Exactly. Bond?

Morten:

I I it's

Dominic:

No. No. No. Exactly. The yeah.

Dominic:

That that that's the thing. So I'm I'm a little bit tired of this kind of marketing, to be frank. I'm this noise around, I don't know, claiming things that makes no sense.

Morten:

Yeah. It feels like it's a lot of it's just a big cash grab, and it's just different angles to to get the cash grab. And I I think the the the what we've seen also well, one of the the discussions in the Slack channel was the efficiency of something like Ruby on Rails Yeah. With with these LLMs. Right?

Morten:

Ruby on Rails seems to be a very efficient language to use with LLMs. There's a lot of training data in the pretraining. There's a lot of data in the pretraining dataset. It's very terse and efficient as as it is. So do we do we need a new language?

Morten:

Are you actually gonna benefit from it? That's that's

Dominic:

Yeah.

Morten:

I don't know.

Dominic:

But but Ruby is so slow, man. I mean

Morten:

Then again, that's another thing. Right? It's it's very

Dominic:

yeah. Yeah. It's a So that I mean, it it it might be quick to to to have your coding assistant write write some code, but how you know, it's when when you're deploying that, it's that and and it seems to be it seems to be well, at least for the two project that I worked on, which which are very, very light, they were old Ruby on Rails project, and and you you tried to upgrade that from one version to the the other, and wow, this is this this seems to be pretty involving the the update path.

Morten:

Yeah. I was I think the the main point was also around the okay. Find the creator new language for for agents, but it's not in the training data. It's not in the pre training data. It's like Yeah.

Morten:

What what are like, I don't know. Do we need to wait five years for this? There's enough data. I have enough code in this language that is I don't It it No.

Dominic:

What what what you don't know is that they will they will launch their own their own LLM in a couple of weeks, and they have the training data of their new language in there. That's the thing.

Morten:

Yeah. But I think we we get to the point where it's like it's all circular, like the AI poisoning themselves because if the if the LLMs is just generating based on what is already out there, then we don't get you know, it's just a repetitive cycle. So if it's LLMs that generates the serial encode that then gets used to train on, maybe it works, but I'm not too too hopeful on that part of the, yeah, the the LLM setup.

Dominic:

No. No. No. Yeah. Totally.

Dominic:

But yeah.

Morten:

But I no, sir. Go.

Dominic:

No. No. No. Was it yeah.

Morten:

I was just saying, like, I I did because we also had a talk about trying out Ruby on Rails with LLMs, and I did I did do it. And Yeah. Yeah. It's it's it's yeah. It generated a lot of code, and it works.

Morten:

But I it's

Dominic:

But there there's so many convention. I I I don't I don't I don't I'm I'm not surprised. I mean, it's it's you know, you use the tooling. You you use you use what everyone else is using. So the, you know, the standard are pretty strong in there.

Dominic:

So I'm not I'm not surprised that you can but writing the code is not very long as well. So, I mean, it's it's normal that the the agent do it quick. It it it always was quick to create a a Ruby on Rails application. Yeah. Even even when we were writing code before.

Dominic:

You

Morten:

know? Writing code by hand.

Dominic:

Know these days. These old days.

Morten:

And as of right, the the most sites I built, the the thing I always run up against is my own design skills. Like, I'm trying to create a landing page for Deploy Credit, and it's just so simple because I don't know. I I, like, I'm trying to make it look pretty and nice, you know, but that is like, you and then for, like, the the Ruby and Rails, I was doing it for my consultancy side, and it looked like crap. Like, here's a picture. Recreate this.

Morten:

It looks like crap. And then I know, like, Anthropic has cloth design and and whatever. Right?

Dominic:

But Yeah. Yeah. Yeah.

Morten:

It's my problem is not writing the code. That is, like, it's, like, making it look good. It does always where I'm struggling because I'm more focused on the back end and the systems and the infra than I am on the actual front end code. And and I I maybe they do a good job with React. I've heard they do a lot of good jobs with React.

Morten:

But

Dominic:

Yeah. Oh, yeah. Well, I I did not wanted to touch the UI. So, yeah, I'm I'm I'm using that for the UI. It's it's it's good.

Dominic:

I mean, it uses Tailwind. It it seems to be at least for for the kind of people that I'm targeting myself, they, you know, they find it they find it okay, I guess. But Yeah. Yeah. But again, it depends.

Dominic:

I'm I never used it to to create a a marketing site. So I don't I don't know. I I would guess they they all look the same at some point and whatnot. I I'm not I'm not you know, I I never used that to to create HTML like that for marketing website.

Morten:

I mean, the the first the first version I did of Deploy Grid was I just need a landing page. So that was, I think, with with Claude, and it has the typical purple gradient Yeah.

Dominic:

Yeah. Yeah.

Morten:

Yeah. Look all over. And it was so clear that this was, like, we need to move kind of side. So I got I got all of that pulled pulled out now at least. So that's something.

Morten:

But Yeah. I do think they do it like those old, like, Tailwinds three or two version because, like, one of the Tailwind site was really huge on this purple color and purple gradient color that all the LLMs now use with when you just give it, like, quote, unquote, vanilla. That sounds wrong to say, but vanilla tailwind. Right? It always used these gradients because that was that was what it was thought.

Dominic:

Yeah. Yeah. Oh, well, at at least you don't you don't you don't have to do it. No. But but, yeah, again.

Dominic:

Yeah. I I was I was lucky with with the product I'm building. I I I I bought the the UI at some point because the product was existing. It was it was on the community. I I I talked about that community multiple times in in this podcast.

Dominic:

So someone had had a product that because because at first, this product was was in the customer communication space. Think like intercom or user list and things like that, you know, though Yeah. You know, it was it was I I pivoted from there, but but I kept the UI. So so far, it's good. Was created by a human.

Dominic:

Still, you know, feel a little bit dated seem it seems, but but, yeah, I think I think it's good for now.

Morten:

Yeah. Yeah. Yeah. Also think, like, the value always comes first in this thing. Like, the the the positioning and the value, it can still look like if people are still using Amazon.

Morten:

Right? And that doesn't look

Dominic:

Yeah.

Morten:

That does look good, right? I think that's the classical example of build something that provides value and you can skimp on the design for some time as long as it's sort of intuitive.

Dominic:

Yeah. Yeah. Yeah.

Morten:

Yeah. I think that was, like, with Deploy Credit, I had a friend try and sign up for it, and he didn't understand it because I used terminology that he didn't equate with what like, he was expecting something like render or Railsway or something like that. And he was like, what is what was what were you using at that time? What is an deployable artifact? Now now I could was it no.

Morten:

I can't remember. I used a lot of words where I was like, this makes a lot of sense to me, but it it didn't make sense to anyone else. Right? So Yeah. Yeah.

Morten:

Positioning,

Dominic:

wording Messaging. Yeah.

Morten:

Yeah. Simple things. And that's also one of the things I've been working on is trying to move away from self host to self hosting positioning because that's not really what it should be. It should be, like, infrastructure, an infrastructure product. But if you use a lot of, like, self host in the Yeah.

Morten:

That's what people are like. Why shouldn't I just use Coolify then? Because it's for free, and I can actually self host it. Right? So it's a little bit, like, getting getting it into the right wording and mindset so that it it instantly makes sense.

Morten:

So you have, what is it, one point four seconds or something to to convey your message to new users on the site before they they they they bounce. So

Dominic:

That's that's not a long time. Yeah. Yeah. Well, this this is hard. This is hard.

Dominic:

But, yeah, again, this is something that that can be can be tweaked for sure. At least you got some some feedback.

Morten:

Yeah. Exactly.

Dominic:

Cool, Morten. I think I think we are good. So that was a a video video version. Hopefully, it will work. I don't know.

Dominic:

Fingers crossed.

Morten:

I mean, you can always, like, fiddle a little bit with the file to make it work.

Dominic:

Yeah. Yeah. Of course. Worst case, I will extract the the m p three, and we will see. Alright.

Dominic:

But alright. So the so cool. We'll talk next week, and, by by then, I will still have my paying customer.

Morten:

Yeah. Yeah. Fingers crossed.

Dominic:

Yeah. Alright.

Morten:

Alright.

Dominic:

See you. Bye bye. Bye.

Creators and Guests

Dominic St-Pierre
Host
Dominic St-Pierre
Go system builder - entrepreneur. I've been writing software systems since 2001. I love SaaS, building since 2008.
Morten Vistisen
Host
Morten Vistisen
Contract Full-Stack Developer at mbv labs.
087: func AudioToVideo(input Podcast) (Podcast, error)
Broadcast by