Thank you for the write up! I'm currently at the point where I experienced first hand the limitations beyond the hype and your guide gives a good starting point.
I haven't watched your video yet and I wonder if you mention anything about costs. How much did it cost to create the app from scratch with your approach?
I understand. I thought that cursor users had to pay extra for api usage. Wasn't it your case for the use of Gemini 2.5?
Note: I am on the go and I can't review your article, but I recall you mentioning you've been using Gemini 2.5. I hope I'm not wrong.
if you pay the flat fee you dont have to pay extra for using Gemini 2.5 pro. There are other models that cost extra per request though, just not this one :)
I'd love to see more visualizations on your way of thinking, it sounds like you went deep and got some really nice insights there! Also, what percentage of the code was written by you vs. AI?
Thank you for this incredibly detailed and insightful guide. I recently transitioned from an Android role to Web Development, and honestly, I had no idea where to start. I’ve been heavily relying on Cursor, but the results have been inconsistent, often repeating the same general mistakes.
Your structured approach and clear breakdown of the workflow give me a much better foundation for setting up my own process
A couple of weeks later, and an uncountable number of tokens later, I realized my “full-stack app” was basically held together with hard-coded duct tape. There were pieces I couldn’t extend, and features I couldn’t add without breaking everything, because I’d convinced myself that vibe coding (with sonnet 4.5 under the hood) would be the engine that carried the whole thing from UI to database. (Merge conflicts are another story… so I’m not even going to talk about that.)
And if it’s not obvious already, I’m not a software engineer. (I mean… who builds UI-to-DB like that?) I’m just someone with an idea and a story worth telling, trying to stitch the two together into something real. (“Your plan has to survive first contact with the enemy,” he says…)
I wish I’d read a post like this earlier. But honestly, trial and error, and failing while I’m still moving, building, testing, designing, iterating was probably the best teacher in hindsight.
So even if I had stumbled across this blog back then, I’m not sure I would’ve appreciated what the author was trying to say. Some lessons only land when you’ve paid for them in time and mistakes.
That said, I think I’m in a good place now. The story is solid, i hope.
…and every now and then I hit this writer’s thing: I finish a chapter and immediately start tugging on new threads while I’m building the app. Then the “what if?” scenarios show up, and suddenly I’m drowning in features, edge cases, and detours.
But that’s a me problem, not a hallucination problem.
So, I’m trying to shift my mindset: build the framework first. Get the foundations right, structure, data model, flow etc, so the story can grow without the whole thing collapsing every time I add a new idea.
Anyways, I’m about to watch this YouTube video (and yes… I’ll subscribe 🙂).
Let’s see if I can build this thing the right way this time.
I started vibe coding 2 weeks back on a Swift project. I am a software engineer but I have never seen any Swift code. I ended up with almost exactly the same approach you have.
I was using the Claude Pro plan and I would reach its token limits very quickly.
My goal therefore was to create a workflow that would improve with iterations and in the long run would cost me less token as I would use learned knowledge from previous tasks to feed into my new ones.
I found this post as I was looking for ways to improve it further!
If you did end up with more learnings and ideas for vibe coding I would love to know more.
This is exactly what I was hoping for. A full, detailed, step-by-step guide on how to build a medium-sized SaaS app with AI. All the quirks and errors included, together with deploying the app. Thanks, Vinny!
Thank you for the write up I really appreciate the details and you sharing your process. It will definitely help me a a project I am building. Great work !!!
Really cool to see more people structuring the “vibe coding” workflow 👏
I’ve been following this trend too — tested tools like Bolt and Lovable, which are great for web apps, but they still struggle when it comes to native mobile.
Recently tried Sebastian.run — it’s built specifically for generating mobile apps end-to-end (frontend, backend, auth, payments).
Still early days, but it feels like a strong step toward reliable AI-native app generation.
This is great, I've been kicking these ideas around with GPT after Sam's Sunday letter on Lego coding but you are definitely a few steps ahead. I'm also working on self hosting the assistant for more control and cost efficiency when being scaled to a team.
I usually have it generate Documentation for each phase of the plan after I've implemented it. It gets more beneficial as the project grows in size and complexity, because then you can pass previous examples to it as reference so it stays consistent. Of course, Wasp helps a lot here in that it takes care of a lot of boilerplate code for the LLM.
Hey man! Love the article and the video, as well as the github repo! I have spent a few days working on a project, but seem to have a dead end. Now Cursor insists that there is a but in wasp 0.16.3 and that I need to download la ter version.. but it does not exist.
How can I help you to identify the error and update wasp?
Here is what Cursor told me after I had deleted the .wasp and node_module directories and compiled the project again, with the same error, which was:
[ Wasp ] src/features/assignments/pages/CreateTruckPage.tsx(326,22): error TS2322: Type 'string' is not assignable to type '"/sign-up" | "/login" | "/auth/verify-email/:token" | "/request-password-reset" | "/auth/reset-password/:token" | "/" | "/chats" | "/tasks" | "/apps" | "/users" | "/settings/*" | ... 11 more ... | "/assignment/:assignmentId/create-truck/:truckType"'.
❌ --- [Error] Your wasp project failed to compile: -------------------------------
SDK build failed with exit code: 2
❌ --- [Error] Compilation of wasp project failed: --------------------------------
1 errors found
---
Cursor said:
---
Thanks for trying that again. Unfortunately, the result is the same, which strongly points away from simple caching issues and reinforces the conclusion that this is likely a problem with how Wasp v0.16.3 generates the relative import paths within the .wasp/out/web-app/src/router.tsx file when it processes your main.wasp configuration (specifically after adding the CreateTruckPage and its associated route).
The generated path ../../../../src/features/assignments/pages/ProjectPage.tsx is incorrect relative to the location of .wasp/out/web-app/src/router.tsx, hence Vite cannot find the file.
Recap of Why This Likely Happens:
Your main.wasp definition for ProjectPage seems correct (import ProjectPage from "@src/features/assignments/pages/ProjectPage.tsx").
Clearing .wasp/out and node_modules forces a full regeneration, but the generator still produces the wrong path.
This points to an issue in the Wasp v0.16.3 generator itself, potentially triggered by the complexity or structure of the routes defined in main.wasp after our refactoring.
Next Steps (Reiterated):
Update Wasp (Strongly Recommended): This is the most likely solution. Check if a newer version of wasp-lang (e.g., 0.16.4, 0.17.x, etc.) is available and update using npm. Newer versions often contain bug fixes for issues like path generation.
You can check the latest version on npm or the Wasp documentation/releases.
Command might be npm install wasp-lang@latest. Remember to stop the server, delete .wasp/out and node_modules again after updating, run npm install, and then wasp start.
Simplify Route (Diagnostic): As a test, temporarily change the CreateTruckRoute path in main.wasp to something very simple (e.g., /test-create-truck). If this builds correctly, it confirms the complex path structure was the trigger, strengthening the case for a Wasp bug report.
Report Wasp Issue: If updating doesn't work or isn't an option, reporting this detailed scenario (Wasp version, error message, relevant main.wasp snippets) on the Wasp GitHub issues is the best way to get it fixed in the framework.
Given the persistence of this specific Vite error after multiple cleanup attempts, focusing on updating Wasp seems like the most productive path forward. Would you like help checking the latest Wasp version or constructing the update command?
It will probably work for that stack as well since it's a batteries-included framework like Wasp is for javascript (react, nodejs, prisma). It's just that we unfortunately don't have a template and predefined rules for laravel.
We're a place where coders share, stay up-to-date and grow their careers.
Thank you for the write up! I'm currently at the point where I experienced first hand the limitations beyond the hype and your guide gives a good starting point.
I haven't watched your video yet and I wonder if you mention anything about costs. How much did it cost to create the app from scratch with your approach?
I pay the $20/month flat fee for Cursor. Works great!
I understand. I thought that cursor users had to pay extra for api usage. Wasn't it your case for the use of Gemini 2.5?
Note: I am on the go and I can't review your article, but I recall you mentioning you've been using Gemini 2.5. I hope I'm not wrong.
if you pay the flat fee you dont have to pay extra for using Gemini 2.5 pro. There are other models that cost extra per request though, just not this one :)
Go Vinny! Go Vinny!
🏃
I'd love to see more visualizations on your way of thinking, it sounds like you went deep and got some really nice insights there! Also, what percentage of the code was written by you vs. AI?
I barely touched a line of code! So 98% ai written for sure. I’d suggest to do a code review after to gauge the quality.
Great writeup, and thanks for the video. For vibe coding, at least to me, it is better to see how people do it, over read about it.
That was the idea behind it. Glad you find it useful. :)
Thank you for this incredibly detailed and insightful guide. I recently transitioned from an Android role to Web Development, and honestly, I had no idea where to start. I’ve been heavily relying on Cursor, but the results have been inconsistent, often repeating the same general mistakes.
Your structured approach and clear breakdown of the workflow give me a much better foundation for setting up my own process
A couple of weeks later, and an uncountable number of tokens later, I realized my “full-stack app” was basically held together with hard-coded duct tape. There were pieces I couldn’t extend, and features I couldn’t add without breaking everything, because I’d convinced myself that vibe coding (with sonnet 4.5 under the hood) would be the engine that carried the whole thing from UI to database. (Merge conflicts are another story… so I’m not even going to talk about that.)
And if it’s not obvious already, I’m not a software engineer. (I mean… who builds UI-to-DB like that?) I’m just someone with an idea and a story worth telling, trying to stitch the two together into something real. (“Your plan has to survive first contact with the enemy,” he says…)
I wish I’d read a post like this earlier. But honestly, trial and error, and failing while I’m still moving, building, testing, designing, iterating was probably the best teacher in hindsight.
So even if I had stumbled across this blog back then, I’m not sure I would’ve appreciated what the author was trying to say. Some lessons only land when you’ve paid for them in time and mistakes.
That said, I think I’m in a good place now. The story is solid, i hope.
…and every now and then I hit this writer’s thing: I finish a chapter and immediately start tugging on new threads while I’m building the app. Then the “what if?” scenarios show up, and suddenly I’m drowning in features, edge cases, and detours.
But that’s a me problem, not a hallucination problem.
So, I’m trying to shift my mindset: build the framework first. Get the foundations right, structure, data model, flow etc, so the story can grow without the whole thing collapsing every time I add a new idea.
Anyways, I’m about to watch this YouTube video (and yes… I’ll subscribe 🙂).
Let’s see if I can build this thing the right way this time.
I started vibe coding 2 weeks back on a Swift project. I am a software engineer but I have never seen any Swift code. I ended up with almost exactly the same approach you have.
I was using the Claude Pro plan and I would reach its token limits very quickly.
My goal therefore was to create a workflow that would improve with iterations and in the long run would cost me less token as I would use learned knowledge from previous tasks to feed into my new ones.
I found this post as I was looking for ways to improve it further!
If you did end up with more learnings and ideas for vibe coding I would love to know more.
This is exactly what I was hoping for. A full, detailed, step-by-step guide on how to build a medium-sized SaaS app with AI. All the quirks and errors included, together with deploying the app. Thanks, Vinny!
Thanks. Hope it’s useful!
I registered to this platform because of your article. This is a really well done workflow that I am gonna put to use in my own projects.
Awesome! Glad you found it useful.
Thank you for the write up I really appreciate the details and you sharing your process. It will definitely help me a a project I am building. Great work !!!
thanks. glad it could help :)
Nice dive!
Really cool to see more people structuring the “vibe coding” workflow 👏
I’ve been following this trend too — tested tools like Bolt and Lovable, which are great for web apps, but they still struggle when it comes to native mobile.
Recently tried Sebastian.run — it’s built specifically for generating mobile apps end-to-end (frontend, backend, auth, payments).
Still early days, but it feels like a strong step toward reliable AI-native app generation.
This is great, I've been kicking these ideas around with GPT after Sam's Sunday letter on Lego coding but you are definitely a few steps ahead. I'm also working on self hosting the assistant for more control and cost efficiency when being scaled to a team.
Nice. Good luck! :)
You should remove the God's image .it is not appropriately used . You are hurting hindu sentiments
Yes , I was about to comment the same.
This is very inappropriate
Apologies, we changed the cover as soon as we realized the mistake!
Great post, thanks! 🚀
You suggest to document continuously - how exactly? Comments in the code? More cursor rules? PRDs?
I usually have it generate Documentation for each phase of the plan after I've implemented it. It gets more beneficial as the project grows in size and complexity, because then you can pass previous examples to it as reference so it stays consistent. Of course, Wasp helps a lot here in that it takes care of a lot of boilerplate code for the LLM.
Thanks! Question is more about where exactly you store those docs?
Hey man! Love the article and the video, as well as the github repo! I have spent a few days working on a project, but seem to have a dead end. Now Cursor insists that there is a but in wasp 0.16.3 and that I need to download la ter version.. but it does not exist.
How can I help you to identify the error and update wasp?
Here is what Cursor told me after I had deleted the .wasp and node_module directories and compiled the project again, with the same error, which was:
[ Wasp ] src/features/assignments/pages/CreateTruckPage.tsx(326,22): error TS2322: Type 'string' is not assignable to type '"/sign-up" | "/login" | "/auth/verify-email/:token" | "/request-password-reset" | "/auth/reset-password/:token" | "/" | "/chats" | "/tasks" | "/apps" | "/users" | "/settings/*" | ... 11 more ... | "/assignment/:assignmentId/create-truck/:truckType"'.
❌ --- [Error] Your wasp project failed to compile: -------------------------------
Can you please ask the question in our discord?! Thanks.
A "Structured Worfklow"? Ironic, perhaps?
That said, thanks for the article.
maybe a little
🔥🔥
😎
Great one vinny
Thanks :)
This is hard asf.
Tuff!
I code a full app using DeepSeek , all I need to do is copy and paste it into python
that can work too to a certain extent.
Nice! I will use Laravel, React, Inertia stacks.
It will probably work for that stack as well since it's a batteries-included framework like Wasp is for javascript (react, nodejs, prisma). It's just that we unfortunately don't have a template and predefined rules for laravel.