[{"data":1,"prerenderedAt":1556},["ShallowReactive",2],{"blog-shipfast-llc-nextjs-boilerplate-review":3,"related-shipfast-llc-nextjs-boilerplate-review":314},{"id":4,"title":5,"author":6,"body":7,"category":6,"date":300,"description":301,"draft":302,"extension":303,"image":6,"meta":304,"navigation":305,"path":306,"seo":307,"stem":308,"tags":309,"__hash__":313},"blog\u002Fblog\u002Fshipfast-llc-nextjs-boilerplate-review.md","ShipFast LLC Next.js Boilerplate: Honest Review & Comparison",null,{"type":8,"value":9,"toc":281},"minimark",[10,14,17,22,25,28,32,43,46,50,59,62,66,69,78,82,91,100,104,113,122,126,135,143,147,150,154,169,173,176,185,189,197,201,204,208,216,232,237,248,251,255,263,266],[11,12,13],"p",{},"Search \"shipfast llc\" and you get a tangle of results: Marc Lou's popular Next.js boilerplate, an AI website builder at ShipFast.ai, a low-code agency, an express shipping company in Oviedo, Florida, and a handful of registered LLCs on Sunbiz and in Alabama. The brand is crowded. But if you landed here because you're a developer evaluating boilerplates to ship a SaaS faster, the shipping company and the corporate registry entries aren't your concern. The real question is which starter kit gets you to a production-ready product — not just a landing page.",[11,15,16],{},"This is an honest comparison between ShipFast, the Next.js boilerplate, and BoiledPlate, an AI-native Nuxt + Supabase starter. The short version: speed of setup is not the bottleneck you think it is.",[18,19,21],"h2",{"id":20},"the-shipfast-landscape","The ShipFast Landscape",[11,23,24],{},"ShipFast is Marc Lou's boilerplate — Next.js, Prisma, Stripe, battle-tested UI components, and a strong community of indie makers. It dominates search because it markets a clear promise: launch in days, not weeks. That promise resonates, and the product delivers a real head start on UI and scaffolding.",[11,26,27],{},"The confusion comes from everything else wearing the same name. \"Shipfast llc\" surfaces a BBB-rated express courier in Florida, an AI site generator, and multiple unrelated corporate filings. None of those solve the developer's actual problem, which is turning a stack into a system.",[18,29,31],{"id":30},"the-real-cost-of-fast-setup","The Real Cost of \"Fast\" Setup",[11,33,34,35,42],{},"Here's the uncomfortable truth every boilerplate downplays: the stack is easy. Ask ten founders how to ship fast and you get ten stack arguments — Next vs Nuxt, Postgres vs hosted, Stripe vs Paddle. Pick what you know and that debate ends in an afternoon. ",[36,37,41],"a",{"href":38,"rel":39},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fhow-to-ship-saas-fast",[40],"nofollow","The framework is not what slows you down",".",[11,44,45],{},"What slows you down is the plumbing between the pieces. A Stripe webhook that has to agree with your database. An RLS policy you forgot until a user saw someone else's data. The five places a new locale string has to land before the build stops complaining. \"Launch in days\" usually means a UI slapped together fast — not a billing system that survives its first refund.",[18,47,49],{"id":48},"stack-choice-vs-integration-the-actual-bottleneck","Stack Choice vs. Integration: The Actual Bottleneck",[11,51,52,53,58],{},"ShipFast bets on Next.js and Prisma. BoiledPlate bets on Nuxt and Supabase. Both are good bets. But the framework choice cascades far less than the integration work that follows it. ",[36,54,57],{"href":55,"rel":56},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fnuxt-supabase-stripe-saas-boilerplate",[40],"Wiring four services into something coherent"," — auth, database, payments, email — is where weeks disappear, regardless of which router you picked.",[11,60,61],{},"The difference between these two products is not \"Next vs Nuxt.\" It's whether the wiring is your job or the product's job.",[18,63,65],{"id":64},"the-agent-native-difference","The Agent-Native Difference",[11,67,68],{},"ShipFast is human-centric: you read the docs, you edit the config, you do the plumbing. BoiledPlate is agent-native. Your coding agent runs a setup interview — name, languages, theme, billing model — then reshapes the codebase with deterministic patches and provisions Stripe products, a Supabase database with RLS, and Google sign-in in one session.",[11,70,71,72,77],{},"That distinction matters because agents drift without rules. BoiledPlate ships an ",[36,73,76],{"href":74,"rel":75},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fconventions-for-ai-coding-agents",[40],"AGENTS.md contract"," — one documented way to do data access and secrets — so Claude produces consistent output across interviews, patches, and later customizations. Conventions written for the agent, not the next hire.",[18,79,81],{"id":80},"webhook-architecture-that-survives-production","Webhook Architecture That Survives Production",[11,83,84,85,90],{},"This is where \"fast\" boilerplates quietly fail. Your checkout success page is not your billing state. The ",[36,86,89],{"href":87,"rel":88},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-webhooks-source-of-truth",[40],"source of truth is the Stripe webhook",", not the client-side redirect a user may never reach.",[11,92,93,94,99],{},"BoiledPlate's webhooks are signature-verified and idempotent, so Stripe's retries don't duplicate side effects and a refund doesn't corrupt subscription state. There's a real subtlety here that most tutorials skip: ",[36,95,98],{"href":96,"rel":97},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fthe-github-invite-is-the-product-building-a-stripe-webhook-where-delivery-throws",[40],"some webhook failures must throw so Stripe retries, and some must never throw"," or you'll retry a duplicate forever. Getting that boundary right is the difference between a billing system and a time bomb.",[18,101,103],{"id":102},"row-level-security-and-data-privacy","Row-Level Security and Data Privacy",[11,105,106,107,112],{},"Application-level access checks are easy to forget and easy to bypass. Supabase ",[36,108,111],{"href":109,"rel":110},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdatabase\u002Fpostgres\u002Frow-level-security",[40],"row-level security"," enforces access at query time, in the database, where a missed check can't leak another user's data.",[11,114,115,116,121],{},"Compliance lives in the same territory. EU withdrawal law, for example, requires encoding a German consumer's waiver directly into the checkout — BoiledPlate handles this via ",[36,117,120],{"href":118,"rel":119},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-checkout-consent-collection-german-withdrawal-waiver",[40],"Stripe's consent_collection",". These are the edge cases that don't show up in a demo but do show up in a lawsuit.",[18,123,125],{"id":124},"billing-edge-cases-nobody-talks-about","Billing Edge Cases Nobody Talks About",[11,127,128,129,134],{},"Multi-plan subscriptions, free tiers, upgrades, trials, refunds, failed charges — ",[36,130,133],{"href":131,"rel":132},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-subscriptions-nuxt-supabase",[40],"each of these is a decision, not a checkbox",". The hard part is keeping your database's idea of a subscription in sync with Stripe's when webhooks arrive out of order, arrive twice, or arrive late.",[11,136,137,138,142],{},"Idempotency isn't a nice-to-have. It's the property that lets delivery guarantees actually hold when Stripe retries a ",[139,140,141],"code",{},"checkout.session.completed"," event three times.",[18,144,146],{"id":145},"deterministic-patches-vs-manual-wiring","Deterministic Patches vs. Manual Wiring",[11,148,149],{},"\"Agent-driven interviews reshape the codebase\" means your answers become repeatable, idempotent code changes — applied the same way every run. The alternative is hand-editing dozens of config files, one per decision, and hoping you didn't miss the fifth place a locale string had to land. Deterministic patches remove the \"hoping.\"",[18,151,153],{"id":152},"technical-debugging-real-bugs-from-the-field","Technical Debugging: Real Bugs from the Field",[11,155,156,157,162,163,168],{},"BoiledPlate exists because someone kept a running log of every edge case it took to make this stack trustworthy. Two examples from that log: a page that ",[36,158,161],{"href":159,"rel":160},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fthe-page-that-returned-200-on-the-server-and-500-in-the-browser-a-json-ld-tempor",[40],"returned 200 from curl but 500 in Chrome because of JSON-LD source order",", and a blog that ",[36,164,167],{"href":165,"rel":166},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Four-blog-canonically-pointed-at-localhost",[40],"told Google its canonical URL was localhost:3000",". There's also a Nuxt 4 typecheck breaking because of a Vercel analytics package — documented, not hidden. These are the bugs that \"launch in days\" marketing never mentions.",[18,170,172],{"id":171},"instant-delivery-and-the-pricing-question","Instant Delivery and the Pricing Question",[11,174,175],{},"BoiledPlate's product is literally a webhook-triggered GitHub invite: pay, and delivery happens instantly and idempotently. That mechanism ties directly to pricing — €159 one-time with lifetime updates and instant GitHub delivery, versus ShipFast's model. A one-time purchase changes the incentive structure: the product has to keep working after the sale, not just renew.",[11,177,178,179,184],{},"BoiledPlate also ships a free, MIT-licensed tier — ",[36,180,183],{"href":181,"rel":182},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Ffree-nuxt-supabase-saas-boilerplate",[40],"BoiledPlate Lite"," — if you'd rather clone it and wire it manually. The Pro tier is for when €159 is cheaper than the hours the plumbing would cost you.",[18,186,188],{"id":187},"auth-email-and-multilingual-from-day-one","Auth, Email, and Multilingual From Day One",[11,190,191,192,196],{},"Auth is Supabase with Google sign-in and RLS as the enforcement layer, not a pile of application-level checks. Transactional email runs through Resend — simple to send, ",[36,193,195],{"href":55,"rel":194},[40],"annoying to send exactly once",", which is a plumbing problem, not a feature. And i18n is built in: four languages from day one, because bolting localization on later means touching your dashboard architecture and every consent string, including that German withdrawal waiver in four languages.",[18,198,200],{"id":199},"the-no-merge-hell-philosophy","The \"No Merge Hell\" Philosophy",[11,202,203],{},"Most boilerplates fail after setup. You customize the code, a new version drops, and merging it becomes a nightmare of cryptic diffs. BoiledPlate ships semantic, agent-readable release notes and opt-in updates to customized code — so your agent can apply improvements without forcing you to re-do your own work. This is the real problem generic boilerplates leave unsolved.",[18,205,207],{"id":206},"when-to-pick-boiledplate-over-shipfast-and-vice-versa","When to Pick BoiledPlate Over ShipFast (and Vice Versa)",[11,209,210,211,215],{},"Pick ",[212,213,214],"strong",{},"BoiledPlate"," if:",[217,218,219,223,226,229],"ul",{},[220,221,222],"li",{},"You're on Nuxt and Supabase.",[220,224,225],{},"You're building with Claude or another coding agent and want the AGENTS.md contract keeping it consistent.",[220,227,228],{},"You want interview-driven, deterministic customization instead of manual config surgery.",[220,230,231],{},"You prefer a one-time purchase with lifetime updates.",[11,233,210,234,215],{},[212,235,236],{},"ShipFast",[217,238,239,242,245],{},[220,240,241],{},"You want Next.js and Prisma specifically.",[220,243,244],{},"You prefer a large, established indie-maker community.",[220,246,247],{},"You're comfortable doing the integration wiring yourself.",[11,249,250],{},"There's no universal winner. There's a stack you already know and a way you prefer to work.",[18,252,254],{"id":253},"the-unsexy-truth-plumbing-never-ships-itself","The Unsexy Truth: Plumbing Never Ships Itself",[11,256,257,258,42],{},"\"Launch in days\" means nothing if you then spend twelve weeks fixing webhook edge cases, billing state corruption, and RLS gaps you didn't know existed. Both products give you a head start. Only one is designed around the assumption that ",[36,259,262],{"href":260,"rel":261},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fnuxt-saas-boilerplate-for-ai-agents",[40],"the plumbing is the actual project",[11,264,265],{},"Be honest with yourself about what's left after setup: performance tuning, database indexing, rate limiting, and the compliance trails regulated industries demand — no boilerplate ships those for free. What BoiledPlate does is remove the endless, slightly-different-every-time wiring so you spend your weeks on the product, not the pipes.",[11,267,268,269,274,275,280],{},"If you're building on Nuxt and Supabase and working with a coding agent, that trade is worth making. ",[36,270,273],{"href":271,"rel":272},"https:\u002F\u002Fboiledplate.ai",[40],"See how the setup actually runs itself",", or read ",[36,276,279],{"href":277,"rel":278},"https:\u002F\u002Fboiledplate.ai\u002Fblog",[40],"the rest of the field notes"," before you decide.",{"title":282,"searchDepth":283,"depth":283,"links":284},"",3,[285,287,288,289,290,291,292,293,294,295,296,297,298,299],{"id":20,"depth":286,"text":21},2,{"id":30,"depth":286,"text":31},{"id":48,"depth":286,"text":49},{"id":64,"depth":286,"text":65},{"id":80,"depth":286,"text":81},{"id":102,"depth":286,"text":103},{"id":124,"depth":286,"text":125},{"id":145,"depth":286,"text":146},{"id":152,"depth":286,"text":153},{"id":171,"depth":286,"text":172},{"id":187,"depth":286,"text":188},{"id":199,"depth":286,"text":200},{"id":206,"depth":286,"text":207},{"id":253,"depth":286,"text":254},"2026-07-27","Compare ShipFast Next.js boilerplate vs BoiledPlate. Honest review of setup speed, stack choices, and production-ready SaaS development.",false,"md",{},true,"\u002Fblog\u002Fshipfast-llc-nextjs-boilerplate-review",{"title":5,"description":301},"blog\u002Fshipfast-llc-nextjs-boilerplate-review",[310,311,236,312],"SaaS development","Next.js boilerplate","web development","ilIsWsfUeHT32NWAeCzlUhuydPgMN9Llu5JnmH3u5U8",[315,762,1251],{"id":316,"title":317,"author":6,"body":318,"category":6,"date":750,"description":751,"draft":302,"extension":303,"image":6,"meta":752,"navigation":305,"path":753,"seo":754,"stem":755,"tags":756,"__hash__":761},"blog\u002Fblog\u002Fvibe-coding-ai.md","Vibe Coding AI: What It Actually Is and Where It Works",{"type":8,"value":319,"toc":735},[320,325,328,332,335,338,341,345,348,351,354,358,361,369,376,379,383,386,389,396,400,407,410,445,452,456,459,462,466,469,551,554,558,561,567,573,579,585,589,592,618,625,629,632,668,671,675,678,681,685,718,725,729,732],[321,322,324],"h1",{"id":323},"vibe-coding-what-it-is-where-it-works-and-where-it-falls-apart","Vibe Coding: What It Is, Where It Works, and Where It Falls Apart",[11,326,327],{},"Vibe coding is the practice of describing what you want in natural language and letting an AI agent write the code. The term went from Twitter joke to industry vocabulary in a matter of months, and it now describes everything from \"build me a to-do app\" prompts to agents that provision entire production stacks. This guide separates the marketing from the mechanics: what vibe coding actually is, where it earns its keep, and where it quietly falls apart.",[18,329,331],{"id":330},"what-is-vibe-coding-beyond-describe-your-app","What is Vibe Coding? Beyond \"Describe Your App\"",[11,333,334],{},"At its simplest, vibe coding means turning intent into working code without hand-typing every line. You describe a goal; a large language model generates the implementation. But that definition hides a spectrum.",[11,336,337],{},"At one end is prompt-based generation: you ask, the model produces a snippet, you paste it. At the other end is agent-driven development, where the model reads your codebase, follows your conventions, applies structured changes, and even provisions the services your app depends on.",[11,339,340],{},"The term exists now because the tooling finally caught up. Models like Claude can hold large contexts, follow multi-step instructions, and edit files in place. Editors like Cursor made iteration local and fast. Agents matured from autocomplete into something that can reason about architecture. \"Vibe coding\" is shorthand for that shift.",[18,342,344],{"id":343},"the-real-difference-vibe-coding-vs-no-code-builders","The Real Difference: Vibe Coding vs. No-Code Builders",[11,346,347],{},"No-code builders aim at people who don't read code. Vibe coding assumes you do. That single distinction explains most of the confusion in the market.",[11,349,350],{},"Tools like Lovable, Bolt, and Replit are excellent at generating a UI from a sentence. Where they struggle is the plumbing layer — the integration work between services that isn't clever but eats weeks. A generated login screen is easy. A signature-verified, idempotent Stripe webhook that agrees with your database is not.",[11,352,353],{},"Vibe coding wins in three places: working inside existing codebases, wiring integrations across services, and handling edge cases that a template can't anticipate. It fails, or at least needs a human, at pixel-perfect UX, complex state machines, and anything where \"looks plausible\" is not the same as \"is correct.\"",[18,355,357],{"id":356},"how-vibe-coding-actually-works-in-practice","How Vibe Coding Actually Works in Practice",[11,359,360],{},"The reliable pattern is an interview loop. The agent gathers requirements, generates code, and you iterate. Instead of one giant prompt, you have a conversation: What's your domain model? Which billing tiers? What auth scope?",[11,362,363,364,368],{},"The best results come when the agent has something to read. Folder structure, type hints, and a conventions file give it a map. Without one, an agent ",[36,365,367],{"href":74,"rel":366},[40],"adds a fourth way to fetch data"," the moment it finds three — not because it's dumb, but because it has no reason to prefer yours.",[11,370,371,372,375],{},"There's also a meaningful difference between free-form code generation and ",[212,373,374],{},"deterministic patches"," — automated, repeatable changes applied to a known starting point. Free-form output is creative and unpredictable. Deterministic patches reshape a codebase to your answers in a way you can review and reproduce.",[11,377,378],{},"Constraints make agents reliable. Strict TypeScript catches hallucinated APIs at compile time. Documented patterns give the model a single correct choice instead of five plausible ones.",[18,380,382],{"id":381},"the-stack-that-enables-vibe-coding","The Stack That Enables Vibe Coding",[11,384,385],{},"Some stacks are simply more agent-friendly than others. Nuxt, Supabase, and Stripe happen to combine well because each one rewards consistency.",[11,387,388],{},"Supabase's row-level security is a machine-readable contract: access rules live in the database and are enforced at query time. Stripe's model treats webhooks as the source of truth for billing state, which is exactly the kind of explicit, documented behavior an agent can follow. Nuxt's folder conventions give the agent predictable places to put things.",[11,390,391,392,42],{},"What breaks agents is the opposite: undocumented side effects, magic strings, and implicit state that only lives in someone's head. If a human has to \"just know\" that changing one file requires editing four others, the agent won't know either. This is the whole argument behind ",[36,393,395],{"href":260,"rel":394},[40],"why every boilerplate ships the stack but the wiring is the real work",[18,397,399],{"id":398},"vibe-coding-for-saas-where-it-saves-weeks","Vibe Coding for SaaS: Where It Saves Weeks",[11,401,402,403,42],{},"SaaS is where vibe coding pays off most, because SaaS is mostly plumbing. The framework debate is over in an afternoon; the wiring between pieces is ",[36,404,406],{"href":38,"rel":405},[40],"what actually eats your launch",[11,408,409],{},"Consider what a competent agent has to handle for a real product:",[217,411,412,422,428,439],{},[220,413,414,417,418,42],{},[212,415,416],{},"Billing edge cases",": idempotent refunds, subscription state transitions, and EU consent laws like the ",[36,419,421],{"href":118,"rel":420},[40],"German withdrawal waiver encoded into the pay button",[220,423,424,427],{},[212,425,426],{},"Multi-tenant auth",": row-level security expressed as policies the agent can read and extend.",[220,429,430,433,434,438],{},[212,431,432],{},"Payment as source of truth",": ",[36,435,437],{"href":87,"rel":436},[40],"your checkout success page should not touch billing state"," — the webhook is the record.",[220,440,441,444],{},[212,442,443],{},"Transactional email and consent tracking",": the unglamorous flows every paid product needs on day one.",[11,446,447,448,451],{},"This is the premise behind ",[36,449,214],{"href":271,"rel":450},[40],": the agent doesn't just write code, it provisions Stripe products and webhooks, a Supabase database with RLS, and Google sign-in in a single session.",[18,453,455],{"id":454},"vibe-coding-limitations-an-honest-take","Vibe Coding Limitations (An Honest Take)",[11,457,458],{},"Agents are not magic. They struggle with UX debugging and CSS refinement, where the feedback loop is visual and subjective. They make plausible architectural choices that are subtly wrong. And they hallucinate — confidently inventing an API method that doesn't exist.",[11,460,461],{},"Complex business logic still needs human review. The hallucination risk in architecture decisions is exactly why a conventions contract exists: it narrows the agent's choices to the ones you've already blessed. Knowing when to say \"no, I'll write this myself\" is a skill, not a failure.",[18,463,465],{"id":464},"vibe-coding-tools-tested-capabilities-vs-reality","Vibe Coding Tools Tested: Capabilities vs. Reality",[11,467,468],{},"The market is crowded, so it helps to compare tools by what they actually do rather than what they advertise.",[470,471,472,491],"table",{},[473,474,475],"thead",{},[476,477,478,482,485,488],"tr",{},[479,480,481],"th",{},"Tool",[479,483,484],{},"Interview",[479,486,487],{},"Service provisioning",[479,489,490],{},"Edge cases",[492,493,494,509,523,537],"tbody",{},[476,495,496,500,503,506],{},[497,498,499],"td",{},"Cursor",[497,501,502],{},"Limited",[497,504,505],{},"No",[497,507,508],{},"Local iteration only",[476,510,511,514,517,520],{},[497,512,513],{},"Claude (agent)",[497,515,516],{},"Strong",[497,518,519],{},"Yes, with the right scaffold",[497,521,522],{},"Handles when documented",[476,524,525,528,531,534],{},[497,526,527],{},"Lovable \u002F Bolt",[497,529,530],{},"Minimal",[497,532,533],{},"Weak on integrations",[497,535,536],{},"Fast UI, thin backend",[476,538,539,542,545,548],{},[497,540,541],{},"Replit",[497,543,544],{},"Some",[497,546,547],{},"Environment-based",[497,549,550],{},"No billing\u002Fauth defaults",[11,552,553],{},"Cursor is superb for local iteration but doesn't provision services. Lovable and Bolt produce UI fast and stall at integrations. Replit gives you an environment but no billing or auth defaults. Claude, given a codebase with a conventions contract, can run interviews, apply deterministic patches, and set up services — the difference is the scaffold, not just the model.",[18,555,557],{"id":556},"building-with-agents-patterns-that-work","Building With Agents: Patterns That Work",[11,559,560],{},"A few habits separate productive vibe coding from frustrating chaos.",[11,562,563,566],{},[212,564,565],{},"Write specific, convention-following prompts."," Vague prompts get vague code. Point the agent at your patterns.",[11,568,569,572],{},[212,570,571],{},"Keep code review discipline."," Agents produce plausible output. Plausible is not correct. Read every diff as if a fast, tireless junior wrote it.",[11,574,575,578],{},[212,576,577],{},"Iterate one loop per major feature."," One interview per billing flow beats one 2,000-word prompt trying to build everything.",[11,580,581,584],{},[212,582,583],{},"Use version control and semantic release notes"," so updates stay agent-readable and you can trace what changed and why.",[18,586,588],{"id":587},"the-anti-plumbing-stack-choosing-tools-for-agent-compatibility","The Anti-Plumbing Stack: Choosing Tools for Agent Compatibility",[11,590,591],{},"Framework choice matters less than consistency. Pick tools that expose explicit, documented contracts:",[217,593,594,600,606,612],{},[220,595,596,599],{},[212,597,598],{},"Supabase",": RLS is machine-readable security; agents respect policies they can read.",[220,601,602,605],{},[212,603,604],{},"Stripe",": webhooks as the source of truth — a model agents get right when told to.",[220,607,608,611],{},[212,609,610],{},"Resend",": transactional email without heavy vendor lock-in.",[220,613,614,617],{},[212,615,616],{},"Nuxt",": folder conventions an agent can follow without guessing.",[11,619,620,621,42],{},"The precise wiring each of these demands is covered in detail in ",[36,622,624],{"href":55,"rel":623},[40],"what it actually takes to wire up a Nuxt, Supabase and Stripe SaaS",[18,626,628],{"id":627},"vibe-coding-in-production-real-world-edge-cases","Vibe Coding in Production: Real-World Edge Cases",[11,630,631],{},"Production is where the honest work shows up. A few examples worth prompting for explicitly:",[217,633,634,640,646,657,662],{},[220,635,636,639],{},[212,637,638],{},"Webhook failure handling"," and idempotency, so a retried event doesn't double-charge or double-provision.",[220,641,642,645],{},[212,643,644],{},"Refund flows"," and billing dispute workflows.",[220,647,648,651,652,656],{},[212,649,650],{},"Multi-plan subscription logic"," — the ",[36,653,655],{"href":131,"rel":654},[40],"five decisions behind Stripe subscriptions"," — plus usage tracking.",[220,658,659,42],{},[212,660,661],{},"Consent withdrawal and GDPR data deletion",[220,663,664,667],{},[212,665,666],{},"Rate limiting"," on agent-generated API calls.",[11,669,670],{},"These are exactly the flows a template glosses over and a real launch cannot.",[18,672,674],{"id":673},"vibe-coding-vs-traditional-development-the-real-trade-offs","Vibe Coding vs. Traditional Development: The Real Trade-Offs",[11,676,677],{},"The trade-off is speed to MVP versus review overhead. Vibe coding collapses weeks of plumbing into a session, but you pay it back in code review. Agent-driven setup gets you to a running product fast; deep, unusual customization still favors hand-coding.",[11,679,680],{},"Vibe coding is worth it for SaaS, multi-service provisioning, and integration-heavy work. Traditional coding still wins for bare-metal performance, custom DSLs, and performance-critical paths where every allocation matters.",[18,682,684],{"id":683},"getting-started-with-vibe-coding-a-practical-workflow","Getting Started With Vibe Coding: A Practical Workflow",[686,687,688,694,700,706,712],"ol",{},[220,689,690,693],{},[212,691,692],{},"Set up your environment",": an agent like Claude, a codebase it can read, and a conventions contract.",[220,695,696,699],{},[212,697,698],{},"First interview",": nail the domain model, billing tiers, and auth scope.",[220,701,702,705],{},[212,703,704],{},"Second pass",": integrations and edge cases — webhooks, RLS, email.",[220,707,708,711],{},[212,709,710],{},"Continuous",": refine prompts based on the quality of what comes back.",[220,713,714,717],{},[212,715,716],{},"Know your escape hatches",": when to hand-code and when to override the agent.",[11,719,720,721,724],{},"If you want a free place to practice the loop, ",[36,722,183],{"href":181,"rel":723},[40]," is an MIT-licensed Nuxt + Supabase starter you can clone and wire yourself.",[18,726,728],{"id":727},"the-future-of-vibe-coding","The Future of Vibe Coding",[11,730,731],{},"Deterministic patches will stop being a bespoke trick and become standard practice. Agents will increasingly act as service provisioners, not just code writers. Edge cases — billing, compliance, webhooks — will become first-class prompts rather than afterthoughts. And we'll start measuring agent-written code the way we measure human code: on readability and maintainability, not just whether it compiles.",[11,733,734],{},"Vibe coding won't replace developers. It shifts the work from typing plumbing to reviewing it — and, if you set up your conventions well, that's a much better place to spend your time.",{"title":282,"searchDepth":283,"depth":283,"links":736},[737,738,739,740,741,742,743,744,745,746,747,748,749],{"id":330,"depth":286,"text":331},{"id":343,"depth":286,"text":344},{"id":356,"depth":286,"text":357},{"id":381,"depth":286,"text":382},{"id":398,"depth":286,"text":399},{"id":454,"depth":286,"text":455},{"id":464,"depth":286,"text":465},{"id":556,"depth":286,"text":557},{"id":587,"depth":286,"text":588},{"id":627,"depth":286,"text":628},{"id":673,"depth":286,"text":674},{"id":683,"depth":286,"text":684},{"id":727,"depth":286,"text":728},"2026-07-26","Explore vibe coding AI: how natural language prompts generate code, the difference from no-code tools, and where AI agents actually deliver results.",{},"\u002Fblog\u002Fvibe-coding-ai",{"title":317,"description":751},"blog\u002Fvibe-coding-ai",[757,758,759,760],"AI","code generation","vibe coding","development tools","1UKqjha_b2t6Ck5ww4bJQxTBxsLrxzsBBo-yTf1pbOs",{"id":763,"title":764,"author":6,"body":765,"category":6,"date":1241,"description":1242,"draft":302,"extension":303,"image":6,"meta":1243,"navigation":305,"path":1244,"seo":1245,"stem":1246,"tags":1247,"__hash__":1250},"blog\u002Fblog\u002Fvibecoding-apps-promise-vs-reality.md","Vibecoding Apps: The Promise vs. Production Reality",{"type":8,"value":766,"toc":1223},[767,776,779,783,786,789,807,810,814,817,820,833,837,840,866,869,874,928,932,935,971,974,978,981,988,1000,1004,1007,1015,1018,1044,1047,1051,1062,1065,1069,1072,1106,1109,1113,1116,1136,1139,1143,1175,1179,1187,1191,1194,1198,1205,1209,1215],[11,768,769,770,775],{},"Vibe coding has a clean pitch: describe your app in plain language, and an AI writes the code. The term went mainstream after Andrej Karpathy ",[36,771,774],{"href":772,"rel":773},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVibe_coding",[40],"described it"," as \"fully giving in to the vibes\" and forgetting the code even exists. For prototypes, it genuinely works. For production SaaS with real billing and real users, the gap between \"it runs\" and \"it ships\" is where most vibecoding apps quietly stall.",[11,777,778],{},"This is an honest map of what vibe coding actually does, where the tools break, and how agent-guided building differs from one-shot generation.",[18,780,782],{"id":781},"what-vibe-coding-actually-is","What Vibe Coding Actually Is",[11,784,785],{},"Vibe coding is AI-assisted development where natural language drives code generation instead of traditional syntax. You describe intent; a model produces implementation.",[11,787,788],{},"But \"vibe coding\" is a spectrum, not one thing:",[217,790,791,797],{},[220,792,793,796],{},[212,794,795],{},"Pure description"," (Google AI Studio, Lovable): you type a goal, you get output.",[220,798,799,802,803,806],{},[212,800,801],{},"Agent-guided structured building"," (Cursor with conventions, ",[36,804,214],{"href":271,"rel":805},[40],"): an agent interviews you, then applies structured changes to a known codebase shape.",[11,808,809],{},"Both use natural language. Only one keeps producing coherent code past the first afternoon.",[18,811,813],{"id":812},"the-promise-vs-the-reality-gap","The Promise vs. the Reality Gap",[11,815,816],{},"Marketing says: describe your app, get a working product. What actually happens is: description → generated code → integration hell.",[11,818,819],{},"The generated code is usually the easy 10%. The other 90% is plumbing — the wiring between services that no demo ever shows. Stripe webhooks that agree with your database. Row-level security policies. Refund state. EU consent flows. i18n strings that have to land in five places before the build stops complaining.",[11,821,822,823,827,828,832],{},"Vibe coding fails silently here because a one-shot generator can produce a Stripe checkout button that ",[824,825,826],"em",{},"looks"," done and has no working webhook behind it. It compiles. It even redirects. It just doesn't record the payment when the user closes the tab. As we've argued before, ",[36,829,831],{"href":38,"rel":830},[40],"the stack is easy and the plumbing is the project"," — and plumbing is exactly what one-shot tools skip.",[18,834,836],{"id":835},"vibe-coding-tools-an-honest-taxonomy","Vibe Coding Tools: An Honest Taxonomy",[11,838,839],{},"Four broad categories, each solving a different slice:",[217,841,842,848,854,860],{},[220,843,844,847],{},[212,845,846],{},"No-code visual builders"," (FlutterFlow, Canva Code): UI-first, limited backend logic. Fine for MVPs, high lock-in.",[220,849,850,853],{},[212,851,852],{},"Pure language-to-code"," (Google AI Studio, Lovable): fast initial output, weak at multi-service integration.",[220,855,856,859],{},[212,857,858],{},"Agent-guided structured builders"," (BoiledPlate, Cursor + strong conventions): interviews shape the infrastructure, deterministic patches keep the codebase coherent.",[220,861,862,865],{},[212,863,864],{},"Full-stack IDE environments"," (Replit, Bolt.new, Base44): sandboxed and impressive, but you still wire the real services yourself.",[11,867,868],{},"None of these is strictly better. They're built for different points in the lifecycle. The mistake is using an exploration tool for a production launch.",[870,871,873],"h3",{"id":872},"what-each-actually-solves","What each actually solves",[470,875,876,886],{},[473,877,878],{},[476,879,880,883],{},[479,881,882],{},"Need",[479,884,885],{},"Who handles it well",[492,887,888,896,904,912,920],{},[476,889,890,893],{},[497,891,892],{},"Rapid prototyping",[497,894,895],{},"All of them, inconsistently",[476,897,898,901],{},[497,899,900],{},"Production auth with RLS",[497,902,903],{},"Only tools with deterministic secrets + database-level permissions",[476,905,906,909],{},[497,907,908],{},"Real billing (idempotent webhooks)",[497,910,911],{},"Almost none in one-shot mode",[476,913,914,917],{},[497,915,916],{},"Multi-language i18n",[497,918,919],{},"Almost none automatically",[476,921,922,925],{},[497,923,924],{},"SEO (JSON-LD, canonicals, prerendering)",[497,926,927],{},"Only purpose-built frameworks",[18,929,931],{"id":930},"the-workflow-where-the-time-actually-goes","The Workflow: Where the Time Actually Goes",[11,933,934],{},"People imagine vibecoding apps is 90% prompting. In practice, for anything real:",[217,936,937,943,949,954,960,965],{},[220,938,939,942],{},[212,940,941],{},"Prompt clarity and iteration"," — 5–15% of time, but decisive.",[220,944,945,948],{},[212,946,947],{},"Reviewing generated code quality"," — 20–30%.",[220,950,951,953],{},[212,952,487],{}," (Stripe, Supabase, Google OAuth) — manual in most tools.",[220,955,956,959],{},[212,957,958],{},"Webhook architecture and idempotency"," — 30–40%. This is the real work.",[220,961,962,964],{},[212,963,490],{}," — refunds, subscription transitions, EU withdrawal periods.",[220,966,967,970],{},[212,968,969],{},"Deployment and monitoring"," — always an afterthought.",[11,972,973],{},"The prompt is the smallest slice. The webhook is the biggest. That ratio is why \"describe your app\" undersells the job.",[18,975,977],{"id":976},"ai-agents-vs-vibe-coding-tools","AI Agents vs. Vibe Coding Tools",[11,979,980],{},"The core difference is memory and structure.",[11,982,983,984,987],{},"A vibe coding tool does one-shot generation with a limited context window and no persistent conventions. An agent working against a starter kit does iterative interviews, applies deterministic patches, and reads a contract that tells it how ",[824,985,986],{},"this"," codebase does things.",[11,989,990,991,995,996,999],{},"That contract matters more than it sounds. As we've written, ",[36,992,994],{"href":74,"rel":993},[40],"an agent cannot smell a codebase"," — give it three ways to fetch data and it cheerfully adds a fourth, because it has no reason to prefer yours. Without written conventions, every suggestion drifts a little further from the shape of your code. BoiledPlate ships an ",[139,997,998],{},"AGENTS.md"," contract precisely so the agent reads one documented way to do data access and secrets, then respects your customizations instead of reinventing them.",[18,1001,1003],{"id":1002},"the-billing-problem-nobody-solves","The Billing Problem Nobody Solves",[11,1005,1006],{},"This is where vibecoding apps break most predictably.",[11,1008,1009,1010,1014],{},"Client-side success pages lie. The user pays, the browser redirects, and then they close the tab before your success page finishes running. If your billing state depends on that page, you just lost a payment record. The only reliable source of truth is the Stripe webhook — ",[36,1011,1013],{"href":87,"rel":1012},[40],"your checkout success page should not touch your billing state"," at all.",[11,1016,1017],{},"Doing this right requires:",[217,1019,1020,1032,1038],{},[220,1021,1022,1025,1026,1031],{},[212,1023,1024],{},"Idempotent webhooks"," so a redelivered event doesn't double-charge or double-provision. Stripe ",[36,1027,1030],{"href":1028,"rel":1029},"https:\u002F\u002Fdocs.stripe.com\u002Fwebhooks#handle-duplicate-events",[40],"explicitly recommends"," handling duplicate events.",[220,1033,1034,1037],{},[212,1035,1036],{},"Refund and downgrade state machines"," — partial refunds, subscription changes, EU withdrawal windows.",[220,1039,1040,1043],{},[212,1041,1042],{},"Stripe as the single source of truth",", with everything else a view of Stripe state.",[11,1045,1046],{},"Almost no one-shot tool encodes this. It requires ongoing architecture, not a single generation.",[18,1048,1050],{"id":1049},"auth-and-security-where-it-breaks-quietly","Auth and Security: Where It Breaks Quietly",[11,1052,1053,1054,1057,1058,1061],{},"Row-level security is invisible in generated code and critical in production. A generator can wire Google sign-in flawlessly and still leave your database wide open, because sign-in only proves ",[824,1055,1056],{},"who"," the user is — RLS decides ",[824,1059,1060],{},"what rows"," they can touch.",[11,1063,1064],{},"Supabase RLS policies are auto-generated wrong more often than right. This is the classic \"a user saw someone else's data\" bug, and it never shows up in a demo because demos have one user. Agent-driven builders solve this by encoding RLS templates as part of the starter, not leaving each policy to a fresh guess.",[18,1066,1068],{"id":1067},"real-world-bugs-in-generated-code","Real-World Bugs in Generated Code",[11,1070,1071],{},"Generated code fails in specific, repeatable ways:",[217,1073,1074,1085,1094,1100],{},[220,1075,1076,1079,1080,1084],{},[212,1077,1078],{},"JSON-LD hydration crashes"," in Nuxt SSR — a page that returns ",[36,1081,1083],{"href":159,"rel":1082},[40],"200 from curl and 500 in the browser"," because of source order. A generator won't catch this; it's an integration bug, not a syntax bug.",[220,1086,1087,1090,1091,42],{},[212,1088,1089],{},"Canonical URL edge cases"," — trailing slashes, query params, and the memorable case of a blog telling Google its canonical URL was ",[139,1092,1093],{},"localhost:3000",[220,1095,1096,1099],{},[212,1097,1098],{},"TypeScript strict mode"," — most generators skip it and hand you union-type nightmares.",[220,1101,1102,1105],{},[212,1103,1104],{},"Peer dependency conflicts"," — Stripe SDK versions, Supabase auth breaking changes.",[11,1107,1108],{},"None of these are clever problems. They're endless, slightly different, and exactly the kind of thing that eats a launch weekend.",[18,1110,1112],{"id":1111},"the-cost-equation","The Cost Equation",[11,1114,1115],{},"Realistic numbers matter more than hype:",[217,1117,1118,1124,1130],{},[220,1119,1120,1123],{},[212,1121,1122],{},"Time to working prototype",": a couple of hours in Lovable; roughly an hour with a structured starter if the interview is clear.",[220,1125,1126,1129],{},[212,1127,1128],{},"Time to production-ready",": add 2–4 weeks of plumbing regardless of tool.",[220,1131,1132,1135],{},[212,1133,1134],{},"Cost of lock-in",": high with FlutterFlow and Canva Code, medium with Replit and Bolt, low with GitHub-native delivery where the code lives next to your CI\u002FCD.",[11,1137,1138],{},"The prototype gap between tools is small. The production gap is enormous, and it's decided by architecture, not by prompt quality.",[18,1140,1142],{"id":1141},"choosing-a-tool-a-quick-matrix","Choosing a Tool: A Quick Matrix",[217,1144,1145,1151,1157,1163,1169],{},[220,1146,1147,1150],{},[212,1148,1149],{},"MVP under a week",": Google AI Studio, Lovable, Canva Code.",[220,1152,1153,1156],{},[212,1154,1155],{},"Production SaaS with billing",": an agent plus a strong starter kit, or manual work with agent oversight.",[220,1158,1159,1162],{},[212,1160,1161],{},"Mobile-first",": FlutterFlow.",[220,1164,1165,1168],{},[212,1166,1167],{},"Maximum flexibility",": Replit, Bolt.new — sandboxed, but you wire everything.",[220,1170,1171,1174],{},[212,1172,1173],{},"Zero lock-in",": GitHub + Claude agent + a Nuxt\u002FSupabase\u002FStripe starter.",[18,1176,1178],{"id":1177},"why-nuxt-supabase-stripe-works-for-agents","Why Nuxt + Supabase + Stripe Works for Agents",[11,1180,1181,1182,1186],{},"This combination isn't fashion; it's about predictable integration points. Nuxt's universal rendering forces deterministic patterns an agent can read and extend. Supabase RLS policies are template-able. Stripe webhooks give one unambiguous source of truth. Every SaaS starter ships this stack — but as we've noted, ",[36,1183,1185],{"href":260,"rel":1184},[40],"that was never the hard part",". The parts are cheap; bolting them together is the project.",[18,1188,1190],{"id":1189},"what-vibe-coding-wont-do-yet","What Vibe Coding Won't Do Yet",[11,1192,1193],{},"Be honest about the ceiling. Generated schemas are brittle, so migrations are risky. Updating generated code tends to break old queries. Vibe-coded apps are hard to inherit because no one wrote down the conventions, which means no one owns the plumbing. And AI-generated code against regulatory requirements is still a gray area.",[18,1195,1197],{"id":1196},"where-vibe-coding-genuinely-shines","Where Vibe Coding Genuinely Shines",[11,1199,1200,1201,1204],{},"None of this means vibe coding is a fad. It is genuinely faster for exploration, for the prototype-to-feedback loop, and for grinding down repetitive boilerplate. The best use of an agent isn't \"build me a startup\" — it's \"given this codebase shape, what's the right next step?\" That question only has a good answer when the codebase ",[824,1202,1203],{},"has"," a documented shape.",[18,1206,1208],{"id":1207},"conclusion-a-layer-not-a-replacement","Conclusion: A Layer, Not a Replacement",[11,1210,1211,1212,1214],{},"The real speedup in vibecoding apps isn't the initial generation — it's structured integration. The framework was never what slowed you down; the plumbing was. Use vibe coding tools for exploration, and use agent-guided starter kits for production, where deterministic patches and an ",[139,1213,998],{}," contract keep output coherent past month three.",[11,1216,1217,1218,1222],{},"That's the model BoiledPlate is built around: an agent that interviews you, provisions Stripe, Supabase, and Google sign-in, and then respects your customizations instead of drifting away from them. You can read ",[36,1219,1221],{"href":277,"rel":1220},[40],"more of the engineering log on the blog"," — every edge case it took to make the plumbing trustworthy is written down, because that's the part vibe coding still can't hand you for free.",{"title":282,"searchDepth":283,"depth":283,"links":1224},[1225,1226,1227,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240],{"id":781,"depth":286,"text":782},{"id":812,"depth":286,"text":813},{"id":835,"depth":286,"text":836,"children":1228},[1229],{"id":872,"depth":283,"text":873},{"id":930,"depth":286,"text":931},{"id":976,"depth":286,"text":977},{"id":1002,"depth":286,"text":1003},{"id":1049,"depth":286,"text":1050},{"id":1067,"depth":286,"text":1068},{"id":1111,"depth":286,"text":1112},{"id":1141,"depth":286,"text":1142},{"id":1177,"depth":286,"text":1178},{"id":1189,"depth":286,"text":1190},{"id":1196,"depth":286,"text":1197},{"id":1207,"depth":286,"text":1208},"2026-07-19","Explore how vibecoding apps work, where they break down, and the gap between prototypes and production SaaS that actually ships with real users.",{},"\u002Fblog\u002Fvibecoding-apps-promise-vs-reality",{"title":764,"description":1242},"blog\u002Fvibecoding-apps-promise-vs-reality",[1248,1249,758,310],"vibecoding","AI development","6xVs1JNK5DqaC2I5I7p7VIrAUYF6PkCHDYjGNHtBzOs",{"id":1252,"title":1253,"author":6,"body":1254,"category":6,"date":1544,"description":1545,"draft":302,"extension":303,"image":6,"meta":1546,"navigation":305,"path":1547,"seo":1548,"stem":1549,"tags":1550,"__hash__":1555},"blog\u002Fblog\u002Fvibe-coding-gemini-production.md","Vibe Coding with Gemini: From Demo to Production Reality",{"type":8,"value":1255,"toc":1528},[1256,1259,1263,1266,1269,1273,1276,1279,1282,1286,1289,1292,1306,1314,1318,1321,1327,1330,1338,1342,1345,1353,1359,1363,1371,1383,1395,1399,1402,1413,1417,1425,1447,1451,1459,1463,1466,1470,1473,1485,1491,1494,1498,1506,1510,1516,1520],[11,1257,1258],{},"Vibe coding is having a moment. Type a sentence, get an app. Google's pitch with Gemini in AI Studio is that anyone can describe a \"vibe\" and watch a working React app appear, then ship it to Cloud Run in minutes. It's genuinely impressive. It's also where most of the honest conversation stops. Because the distance between \"it runs on my screen\" and \"it survives paying customers\" is exactly the distance this article is about.",[18,1260,1262],{"id":1261},"what-vibe-coding-actually-means","What \"Vibe Coding\" Actually Means",[11,1264,1265],{},"Vibe coding means turning natural-language prompts into functional code — not sketches, not pseudocode, but something that compiles and deploys. You describe the goal (\"a neon-themed pomodoro timer for my kid\") and Gemini writes it. People have built personalized apps in under 30 minutes this way, and the demos are real.",[11,1267,1268],{},"The gap is between \"describe your vibe\" and \"ships to production.\" Gemini positions this as democratized development: anyone can code now. What that actually requires, once you leave the single-file demo, is everything vibe coding quietly skips — billing state, data isolation, webhook retries, compliance. The framework was never the hard part.",[18,1270,1272],{"id":1271},"gemini-vs-claude-the-agent-architecture-choice","Gemini vs. Claude: The Agent Architecture Choice",[11,1274,1275],{},"The two dominant coding-agent styles behave very differently, and it matters more than benchmarks suggest.",[11,1277,1278],{},"Gemini sprints. As one developer put it comparing it to Claude Code, \"Gemini doesn't make a plan and ask you if you want to proceed. It sprints ahead.\" That's fast and satisfying for a prototype. Gemini 2.5 Flash is faster still than Gemini 3 Pro, but developers who ran the same project through both found Flash more manual and more error-prone — speed traded against correctness.",[11,1280,1281],{},"Claude's agentic workflow leans the other way: plan first, then execute deliberate, repeatable changes. For a throwaway timer, planning is overhead. For a multi-tenant SaaS with billing, planning is the whole game. Consistency beats velocity the moment your codebase outlives the first session.",[18,1283,1285],{"id":1284},"the-real-cost-of-fast-single-file-apps-vs-plumbing","The Real Cost of \"Fast\": Single-File Apps vs. Plumbing",[11,1287,1288],{},"A neon React timer in half an hour is a fair benchmark for what vibe coding covers well: UI components, basic logic, deployment scaffolding.",[11,1290,1291],{},"Here's what it doesn't touch:",[217,1293,1294,1297,1300,1303],{},[220,1295,1296],{},"Signature-verified, idempotent Stripe webhooks",[220,1298,1299],{},"Row-level security so users can't read each other's rows",[220,1301,1302],{},"Refund flows that don't double-cancel on a retry",[220,1304,1305],{},"EU consent compliance baked into the pay button",[11,1307,1308,1309,1313],{},"None of that is clever work. It's endless, slightly-different-every-time work — the kind we call ",[36,1310,1312],{"href":38,"rel":1311},[40],"plumbing",". And it's where launches actually stall. Vibe coding a UI is a solved problem. Wiring the services beneath it is the project.",[18,1315,1317],{"id":1316},"building-real-apps-where-google-ai-studio-hits-a-wall","Building Real Apps: Where Google AI Studio Hits a Wall",[11,1319,1320],{},"Google AI Studio's newer vibe-coding experience can add databases and even multiplayer. That's progress, but \"add a database\" is where the real work starts, not where it ends.",[11,1322,1323,1324,1326],{},"Multiplayer requires state synchronization and, critically, ",[212,1325,111],{}," so one user's writes never leak into another's session. A database alone gives you none of that — you still need a migration strategy, schema validation, and a policy layer enforced at query time.",[11,1328,1329],{},"Billing is worse. Provisioning Stripe products, verifying webhook signatures, and making handlers idempotent is not something a prompt reliably produces. And auth? Adding Google sign-in is trivial. Managing the user session, the RLS policies tied to it, and the secrets that must never reach the client is not.",[11,1331,1332,1333,1337],{},"This is exactly the box-of-parts problem we've written about before: ",[36,1334,1336],{"href":260,"rel":1335},[40],"every boilerplate ships the stack",", then leaves you alone in a room with the wiring.",[18,1339,1341],{"id":1340},"the-vibe-coding-workflow-that-actually-works-for-saas","The Vibe Coding Workflow That Actually Works for SaaS",[11,1343,1344],{},"The missing step in the \"describe it and deploy\" pitch is the interview.",[11,1346,1347,1348,1352],{},"Before an agent should touch a SaaS codebase, it needs answers: What's the billing model — one-time or subscription, how many plans? What user roles exist? What data must be isolated per tenant? BoiledPlate's setup runs exactly this way — ",[36,1349,1351],{"href":271,"rel":1350},[40],"your coding agent interviews you",", then provisions Stripe, Supabase, and Google sign-in based on your answers.",[11,1354,1355,1356,1358],{},"Those answers drive ",[212,1357,374],{},": automated, repeatable code changes that reshape the starter to your specific setup rather than hallucinating a fresh architecture each run. And validation matters — \"the code compiles\" is not \"the billing survives production.\" Those are two entirely different claims.",[18,1360,1362],{"id":1361},"webhook-architecture-the-plumbing-nobody-teaches","Webhook Architecture: The Plumbing Nobody Teaches",[11,1364,1365,1366,1370],{},"Here is the single lesson most vibe-coded billing systems get wrong: your checkout success page is not your source of truth. ",[36,1367,1369],{"href":87,"rel":1368},[40],"Stripe webhooks are",". The user can close the tab, lose signal, or refresh — the webhook is what tells you money moved.",[11,1372,1373,1374,1377,1378,1382],{},"That means handlers must be ",[212,1375,1376],{},"idempotent",". Stripe retries deliveries. If your handler grants access or cancels a subscription twice because it got called twice, you have a bug that only shows up under load. We've written in detail about ",[36,1379,1381],{"href":96,"rel":1380},[40],"a webhook where some failures must throw and some must never do"," — the distinction is the difference between a self-healing system and a support ticket.",[11,1384,1385,1386,1390,1391,1394],{},"Compliance lives here too. Encoding a ",[36,1387,1389],{"href":118,"rel":1388},[40],"German withdrawal-right waiver into the pay button"," via Stripe's ",[139,1392,1393],{},"consent_collection"," is not something a vibe prompt knows to do. It's compliance as code, and it's mandatory in the EU.",[18,1396,1398],{"id":1397},"agent-consistency-writing-conventions-that-survive-updates","Agent Consistency: Writing Conventions That Survive Updates",[11,1400,1401],{},"An agent cannot smell a codebase. Give it three ways to fetch data and it adds a fourth — not because it's dumb, but because it has no reason to prefer yours. This is the failure mode behind \"anyone can code\": the agent drifts, and by month three you have five patterns for one job.",[11,1403,1404,1405,1407,1408,1412],{},"The fix is a contract. An ",[139,1406,998],{}," file documents one way to access data, handle secrets, and apply patches, so ",[36,1409,1411],{"href":74,"rel":1410},[40],"agent output stays consistent"," past the first session. Gemini's sprint-ahead style has no equivalent plan-and-confirm gate, which is fine for a demo and dangerous for a codebase you'll maintain for a year.",[18,1414,1416],{"id":1415},"vibe-coding-languages-frameworks-and-real-bugs","Vibe Coding Languages, Frameworks, and Real Bugs",[11,1418,1419,1420,1424],{},"Most vibe coding assumes one language — JavaScript or TypeScript — and one happy path. Production is messier. A serious SaaS often needs ",[36,1421,1423],{"href":271,"rel":1422},[40],"four languages from day one"," via i18n, where a single new locale string has to land in five places before the build stops complaining.",[11,1426,1427,1428,1432,1433,1436,1437,1440,1441,1446],{},"Real debugging stories make the point. We shipped a page that ",[36,1429,1431],{"href":159,"rel":1430},[40],"returned 200 from curl and 500 in Chrome"," — a JSON-LD hydration bug hiding in source order. Our blog once ",[36,1434,167],{"href":165,"rel":1435},[40],". A ",[139,1438,1439],{},"@vercel\u002Fanalytics"," install ",[36,1442,1445],{"href":1443,"rel":1444},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fvercel-web-analytics-nuxt-4-analytics-package-breaks-typecheck",[40],"broke Nuxt typecheck"," through a peer-dependency conflict. None of these appear in a vibe-coding demo. All of them appear in a real project.",[18,1448,1450],{"id":1449},"typed-end-to-end-why-vibe-coding-needs-typescript-discipline","Typed End to End: Why Vibe Coding Needs TypeScript Discipline",[11,1452,1453,1454,1458],{},"Natural-language-to-code loves shortcuts, and the first shortcut is usually type safety. That's a false economy. TypeScript in ",[36,1455,1457],{"href":271,"rel":1456},[40],"strict mode"," catches bugs at compile time instead of in a customer's checkout. Pair it with Zod validation and a database schema treated as a single source of truth, and refactors stop being terrifying. Vibe code without types and you're signing up for refactoring hell the first time requirements change.",[18,1460,1462],{"id":1461},"deployment-speed-is-not-shipping-speed","Deployment Speed Is Not Shipping Speed",[11,1464,1465],{},"\"Deploy to Cloud Run in minutes\" is a genuine feature. But fast-to-first-deploy and safe-in-production pull in opposite directions. A template you clone hands you parts. A kit that adapts to your interview answers hands you a wired product — and, in BoiledPlate's case, delivers it through a GitHub invite with lifetime updates. The delivery mechanism is instant; the value is that the plumbing already agrees with itself.",[18,1467,1469],{"id":1468},"when-vibe-coding-makes-sense-and-when-it-doesnt","When Vibe Coding Makes Sense (And When It Doesn't)",[11,1471,1472],{},"Be honest about fit.",[11,1474,1475,1478,1479,1484],{},[212,1476,1477],{},"Reach for Gemini AI Studio"," for prototypes, internal tools, learning projects, and quick wins. It genuinely shines here, and Google's own ",[36,1480,1483],{"href":1481,"rel":1482},"https:\u002F\u002Fai.google.dev\u002F",[40],"vibe-coding documentation"," is a good starting point.",[11,1486,1487,1490],{},[212,1488,1489],{},"Reach for agent-driven plumbing"," the moment you have billing-critical, multi-tenant, or compliance-heavy requirements. The checklist is simple: does your app need webhooks, RLS, or signature verification? If yes, you've left vibe-coding territory.",[11,1492,1493],{},"The pragmatic middle is a hybrid — vibe code the UI, then apply deterministic patches to the dangerous parts.",[18,1495,1497],{"id":1496},"the-one-time-cost-vs-subscription-trap","The One-Time Cost vs. Subscription Trap",[11,1499,1500,1501,1505],{},"\"Free and fast\" often means \"expensive to maintain.\" Free vibe-coding access still leaves you owning recurring infrastructure and — worse — the ongoing cost of code nobody wrote a contract for. BoiledPlate Pro is €159 one-time with lifetime updates and no lock-in, and if you want to start free, ",[36,1502,1504],{"href":181,"rel":1503},[40],"BoiledPlate Lite is MIT-licensed",". What you actually pay for isn't the stack — it's the agent-readable contracts, deterministic patches, and compliance encoded as code.",[18,1507,1509],{"id":1508},"the-future-of-vibe-coding-maturity-not-speed","The Future of Vibe Coding: Maturity, Not Speed",[11,1511,1512,1513,1515],{},"The trajectory is clear: from \"write code fast\" to \"write code safely.\" ",[139,1514,998],{},"-style contracts are becoming the norm, and deterministic patches are the bridge between a natural-language prompt and code you'd put in front of a paying customer. Speed got us the demo. Consistency gets us production.",[18,1517,1519],{"id":1518},"getting-started","Getting Started",[11,1521,1522,1523,1527],{},"Use Gemini when you're learning or experimenting. Use an agent-driven kit when you're shipping something with money, tenants, or regulators involved. If your vibe-coded app touches billing state, isolates user data, or verifies a webhook signature, the plumbing is your project — and it's worth reading ",[36,1524,1526],{"href":55,"rel":1525},[40],"what wiring a Nuxt, Supabase and Stripe SaaS actually demands"," before you promise a launch date.",{"title":282,"searchDepth":283,"depth":283,"links":1529},[1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543],{"id":1261,"depth":286,"text":1262},{"id":1271,"depth":286,"text":1272},{"id":1284,"depth":286,"text":1285},{"id":1316,"depth":286,"text":1317},{"id":1340,"depth":286,"text":1341},{"id":1361,"depth":286,"text":1362},{"id":1397,"depth":286,"text":1398},{"id":1415,"depth":286,"text":1416},{"id":1449,"depth":286,"text":1450},{"id":1461,"depth":286,"text":1462},{"id":1468,"depth":286,"text":1469},{"id":1496,"depth":286,"text":1497},{"id":1508,"depth":286,"text":1509},{"id":1518,"depth":286,"text":1519},"2026-07-17","Explore vibe coding with Google's Gemini: how natural language turns into working apps. Learn what's missing between impressive demos and production-ready systems.",{},"\u002Fblog\u002Fvibe-coding-gemini-production",{"title":1253,"description":1545},"blog\u002Fvibe-coding-gemini-production",[1551,1552,1553,1554],"vibe-coding","gemini","ai-development","cloud-run","9t7yKExFOOtTP4gAd2PO34EvsBA731bM-sFnHMUa4E0",1785113487108]