<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Becoming with AI: No-BS Vibe Coding]]></title><description><![CDATA[A 5-part beginner's guide to building real apps with AI. From your first prompt to a shipped, tested product.]]></description><link>https://www.becomingwithai.net/s/no-bs-vibe-coding</link><image><url>https://substackcdn.com/image/fetch/$s_!2SNo!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1763050-9c87-4edb-ae48-597d7b1b4f85_1280x1280.png</url><title>Becoming with AI: No-BS Vibe Coding</title><link>https://www.becomingwithai.net/s/no-bs-vibe-coding</link></image><generator>Substack</generator><lastBuildDate>Mon, 20 Apr 2026 15:20:05 GMT</lastBuildDate><atom:link href="https://www.becomingwithai.net/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Aslı Öztürk]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[becomingwithai@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[becomingwithai@substack.com]]></itunes:email><itunes:name><![CDATA[Asli Öztürk]]></itunes:name></itunes:owner><itunes:author><![CDATA[Asli Öztürk]]></itunes:author><googleplay:owner><![CDATA[becomingwithai@substack.com]]></googleplay:owner><googleplay:email><![CDATA[becomingwithai@substack.com]]></googleplay:email><googleplay:author><![CDATA[Asli Öztürk]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[No-BS Vibe Coding Series - Part 5: What Every Non-Technical Founder Gets Wrong About Shipping a Vibe Coded App]]></title><description><![CDATA[How to manage Vibe Debt, automate deployment with GitHub Actions + Vercel, and ship vibe coded apps with confidence. Part 5 of the No-BS Vibe Coding series.]]></description><link>https://www.becomingwithai.net/p/vibe-coding-cicd-deployment-guide</link><guid isPermaLink="false">https://www.becomingwithai.net/p/vibe-coding-cicd-deployment-guide</guid><dc:creator><![CDATA[Asli Öztürk]]></dc:creator><pubDate>Sun, 01 Mar 2026 14:44:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2SNo!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1763050-9c87-4edb-ae48-597d7b1b4f85_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>TL;DR</strong>: <em>The final stage of vibe coding isn't about writing more code; it's about managing the code you already have, owning where it lives, and building systems that work even when you're not watching.</em></p></blockquote><div><hr></div><p><em>Welcome&#128075;&#127995;<br>I&#8217;ve decided to start this <strong><a href="https://www.becomingwithai.net/p/no-bs-vibe-coding-series-part-1-why">Vibe Coding series</a></strong> to share my perspective as a software engineer. My goal is to <strong>close the gap</strong> between the technical and the non-technical, making these concepts accessible to everyone, regardless of their background.</em></p><p><em>Enjoy the Part 5 of a 5 part series!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>Managing Vibe Debt: Why You Need a Cleanup Sprint Every 3 Features</strong></h2><p>AI is incredibly good at adding things. It is notoriously bad at keeping things simple.</p><p>When you ask an AI to add five different features, it will often write redundant logic, create duplicate variables, or &#8220;hallucinate&#8221; complex solutions where simple ones would work. In engineering, we call this <strong>Technical Debt.</strong> In our world, let&#8217;s call it <strong>Vibe Debt.</strong></p><p>If you just keep stacking features, your codebase will become so &#8220;noisy&#8221; that the AI&#8217;s context window will eventually collapse (<em><a href="https://www.becomingwithai.net/p/vibe-coding-context-management-cost-effective">If you missed how context windows work, go back to Part 3</a></em>).</p><p>The fix is simple: every three features, stop building. Run a Cleanup Sprint instead.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;e7ccb1e7-f4c2-4523-9a4a-ef3ac3352289&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">I am not adding new features today. Look at src/components/UserDashboard.tsx. 
It has become too large. Simplify the logic, remove redundant variables, and 
reduce the line count by 20% without changing the functionality. 
Make the code more &#8216;readable&#8217; for yourself.</code></pre></div><p>A lean codebase is an AI-friendly codebase. This is the habit that separates people who build things that last from people who start over every few months.</p><h2><strong>Do You Actually Own Your Vibe Coded App?</strong></h2><p>Here&#8217;s a question most vibe coders never ask until it&#8217;s too late: <em>where does your app actually live?</em></p><p>Platforms like Lovable are wonderful because they handle this for you. You get a link; something like <code>your-project.lovable.app</code>,  and it just works. No setup, no thinking about servers.</p><p>But there&#8217;s a hidden cost most people don&#8217;t see until later.</p><p><strong><a href="https://lovable.dev/">Lovable</a> is like renting a furnished apartment.</strong> You move in instantly, everything works, no setup. But you can&#8217;t knock down walls, you pay monthly forever ($25&#8211;50/month from day one), and if the landlord raises prices or shuts down; you&#8217;re out, and your app goes with them.</p><p><strong>GitHub + Vercel is like buying a house.</strong> More to set up initially, but you own it. You can renovate it, hire any developer to work on it, sell it, scale it. And crucially; Vercel&#8217;s free tier can host a real app with real users for $0 until you&#8217;re at a scale where paying makes complete sense. </p><p><em><strong>&#8220;But wait; Lovable connects to GitHub. Doesn&#8217;t that mean I own my code?&#8221;</strong></em></p><p>Good question. And this is where a lot of people get confused.</p><p>Yes, Lovable can push your code to GitHub. But most people use this as a backup button, not an actual workflow. They&#8217;re still living inside Lovable - generating, previewing, deploying - all through Lovable&#8217;s interface. The real question isn&#8217;t whether your code is <em>in</em> GitHub. It&#8217;s whether you can continue building <em>without</em> Lovable. For most people, the answer is no.</p><p>Owning your code and owning your pipeline are two different things.</p><h2><strong>From Localhost to Live: Deploying Your Vibe Coded App to Vercel</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qpX6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qpX6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 424w, https://substackcdn.com/image/fetch/$s_!qpX6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 848w, https://substackcdn.com/image/fetch/$s_!qpX6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 1272w, https://substackcdn.com/image/fetch/$s_!qpX6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qpX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png" width="994" height="168" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c59095c9-64a9-47b3-929a-e2321739d55c_994x168.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:168,&quot;width&quot;:994,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89404,&quot;alt&quot;:&quot;Tweet showing someone sharing a localhost:3000 URL publicly - a common mistake that shows why localhost links don't work for real users&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.becomingwithai.net/i/189465065?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Tweet showing someone sharing a localhost:3000 URL publicly - a common mistake that shows why localhost links don't work for real users" title="Tweet showing someone sharing a localhost:3000 URL publicly - a common mistake that shows why localhost links don't work for real users" srcset="https://substackcdn.com/image/fetch/$s_!qpX6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 424w, https://substackcdn.com/image/fetch/$s_!qpX6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 848w, https://substackcdn.com/image/fetch/$s_!qpX6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 1272w, https://substackcdn.com/image/fetch/$s_!qpX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc59095c9-64a9-47b3-929a-e2321739d55c_994x168.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">localhost link is not visible to your users</figcaption></figure></div><p><strong>Localhost</strong> is just a nickname for <strong>your computer.</strong> It&#8217;s a private &#8220;Lab&#8221; where you can break things without the world seeing. But because it&#8217;s private, you can&#8217;t share that link. To make your app &#8220;real&#8221; on your own terms, you need to understand the jump from your private lab to a public server (like <a href="https://vercel.com/">Vercel</a>).</p><p>Getting your app from your private lab to a public URL is called <strong>deployment</strong>. And once real users are depending on your app, you can&#8217;t just &#8220;vibe&#8221; and break things carelessly anymore. You need a system that catches mistakes before they reach your users.</p><p>That system is called a CI/CD pipeline; and it&#8217;s the last piece of the <em>puzzle</em>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><h2><strong>CI/CD for Vibe Coders: How GitHub Actions + Vercel Catch Broken AI Code</strong></h2><p>In Part 2 and Part 4, we talked about Git and Testing. If you didn&#8217;t already read them:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1822c222-b2d7-4943-862c-969e47a70a3b&quot;,&quot;caption&quot;:&quot;TL;DR: As we discussed in Part 1: Why Your First Prompt is a Trap, the goal is to build fast without losing control.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;No-BS Vibe Coding Series &#8212; Part 2: How to Undo AI Mistakes Safely with Git&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:11642762,&quot;name&quot;:&quot;Asli &#214;zt&#252;rk&quot;,&quot;bio&quot;:&quot;I help to close the gap between the technical and the non-technical, making AI accessible to everyone, regardless of their background.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb2c42b5-6e0a-4784-be4a-155dcb8cabff_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-09T19:49:03.555Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!wVXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187394014,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:9,&quot;comment_count&quot;:1,&quot;publication_id&quot;:7300599,&quot;publication_name&quot;:&quot;Becoming with AI&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!2SNo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1763050-9c87-4edb-ae48-597d7b1b4f85_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;c237f7fb-a184-4a63-ab1e-829d149d75ea&quot;,&quot;caption&quot;:&quot;Vibe Rot is a state where an AI-built app appears to work on the surface, but the underlying logic is broken; you see the change, but the database never actually updated.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;No-BS Vibe Coding Series - Part 4: Test-Driven Vibing (TDV)&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:11642762,&quot;name&quot;:&quot;Asli &#214;zt&#252;rk&quot;,&quot;bio&quot;:&quot;I help to close the gap between the technical and the non-technical, making AI accessible to everyone, regardless of their background.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb2c42b5-6e0a-4784-be4a-155dcb8cabff_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-22T18:22:19.213Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!LgQJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.becomingwithai.net/p/test-driven-vibing-guide&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:188808262,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:11,&quot;comment_count&quot;:3,&quot;publication_id&quot;:7300599,&quot;publication_name&quot;:&quot;Becoming with AI&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!2SNo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1763050-9c87-4edb-ae48-597d7b1b4f85_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Now, it&#8217;s time to connect them. </p><p>CI/CD stands for Continuous Integration / Continuous Deployment. Ignore the jargon. Here&#8217;s what it actually means:</p><blockquote><p>Every time you save a change and push it to GitHub, two things happen automatically:</p><p><strong>GitHub Actions (the Security Guard)</strong> wakes up and runs all the tests you wrote in Part 4. If the AI accidentally broke your login screen or scrambled the math in your shopping cart, the tests catch it. GitHub Actions puts a big red X on the code and stops everything. It says: <em>&#8220;This is broken. I won&#8217;t let it go any further.&#8221;</em></p><p><strong>Vercel (the Conveyor Belt)</strong> is listening. If GitHub Actions gives the green checkmark, meaning everything passed, Vercel automatically grabs the code, builds it into a website, and updates your live URL in seconds. You never manually upload files. You just write, push, and if it&#8217;s safe, it&#8217;s live.</p></blockquote><p>Using tools like <strong>GitHub Actions</strong> and <strong>Vercel</strong>, you are setting up a &#8220;No-Fail&#8221; rule:</p><ul><li><p>When you &#8220;Commit&#8221; your code to GitHub, an automated script runs all the tests you wrote in Part 4.</p></li><li><p><strong>If the tests pass:</strong> The app deploys to the web automatically.</p></li><li><p><strong>If the tests fail:</strong> The deployment is blocked.</p></li></ul><p>This matters especially when you&#8217;re vibe coding, because AI moves fast and breaks things quietly. A &#8220;fix&#8221; can look fine and still shatter something else. CI/CD is your automated quality filter. You can move as fast as you want, knowing the machine is watching the machine for you.</p><p>This is how you ship with confidence. You no longer have to worry if a late night AI prompt accidentally broke your login screen. The machine is watching the machine for you.</p><h2><strong>The Mindset Shift: From Vibe Coder to Systems Builder</strong></h2><p>Five parts ago, vibe coding felt like magic. You were someone who asked AI to build things.</p><p>Now you&#8217;re someone who builds systems that make AI reliable. You manage Vibe Debt before it manages you. You own your infrastructure instead of renting it. You ship with confidence because you&#8217;ve put guardrails in place that work even when you&#8217;re not watching.</p><p><em>Which part clicked for you? Or which part still feels fuzzy? Drop it below; your question might be the next article!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/p/vibe-coding-cicd-deployment-guide/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/p/vibe-coding-cicd-deployment-guide/comments"><span>Leave a comment</span></a></p><p>When I started this series, my goal was simple: I didn't want you to feel left out of a conversation that's reshaping the world. Technical people have had a head start,  but that gap is closing, and you're proof of it. You now think about code the way engineers do: not just "does it work?" but "will it still work tomorrow, when it's bigger, when it breaks?" That's the mindset. Keep it. And if you ever feel lost again, come back. We'll figure it out together.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em>If you found this post useful, and don&#8217;t want to miss out my future posts, you can subscribe below </em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2><strong>FAQ: Your Questions, Answered</strong></h2><h3><strong>What is Vibe Debt?</strong> </h3><p>Vibe Debt is what happens when you keep asking AI to add features without ever stopping to clean up. The code gets messy, the AI gets confused, and eventually your whole project starts breaking in ways that are hard to fix. Think of it like never doing the dishes, it works fine for a while, until suddenly it really doesn&#8217;t. The solution is simple: every three features, dedicate one session purely to cleanup, not building.</p><h3><strong>Is Lovable or GitHub + Vercel better for vibe coding?</strong> </h3><p>It depends on where you are in your journey. Lovable is better when you&#8217;re just starting out and you want to move fast without thinking about infrastructure. GitHub + Vercel is better when you&#8217;re building something real that needs to survive real users; because you own it, your costs are predictable, and you&#8217;re not dependent on one platform&#8217;s pricing decisions. </p><p>The honest answer: start with Lovable if you need to, but plan your exit early.</p><h3><strong>Do I need CI/CD as a non-technical founder?</strong> </h3><p>Not on day one. But the moment real users are depending on your app, you need something watching for mistakes; because AI-generated code breaks in quiet, unexpected ways. Github and CI/CD is that safety net. It&#8217;s not as complicated to set up as it sounds, and once it&#8217;s running, you never have to think about it again. It just works in the background, catching problems before your users do.</p><h3><strong>What&#8217;s the difference between owning my code and owning my pipeline?</strong> </h3><p>Owning your code means your files are saved somewhere you control, like GitHub. Owning your pipeline means you control how that code gets tested and deployed to the internet. Lovable can give you the first without the second; your code is in GitHub, but Lovable is still the one deciding how and when it goes live. True ownership means both. That&#8217;s when you&#8217;re genuinely independent.</p><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/p/vibe-coding-cicd-deployment-guide?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption"><em>Know someone who&#8217;s vibe coding but has no idea what happens after the link goes live? Send this their way.</em></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/p/vibe-coding-cicd-deployment-guide?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/p/vibe-coding-cicd-deployment-guide?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><p><em>PS: I&#8217;ve been refining these 'vibe' workflows over 10 years in engineering. You can find more about my journey and other AI experiments on my <a href="https://www.becomingwithai.net/about">About</a> page.</em></p>]]></content:encoded></item><item><title><![CDATA[No-BS Vibe Coding Series - Part 4: Test-Driven Vibing (TDV)]]></title><description><![CDATA[How to Test Your Vibe-Coded App: The Test-Driven Vibing (TDV) Method.]]></description><link>https://www.becomingwithai.net/p/test-driven-vibing-guide</link><guid isPermaLink="false">https://www.becomingwithai.net/p/test-driven-vibing-guide</guid><dc:creator><![CDATA[Asli Öztürk]]></dc:creator><pubDate>Sun, 22 Feb 2026 18:22:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LgQJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>Vibe Rot </strong>is<strong> </strong>a state where an AI-built app appears to work on the surface, but the underlying logic is broken; you see the change, but the database never actually updated.</p><p><strong>TL;DR</strong>: <em>Before we dive into the 'Test-Driven' mindset, make sure you've built your foundation using the PRD strategy I shared in <strong><a href="https://www.becomingwithai.net/p/no-bs-vibe-coding-series-part-1-why">Part 1: Why Your First Prompt is a Trap</a>.</strong></em></p><p>The biggest danger in vibe coding is &#8220;Vibe Rot&#8221;; when your app looks functional but the underlying logic is broken under the hood. </p><p>Part 4 introduces <strong>Test-Driven Vibing (TDV)</strong>. We&#8217;ll cover: </p><ul><li><p>The &#8220;Verification First&#8221; mindset, </p></li><li><p>Automating Unit &amp; Integration tests, and </p></li><li><p>The &#8220;Manual Audit&#8221; to ensure your vibe matches reality.</p></li></ul></blockquote><div><hr></div><p><em>Welcome&#128075;&#127995;<br>I&#8217;ve decided to start this <strong>Vibe Coding series</strong> to share my perspective as a software engineer. My goal is to <strong>close the gap</strong> between the technical and the non-technical, making these concepts accessible to everyone, regardless of their background.</em></p><p><em>Enjoy the Part 4 of a 5 part series!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LgQJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LgQJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!LgQJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!LgQJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!LgQJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LgQJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:439821,&quot;alt&quot;:&quot;Software testing pyramid for vibe coding showing unit tests at base, integration tests in middle, and end-to-end tests at top&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.becomingwithai.net/i/188808262?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Software testing pyramid for vibe coding showing unit tests at base, integration tests in middle, and end-to-end tests at top" title="Software testing pyramid for vibe coding showing unit tests at base, integration tests in middle, and end-to-end tests at top" srcset="https://substackcdn.com/image/fetch/$s_!LgQJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!LgQJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!LgQJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!LgQJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba41322f-cc3d-42bd-a5b0-3d90b3a4be4a_2816x1536.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Testing Pyramid</figcaption></figure></div><h2><strong>What Is Vibe Rot? (And Why Your AI App Is Probably Broken)</strong></h2><p>There is a specific feeling in vibe coding: You ask the AI to add a &#8220;Delete&#8221; button. It adds the button. It looks beautiful. You click it, and the item disappears from the screen. <em>Success!</em> </p><p>But then you refresh the page, and the item is back.</p><p>The AI updated the <strong>UI</strong> (user interface), but it forgot to update the <strong>Database</strong> (backend). This is &#8220;Vibe Rot.&#8221; Because you didn&#8217;t write the code yourself, you don&#8217;t actually know if it works; you only know that it <em>looks</em> like it works.</p><p>To build professional software, you have to move from <strong>&#8220;I hope this works&#8221;</strong> to <strong>&#8220;I have proof this works.&#8221;</strong></p><div><hr></div><h2><strong>Unit Tests for Vibe Coding: How to Make the AI Prove It Works</strong></h2><p>A <strong>Unit Test</strong> checks one tiny piece of logic in isolation (like a calculator function or a currency formatter). When you&#8217;re vibe coding, the AI loves to take shortcuts. Unit tests force it to be honest.</p><p><strong>The Practical Workflow:</strong> Before you let the AI write a complex function, tell it to write the test first:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;75bd44cb-b30c-4c34-93bd-c72647c49213&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">I need a function that calculates the discount for my shopping cart. 
Before you write the function, write the unit tests that checks for: 
1) A standard 10% discount, 
2) A case where the cart is empty, and 
3) A case where the discount code is expired. 
Only after the tests are written, write the function code.</code></pre></div><h2><strong>Integration Tests: Catching the Bugs Your Unit Tests Miss</strong></h2><p>While unit tests check the parts, <strong>Integration Tests</strong> check how those parts work together. This is where most vibe-coded apps fail: the &#8220;Delete&#8221; button looks fine, but the connection to the database is broken.</p><p><strong>The Practical Workflow:</strong> Ask the AI to write a &#8220;happy path&#8221; integration test:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;da80c27f-e1b6-475d-bc44-b74302218055&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Write an integration test that simulates a user logging in, adding an item to the cart, 
and checking out. Ensure the database updates correctly at the end. If it fails, 
explain why the connection between the Auth and the Database is breaking.</code></pre></div><p>By making the AI run these tests, you aren&#8217;t just checking code; you&#8217;re checking the <strong>whole system.</strong></p><h2><strong>The Manual Audit: Your Personal QA Checklist for Vibe-Coded Apps</strong></h2><p>Even with 100% test coverage, AI can still &#8220;hallucinate&#8221; success. You must be your own QA lead.</p><p><strong>The &#8220;Skeptic&#8217;s Rule&#8221;:</strong> Every time you add a feature, try to break it in three ways:</p><ol><li><p><strong>The &#8220;Refresh&#8221; Test:</strong> Do the changes persist after a page reload?</p></li><li><p><strong>The &#8220;Empty State&#8221; Test:</strong> What happens if there is no data to show? </p></li><li><p><strong>The &#8220;Bad Input&#8221; Test:</strong> What happens if you type letters into a number field or leave a required field blank?</p></li></ol><p><strong>Practical Tip:</strong> Once a week, do a &#8220;Clean Run.&#8221; Open your website in an Incognito window and go through your entire user flow from scratch. You will be surprised at how many &#8220;vibes&#8221; only work because of old data sitting in your browser cache.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>Breaking the AI Loop of Doom: When Your Chatbot Keeps Failing</strong></h2><p>We&#8217;ve all been there. The AI makes a mistake. You tell it to fix it. It tries, but it fails again. Three prompts later, it&#8217;s suggesting the exact same &#8220;fix&#8221; it tried at the beginning.</p><p>This happens because the AI is stuck in a loop of its own previous context:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;474fb626-bc93-43a0-924e-c19576f396eb&quot;,&quot;caption&quot;:&quot;TL;DR: As your project grows, the AI starts to get \&quot;foggy.\&quot; It forgets your database schema, hallucinates variables, and begins breaking its own code. To stop this Context Collapse, you need to move from a \&quot;giant ball of clay\&quot; to \&quot;LEGO bricks.\&quot; In Part 3, we cover:&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;No-BS Vibe Coding Series - Part 3: Context Management &amp; Cost-Saving Tips (2026 Guide)&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:11642762,&quot;name&quot;:&quot;Asl&#305; &#214;zt&#252;rk&quot;,&quot;bio&quot;:&quot;I help to close the gap between the technical and the non-technical, making AI accessible to everyone, regardless of their background.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb2c42b5-6e0a-4784-be4a-155dcb8cabff_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-16T17:09:15.405Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!MrVf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.becomingwithai.net/p/vibe-coding-context-management-cost-effective&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:188074866,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:13,&quot;comment_count&quot;:4,&quot;publication_id&quot;:7300599,&quot;publication_name&quot;:&quot;Becoming with AI&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!2SNo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1763050-9c87-4edb-ae48-597d7b1b4f85_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h3><strong>How to break it:</strong></h3><ol><li><p><strong>The Git Reset:</strong> Revert to your last working commit: </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;69f586b4-1f7b-401f-a1fb-b104efec5016&quot;,&quot;caption&quot;:&quot;TL;DR: In vibe coding, one bad AI prompt can destroy your entire project. Here's how Git &#8212; your ultimate undo button &#8212; becomes your safety net. Also, I&#8217;ll show you how you can protect your API Keys.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;No-BS Vibe Coding Series &#8212; Part 2: How to Undo AI Mistakes Safely with Git&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:11642762,&quot;name&quot;:&quot;Asl&#305; &#214;zt&#252;rk&quot;,&quot;bio&quot;:&quot;I help to close the gap between the technical and the non-technical, making AI accessible to everyone, regardless of their background.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb2c42b5-6e0a-4784-be4a-155dcb8cabff_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-09T19:49:03.555Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!wVXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187394014,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:9,&quot;comment_count&quot;:1,&quot;publication_id&quot;:7300599,&quot;publication_name&quot;:&quot;Becoming with AI&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!2SNo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1763050-9c87-4edb-ae48-597d7b1b4f85_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div></li><li><p><strong>The &#8220;Explain the Error&#8221; Prompt:</strong> Instead of asking for a fix, ask for an analysis:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;1597be80-c012-487a-a7f5-dc08d2e72199&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Stop trying to fix the code. Explain to me in plain English exactly WHY this error 
is happening. What is the conflict between File A and File B?</code></pre></div></li><li><p><strong>Be Precise:</strong> Once the AI explains the logic error, <em>then</em> give it the instruction to fix just that specific piece.</p></li></ol><div><hr></div><h2><strong>You're the Lead Auditor: Why Human Oversight Still Matters in Vibe Coding</strong></h2><p>We call this &#8220;test driven vibing&#8221; but in reality, it is <strong>Quality Assurance.</strong> The AI is the builder; you are the building inspector. If you don&#8217;t check the plumbing before you close the walls, you&#8217;re going to have a leak later.</p><p>By using TDV, you&#8217;re not just building faster; you&#8217;re building <strong>permanently.</strong> You&#8217;re ensuring that the &#8220;vibe&#8221; isn&#8217;t just a surface-level feeling, but a structural reality.</p><p><strong>The Pause and Pivot:</strong> You are building the evidence you need to eventually launch your project to real users without fear.</p><p>See you in Part 5!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Becoming with AI! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><em>PS: I&#8217;ve been refining these 'vibe' workflows over 10 years in engineering. You can find more about my journey and other AI experiments on m <a href="https://www.becomingwithai.net/about">About</a> page.</em></p>]]></content:encoded></item><item><title><![CDATA[No-BS Vibe Coding Series - Part 3: Context Management & Cost-Saving Tips (2026 Guide)]]></title><description><![CDATA[Learn how to fix context collapse in vibe coding with modular file structure, project rules, and Claude Code prompts, plus a cost-saving strategy to rotate AI models and build for nearly free.]]></description><link>https://www.becomingwithai.net/p/vibe-coding-context-management-cost-effective</link><guid isPermaLink="false">https://www.becomingwithai.net/p/vibe-coding-context-management-cost-effective</guid><dc:creator><![CDATA[Asli Öztürk]]></dc:creator><pubDate>Mon, 16 Feb 2026 17:09:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MrVf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>TL;DR: </strong><em>Before we dive into Context Management, make sure you've already set your <a href="https://www.becomingwithai.net/p/no-bs-vibe-coding-series-part-1-why">Part 1: PRD Strategy</a> and your <a href="https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net">Part 2: Git Safety Net</a>. Without those, your context will collapse into chaos anyway.</em></p><p>As your project grows, the AI starts to get "foggy." It forgets your database schema, hallucinates variables, and begins breaking its own code. To stop this <strong>Context Collapse</strong>, you need to move from a "giant ball of clay" to "LEGO bricks." In Part 3, we cover: </p><ul><li><p><strong>Modularization</strong> to keep files clean, </p></li><li><p><strong>Global Project Rules</strong> for consistency, and </p></li><li><p><strong>Minimum Cost Vibe Coding </strong>by rotating between AI agents and different models to build professional systems without burning your budget.</p></li></ul></blockquote><div><hr></div><p><em>Welcome&#128075;&#127995;<br>I&#8217;ve decided to start this <strong>Vibe Coding series</strong> to share my perspective as a software engineer. My goal is to <strong>close the gap</strong> between the technical and the non-technical, making these concepts accessible to everyone, regardless of their background.</em></p><p><em>Enjoy the Part 3 of a 5 part series!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MrVf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MrVf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 424w, https://substackcdn.com/image/fetch/$s_!MrVf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 848w, https://substackcdn.com/image/fetch/$s_!MrVf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 1272w, https://substackcdn.com/image/fetch/$s_!MrVf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MrVf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic" width="728" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:582885,&quot;alt&quot;:&quot;woman vibe coding&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.becomingwithai.net/i/188074866?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="woman vibe coding" title="woman vibe coding" srcset="https://substackcdn.com/image/fetch/$s_!MrVf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 424w, https://substackcdn.com/image/fetch/$s_!MrVf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 848w, https://substackcdn.com/image/fetch/$s_!MrVf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 1272w, https://substackcdn.com/image/fetch/$s_!MrVf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8062b5f4-cd87-4eda-8868-d01b6bf29c59_1767x2204.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Supposed to be me happily vibe coding</figcaption></figure></div><p>In the beginning, vibe coding is pure magic. You ask for a feature, and it appears. But around the 30th file, something shifts.</p><p>The AI starts suggesting &#8220;fixes&#8221; that undo the work you did yesterday. It uses an old database schema you specifically told it to abandon. It starts introducing bugs in parts of the app you haven&#8217;t touched in hours.</p><p>No, you are not failing, and no, AI&#8217;s intelligence is also not failing. </p><p>It&#8217;s a failure of <strong>Context Management.</strong></p><p>In engineering, we know that the more &#8220;state&#8221; a system has, the harder it is to reason about. In vibe coding, the &#8220;Context Window&#8221; is the AI&#8217;s current field of vision. If you fill that vision with noise, the AI loses the signal.</p><p>To move from &#8220;weekend toy&#8221; to &#8220;real product,&#8221; you have to stop dumping everything into the chat and start <strong>curating the vibe.</strong></p><div><hr></div><h2><strong>What Is Context Collapse in Vibe Coding?</strong></h2><p>The LLM (Large Language Model) doesn&#8217;t &#8220;know&#8221; your project the way a human does. It reads a slice of it every time you send a prompt.</p><p>When your project gets too big, two things happen:</p><ol><li><p><strong>The Middle is Lost:</strong> LLMs are great at remembering the beginning and end of a prompt, but they get &#8220;foggy&#8221; in the middle.</p></li><li><p><strong>Noise Overload:</strong> If you have 50 files and 10 of them are outdated prototypes, the AI might grab code from the <em>wrong</em> file to solve a <em>new</em> problem.</p></li></ol><p><strong>The Solution:</strong> You must treat your codebase like a set of <strong>LEGO bricks</strong>, not a giant ball of clay.</p><p>Or, in software engineering, we call it &#8220;monolith&#8221;, but you really need to make it modular, which brings us to our next topic.</p><div><hr></div><h2><strong>Modular Code: Keep Files Under 200 Lines</strong></h2><p>A &#8220;No-BS&#8221; rule for vibe coding: <strong>If a file is more than 200 lines long, it&#8217;s a liability.</strong></p><p>When the AI generates a &#8220;monolith&#8221;, it becomes impossible for the AI to &#8220;read&#8221; the whole thing without hitting its limit.</p><p><strong>The Pivot:</strong> Break your code into small, single-purpose files.</p><ul><li><p><code>Auth.tsx</code> should only handle login.</p></li><li><p><code>PricingCard.tsx</code> should only handle the visual card.</p></li><li><p><code>database.ts</code> should only handle the connection.</p></li></ul><p><strong>Practical Tip:</strong> If you see the AI writing a massive file, stop it. Say: </p><pre><code>Break this feature into modular components. Create separate files for the logic and the UI.</code></pre><p>Small files are easier for the AI to ingest, understand, and fix without side effects.</p><div><hr></div><h2><strong>Project Rules: Your AI's Configuration File</strong></h2><p>Whether you are using <strong>Claude Code</strong> or <strong>Cursor</strong>, you need a way to enforce &#8220;Constitutional Law&#8221; for your project. Instead of telling the AI &#8220;use Tailwind CSS&#8221; in every single prompt, you write it once in a configuration file. </p><p>When I use Claude Code, I add the rules in <code>Claude.md</code> file. You can also tell Claude to not add API Keys to codebase in Claude.md file, but there are more robust ways to protect them, you can check it out <a href="https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net">my other article about safe vibe coding</a>.</p><p><strong>What to enforce:</strong></p><ul><li><p><strong>Tech Stack:</strong> &#8220;Always use Next.js with TypeScript.&#8221;</p></li><li><p><strong>Coding Style:</strong> &#8220;Prefer functional components. No classes.&#8221;</p></li><li><p><strong>Project Structure:</strong> &#8220;Always put API routes in the /api folder.&#8221;</p></li></ul><p>By setting these global rules, you &#8220;pre-load&#8221; the AI with the correct context before you even type a word. It keeps the &#8220;vibe&#8221; consistent across every file it generates.</p><div><hr></div><h2><strong>Curate AI Context with Claude Code Prompts</strong></h2><p>The biggest mistake vibe coders make is letting the AI &#8220;read everything&#8221; for every single small change. If you&#8217;re fixing a typo on the Landing Page, the AI doesn&#8217;t need to see your Stripe integration logic.</p><p>If you are using <strong>Claude Code</strong>, you have surgical control over what the AI sees.</p><h3><strong>How to Curate:</strong></h3><ul><li><p><strong>Be Specific in Your Command:</strong> Instead of saying &#8220;fix the landing page&#8221;, which might cause the agent to wander through your entire directory, use:</p><pre><code>Refactor the header in src/components/LandingPage.tsx. Do not look at other files unless necessary.</code></pre></li><li><p><strong>The &#8220;ReadOnly&#8221; Guardrail:</strong> If you want Claude to use a specific file as a reference but <em>not</em> change it, tell it explicitly. This prevents the AI from &#8220;hallucinating&#8221; improvements on code that is already working perfectly.</p></li><li><p><strong>The Context Reset:</strong> Conversations in Claude Code can get bloated with terminal outputs and previous failed attempts. If you&#8217;ve spent 20 minutes stuck on one bug, <strong>exit and restart the session.</strong> This wipes the &#8220;fog&#8221; of previous errors and lets the AI look at the current state of the files with fresh eyes.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>Cost-Effective Vibe Coding: The Model Rotation Strategy</strong></h2><p>Vibe coding can be really expensive. If you treat every bug fix like a high-stakes architectural decision, you will burn money quite fast.</p><p>To stay sustainable, you need to match the tool&#8217;s &#8220;IQ&#8221; to the task&#8217;s complexity.</p><h3><strong>The &#8220;Free&#8221; Giant: Google Antigravity</strong></h3><p>As of early 2026, <strong>Google Antigravity</strong> is the ultimate hack for cost-effective vibing. Because it&#8217;s in <strong>Public Preview</strong>, <a href="https://antigravity.google/pricing">Google is offering it for </a><strong><a href="https://antigravity.google/pricing">free</a></strong><a href="https://antigravity.google/pricing"> with incredibly generous rate limits.</a></p><ul><li><p><strong>The Vibe:</strong> It&#8217;s an &#8220;agent-first&#8221; platform. Instead of just autocompleting lines, it spawns agents to handle the &#8220;dirty work&#8221;: testing, browsing, and multi-file refactoring without you paying for every token.</p></li><li><p><strong>When to use it:</strong> Use it for the heavy lifting that would normally drain your Claude or OpenAI credits. It&#8217;s perfect for the &#8220;middle phase&#8221; of a project where you need a lot of autonomous execution.</p></li></ul><p>I have recently started to use Google Antigravity, I find it quite good on UI-related works, rather than backend. </p><h3><strong>The Claude &#8220;Token Arbitrage&#8221; Tier List</strong></h3><p>When you aren&#8217;t using Antigravity, or if you prefer the &#8220;surgical&#8221; reasoning of Claude, use this rotation to save money:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6dFq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6dFq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 424w, https://substackcdn.com/image/fetch/$s_!6dFq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 848w, https://substackcdn.com/image/fetch/$s_!6dFq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 1272w, https://substackcdn.com/image/fetch/$s_!6dFq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6dFq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png" width="1456" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121210,&quot;alt&quot;:&quot;Claude Models Comparison for Vibe Coding&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.becomingwithai.net/i/188074866?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude Models Comparison for Vibe Coding" title="Claude Models Comparison for Vibe Coding" srcset="https://substackcdn.com/image/fetch/$s_!6dFq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 424w, https://substackcdn.com/image/fetch/$s_!6dFq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 848w, https://substackcdn.com/image/fetch/$s_!6dFq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 1272w, https://substackcdn.com/image/fetch/$s_!6dFq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4887f05a-b90d-4c43-a5e9-9a60f7eab66d_1542x318.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Claude Models Comparison</figcaption></figure></div><h4><strong>The No-BS Bottom Line:</strong></h4><p>If you&#8217;re on a budget, your workflow should look like this:</p><ol><li><p><strong>Plan</strong> with Claude Opus (The Architect).</p></li><li><p><strong>Execute</strong> the bulk work in Google Antigravity (The Free Workforce).</p></li><li><p><strong>Refine</strong> or fix small bugs with Claude Haiku or Gemini Flash.</p></li></ol><p>By rotating your tools, you move from &#8220;spending money to code&#8221; to <strong>orchestrating resources to build.</strong></p><p><em>PS: If you want to understand more about how AI tokens work, you can read <a href="https://www.becomingwithai.net/p/they-say-ai-is-for-everyone-but-it">They say AI is for Everyone. But It Thinks in English</a>.</em></p><h2><strong>The Human Element: You are the Information Architect</strong></h2><p>We call this &#8220;vibe coding,&#8221; but really, it is <strong>Information Orchestration.</strong> The AI is a Ferrari, but context is the road. If the road is full of potholes (messy files) and dead ends (outdated code), the Ferrari can&#8217;t go fast.</p><p>Your job isn&#8217;t just to &#8220;prompt&#8221;; your job is to <strong>clean the workspace.</strong> By keeping files small, rules clear, and context focused, you ensure the AI is always operating at its highest &#8220;IQ.&#8221;</p><p>But managing context is only half the battle. To prevent your app from decaying into <strong><a href="https://www.becomingwithai.net/p/test-driven-vibing-guide">Vibe Rot</a></strong>, you must adopt the practices I&#8217;ve outlined in <strong><a href="https://www.becomingwithai.net/p/test-driven-vibing-guide">Part 4: Test-Driven Vibing (TDV)</a></strong>. This is where we bridge the gap between 'vibing' and real engineering.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Becoming with AI! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[No-BS Vibe Coding Series — Part 2: How to Undo AI Mistakes Safely with Git]]></title><description><![CDATA[A beginner-friendly guide to using Git version control as your vibe coding safety net &#8212; so one bad AI prompt never destroys your project.]]></description><link>https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net</link><guid isPermaLink="false">https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net</guid><dc:creator><![CDATA[Asli Öztürk]]></dc:creator><pubDate>Mon, 09 Feb 2026 19:49:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wVXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>TL;DR</strong>: <em>As we discussed in <strong><a href="https://www.becomingwithai.net/p/no-bs-vibe-coding-series-part-1-why">Part 1: Why Your First Prompt is a Trap</a></strong>, the goal is to build fast without losing control. </em></p><p>In vibe coding, one bad AI prompt can destroy your entire project. Here's how Git - your ultimate undo button - becomes your safety net. Also, I&#8217;ll show you how you can protect your API Keys.</p></blockquote><div><hr></div><p><em>Welcome&#128075;&#127995;<br>I&#8217;ve decided to start this <strong>Vibe Coding series</strong> to share my perspective as a software engineer. My goal is to <strong>close the gap</strong> between the technical and the non-technical, making these concepts accessible to everyone, regardless of their background.</em></p><p><em>Enjoy the Part 2 of a 5 part series!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>In the early hours of a vibe coding project, there is a specific kind of silence that occurs right after you realize you&#8217;ve broken everything.</p><p>You were in the &#8220;flow state.&#8221; You asked the AI to add a simple payment button, and instead, it refactored your entire authentication logic, deleted three files you didn&#8217;t know were important, and left you staring at a blank white screen filled with console errors.</p><p>This is the moment most people give up. They feel they&#8217;ve lost their &#8220;save game.&#8221; They try to ask the AI to &#8220;undo,&#8221; but the AI is like an overconfident junior developer with amnesia: it doesn&#8217;t remember what the codebase looked like five minutes ago.</p><p>To bridge the gap between &#8220;fragile experimentation&#8221; and &#8220;confident building,&#8221; you need a <strong>Safety Net.</strong> In engineering, we call this <strong>Git.</strong> For you, let&#8217;s call it the <strong>Ultimate Undo Button.</strong></p><div><hr></div><h2><strong>Why Vibe Coders Lose Their Work (The Point of No Return)</strong></h2><p>Most vibe coders treat their project like a single document. If you make a mistake, you hit <code>Cmd+Z</code>, but that only reverts the text in your active window&#8212;not the structural changes the AI made across ten different files simultaneously.</p><p>Without a safety net, you are always one prompt away from a total system collapse. The gap is moving from <strong>linear progress</strong> (where every step could be fatal) to <strong>checkpointed progress</strong> (where you can always jump back in time).</p><div><hr></div><h2><strong>How to Use Git Snapshots to Save Your Vibe Coding Progress</strong></h2><p>You don&#8217;t need to be a command-line wizard to use Git. In 2026, tools like <strong>Cursor</strong> or <strong>GitHub Desktop</strong> make version control as easy as a &#8220;Save&#8221; icon.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wVXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wVXN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!wVXN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!wVXN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!wVXN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wVXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:599123,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://becomingwithai.substack.com/i/187394014?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wVXN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!wVXN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!wVXN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!wVXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb93936c-8bf1-402d-af26-15cb9a6674ef_2816x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI generated Git commit history</figcaption></figure></div><h4><strong>Step-by-Step: Git for Non-Technical Vibe Coders</strong></h4><ol><li><p><strong>The &#8220;Before&#8221; Snapshot:</strong> Before you give the AI a high-risk prompt&#8212;like <em>&#8220;Refactor my database&#8221;</em>, you need to <em><strong>commit</strong></em> your changes. <em>If you are using Cursor, check out this <a href="https://cursor.com/docs/integrations/git">Git Guide</a>.</em></p></li><li><p><strong>The &#8220;Vibe&#8221; Phase:</strong> Let the AI run wild. If it works, great! Create another commit: &#8220;Payment button works.&#8221;</p></li><li><p><strong>The Great Undo:</strong> If the AI breaks the app, <strong>stop prompting.</strong> Do not try to fix the error with more instructions. You need to <em><strong>revert</strong></em> to your last commit. There are several ways to do it, depending on which tools you are using.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!squC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!squC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!squC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!squC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!squC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!squC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:426197,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://becomingwithai.substack.com/i/187394014?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!squC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!squC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!squC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!squC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e95ab2e-309a-428a-8e46-80adeda5e8c8_2816x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI Generated Three Step Vibe Coding Workflow</figcaption></figure></div><p></p><blockquote><p><em>My advice as a dev:</em></p><p>Sometimes, it might be a pain in the a** to rollback some changes, and Cursor or whatever vibe coding tool you are using, may not help as you want. </p><p>I suggest you to always take control of your Git: either with Terminal by using Git commands (that&#8217;s what I prefer), or with a <em>Git Visualizer Tool</em> like <a href="https://desktop.github.com/download/">Github Desktop</a> or <a href="https://www.gitkraken.com">GitKraken</a>. If you are not really familiar with coding, I suggest you to use a Git Visualizer Tool: you can create your branches easily, commit and push your changes or revert your committed changes when needed.</p></blockquote><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>How to Protect Your API Keys with .gitignore</strong></h2><p>As you build, you will eventually use &#8220;Secrets.&#8221; These are API keys for things like Supabase, OpenAI, or Stripe, etc. If you are using AI, these keys are the &#8220;digital cash&#8221; that powers your app.</p><p><strong>The Golden Rule: Never, ever commit secrets to your code. Ever.</strong></p><p>When you commit your code to a platform like GitHub, it is often visible to the world. If you commit your API keys, bots will find them in seconds and drain your account.</p><p>Remember what happened to a student who pushed that API Key to GitHub?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YhfW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YhfW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 424w, https://substackcdn.com/image/fetch/$s_!YhfW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 848w, https://substackcdn.com/image/fetch/$s_!YhfW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 1272w, https://substackcdn.com/image/fetch/$s_!YhfW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YhfW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png" width="1456" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:368902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://becomingwithai.substack.com/i/187394014?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YhfW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 424w, https://substackcdn.com/image/fetch/$s_!YhfW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 848w, https://substackcdn.com/image/fetch/$s_!YhfW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 1272w, https://substackcdn.com/image/fetch/$s_!YhfW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07c5e76-9f10-46e5-a328-4a227c30fa67_1492x990.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>https://www.reddit.com/r/googlecloud/comments/1noctxi/student_hit_with_a_5544478_google_cloud_bill/ </em></figcaption></figure></div><p>To prevent this, we use a file called <code>.gitignore</code>.</p><p><strong>The Pause and Pivot:</strong> We call this a &#8220;config file,&#8221; but really, it is a <strong>Privacy Filter.</strong> It tells Git: <em>&#8220;Watch these files, but don&#8217;t share them (ignore them).&#8221;</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u3Ge!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u3Ge!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!u3Ge!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!u3Ge!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!u3Ge!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u3Ge!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:429399,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://becomingwithai.substack.com/i/187394014?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u3Ge!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!u3Ge!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!u3Ge!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!u3Ge!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f6674d-84a4-43e4-9191-da940fff4d90_2816x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI generated .gitignore file</figcaption></figure></div><h4><strong>How to stay safe:</strong></h4><ul><li><p><strong>The </strong><code>.env</code><strong> file:</strong> Put all your secrets in a file named <code>.env</code>.</p></li><li><p><strong>The </strong><code>.gitignore</code><strong>:</strong> Ensure your project has a file named <code>.gitignore</code>. Inside that file, the very first line should be <code>.env</code>.</p></li><li><p><strong>The Result:</strong> Git will now &#8220;ignore&#8221; your secrets. Even if you commit your code, your keys will stay safe.</p></li></ul><div><hr></div><h2><strong>Vibe Coding Git Best Practices (The Intentional Builder's Checklist)</strong></h2><ol><li><p><strong>Atomic Commits:</strong> Save every time a single thing works. If the button turns blue: <strong>commit</strong>. If the math is right: <strong>commit</strong>. Small saves are easier to revert than giant ones.</p></li><li><p><strong>The &#8220;Revert First&#8221; Mentality:</strong> If a prompt fails, don&#8217;t ask the AI to &#8220;fix it.&#8221; <strong>Revert the change</strong> to your last working state, refine your prompt, and try again from a clean slate.</p></li><li><p><strong>No Secrets in History:</strong> Once a secret is committed to Git history, it is there forever, even if you delete the file in a later version. If you accidentally commit a key, you must <strong>rotate it</strong> (delete the old key and get a new one) <strong>immediately</strong>.</p></li><li><p><strong>Descriptive Labels:</strong> Avoid labels like &#8220;fix&#8221; or &#8220;stuff.&#8221; Use &#8220;Added local storage for expenses.&#8221; This makes your &#8220;Time Machine&#8221; a.k.a commit history searchable.</p></li></ol><div><hr></div><h2><strong>Why Git Gives Vibe Coders Psychological Safety</strong></h2><p>By implementing Git and a proper <code>.gitignore</code>, you are creating <strong>Psychological Safety.</strong> When you know you cannot &#8220;nuke&#8221; your project or expose your bank account, you become more courageous. You move from a state of <strong>friction</strong> to a state of <strong>flow.</strong></p><p>It requires structure, a little discipline, and <strong>restraint.</strong></p><p><strong>The Pause and Pivot:</strong> We call this &#8220;version control,&#8221; but really, it is <strong>Temporal Insurance.</strong> It is the technical guarantee that your past success is protected from your future mistakes.</p><h2><strong>The Human Element: Why You're the Curator, Not the AI</strong></h2><p>The AI provides the computational labor, but <strong>you</strong> provide the &#8220;Save Points.&#8221; By deciding when a version is stable enough to keep and what information is too sensitive to share, you are exercising <strong>Judgment.</strong> You aren&#8217;t just a user; you are a curator of working states.</p><div><hr></div><p>With this foundation, you can safely start vibe coding. You have a solid toolset, and a way to undo mistakes before they become disasters.</p><p>Technical skills can be learned, but <strong>intentionality</strong> is a choice. By setting up these guardrails, you&#8217;ve already done the hardest part of engineering.</p><p>Git protects your files, but as your project grows, you'll hit 'Context Collapse.' Check out <strong><a href="https://www.becomingwithai.net/p/vibe-coding-context-management-cost-effective">Part 3: Context Management &amp; Cost-Saving Tips (2026 Guide)</a></strong> to learn how to keep your AI smart as the codebase expands.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe below if you want to follow along this series and more!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[No-BS Vibe Coding Series - Part 1: Why Your First Prompt is a Trap]]></title><description><![CDATA[Learn vibe coding the right way. This beginner's guide covers tech stack selection, AI tool choices, and writing a PRD&#8212;before you waste tokens on bad prompts.]]></description><link>https://www.becomingwithai.net/p/no-bs-vibe-coding-series-part-1-why</link><guid isPermaLink="false">https://www.becomingwithai.net/p/no-bs-vibe-coding-series-part-1-why</guid><dc:creator><![CDATA[Asli Öztürk]]></dc:creator><pubDate>Mon, 02 Feb 2026 14:36:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lhFN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lhFN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lhFN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 424w, https://substackcdn.com/image/fetch/$s_!lhFN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 848w, https://substackcdn.com/image/fetch/$s_!lhFN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 1272w, https://substackcdn.com/image/fetch/$s_!lhFN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lhFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic" width="1456" height="841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:841,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:477560,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://becomingwithai.substack.com/i/186608953?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lhFN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 424w, https://substackcdn.com/image/fetch/$s_!lhFN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 848w, https://substackcdn.com/image/fetch/$s_!lhFN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 1272w, https://substackcdn.com/image/fetch/$s_!lhFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F343e424b-9776-4840-bf46-fc075fe0bc10_2598x1500.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI Generated Image</figcaption></figure></div><blockquote><p><strong>TL;DR</strong>: <em>This is Part 1 of the <strong>No-BS Vibe Coding Series</strong>. After you've set your strategy here, move to <a href="https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net">Part 2: Safety with Git</a>, P<a href="https://www.becomingwithai.net/p/vibe-coding-context-management-cost-effective">art 3: Context Management</a>, and <a href="https://www.becomingwithai.net/p/test-driven-vibing-guide">Part 4: Test-Driven Vibing</a></em></p><p>Before you start vibe coding, you need three things: </p><ul><li><p>A tech stack decision, </p></li><li><p>The right AI tool for the job, </p></li><li><p>A PRD document. </p></li></ul><p>Skip these, and you&#8217;re building on sand.</p></blockquote><div><hr></div><p><em>Welcome&#128075;&#127995;<br>I&#8217;ve decided to start this <strong>Vibe Coding series</strong> to share my perspective as a software engineer. My goal is to <strong>close the gap</strong> between the technical and the non-technical, making these concepts accessible to everyone, regardless of their background.</em></p><p><em>Enjoy the Part 1 of a 5 part series!</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">You want to follow along? You can subscribe to my newsletter below.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>You're ready to try vibe coding for the first time. Coffee's hot, you open your favorite AI coding tool&#8212;Claude, Cursor, maybe Lovable&#8212;and type a single hopeful sentence: </p><pre><code>Build me a personal finance tracker app.</code></pre><p>In a few minutes&#8212;and in exchange for a few thousand tokens&#8212;an app appears. It feels like magic. It feels like pure speed. But in reality, it is a trap.</p><p>At that moment, you have just handed over 100% of the <strong>architectural decisions</strong>&#8212;the language, the database, and the underlying logic&#8212;to an AI that doesn&#8217;t know if you&#8217;re building a weekend hobby, a gift for a friend, or the foundation of a future startup.</p><p>To bridge the gap between your intent and the AI&#8217;s capability, you must start not with a prompt, but with <strong>Analysis.</strong></p><div><hr></div><p>In my day job as a developer, we don&#8217;t just start typing. Before a single line of code is written, we spend hours, sometimes days, on <strong>System Design.</strong> We draw diagrams, we argue over data flow, and we weigh every trade-off.</p><p>In &#8220;Vibe Coding,&#8221; we tend to skip this because the AI is so fast that we mistake its speed for <em>intelligence</em>. But without a plan, the AI defaults to whatever is easiest for <em>it</em> to write in the moment, not what is easiest for <em>you</em> to maintain in the long run.</p><p>If you don&#8217;t choose the structure, the AI will choose it for you. Often, it will build a <strong>&#8220;monolith&#8221;</strong>&#8212;a single, giant block of code that is nearly impossible to change without breaking everything else. It works for the first five minutes, but it collapses the moment your project grows beyond 30 files.</p><p>Before you write a single line of code, you must design the system.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.becomingwithai.net/subscribe?"><span>Subscribe now</span></a></p><h2>1- How to Choose Your Tech Stack for Vibe Coding</h2><h3>What is a Tech Stack?</h3><p>You don&#8217;t need to be a senior engineer, but you do need to know which &#8220;flavor&#8221; of technology you want to inhabit. We call this a <strong>Tech Stack</strong>, but really, it is just the environment where your idea lives.</p><p>As a backend developer, my specialty is designing scalable systems that don&#8217;t break under heavy traffic. However, a full app needs more than just a &#8220;brain&#8221; (the backend); it needs a body and a face.</p><h3>Recommended Stacks for Web Apps vs Mobile Apps</h3><p>If I were building a web app today, I&#8217;d use <strong>Next.js + Vercel</strong> to ship it in 48 hours. If you want a mobile app, you might look at <strong>Flutter</strong> to target iOS and Android at once. The point isn&#8217;t to learn the code&#8212;it&#8217;s to pick the path so the AI knows what it is doing. </p><h3>Prompt Template: Get Your Custom Tech Stack Recommendation</h3><p>If you are not sure where to start, copy and paste this into your favorite LLM (Claude, GPT-4, etc.) to get your custom recommendation:</p><pre><code>I have an idea for an app, but I need to choose the right tech stack to &#8216;vibe&#8217; with my goals. I am a [Beginner / Intermediate / Expert] at coding.

My App Idea: [Describe your idea here&#8212;e.g., &#8216;A personal finance tracker&#8217;]

My Priorities (Rank these 1-3):
Speed of shipping (I want it live in 48 hours).
Scalability (I expect 5,000 users soon).
Visual Polish (It needs to look high-end and custom).

The Goal: Please recommend a modern tech stack that fits this &#8216;vibe.&#8217; Explain why these tools work together, which hosting provider I should use (like Vercel or Supabase), and provide a &#8216;Day 1&#8217; checklist to get the environment set up.</code></pre><h2>2- <strong>Claude Code vs Cursor vs Lovable: Which AI Coding Tool Should You Use?</strong></h2><p>Not all AI tools are built for the same job. You need to match the tool to the specific task. You wouldn&#8217;t use a sledgehammer to hang a picture frame.</p><ul><li><p><strong><a href="https://code.claude.com/docs/en/quickstart">Claude Code </a>(Terminal/Agentic):</strong> This is the &#8220;Deep Thinker.&#8221; It is <strong>agentic</strong>, meaning it can perform multiple steps on its own. It&#8217;s best for complex logic and structural changes where the AI needs to &#8220;think&#8221; across your whole project.</p></li><li><p><strong><a href="https://cursor.com/learn">Cursor</a> (The IDE):</strong> This is your &#8220;Daily Driver.&#8221; It&#8217;s a visual editor that lets you see the code as it changes in real-time. It&#8217;s best for the user interface (UI), styling, and adding features quickly.</p></li><li><p><strong><a href="https://v0.app/docs">v0</a> / <a href="https://lovable.dev/blog?category=tutorials">Lovable</a>:</strong> These are the &#8220;Sketchpads.&#8221; These tools are where you prototype your ideas at light speed. Use them to generate the look and feel&#8212;the visual vibe&#8212;before you move the code into its permanent home.</p></li></ul><p>Personally, I lean toward Claude Code because I like being hands-on. If you&#8217;re a complete beginner, I&#8217;d recommend starting with <strong>Cursor</strong>. It provides the most visual clarity as you build.</p><h2>3- <strong>What is a PRD? Writing Your Product Requirements Document</strong></h2><p>Before you open your editor, you need to draft a <strong>Product Requirements Document (PRD)</strong>. This isn&#8217;t just paperwork; it is the physical manifestation of what your app needs to do.</p><p>If we are building that personal finance tracker app, your PRD should look like this:</p><blockquote><p><strong>Project:</strong> Personal Finance Tracker App</p><p><strong>The Core Verb:</strong> Users <strong>capture</strong> daily expenses and <strong>visualize </strong>monthly trends.</p><p><strong>The User Flow:</strong></p><ol><li><p>User opens app (defaults to &#8220;Quick Add&#8221;).</p></li><li><p>User enters amount and category.</p></li><li><p>User views a simple &#8220;Remaining Balance&#8221; donut chart.</p></li></ol><p><strong>Technical Constraints:</strong></p><ul><li><p><strong>Mobile First:</strong> Optimized for mobile screens.</p></li><li><p><strong>Offline Capable:</strong> The app must allow entries even without Wi-Fi.</p></li><li><p><strong>Zero Friction:</strong> No login screen for the MVP (Minimum Viable Product). Use LocalStorage.</p></li></ul><p><strong>The &#8220;No-Go&#8221; List:</strong></p><ul><li><p>No bank integrations (manual entry only).</p></li><li><p>No complex investment tracking.</p></li><li><p>No social sharing features.</p></li></ul></blockquote><p>Honestly, this is just an example. Your actual PRD document would probably more comprehensive than this. I wanted to keep it simple for this article. </p><p>I suggest you to use <strong>ChatGPT&#8217;s Deep Research</strong> mode or <strong>Claude&#8217;s Opus 4.5</strong> to create a comprehensive Product Requirements Document. After you create this document, add it to your project&#8217;s folder. AI will analyze it and implement the features based on this PRD document.</p><h2><strong>Why Planning Before Prompting Prevents Technical Debt</strong></h2><p>By defining the Stack, the Tool, and the PRD, you are building a <strong>Context Container</strong>. You are setting the technical constraints the AI needs to avoid spaghetti code and circular dependencies. By narrowing the scope, you prevent the model from guessing&#8212;which is where 90% of technical debt begins.</p><p>It requires data, logic, and <strong>constraint</strong>.</p><p>We call this &#8220;vibe coding,&#8221; but really, it is <strong>Requirement Engineering</strong>. The AI functions as your execution engine; you function as the logic provider. If the system architecture is flawed, we don&#8217;t blame the generator&#8212;we audit the specification.</p><h2><strong>The Human Element: Why AI Can't Replace Your Judgment</strong></h2><p>Choosing your tools and constraints is the highest-leverage part of the build. The AI can generate 1,000 lines of code in seconds, but it cannot define the business logic or the system requirements.</p><p>Your judgment in these first ten minutes determines whether your project becomes a production-ready application or a pile of unmaintainable technical debt. You aren&#8217;t just &#8220;vibing&#8221; with a machine; you are <strong>Engineering with Intent</strong>. The AI provides the computational labor, but your specification provides the system logic.</p><p>It requires a stack, a spec, and <strong>discipline</strong>.</p><div><hr></div><p>The groundwork is now laid. You have a stack, a set of tools, and a clear requirement document. You&#8217;ve successfully moved from "hoping the AI understands" to "ensuring the AI follows."</p><p>Now that you have your PRD and tech stack, don't start prompting yet. You need a safety net. Read <strong><a href="https://www.becomingwithai.net/p/vibe-coding-git-version-control-safety-net">Part 2: How to Undo AI Mistakes Safely with Git</a></strong> to ensure one bad prompt doesn't ruin your project</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.becomingwithai.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Becoming with AI! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>