I Vibe Coded a Client Project
S2 #478

I Vibe Coded a Client Project

When people ask me if I still make websites, I sheepishly respond, No. Not officially.

And that's largely true. I have changed the way I do business. I know that running a web development business is not conducive to the type of lifestyle I want to have, right? I always feel beholden to the websites that I'm hosting. Like if they go down while I'm away, uh, I don't wanna be out of pocket. And even though I've always made it clear that I'm not available 24/7, and I've taken on projects that I know don't need to be available 24/7 or, uh, projects that if they go down, my client's not losing thousands of dollars, uh, for every minute it's down, I still feel, uh, responsible for that. it's part of the reasons why I moved out of web development.

Now, the reason that I answer this question sheepishly is because I still do some web development projects. I do stuff for myself, but I also do work for nonprofits when they need it. Um, I like the idea of helping nonprofits affordably.

And so I've done a couple of website projects this year, but there's one I've been working on that, uh, for a number of reasons. I under-scooped. And if it weren't for ChatGPT and Vibe Coding, I don't think I would've been able to complete the project.

Welcome to The Streamlined Solopreneur. A show for Busy solopreneurs to help you improve your systems and processes so you can build a business while spending your time the way you want.

I know you're busy, so let's get started.

Hey, everybody, welcome to another episode of The Streamlined Solopreneur. It's another solo episode coming at you, and it's gonna be all about how I vibe coded, uh, and how it was way more successful than I expected it to be. So, uh, I'll tell you a little bit about the project and the problem, my horrifying realization, and then howVibe Coding saved me.

Let me tell you a little bit about the project and the problem. So this was for a nonprofit. Um, they manage a lot of their work inside of a spreadsheet and like a bunch of tools, Google Calendar, and SignUpGenius, and it puts a lot of work on the volunteers in the organization.

And so we decided to scope a portal based on WordPress that would presumably make their lives easier. And for this first iteration, the data would still start in the spreadsheet, and then we would automatically send it over to WordPress. So, I'm thinking no custom code. 'cause I don't, that's just kind of like the defacto, uh, setting for me nowadays. No custom code, uh, WordPress Advanced Custom Field and Zapier.

And we should be able to get this done. We testing, and, you know, some of the unforeseen, the unknown unknowns, I was thinking this would be a 25-hour project. But a few things started to happen as I began the project. And I'll say from the beginning, I didn't spend a lot of time scoping. Like I didn't spend as much time as I should have copying the project. I made some assumptions about the tools I was using.

Uh, for example, I didn't know that seven years into Gutenberg, advanced custom fields still doesn't have a native way for you to add a block to, uh, a post that includes those fields. You still have to code that custom block.

Uh, Zapier doesn't work with WordPress the way I thought it did. Uh, and Zapier, uh, doesn't work with Google Sheets the way I thought it did.

And so, as I started building, um, I realized that I should have taught, I should have spoken to the primary volunteer who would be working in this portal way earlier than I should have. But it was mostly like the under-scoping and the assumptions about the tools.

And this is like a chronic problem of mine. I assume that this thing I'm thinking about is so obvious that there's no way the software I'm considering doesn't support it. A really good example of this is with Kit, formerly ConvertKit with their subscriptions. There's a trigger when someone becomes a subscriber, but there is no way to know when they churn. There is no trigger when someone ends a subscription, which is crazy to me. Uh, and it's so crazy that in their documentation, and I love ConvertKit, but like ConvertKit commerce is just like a half-baked thing, and I wouldn't recommend it.

In their documentation, they have this automation for, oh, when someone becomes a subscriber, and you know, when someone like pays you in ConvertKit, in ConvertKit commerce or Kit Commerce, I guess, now,
um, you can automatically make them a private podcast subscriber and Transistor. And in that documentation, it says, uh, there's no way to know when they stop paying for their subscription. And so we recommend that once a month, you go and manually and check and remove people from private feeds.

And like, I can just like, imagine, imagine the support person who wrote this documentation like pouring bourbon into their coffee as they're writing it. But that's neither here nor there. That's mostly on me, right? I should verify these features, even if they seem really obvious. I should verify that things work the way I expect.

And so this project taught me a lot about the limitations of Zapier and WordPress and CF. And it's also a little bit my muscle memory, right? Like, I haven't done commercial web development in eight years. I've done my own little one-off projects and small projects for clients, and like mostly redesigns based on WordPress.

But you know, I haven't done heavy lifting in a long time. And so, you know, that it's not like riding a bike that didn't come back to me as easy as I expected it to. And so I start building this, uh, there are limitations to the software that I was assuming, uh, weren't there.

And then there were, you know, some, some, some scope creep ultimately came in, right? Uh, because I didn't talk to the client enough and I didn't understand their workflow as much as I should have. And so, you know, it was something like keying off of a column in a Google sheet to trigger the Zap. I thought that was like a one-time thing, and it's not right.

The status can change multiple times. It could change from one status and change back. And something I learned about Zapier with Google Sheets is that it will only trigger on unique values. So like, I had to build, I had to add a column, uh, for a last modified date.

And then I learned that Google Sheets doesn't automatically support this. Like, there's no way to say like, Hey, this, this column is the last modified column. Anytime it changes at a, like at the timestamp. So, I'm sitting here realizing I'm either gonna have to buy a bunch of plugins and tools I didn't expect to buy, I'm gonna have to write a bunch of custom code, and this 25-hour project is going to turn into a 50 or 60-hour project. And I didn't feel right going back to the client and being like, Hey, I really messed up and it's gonna cost you double what I thought it would.

Uh, and so I started to talk to ChatGPT about, Hey, am I missing? I'm like, am I not Googling the right thing? And going through the chat history, and I did ask it to give a quick summary of what we “did together”.

At one point it said like, I can build this thing for you. And so I said, yeah, okay, fine, write the code. We'll see what happens. And it wrote it flawlessly. And so I said like, Hey, if I give you an upload of my advanced custom fields export, can you use that as the basis for everything? We're right, we're doing here. It's like, yeah, sure.

So I started Vibe coding, right? And so instead of going back to the client or having to hire another developer or writing a bunch of stuff from scratch, was able to use ChatGPT to do things like build an ICS generator that dynamically pulled in the advanced custom fields into a calendar invite. I was able to have it build custom filtering on my custom post type.

Uh, something that I learned was that Zapier, the Zapier WordPress integration doesn't work with custom post types, right? And so, like in where, if you're unfamiliar with WordPress, I know I'm venturing into my old life and the old topic of this show, uh, and so if you're a little bit lost, um, in WordPress you have these kind of default, they're called post types. They are better described as content types.

And so you have posts, those are essentially blog articles, and you have pages which are informational pages, right? But then you can also create these custom content types. And so that's useful if you have something that is not even remotely related to posts or pages. Uh, so a good example is, you know, you have a portfolio content type where, uh, you wanna have some, some special information, right? Like the URL of the project and some screenshots, maybe a photo gallery of the project, and a case study and client information.

And so I created a custom post type for this client for their portal. And I used advanced custom fields to add, uh, that additional information. But with WordPress and Zapier, there's no native support for those custom post types. Even if you enable what's called rest API support and say like, Hey, yes, I, I I want to be able to like get to this stuff.

So I needed to work with Web hooks, right? And go like one level deeper than I wanted to, right? I wanted this to be no code, and now it's low code, and now it's like straight up code, right? So it kind of walked me through the whole thing. It handled a bunch of limitations for me. It wrote features for me that I would've needed custom or premium plugins for things.

And I should say, right, these are things that I expected to be natively supported. And that's, again, that is on me for not doing my due diligence. But, um, there were also like some, some interesting things that had to happen, right? Like there's a, you know, a bunch of volunteers, they're in a Google spreadsheet, uh, or in a, a spreadsheet or a CSV, and we wanted to import them.

And because of the way we were handling users in this portal, thanks to an actual custom plugin, or thanks to an actual like free plugin, which is great, it wasn't a straight, and clear import.
And so ChatGPT wrote an importer for me. Uh, ChatGPT wrote, uh, a bunch of, um, access control features for me. And it, it was, it allowed me to, because of my understanding of WordPress and code, and the project, we, I was able to describe a problem and how I thought it should be solved. It proposed a solution. I tried the solution, and then we iterated on it.

And so, ChatGPT helped me move faster than building from scratch. Uh, I avoided Googling and digging through forums for edge cases and trying code, uh, and then it, it also validated approaches for me, right? There were times where I'm Like, I don't think the thing you wrote is right.

And it explained why it was right. And I was like, oh, okay. All right. Um, well then this is not the right approach. And it's like, right? Yeah. So here's, here's what your, what it seems like you're trying to do, and here's how we should do it.

So, I do time track and I scoped 25 hours without vibe coding. It would've, it would've been probably 60 hours. I just clocked 30 hours. And it allowed me to remain flexible. it also allowed me, this was, this was something that I, I am considering now, but it also made me more agreeable to features that we hadn't considered, but were probably crucial.

You know, there, there was one that, that, um, in speaking to the, the main user, she said like, oh, it'd be nice if it did this thing too. And in a previous life, I probably would've been like, no, like we didn't, we never talked about that.

And that's gonna, that's going to be a lot of custom code. But I typed in the ChatGPT, and it wrote a function, right? ChatGPT probably wrote between 1500 and 2000 lines of code for me. And, uh, I'm, I'm really impressed by it.

So, as a solopreneur, what should you be thinking about? Should you try vibe coding? Again, I'm a Software Developer. Well, I, I have my master's in software engineering. Again, I haven't reasonably been a software developer in seven or eight years now, but I still understand how Code works.

And my estimation is probably similar for Vibe coding as it would be for using ChatGPT to write, uh, maybe like a little bit different. You know, if this was like a big commercial project that had to handle thousands or even hundreds of concurrent users, I would be more scrupulous about the code. I would test it, I would refactor it.

But this is a portal that will have maybe 10 concurrent users at any given time. It's a private thing for an organization of less than a hundred people. And so I'm not overly concerned about the performance.

We're also not hitting the database in any kind of crazy way. Uh, there was one function where it, it did directly hit the database. And I said like, let's try a different approach. You know, there's a lot of custom things going on, and I don't want the site to buckle. So like, those are things that I knew to look for.

But with me at the helm describing the problem ChatGPT was a like, ChatGPT saved my butt here. This project would not be completed in any kind of reasonable way. And I was really transparent with the client too. You know, I'm like, Hey, there were a bunch of things that I didn't realize at the beginning, but you know, a lot of this code is written by ChatGPT I hope you're okay with that. And they're like, yeah, we, as long as it works, we don't care. no matter what you do, make sure you understand the project fully. Do your due diligence in researching tools, um, if you're going to vibe code, right? If you have no experience coding, um, try it out and just kind of see, right?

ChatGPT will also walk you through like how to install the code or the steps that you need to take. Um, I will link in the show notes to this. Uh, my friend Matt Madero is also in the WordPress space, um, is in the WordPress space, but has no coding experience and like vibe coded a game.

So, uh, you know, you can get his perspective as someone who's never coded before. Um, but the, the, the way I'm really thinking about it is ChatGPT is a force multiplier. Something I texted my friend Brian, you know, we worked together as technical leads at the last agency that we worked at to, uh, you know, before we both went off on our own. Um, I said, if I was a Junior Developer, I'dprobably be really scared for my job. And he pointed out like, that's probably not, and I've come more around to that, right? Where, um, vibe coding, right? Allowed me to think through the problem more and think more about Edge cases and iterate more quickly and get a working demo to send to the client more quickly and respond to their changes more quickly. And it allowed me to be more flexible than I otherwise would've been.

I wasn't as attached to the code. 'cause I didn't write it, I didn't write the whole thing at least, right? Actually, to be honest, I, I maybe wrote 1% of the code, little tweaks that I could have asked Chat GPT for, but I feel it is just faster for me to change that one line.

So, it's, it's re it's really powerful. I would say if you're gonna try Vibe coding, even if you've never coded before, think of a project, break it up into pieces, and then describe the project to your AI helper. Uh, and then have it write specific features, right? Like, don't just say like, I want a thing that does this. Break it down into smaller pieces, which is like the, the right approach for a lot of projects, right? You don't wanna say, I'm gonna launch a podcast and then just record a year's worth of content right on, on one day. or, you know, I want to build this notion, you know, I wanna build this notion database. And then build an entire thing in isolation. And, I think that's like the real power of vibe coating.

So, I just wanted to share as a former developer, uh, who needed vibe coating to get this project done,
I wanted to share my perspective because this, you know, this helped me continue running the business I wanna run where I'm reducing friction, where I'm building more space into my life.

Uh, and it helped me deliver at the level that I like to deliver at, right? Because I could have just been like, ah, yeah, this doesn't do what I thought it did. So either we can't do it, or you have to buy this extra thing.
And I just, I don't, that's not the type of relationship I wanna have with my clients.

Um, my takeaways here are, you know, I'm still not gonna do a lot of web work, um, but scope a little better.Uh, understand and, and, you know, the, the things I used to do on a regular basis, remember to do those things. Um, and I'm probably a little less AI hesitant than I used to be, because I am really impressed by the output.

So those are my thoughts. I'd love to know your feedback. I'm sure that there are some developers like screaming I going like, yeah, but it's not, and I'll, yeah, no, I know it's not. if I was paid, you know, if I scoped this as a $15,000 project, the nonprofit wouldn't have been able to hire me, and it would've consumed way more of my time than I would've been able to do.

And so, like this has enabled me to offer a higher quality project than otherwise, and stay within more or less within Scope and within budget. It's a really powerful tool. Um, and so, you know, I often say like, if Chat GPT write to the article for you, you didn't write it. I'm not gonna take credit for writing the code. I am more the project manager here. I put all of the things together. I created the project and chatGPT was just kind of the engine for the code, but I architected it, um, along with the client of course.

So, that's what I'm thinking. I love to hear your feedback. You can write in over at streamlinedfeedback.com, check out all the show notes to see Matt's, uh, experience with Vibe Coding.

Uh, thanks so much for listening, and until next time. I hope you find some space in your week.

Episode Video