[{"data":1,"prerenderedAt":1658},["ShallowReactive",2],{"blog-ai-saas-boilerplate-guide-2026":3,"related-ai-saas-boilerplate-guide-2026":586},{"id":4,"title":5,"author":6,"body":7,"category":6,"date":572,"description":573,"draft":574,"extension":575,"image":6,"meta":576,"navigation":452,"path":577,"seo":578,"stem":579,"tags":580,"__hash__":585},"blog\u002Fblog\u002Fai-saas-boilerplate-guide-2026.md","AI SaaS Boilerplate Guide: Choose & Ship Fast in 2026",null,{"type":8,"value":9,"toc":553},"minimark",[10,14,19,22,33,36,40,43,57,61,101,104,108,111,125,128,132,146,149,153,167,176,180,189,192,218,227,231,246,249,253,256,271,274,278,421,425,434,437,441,518,522,525,543,547,550],[11,12,13],"p",{},"Choosing an AI SaaS boilerplate feels like a shopping problem — pick the shiniest template, clone it, ship. But the decision that actually determines your launch date isn't which repo you download. It's how well that codebase handles the integration work nobody enjoys: webhooks, row-level security, billing state, email delivery. This guide walks through what an AI SaaS boilerplate really is, what to evaluate, and how the leading options compare in 2026.",[15,16,18],"h2",{"id":17},"what-is-an-ai-saas-boilerplate","What Is an AI SaaS Boilerplate?",[11,20,21],{},"An AI SaaS boilerplate is a pre-built codebase that combines standard SaaS foundations — authentication, billing, teams, deployment — with an architecture built for coding agents to extend and customize. The \"AI\" part increasingly refers less to a bundled chatbot and more to how the codebase is set up: whether an agent can read it, patch it, and provision services on your behalf.",[11,23,24,25,32],{},"Boilerplates exist because stack choice is trivial and integration is not. As ",[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fhow-to-ship-saas-fast",[30],"nofollow","our own write-up on shipping fast"," puts it: the framework picks itself in an afternoon; the plumbing between services is what eats your launch.",[11,34,35],{},"A boilerplate is opinionated integration. A framework is flexibility. Nuxt or Next.js gives you building blocks; a boilerplate makes the hundred small decisions — how Stripe talks to your database, how sessions map to RLS policies — so you don't relitigate them at 2am.",[15,37,39],{"id":38},"the-real-cost-of-saas-setup-nobody-talks-about","The Real Cost of SaaS Setup Nobody Talks About",[11,41,42],{},"Framework choice takes days. Service integration takes months. The hidden plumbing includes Stripe webhooks (with idempotency and signature verification), Supabase RLS policies, Google sign-in flows, and transactional email that arrives exactly once.",[11,44,45,46,50,51,56],{},"Most founders restart at least one boilerplate because their first one made a wrong trade-off early — billing state trusted to the client, or auth without database-level isolation. The fix isn't a rewrite; it's choosing an ",[47,48,49],"strong",{},"anti-plumbing stack"," where the tools fit together and reduce glue code. ",[26,52,55],{"href":53,"rel":54},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fnuxt-supabase-stripe-saas-boilerplate",[30],"What it actually takes to wire up Nuxt, Supabase, and Stripe"," breaks down how many weeks each piece quietly demands.",[15,58,60],{"id":59},"core-saas-features-every-boilerplate-must-handle","Core SaaS Features Every Boilerplate Must Handle",[62,63,64,71,77,83,89,95],"ul",{},[65,66,67,70],"li",{},[47,68,69],{},"Authentication & authorization",": SSO, session management, and — critically — row-level security enforced at the database.",[65,72,73,76],{},[47,74,75],{},"Billing & subscription management",": multi-plan, refunds, and a single source of truth for subscription state.",[65,78,79,82],{},[47,80,81],{},"User management & teams",": RBAC, invites, onboarding.",[65,84,85,88],{},[47,86,87],{},"Email infrastructure",": signup confirmations, password resets, billing receipts.",[65,90,91,94],{},[47,92,93],{},"Database schema & migrations",": typesafe, auditable, RLS-ready.",[65,96,97,100],{},[47,98,99],{},"Deployment pipeline",": one command or GitHub Actions.",[11,102,103],{},"If a boilerplate skips any of these, you're back to writing plumbing.",[15,105,107],{"id":106},"the-case-for-agent-native-boilerplates","The Case for Agent-Native Boilerplates",[11,109,110],{},"AI agents are consistent only when the codebase gives them conventions to follow. Agents that just call an API and improvise are hallucination factories. The fix is a documented contract.",[11,112,113,114,118,119,124],{},"That's what an ",[115,116,117],"code",{},"AGENTS.md"," file provides: one documented way to do data access, handle secrets, and apply changes. ",[26,120,123],{"href":121,"rel":122},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fconventions-for-ai-coding-agents",[30],"Writing conventions for the agent, not the next hire"," makes the case that this documentation is what stops agents from drifting across sessions.",[11,126,127],{},"Deterministic patches let an agent reshape code repeatably without merge conflicts. That's how BoiledPlate's setup runs itself: your coding agent interviews you on plan names, languages, theme, and billing model, then reshapes the codebase — provisioning Stripe products and webhooks, a Supabase database with RLS, and Google sign-in — while you answer questions. The agent provisions services; you don't hand-wire them.",[15,129,131],{"id":130},"framework-comparison-nextjs-vs-nuxt-vs-sveltekit","Framework Comparison: Next.js vs. Nuxt vs. SvelteKit",[11,133,134,137,138,141,142,145],{},[47,135,136],{},"Next.js"," is the default: biggest ecosystem, most templates, first-class hosting. Most AI SaaS boilerplates target it for that reason. ",[47,139,140],{},"Nuxt"," suits teams that prefer Vue — less hype, but excellent DX as codebases grow. ",[47,143,144],{},"SvelteKit"," ships the smallest bundle but has the steepest learning curve and smallest community.",[11,147,148],{},"The trade-off is simple: ecosystem versus DX versus bundle size. Choose one, live with the rest. It matters far less than getting your billing and RLS right.",[15,150,152],{"id":151},"database-auth-supabase-vs-firebase-vs-homegrown","Database & Auth: Supabase vs. Firebase vs. Homegrown",[11,154,155,158,159,162,163,166],{},[47,156,157],{},"Supabase"," puts authority at the database layer — Postgres with row-level security, typesafe queries, and real audit trails. ",[47,160,161],{},"Firebase"," is managed and real-time, but its security rules are weaker than RLS and costs scale unpredictably. ",[47,164,165],{},"Homegrown"," gives full control and full responsibility; for most SaaS it's rarely worth it.",[11,168,169,170,175],{},"Row-level security is where boilerplates most often cut corners. Many enforce access in application code, which breaks the moment a query bypasses that layer. RLS enforces isolation at query time, so a leaked or malformed request still can't read another user's rows. Postgres RLS is documented in depth in the ",[26,171,174],{"href":172,"rel":173},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fdatabase\u002Fpostgres\u002Frow-level-security",[30],"Supabase docs"," — if a boilerplate doesn't ship policies, you're doing that work yourself.",[15,177,179],{"id":178},"billing-architecture-the-source-of-truth-problem","Billing Architecture: The Source of Truth Problem",[11,181,182,183,188],{},"Client-side success pages lie. A user can close the tab, lose connection, or open a stale URL. The only reliable source of billing state is the Stripe webhook. We wrote a whole post arguing that ",[26,184,187],{"href":185,"rel":186},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-webhooks-source-of-truth",[30],"your checkout success page should not touch your billing state"," — because it can't be trusted to.",[11,190,191],{},"Three things separate a real billing implementation from a demo:",[62,193,194,200,212],{},[65,195,196,199],{},[47,197,198],{},"Idempotent handlers",": Stripe retries webhooks. A handler that isn't idempotent double-grants access or double-charges side effects.",[65,201,202,205,206,211],{},[47,203,204],{},"Signature verification",": non-negotiable and often skipped. Without it, anyone who finds your endpoint can forge events. Stripe's ",[26,207,210],{"href":208,"rel":209},"https:\u002F\u002Fdocs.stripe.com\u002Fwebhooks",[30],"webhook documentation"," covers both.",[65,213,214,217],{},[47,215,216],{},"State clarity",": active, past-due, cancelled, refunded — your schema has to distinguish them cleanly.",[11,219,220,221,226],{},"Then come the edge cases: refunds, partial refunds, and EU consent law. Encoding a ",[26,222,225],{"href":223,"rel":224},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-checkout-consent-collection-german-withdrawal-waiver",[30],"German withdrawal waiver into the pay button"," is exactly the kind of detail most boilerplates never touch — and exactly the kind that stalls a real launch. BoiledPlate handles subscriptions with signature-verified, idempotent webhooks precisely because this is where most starters get billing wrong.",[15,228,230],{"id":229},"email-why-transactional-email-matters-and-what-can-go-wrong","Email: Why Transactional Email Matters and What Can Go Wrong",[11,232,233,234,237,238,241,242,245],{},"Signup confirmations, password resets, billing receipts — all must arrive. ",[47,235,236],{},"Resend",", ",[47,239,240],{},"SendGrid",", and ",[47,243,244],{},"Amazon SES"," trade off deliverability, cost, and ease of use. Resend is the simplest to wire; SES is the cheapest at scale; SendGrid sits in between.",[11,247,248],{},"Testing locally without spamming real inboxes is essential, and email must be treated as a feature, not an afterthought. A boilerplate that ships without wired, tested email is incomplete — your users won't finish signup if confirmations never land.",[15,250,252],{"id":251},"deployment-seo-and-i18n","Deployment, SEO, and i18n",[11,254,255],{},"Boring, proven hosts — Vercel, Netlify — cover static and SSR fine. Supabase Edge Functions handle serverless logic when you need it. Webhook receivers must be reliable, with automatic retries. Multi-region can wait; scale first, then shard.",[11,257,258,259,264,265,270],{},"SEO belongs in the box. JSON-LD schema, Open Graph tags, and canonical URLs are easy to get wrong and costly to fix. We learned that twice: once when ",[26,260,263],{"href":261,"rel":262},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Four-blog-canonically-pointed-at-localhost",[30],"our blog told Google its canonical URL was localhost:3000",", and once with a ",[26,266,269],{"href":267,"rel":268},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fthe-page-that-returned-200-on-the-server-and-500-in-the-browser-a-json-ld-tempor",[30],"JSON-LD hydration bug that returned 200 on the server and 500 in the browser",".",[11,272,273],{},"For European SaaS, i18n from day one matters. English, German, French, and Spanish cover most of the market, and retrofitting locale routing later fights your URL structure and SEO. A boilerplate without i18n is a decision you'll regret.",[15,275,277],{"id":276},"top-boilerplates-compared","Top Boilerplates Compared",[279,280,281,309],"table",{},[282,283,284],"thead",{},[285,286,287,291,294,297,300,303,306],"tr",{},[288,289,290],"th",{},"Boilerplate",[288,292,293],{},"Framework",[288,295,296],{},"Agent-ready",[288,298,299],{},"RLS",[288,301,302],{},"Billing",[288,304,305],{},"i18n",[288,307,308],{},"Pricing",[310,311,312,335,355,381,401],"tbody",{},[285,313,314,318,320,323,326,329,332],{},[315,316,317],"td",{},"Ship-saas",[315,319,136],{},[315,321,322],{},"Strong",[315,324,325],{},"Yes",[315,327,328],{},"Good",[315,330,331],{},"Partial",[315,333,334],{},"Premium annual",[285,336,337,340,343,346,348,350,352],{},[315,338,339],{},"Supastarter",[315,341,342],{},"Next.js + Supabase",[315,344,345],{},"Limited",[315,347,325],{},[315,349,328],{},[315,351,331],{},[315,353,354],{},"Annual",[285,356,357,364,367,370,372,375,378],{},[315,358,359],{},[26,360,363],{"href":361,"rel":362},"https:\u002F\u002Fboiledplate.ai",[30],"BoiledPlate",[315,365,366],{},"Nuxt + Supabase",[315,368,369],{},"Native (AGENTS.md)",[315,371,325],{},[315,373,374],{},"Webhook-sourced",[315,376,377],{},"4 langs",[315,379,380],{},"€159 one-time",[285,382,383,386,388,391,393,396,398],{},[315,384,385],{},"SaaSify Pro",[315,387,136],{},[315,389,390],{},"Moderate",[315,392,325],{},[315,394,395],{},"Basic",[315,397,331],{},[315,399,400],{},"Mid-range",[285,402,403,406,408,411,413,415,418],{},[315,404,405],{},"NextBoilerPlate",[315,407,136],{},[315,409,410],{},"Minimal",[315,412,331],{},[315,414,395],{},[315,416,417],{},"No",[315,419,420],{},"Low",[15,422,424],{"id":423},"licensing-and-hidden-costs","Licensing and Hidden Costs",[11,426,427,428,433],{},"MIT boilerplates are free but yours to maintain — ",[26,429,432],{"href":430,"rel":431},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Ffree-nuxt-supabase-saas-boilerplate",[30],"BoiledPlate Lite"," is one, if you'd rather wire services by hand. Commercial options split between one-time (BoiledPlate, €159 with lifetime updates and instant GitHub delivery), annual, and per-seat. Instant GitHub provisioning matters more than a template download — the invite is the product.",[11,435,436],{},"Beyond the sticker price: Stripe processing fees, Supabase costs that spike with scale, email delivery pricing, agent token costs if setup is agent-driven, plus domains, backups, and the days of customization no boilerplate removes. A boilerplate saves weeks; it doesn't save every day.",[15,438,440],{"id":439},"the-evaluation-checklist","The Evaluation Checklist",[62,442,445,455,461,467,473,479,485,494,500,506,512],{"className":443},[444],"contains-task-list",[65,446,449,454],{"className":447},[448],"task-list-item",[450,451],"input",{"disabled":452,"type":453},true,"checkbox"," Supports your target framework?",[65,456,458,460],{"className":457},[448],[450,459],{"disabled":452,"type":453}," Auth enforced via RLS, not just tokens?",[65,462,464,466],{"className":463},[448],[450,465],{"disabled":452,"type":453}," Webhook handlers with signature verification?",[65,468,470,472],{"className":469},[448],[450,471],{"disabled":452,"type":453}," Email pre-wired and tested?",[65,474,476,478],{"className":475},[448],[450,477],{"disabled":452,"type":453}," i18n for your markets?",[65,480,482,484],{"className":481},[448],[450,483],{"disabled":452,"type":453}," JSON-LD, og:, canonical tags included?",[65,486,488,490,491,493],{"className":487},[448],[450,489],{"disabled":452,"type":453}," ",[115,492,117],{}," or equivalent agent documentation?",[65,495,497,499],{"className":496},[448],[450,498],{"disabled":452,"type":453}," Update strategy — manual, opt-in, automatic?",[65,501,503,505],{"className":502},[448],[450,504],{"disabled":452,"type":453}," Billing state sourced from webhooks?",[65,507,509,511],{"className":508},[448],[450,510],{"disabled":452,"type":453}," Customizable without fighting back?",[65,513,515,517],{"className":514},[448],[450,516],{"disabled":452,"type":453}," Community, or one person?",[15,519,521],{"id":520},"building-vs-buying","Building vs. Buying",[11,523,524],{},"Have three-plus weeks? Build — but you'll copy boilerplate patterns anyway. One to two weeks? Buy. Under a week? Buy and hire a contractor to customize. First SaaS? Buy and learn from it. Agency serving clients? Buy a framework, not a boilerplate.",[11,526,527,530,531,534,535,538,539,542],{},[47,528,529],{},"Choose Ship-saas"," for maximum baked-in AI features on Next.js at a premium. ",[47,532,533],{},"Choose Supastarter"," for Supabase + Stripe done right without agent setup. ",[47,536,537],{},"Choose BoiledPlate"," if you're comfortable with Nuxt, want agent-driven setup, and prefer paying once. ",[47,540,541],{},"Choose open source"," if you have time, want full control, and your budget is zero.",[15,544,546],{"id":545},"the-real-win-is-weeks-saved-not-framework-purity","The Real Win Is Weeks Saved, Not Framework Purity",[11,548,549],{},"By 2026, agent-driven setup is becoming standard and manual wiring niche. Webhook reliability and billing edge cases — EU consent, refunds, dunning — are getting commoditized. The framework wars are cooling; team fit beats hype.",[11,551,552],{},"None of that changes the underlying truth: your boilerplate choice matters less than the quality of its service plumbing. RLS is non-negotiable. Webhooks are sacred. Your time is the real cost, and against it, the price of a boilerplate is negligible. The best one is the one you actually deploy.",{"title":554,"searchDepth":555,"depth":555,"links":556},"",3,[557,559,560,561,562,563,564,565,566,567,568,569,570,571],{"id":17,"depth":558,"text":18},2,{"id":38,"depth":558,"text":39},{"id":59,"depth":558,"text":60},{"id":106,"depth":558,"text":107},{"id":130,"depth":558,"text":131},{"id":151,"depth":558,"text":152},{"id":178,"depth":558,"text":179},{"id":229,"depth":558,"text":230},{"id":251,"depth":558,"text":252},{"id":276,"depth":558,"text":277},{"id":423,"depth":558,"text":424},{"id":439,"depth":558,"text":440},{"id":520,"depth":558,"text":521},{"id":545,"depth":558,"text":546},"2026-09-15","Compare top AI SaaS boilerplates for 2026. Learn what to evaluate beyond templates: webhooks, RLS, billing, and integration complexity.",false,"md",{},"\u002Fblog\u002Fai-saas-boilerplate-guide-2026",{"title":5,"description":573},"blog\u002Fai-saas-boilerplate-guide-2026",[581,582,583,584],"ai-saas","boilerplate","saas-development","startup-tools","9um33IiqtIK6K1Ix-g5jhSfddWc9TWQ2xnzTCk1FCWE",[587,955,1350],{"id":588,"title":589,"author":6,"body":590,"category":6,"date":943,"description":944,"draft":574,"extension":575,"image":6,"meta":945,"navigation":452,"path":946,"seo":947,"stem":948,"tags":949,"__hash__":954},"blog\u002Fblog\u002Fai-boilerplate-why-templates-matter.md","AI Boilerplate: Why Code Templates Matter More Than Ever",{"type":8,"value":591,"toc":924},[592,595,599,611,614,618,621,624,632,636,639,648,656,661,664,668,671,683,689,700,714,720,724,731,755,758,762,765,776,791,797,803,807,810,814,823,827,836,840,843,847,850,854,864,868,888,891,895,898,902,916],[11,593,594],{},"AI can generate a working prototype from a paragraph of specification. So why do boilerplates still matter? If anything, they matter more now than they did before agents could write code. The reason has nothing to do with saving keystrokes and everything to do with constraints.",[15,596,598],{"id":597},"the-boilerplate-paradox","The Boilerplate Paradox",[11,600,601,602,606,607,610],{},"You'd think AI would kill boilerplates. It's doing the opposite. An agent handles ",[603,604,605],"em",{},"what"," you're building; a good boilerplate handles ",[603,608,609],{},"how"," it's built. That distinction is the whole game.",[11,612,613],{},"Boilerplate was never really about saving time on typing. It's about constraint enforcement — deciding, once, that there is one way to fetch data, one way to handle secrets, one way to verify a webhook. The value isn't \"fast to write.\" It's \"safe to customize.\" Code that an agent can generate in seconds is worthless if the next edit quietly contradicts it.",[15,615,617],{"id":616},"why-ai-struggles-with-boilerplate-and-why-thats-good","Why AI Struggles With Boilerplate (And Why That's Good)",[11,619,620],{},"Consistency requires conventions, not just correctness. An agent can produce a perfectly correct data-fetching function that happens to be the fourth pattern in your codebase. It isn't being dumb — it has no reason to prefer yours. It pattern-matches against everything it has ever seen, and everything it has ever seen includes every bad tutorial on the internet.",[11,622,623],{},"The real problem is drift, not generation speed. Agents excel at adding features and fail at enforcing architectural decisions across many edits. Give one three ways to do a thing and it adds a fourth.",[11,625,626,627,631],{},"BoiledPlate's answer is a shipped ",[26,628,630],{"href":121,"rel":629},[30],"AGENTS.md contract",": one documented way to do data access, secrets, and conventions, so agent output stays consistent past month three. That's not a nice-to-have. When an agent is writing your code, consistency matters more than flexibility.",[15,633,635],{"id":634},"the-true-cost-of-saas-setup-isnt-the-stack","The True Cost of SaaS Setup Isn't the Stack",[11,637,638],{},"Choosing Nuxt, Supabase, and Stripe takes an afternoon. Wiring them together takes weeks. This is the part every stack argument misses.",[11,640,641,642,647],{},"Most boilerplates scaffold; they don't provision. They hand you a box of parts — auth, a Stripe client, a pile of Tailwind, a landing page — and leave you alone with a README. ",[26,643,646],{"href":644,"rel":645},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fnuxt-saas-boilerplate-for-ai-agents",[30],"The parts were never the problem",". Bolting them to each other is what ate your weekends.",[11,649,650,651,655],{},"BoiledPlate takes a different route. ",[26,652,654],{"href":361,"rel":653},[30],"Your coding agent doesn't just write the code — it provisions the services",": Stripe products and webhooks, a Supabase database with row-level security, Google sign-in. The setup interviews you (name, languages, theme, billing model), then reshapes the codebase with deterministic patches.",[657,658,660],"h3",{"id":659},"boilerplate-vs-automation","Boilerplate vs. automation",[11,662,663],{},"Traditional boilerplate: clone, delete unused code, wire manually. Automation-first boilerplate: the agent reads conventions and applies deterministic patches — repeatable, auditable, agent-readable customization. And the delivery model matters. The product isn't a ZIP; it's an instant GitHub invite. Provisioning, not a download.",[15,665,667],{"id":666},"the-plumbing-nobody-enjoys","The Plumbing Nobody Enjoys",[11,669,670],{},"Here's what belongs inside a boilerplate because getting it wrong costs real money.",[11,672,673,676,677,682],{},[47,674,675],{},"Webhook idempotency."," Stripe retries. A webhook that isn't idempotent turns retries into duplicate side effects — ghost charges, double provisioning. The fix is idempotency keys and handlers that safely absorb repeated calls. Stripe's own ",[26,678,681],{"href":679,"rel":680},"https:\u002F\u002Fdocs.stripe.com\u002Fwebhooks#best-practices",[30],"best practices"," spell this out; most starters ignore it.",[11,684,685,688],{},[47,686,687],{},"Row-level security."," RLS in Supabase is not optional and not easy to retrofit. It's the difference between \"users only see their own rows\" and a user seeing someone else's data. Bolted on after launch, it's a rewrite. Built into the data layer, it's just how queries work.",[11,690,691,694,695,699],{},[47,692,693],{},"Billing state."," The source of truth is Stripe webhooks, not a client-side success page. A ",[26,696,698],{"href":185,"rel":697},[30],"checkout success page should not touch your billing state"," — the customer can close the tab, the network can drop, and your database has to be right anyway.",[11,701,702,705,706,709,710,713],{},[47,703,704],{},"Refund and consent flows."," EU consent law is real plumbing. Encoding a ",[26,707,225],{"href":223,"rel":708},[30]," via Stripe Checkout ",[115,711,712],{},"consent_collection"," is exactly the kind of edge case that never appears in a demo and always appears in production.",[11,715,716,719],{},[47,717,718],{},"Transactional email."," Wired in with Resend, not bolted on later. Password resets and receipts are launch-day requirements, not phase two.",[15,721,723],{"id":722},"why-these-specific-tools-work-together","Why These Specific Tools Work Together",[11,725,726,727,730],{},"The ",[26,728,49],{"href":28,"rel":729},[30]," is chosen for low surface area between the pieces.",[62,732,733,738,744,750],{},[65,734,735,737],{},[47,736,366],{}," gives type safety end to end, with RLS as part of the framework's data layer rather than an afterthought.",[65,739,740,743],{},[47,741,742],{},"Stripe webhooks"," bring deterministic retry logic — which is exactly why signature verification and idempotent handlers are non-negotiable.",[65,745,746,749],{},[47,747,748],{},"Google sign-in"," is simpler than email\u002Fpassword but has its own traps (redirect URIs, consent screens) that a setup interview can handle once.",[65,751,752,754],{},[47,753,236],{}," delivers transactional email reliably without you managing SMTP.",[11,756,757],{},"None of these choices is clever. Together they minimize the connective tissue you have to maintain.",[15,759,761],{"id":760},"real-world-bugs-and-edge-cases","Real-World Bugs and Edge Cases",[11,763,764],{},"Every one of these came out of shipping, not theory.",[11,766,767,770,771,775],{},[47,768,769],{},"JSON-LD hydration crashes."," A page can return ",[26,772,774],{"href":267,"rel":773},[30],"200 from curl and 500 in Chrome"," because of source order in your structured data. SSR makes this class of bug invisible until a real browser hits it.",[11,777,778,781,782,786,787,790],{},[47,779,780],{},"Canonical URLs."," Browser defaults lie. Our blog once ",[26,783,785],{"href":261,"rel":784},[30],"told Google its canonical URL was localhost:3000",". ",[115,788,789],{},"og:url"," and canonicals have to be set deliberately or search and social quietly break.",[11,792,793,796],{},[47,794,795],{},"Webhook retries that create ghost charges."," Idempotency keys are the fix, and testing them means deliberately replaying events, not hoping.",[11,798,799,802],{},[47,800,801],{},"i18n hydration mismatches."," Four languages from day one is a decision. Migrating to multi-locale later means touching the five places every new string has to land.",[15,804,806],{"id":805},"dashboard-theming-solved","Dashboard Theming, Solved",[11,808,809],{},"Preset themes are rarely enough; custom themes are painful to wire by hand. BoiledPlate lets you pick a preset — Warm Studio, Clean SaaS, Midnight Pro, Sharp Enterprise — or describe your own, and the agent maps it onto the codebase. The previews on the homepage are the real dashboard every buyer gets. Theming can't touch everything without breaking components, but the win is shipping a cohesive UI without design churn.",[15,811,813],{"id":812},"billing-that-survives-reality","Billing That Survives Reality",[11,815,816,817,822],{},"Multi-plan Stripe subscriptions mean tiers, add-ons, plan changes, and cancellations — ",[26,818,821],{"href":819,"rel":820},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-subscriptions-nuxt-supabase",[30],"five decisions"," that each ripple through your database. Signature-verified, idempotent handlers are the foundation. Refunds, cancellations, and plan changes need state machines that actually work, plus EU consent flows and audit trails. This is the part that's easy to skip and expensive to skip.",[15,824,826],{"id":825},"seo-and-content-from-day-one","SEO and Content From Day One",[11,828,829,830,835],{},"Most boilerplates ship no content layer. BoiledPlate ships a ",[26,831,834],{"href":832,"rel":833},"https:\u002F\u002Fboiledplate.ai\u002Fblog",[30],"blog"," built on prerendered Markdown — fast, searchable, no database queries for content. JSON-LD structured data and correct canonicals are built in, not retrofitted. You write in Markdown and deploy with your code. Content velocity is a feature.",[15,837,839],{"id":838},"typed-end-to-end","Typed End to End",[11,841,842],{},"\"Strict mode optional\" is a compromise that costs more later. BoiledPlate runs TypeScript in strict mode throughout. Database types come from the Supabase schema — schema drives types, not the reverse. Nitro types your API routes. Type safety in webhook handlers is what prevents silent billing failures, where a shape mismatch fails quietly instead of loudly.",[15,844,846],{"id":845},"deployment-in-minutes","Deployment in Minutes",[11,848,849],{},"\"Minutes\" assumes prerequisites: a Stripe account, a Supabase project, a Google OAuth app. The GitHub delivery model beats downloading a ZIP because it's instant and versioned. Environment variables are validated rather than assumed. You can deploy to Vercel, Netlify, or self-host. Post-deploy, the milestones that matter are your first webhook, first payment, and first email — all working.",[15,851,853],{"id":852},"free-vs-pro","Free vs. Pro",[11,855,856,859,860,863],{},[26,857,432],{"href":430,"rel":858},[30]," is MIT-licensed: source available, clone and wire manually, no agent interview. ",[47,861,862],{},"Pro"," is €159 one-time with lifetime updates, agent-driven setup, and instant GitHub delivery. The real trade-off is your time versus €159. Budget-constrained builders clone Lite; founders shipping weekly buy Pro.",[15,865,867],{"id":866},"the-anti-boilerplate-arguments","The Anti-Boilerplate Arguments",[62,869,870,876,882],{},[65,871,872,875],{},[603,873,874],{},"\"Just use no-code SaaS tools.\""," Costs 10x more over time, with lock-in and less control.",[65,877,878,881],{},[603,879,880],{},"\"Build everything from scratch.\""," Great teacher, three months per SaaS.",[65,883,884,887],{},[603,885,886],{},"\"Use a different framework.\""," Framework choice is easy; plumbing is framework-agnostic.",[11,889,890],{},"Boilerplates are asymmetric: high fixed cost upfront, near-zero marginal cost after. That's exactly why they pay off.",[15,892,894],{"id":893},"reducing-the-real-risk","Reducing the Real Risk",[11,896,897],{},"The genuine fear is lock-in — that a boilerplate makes customization hell. BoiledPlate's answer is semantic versioning, deterministic patches, and readable release notes. Updates are opt-in: you see what changes before you merge, and the agent can read your customizations instead of fighting them. The AGENTS.md contract keeps agents consistent even as your code diverges.",[15,899,901],{"id":900},"getting-started-a-decision-tree","Getting Started: A Decision Tree",[62,903,904,907,910,913],{},[65,905,906],{},"Need multi-plan billing? → You want a real boilerplate, not a scaffold.",[65,908,909],{},"Can you describe your SaaS in an interview? → Agent setup fits.",[65,911,912],{},"Want to customize without breaking updates? → Deterministic patches.",[65,914,915],{},"Is your time worth €159? → Usually yes → Pro. Sometimes no → Lite.",[11,917,918,919,923],{},"The stack was never the hard part. The wiring is. An AI boilerplate earns its place not by writing code faster, but by holding the line on how that code is built — so the agent, and you, can keep shipping without drift. That's the ",[26,920,922],{"href":361,"rel":921},[30],"whole point of BoiledPlate",": buy once, ship product instead of plumbing.",{"title":554,"searchDepth":555,"depth":555,"links":925},[926,927,928,931,932,933,934,935,936,937,938,939,940,941,942],{"id":597,"depth":558,"text":598},{"id":616,"depth":558,"text":617},{"id":634,"depth":558,"text":635,"children":929},[930],{"id":659,"depth":555,"text":660},{"id":666,"depth":558,"text":667},{"id":722,"depth":558,"text":723},{"id":760,"depth":558,"text":761},{"id":805,"depth":558,"text":806},{"id":812,"depth":558,"text":813},{"id":825,"depth":558,"text":826},{"id":838,"depth":558,"text":839},{"id":845,"depth":558,"text":846},{"id":852,"depth":558,"text":853},{"id":866,"depth":558,"text":867},{"id":893,"depth":558,"text":894},{"id":900,"depth":558,"text":901},"2026-09-14","Discover why AI boilerplates are essential for enforcing consistency and architectural decisions in AI-generated code, not just saving time.",{},"\u002Fblog\u002Fai-boilerplate-why-templates-matter",{"title":589,"description":944},"blog\u002Fai-boilerplate-why-templates-matter",[950,951,952,953],"ai-boilerplate","code-generation","software-architecture","ai-development","MzpqZbpOYENbvFc8Hb2t7pMMYaWIoUk9ofqRg2Y94bM",{"id":956,"title":957,"author":6,"body":958,"category":6,"date":1339,"description":1340,"draft":574,"extension":575,"image":6,"meta":1341,"navigation":452,"path":1342,"seo":1343,"stem":1344,"tags":1345,"__hash__":1349},"blog\u002Fblog\u002Fshipfast-vs-boilerplate-comparison.md","ShipFast vs BoiledPlate: Next.js Boilerplate Showdown",{"type":8,"value":959,"toc":1319},[960,963,966,970,973,976,980,983,986,990,998,1008,1012,1020,1028,1032,1044,1054,1058,1061,1069,1073,1076,1084,1088,1091,1094,1098,1105,1109,1220,1224,1227,1230,1234,1237,1241,1244,1269,1272,1276,1279,1283,1286,1290,1295,1301,1305,1312,1316],[11,961,962],{},"Search \"shipfast vs\" and you land in a familiar debate: which Next.js boilerplate ships fastest? ShipFast, LaunchFast, TurboStarter, IndieKit — they all sell the same promise of launching in days. BoiledPlate takes a different position entirely. It's not a faster template. It's an AI-native Nuxt + Supabase starter whose setup runs itself: a coding agent interviews you, then provisions Stripe, Supabase, and Google sign-in in one session.",[11,964,965],{},"This comparison is honest about where ShipFast wins and where an agent-driven, Nuxt-based approach pulls ahead.",[15,967,969],{"id":968},"shipfast-what-it-does-well","ShipFast: What It Does Well",[11,971,972],{},"ShipFast earned its reputation for good reasons. It's a well-polished Next.js boilerplate with Stripe integration out of the box, a large community, and an opinionated stack that kills decision fatigue. If you already live in the React and Next.js world, ShipFast lets you clone a repo and have a landing page, auth, and payments scaffolded quickly.",[11,974,975],{},"Its template ecosystem is genuinely large. For a non-technical founder or a solo dev who wants a proven path, that ecosystem is a real advantage.",[15,977,979],{"id":978},"where-shipfast-falls-short","Where ShipFast Falls Short",[11,981,982],{},"The cracks show once you customize. ShipFast means Next.js lock-in — customizing the framework means fighting its conventions. Services are wired manually; there's no agent-driven setup. Webhook handling doesn't guarantee idempotency, security often lives in your API layer rather than the database, and updates force merge conflicts into code you've already modified.",[11,984,985],{},"Most importantly for 2026: ShipFast has no agent-specific contract. When you point a coding agent at it, the agent has no documented conventions to follow, so its output drifts.",[15,987,989],{"id":988},"boiledplates-core-advantage-agent-native-architecture","BoiledPlate's Core Advantage: Agent-Native Architecture",[11,991,992,993,997],{},"BoiledPlate is built for the way people actually code now — with a coding agent in the loop. As the ",[26,994,996],{"href":361,"rel":995},[30],"homepage"," puts it: your coding agent doesn't just write the code, it provisions the services. Stripe products and webhooks, a Supabase database with RLS, Google sign-in — the plumbing nobody enjoys, done in one session.",[11,999,1000,1001,1004,1005,1007],{},"The agent's first session interviews you: name, languages, theme, billing model. Then it reshapes the entire codebase to your answers with ",[47,1002,1003],{},"deterministic patches"," — automated, repeatable changes rather than hand-edits. And it ships with an ",[47,1006,117],{}," contract so the agent stays consistent across generations, which is a problem ShipFast never solved because it wasn't designed for agents.",[15,1009,1011],{"id":1010},"the-real-cost-of-saas-setup-plumbing-not-frameworks","The Real Cost of SaaS Setup: Plumbing, Not Frameworks",[11,1013,1014,1015,1019],{},"Here's the thing every boilerplate comparison misses. Ask ten founders how to ship fast and you get ten stack arguments — Next vs Nuxt, Postgres vs hosted, Stripe vs Paddle. Pick whatever you know and the debate is over in an afternoon. As we argue in ",[26,1016,1018],{"href":28,"rel":1017},[30],"the stack is easy, the plumbing is the project",", the framework is not what slows you down.",[11,1021,1022,1023,1027],{},"What slows you down is the wiring between services: webhook idempotency, row-level security, refund flows, EU consent, transactional email that sends exactly once. Our breakdown of ",[26,1024,1026],{"href":53,"rel":1025},[30],"what it actually takes to wire up a Nuxt, Supabase and Stripe SaaS"," walks through each service's hidden demands. This is the phase BoiledPlate automates — and the phase ShipFast leaves to you or to a paid done-for-you service.",[15,1029,1031],{"id":1030},"billing-architecture-why-it-matters","Billing Architecture: Why It Matters",[11,1033,1034,1035,1039,1040,1043],{},"Billing is where corner-cutting hurts most. Stripe ",[26,1036,1038],{"href":185,"rel":1037},[30],"webhooks must be the source of truth",", not the client-side success page — because users close tabs, networks drop, and Stripe retries. An ",[47,1041,1042],{},"idempotent webhook"," handles those retries without double-charging or losing a refund.",[11,1045,1046,1047,1050,1051,1053],{},"BoiledPlate ships a production-ready implementation: signature-verified, idempotent webhooks with real state management. It even handles EU-specific requirements like encoding a ",[26,1048,225],{"href":223,"rel":1049},[30]," via Stripe's ",[115,1052,712],{},". These are the details that don't appear in a \"launch in days\" demo but absolutely appear in a chargeback dispute.",[15,1055,1057],{"id":1056},"database-security-supabase-rls-vs-traditional-auth","Database Security: Supabase RLS vs Traditional Auth",[11,1059,1060],{},"Next.js boilerplates like ShipFast typically enforce permissions in the API layer — middleware checks before a query runs. Miss one route, and you've leaked data.",[11,1062,1063,1064,1068],{},"Supabase ",[26,1065,1067],{"href":172,"rel":1066},[30],"row-level security"," enforces permissions at query time, in the database itself. Even if application code has a bug, the database refuses to return rows the user shouldn't see. That's a smaller attack surface and it scales better than scattering middleware checks across every endpoint. BoiledPlate ships RLS policies baked into its deterministic patches, so security isn't an afterthought you bolt on later.",[15,1070,1072],{"id":1071},"ai-agent-consistency-why-agentsmd-exists","AI Agent Consistency: Why AGENTS.md Exists",[11,1074,1075],{},"Point two agents at the same vague task and you get two different implementations — different data-access patterns, different secret handling, different conventions. That drift is the enemy of a maintainable codebase.",[11,1077,1078,1079,1083],{},"AGENTS.md fixes this by documenting one documented way to access data and handle secrets. We cover the philosophy in ",[26,1080,1082],{"href":121,"rel":1081},[30],"write your conventions for the agent, not the next hire",": conventions used to be for onboarding humans; now they keep agents from reinventing your architecture every session. ShipFast has no such contract. BoiledPlate ships AGENTS.md from day one, which is what makes repeatable agent interviews and safe patches possible.",[15,1085,1087],{"id":1086},"customization-philosophy-merges-vs-patches","Customization Philosophy: Merges vs Patches",[11,1089,1090],{},"Update a ShipFast project you've heavily modified, and you're in merge-conflict territory. Every upstream change collides with your changes.",[11,1092,1093],{},"BoiledPlate uses semantic, agent-readable release notes and deterministic patches. You opt into updates. You can skip a breaking change or cherry-pick a single feature, and the agent applies the patch consistently — no human line-by-line merging. This is the difference between owning a starter kit and being trapped by it.",[15,1095,1097],{"id":1096},"the-anti-plumbing-stack-nuxt-supabase-stripe","The Anti-Plumbing Stack: Nuxt + Supabase + Stripe",[11,1099,1100,1101,1104],{},"Each tool pulls its weight. Nuxt is lightweight and composable and plays well with edge functions. Supabase folds RLS, real-time, and auth into one service, so you integrate fewer things. Stripe's explicit webhook requirements ",[603,1102,1103],{},"force"," good architecture early — you can't fake billing state and hope. This trio demands you get billing right, and BoiledPlate enforces it rather than papering over it.",[15,1106,1108],{"id":1107},"comparison-table-boiledplate-vs-shipfast","Comparison Table: BoiledPlate vs ShipFast",[279,1110,1111,1122],{},[282,1112,1113],{},[285,1114,1115,1117,1119],{},[288,1116],{},[288,1118,363],{},[288,1120,1121],{},"ShipFast",[310,1123,1124,1134,1145,1156,1167,1178,1189,1199,1209],{},[285,1125,1126,1129,1132],{},[315,1127,1128],{},"Framework \u002F language",[315,1130,1131],{},"Nuxt 4, TypeScript strict",[315,1133,136],{},[285,1135,1136,1139,1142],{},[315,1137,1138],{},"Billing \u002F webhooks",[315,1140,1141],{},"Idempotent, signature-verified, source-of-truth",[315,1143,1144],{},"Stripe wired, no idempotency guarantee",[285,1146,1147,1150,1153],{},[315,1148,1149],{},"DB security",[315,1151,1152],{},"Supabase RLS at query time",[315,1154,1155],{},"API-layer auth",[285,1157,1158,1161,1164],{},[315,1159,1160],{},"Updates",[315,1162,1163],{},"Deterministic patches, opt-in",[315,1165,1166],{},"Manual merges",[285,1168,1169,1172,1175],{},[315,1170,1171],{},"Agent-native",[315,1173,1174],{},"AGENTS.md contract, agent setup",[315,1176,1177],{},"None",[285,1179,1180,1183,1186],{},[315,1181,1182],{},"Pricing \u002F delivery",[315,1184,1185],{},"€159 one-time, GitHub delivery",[315,1187,1188],{},"Paid, clone repo",[285,1190,1191,1193,1196],{},[315,1192,305],{},[315,1194,1195],{},"Four languages day one",[315,1197,1198],{},"Add yourself",[285,1200,1201,1204,1207],{},[315,1202,1203],{},"SEO",[315,1205,1206],{},"JSON-LD, og:url canonicals",[315,1208,395],{},[285,1210,1211,1214,1217],{},[315,1212,1213],{},"Blog",[315,1215,1216],{},"Prerendered Markdown, ready",[315,1218,1219],{},"Varies",[15,1221,1223],{"id":1222},"common-objections-why-not-just-use-shipfast","Common Objections: \"Why Not Just Use ShipFast?\"",[11,1225,1226],{},"Fair question. ShipFast is faster for a non-technical founder with no coding agent in their workflow. Its template library is larger. BoiledPlate assumes comfort with Nuxt, Supabase, and agent-driven workflows — that's a real prerequisite.",[11,1228,1229],{},"The choice is honest: pick ShipFast if you want done-for-you UX and a big Next.js ecosystem. Pick BoiledPlate if you want deterministic, updatable plumbing you can regenerate across projects.",[15,1231,1233],{"id":1232},"other-alternatives-worth-naming","Other Alternatives Worth Naming",[11,1235,1236],{},"LaunchFast is another Next.js boilerplate — same framework lock-in as ShipFast. TurboStarter is production-ready but has no agent-driven setup. CodeConductor plays a different game entirely (prompt-based workflow automation, not a plumbed starter). IndieKit is polished but light on B2B and complex billing. None of them are agent-native in BoiledPlate's sense: interview, provision, patch, repeat.",[15,1238,1240],{"id":1239},"real-world-debugging-lessons-from-production","Real-World Debugging: Lessons from Production",[11,1242,1243],{},"BoiledPlate exists because we shipped this stack and kept a running log of every edge case. This site runs on it. Some of the bugs we solved so you don't have to:",[62,1245,1246,1254,1261],{},[65,1247,1248,1249,1253],{},"A ",[26,1250,1252],{"href":267,"rel":1251},[30],"JSON-LD hydration crash"," that returned 200 from curl and 500 in Chrome, caused by source order.",[65,1255,1248,1256,1260],{},[26,1257,1259],{"href":261,"rel":1258},[30],"canonical URL pointing at localhost:3000",", quietly telling Google the wrong thing.",[65,1262,1263,1264,270],{},"Webhook signature verification that prevents replay attacks — plus the subtle case of a ",[26,1265,1268],{"href":1266,"rel":1267},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fthe-github-invite-is-the-product-building-a-stripe-webhook-where-delivery-throws",[30],"GitHub-invite webhook where some failures must throw and some never should",[11,1270,1271],{},"These ship pre-solved.",[15,1273,1275],{"id":1274},"the-hidden-cost-of-speed","The Hidden Cost of Speed",[11,1277,1278],{},"\"Launch in days\" often means debt in billing, security, and updates. Proper webhook handling and RLS take time upfront but pay off when real money moves. Agent-driven setup also forces you to document conventions, which prevents the \"custom boilerplate nobody understands\" trap. BoiledPlate amortizes that plumbing cost once, upfront.",[15,1280,1282],{"id":1281},"delivery-model-github-invites-as-the-product","Delivery Model: GitHub Invites as the Product",[11,1284,1285],{},"ShipFast: clone the repo, wire it, or pay for setup. BoiledPlate Pro: the agent interviews you, provisions services, and delivers to your GitHub in one session — instant delivery via webhooks, no manual handoff. Lifetime updates included, and you choose which patches to accept.",[15,1287,1289],{"id":1288},"when-to-choose-which","When to Choose Which",[11,1291,1292,1294],{},[47,1293,537],{}," if you're comfortable with Nuxt and Supabase, you work with Claude or a similar agent, you want billing and RLS done right from day one, and you're shipping multiple products where agents reuse AGENTS.md patterns.",[11,1296,1297,1300],{},[47,1298,1299],{},"ShipFast still wins"," if you need Next.js specifically for ecosystem or hiring, you're non-technical, your product only needs simple one-time payments, you want the larger community, or you won't iterate on plumbing after launch.",[15,1302,1304],{"id":1303},"getting-started-lite-vs-pro","Getting Started: Lite vs Pro",[11,1306,1307,1308,1311],{},"You can try the approach for free. ",[26,1309,432],{"href":430,"rel":1310},[30]," is MIT-licensed — the same Nuxt 4, Supabase, Stripe, and Resend app, minus the AI tooling, that you clone and wire by hand. Pro is €159 one-time: the agent interviews you, delivers instantly, and includes lifetime updates. No subscription trap; pay once, own the code. If you're shipping more than one SaaS, the ROI compounds.",[15,1313,1315],{"id":1314},"the-future-of-saas-setup-agents-not-frameworks","The Future of SaaS Setup: Agents, Not Frameworks",[11,1317,1318],{},"The \"shipfast vs\" debate is really a framework debate, and the framework was never the hard part. Agent-driven interviews, deterministic patches, and AGENTS.md-style contracts are becoming the standard way to customize a starter safely and repeatedly. BoiledPlate is built for that future rather than fighting it — which is the real reason to look past the Next.js template shelf.",{"title":554,"searchDepth":555,"depth":555,"links":1320},[1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338],{"id":968,"depth":558,"text":969},{"id":978,"depth":558,"text":979},{"id":988,"depth":558,"text":989},{"id":1010,"depth":558,"text":1011},{"id":1030,"depth":558,"text":1031},{"id":1056,"depth":558,"text":1057},{"id":1071,"depth":558,"text":1072},{"id":1086,"depth":558,"text":1087},{"id":1096,"depth":558,"text":1097},{"id":1107,"depth":558,"text":1108},{"id":1222,"depth":558,"text":1223},{"id":1232,"depth":558,"text":1233},{"id":1239,"depth":558,"text":1240},{"id":1274,"depth":558,"text":1275},{"id":1281,"depth":558,"text":1282},{"id":1288,"depth":558,"text":1289},{"id":1303,"depth":558,"text":1304},{"id":1314,"depth":558,"text":1315},"2026-09-13","Compare ShipFast and BoiledPlate boilerplates. Explore strengths, weaknesses, and which starter fits your indie hacking needs.",{},"\u002Fblog\u002Fshipfast-vs-boilerplate-comparison",{"title":957,"description":1340},"blog\u002Fshipfast-vs-boilerplate-comparison",[582,1346,1347,1348],"nextjs","shipfast","indie-hacking","5EhTPEW-oQ1r4PJB_o14us70Q_4JQXatZUHZhu2cge0",{"id":1351,"title":1352,"author":6,"body":1353,"category":6,"date":1648,"description":1649,"draft":574,"extension":575,"image":6,"meta":1650,"navigation":452,"path":1651,"seo":1652,"stem":1653,"tags":1654,"__hash__":1657},"blog\u002Fblog\u002Fshipfast-twitter-hype-reality.md","ShipFast Twitter Hype vs Reality: What the Template Actually Solves",{"type":8,"value":1354,"toc":1619},[1355,1358,1362,1365,1369,1372,1376,1379,1383,1390,1394,1401,1405,1413,1417,1420,1424,1430,1434,1442,1446,1449,1453,1456,1460,1468,1472,1480,1484,1492,1496,1499,1501,1504,1508,1516,1520,1533,1537,1545,1549,1560,1566,1570,1573,1577,1591,1594,1598,1601],[11,1356,1357],{},"Search \"shipfast twitter\" and you land in a familiar place: Marc Lou's timeline, screenshots of revenue, and a stream of indie builders debating whether a Next.js template is worth the money. The conversation is almost always about the same thing — which starter, which framework, which stack. That's the wrong debate. Stack choice is the easy part. The thing that actually eats your launch is the wiring between services, and no amount of Twitter hype changes that.",[15,1359,1361],{"id":1360},"the-shipfast-phenomenon","The ShipFast Phenomenon",[11,1363,1364],{},"ShipFast is Marc Lou's Next.js boilerplate, and its story is genuinely impressive: a solo maker turned a single template into a seven-figure business, largely on the back of a 100k+ follower audience on X. It resonates because it sells a feeling every builder recognizes — \"launch in days, not weeks\" — and because Marc shipped it in public, proving the market with receipts instead of promises.",[657,1366,1368],{"id":1367},"what-shipfast-does-right","What ShipFast Does Right",[11,1370,1371],{},"Credit where it's due. ShipFast validated that developers will pay for setup they could theoretically do themselves. It bundles a proven stack, a clean landing page, auth, and a payment integration into one clone-and-go package. For a Next.js builder who wants a head start, it removes real friction.",[657,1373,1375],{"id":1374},"what-shipfast-doesnt-solve","What ShipFast Doesn't Solve",[11,1377,1378],{},"Here's the honest limitation, and it's the same limitation every template shares. ShipFast hands you code. It does not provision your services, keep an AI agent consistent across sessions, or ship production-grade billing that survives webhook retries and refunds. The parts arrive in a box. Bolting them together — the part that actually consumes your weekends — is still your job.",[15,1380,1382],{"id":1381},"the-hidden-cost-of-saas-plumbing","The Hidden Cost of SaaS Plumbing",[11,1384,1385,1386,270],{},"Ask ten founders how to ship fast and you get ten stack arguments. Pick whatever you already know and the debate is over in an afternoon. ",[26,1387,1389],{"href":28,"rel":1388},[30],"The framework is not what slows you down",[657,1391,1393],{"id":1392},"stack-choice-takes-hours-wiring-takes-weeks","Stack Choice Takes Hours; Wiring Takes Weeks",[11,1395,1396,1397,1400],{},"The real time sink isn't Next vs Nuxt. It's webhook idempotency, row-level security policies, refund flows, and EU consent law. As we documented in ",[26,1398,1026],{"href":53,"rel":1399},[30],", auth is the fast part and RLS is the part you forget until a user sees someone else's data.",[657,1402,1404],{"id":1403},"why-templates-stop-short","Why Templates Stop Short",[11,1406,1407,1408,1412],{},"Every SaaS starter hands you the same box of parts: auth, a database client, a Stripe integration, a pile of Tailwind. Then it ",[26,1409,1411],{"href":644,"rel":1410},[30],"leaves you alone in a room with the box and a README",". None of the wiring is clever. It's hard in the sense of being endless and slightly different every time.",[15,1414,1416],{"id":1415},"boiledplate-automation-beyond-the-template","BoiledPlate: Automation Beyond the Template",[11,1418,1419],{},"BoiledPlate is a different layer of the stack. It's an AI-native Nuxt + Supabase starter whose setup runs itself. Your coding agent doesn't just write code — it interviews you, then provisions Stripe products and webhooks, a Supabase database with RLS, and Google sign-in in a single session.",[657,1421,1423],{"id":1422},"agent-driven-setup-the-interview-model","Agent-Driven Setup: The Interview Model",[11,1425,1426,1427,1429],{},"The agent's first session asks the questions a template can't: name, languages, theme, billing model. Then it reshapes the entire codebase to your answers using ",[47,1428,1003],{}," — repeatable, trackable changes rather than manual copy-paste. You describe your dashboard theme in plain language and the agent maps it onto real code.",[657,1431,1433],{"id":1432},"agentsmd-the-consistency-contract","AGENTS.md: The Consistency Contract",[11,1435,1436,1437,1441],{},"Coding agents drift when conventions aren't written down. BoiledPlate ships an AGENTS.md contract: one documented way to do data access, secrets, and API calls, so ",[26,1438,1440],{"href":121,"rel":1439},[30],"your agent's output stays predictable across sessions",". Write your conventions for the agent, not just the next hire.",[15,1443,1445],{"id":1444},"billing-that-actually-works","Billing That Actually Works",[11,1447,1448],{},"This is where \"ship in days\" quietly breaks. Billing is complex because money is complex, and the complexity doesn't disappear because your template skipped it.",[657,1450,1452],{"id":1451},"idempotent-webhooks-the-non-negotiable-foundation","Idempotent Webhooks: The Non-Negotiable Foundation",[11,1454,1455],{},"Stripe retries webhooks. If your handler isn't idempotent, a retry becomes a double-charge or a duplicated entitlement. Most naive implementations process the same event twice without noticing. BoiledPlate's billing is built on signature-verified, idempotent webhooks — the boring foundation that stops silent failures.",[657,1457,1459],{"id":1458},"the-source-of-truth-isnt-your-ui","The Source of Truth Isn't Your UI",[11,1461,1462,1463,1467],{},"A checkout success page means the browser reached a URL. It does not mean payment settled. ",[26,1464,1466],{"href":185,"rel":1465},[30],"Your success page should not touch your billing state",". Stripe webhooks are the source of truth; the UI is a courtesy. Skip this and you'll grant access to abandoned payments and deny it to successful ones.",[657,1469,1471],{"id":1470},"the-consent-problem-german-withdrawal-waivers-and-gdpr","The Consent Problem: German Withdrawal Waivers and GDPR",[11,1473,1474,1475,1479],{},"EU law isn't optional, and it's exactly the kind of edge case templates punt on. Selling digital goods to German customers requires encoding a withdrawal waiver into the pay button itself. We wrote up ",[26,1476,1478],{"href":223,"rel":1477},[30],"how to do this with Stripe Checkout's consent_collection"," — the sort of detail that fails audits when ignored.",[15,1481,1483],{"id":1482},"multi-plan-subscriptions-and-real-complexity","Multi-Plan Subscriptions and Real Complexity",[11,1485,1486,1487,1491],{},"Simple templates break under feature-gated billing. Multi-plan Stripe subscriptions demand that you sync product data with your database without race conditions, handle mid-cycle downgrades, and verify that Stripe isn't lying via signature verification. ",[26,1488,1490],{"href":819,"rel":1489},[30],"The five decisions behind Stripe subscriptions"," — plans, entitlements, state, webhooks, and consent — are the ones that decide whether your billing survives contact with real customers.",[15,1493,1495],{"id":1494},"auth-done-right-rls-and-row-level-security","Auth Done Right: RLS and Row-Level Security",[11,1497,1498],{},"Supabase policies aren't decorative. Client-side auth checks protect nothing; a determined user bypasses your UI and hits your database directly. Row-level security enforces isolation at query time, so a forgotten check in one component doesn't leak another tenant's data. Application-layer auth survives demos. RLS survives production.",[15,1500,1097],{"id":1096},[11,1502,1503],{},"These three tools demand each other, and each is genuinely good at its job. Nuxt gives you server-side rendering that doesn't fight you: auto-imports, Nitro, built-in composables. Supabase gives you Postgres without the DevOps — RLS, real-time, and auth in one place. Stripe's complexity isn't bloat; it's the price of handling refunds, disputes, and tax correctly. And Google sign-in — OAuth flows, token validation, user mapping — is the integration nobody wants to wire by hand, which is exactly why automating it saves hours.",[15,1505,1507],{"id":1506},"transactional-email-resend-and-the-idempotency-problem","Transactional Email: Resend and the Idempotency Problem",[11,1509,1510,1511,1515],{},"Email is simple to send and ",[26,1512,1514],{"href":53,"rel":1513},[30],"annoying to send exactly once",". The order of operations matters: Stripe fires, your webhook processes, then email goes out. Get it backwards and a retried webhook sends three confirmation emails. Do it inside the idempotent handler and each customer gets one — in the right language, since BoiledPlate ships i18n across four languages from day one.",[15,1517,1519],{"id":1518},"seo-and-real-debugging-stories","SEO and Real Debugging Stories",[11,1521,1522,1523,1527,1528,1532],{},"BoiledPlate ships JSON-LD, canonical URLs, and og:url meta tags so your blog actually gets indexed. We learned these the hard way. One JSON-LD source-order bug ",[26,1524,1526],{"href":267,"rel":1525},[30],"returned 200 from curl and 500 in the browser",". Another time our ",[26,1529,1531],{"href":261,"rel":1530},[30],"blog told Google its canonical URL was localhost:3000",". Blogs run on prerendered Markdown — static, fast, no headless CMS required.",[15,1534,1536],{"id":1535},"deployment-the-github-invite-as-your-product","Deployment: The GitHub Invite as Your Product",[11,1538,1539,1540,1544],{},"Product delivery is a technical problem. Sending code via email or Slack is a support nightmare. BoiledPlate treats ",[26,1541,1543],{"href":1266,"rel":1542},[30],"the GitHub invite itself as the product",", delivered instantly via a Stripe webhook where some failures must throw and some must never — the kind of nuance that separates working delivery from silent data loss.",[15,1546,1548],{"id":1547},"lite-vs-pro-free-or-lifetime-updates","Lite vs. Pro: Free or Lifetime Updates",[11,1550,1551,1552,1554,1555,1559],{},"There are two paths. ",[47,1553,432],{}," is ",[26,1556,1558],{"href":430,"rel":1557},[30],"free and MIT-licensed",": clone it, wire the services manually, own everything. It's the right call when you want to understand every line and have the time.",[11,1561,1562,1565],{},[47,1563,1564],{},"BoiledPlate Pro"," is €159 one-time with lifetime updates and instant GitHub delivery. The value isn't just the initial setup — it's staying current. Stripe API versions change, Supabase schemas migrate, security patches land. Semantic, agent-readable release notes let you opt into updates without merge hell, even on customized code. Version drift is what quietly kills a SaaS long after launch.",[15,1567,1569],{"id":1568},"real-world-failure-modes","Real-World Failure Modes",[11,1571,1572],{},"Shipping \"days not weeks\" doesn't prevent the disasters that show up in production: peer dependency conflicts and lock-file entropy, webhook handlers that crash mid-payment and lose data silently, the partial refund flow nobody shipped with, and schema migrations that break production at 2 a.m. These are the reasons ShipFast reviews on X and Reddit mention bugs and security concerns — not because Marc did anything uniquely wrong, but because plumbing is genuinely hard and templates leave it to you.",[15,1574,1576],{"id":1575},"choosing-your-path","Choosing Your Path",[11,1578,1579,1582,1583,1586,1587,1590],{},[47,1580,1581],{},"Clone and wire manually"," when you have strong stack opinions and time to spend. ",[47,1584,1585],{},"Use a standard template"," like ShipFast when you like the stack and are happy wiring services yourself. ",[47,1588,1589],{},"Choose automation"," when billing is critical to your business, you work with coding agents, and you value staying current without rewriting.",[11,1592,1593],{},"The distinction is honest: this isn't ShipFast versus BoiledPlate as competitors. Marc Lou proved the market. BoiledPlate automates the layer he punts — service provisioning, agent consistency, and billing that survives reality.",[15,1595,1597],{"id":1596},"the-bottom-line","The Bottom Line",[11,1599,1600],{},"The Twitter conversation about ShipFast is really a conversation about wanting to ship faster. That instinct is correct. But the bottleneck was never the framework. It's the plumbing — webhook idempotency, RLS, refunds, consent, delivery — that no template automates and every successful SaaS eventually rebuilds. If your product succeeds, the first refactor is always the plumbing. Starting on a foundation that already solves it is the actual shortcut.",[11,1602,1603,1604,1608,1609,1613,1614,1618],{},"You can ",[26,1605,1607],{"href":361,"rel":1606},[30],"start with BoiledPlate"," or read the ",[26,1610,1612],{"href":832,"rel":1611},[30],"full blog"," on how each piece of the stack really fits together. For the deeper industry context on why webhook reliability matters, Stripe's own ",[26,1615,1617],{"href":208,"rel":1616},[30],"webhook best practices"," documentation is worth the read — it explains, in Stripe's words, exactly why idempotency and signature verification aren't optional.",{"title":554,"searchDepth":555,"depth":555,"links":1620},[1621,1625,1629,1633,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647],{"id":1360,"depth":558,"text":1361,"children":1622},[1623,1624],{"id":1367,"depth":555,"text":1368},{"id":1374,"depth":555,"text":1375},{"id":1381,"depth":558,"text":1382,"children":1626},[1627,1628],{"id":1392,"depth":555,"text":1393},{"id":1403,"depth":555,"text":1404},{"id":1415,"depth":558,"text":1416,"children":1630},[1631,1632],{"id":1422,"depth":555,"text":1423},{"id":1432,"depth":555,"text":1433},{"id":1444,"depth":558,"text":1445,"children":1634},[1635,1636,1637],{"id":1451,"depth":555,"text":1452},{"id":1458,"depth":555,"text":1459},{"id":1470,"depth":555,"text":1471},{"id":1482,"depth":558,"text":1483},{"id":1494,"depth":558,"text":1495},{"id":1096,"depth":558,"text":1097},{"id":1506,"depth":558,"text":1507},{"id":1518,"depth":558,"text":1519},{"id":1535,"depth":558,"text":1536},{"id":1547,"depth":558,"text":1548},{"id":1568,"depth":558,"text":1569},{"id":1575,"depth":558,"text":1576},{"id":1596,"depth":558,"text":1597},"2026-09-12","ShipFast Twitter buzz promises fast launches, but Marc Lou's Next.js template has real limitations. Here's what it actually does and doesn't solve.",{},"\u002Fblog\u002Fshipfast-twitter-hype-reality",{"title":1352,"description":1649},"blog\u002Fshipfast-twitter-hype-reality",[1347,1655,1656,582],"next.js","indie hackers","Ke8c5Jf200Ucs7-Hf2CoelPnFMCo4kuAztgCccoNUEI",1789433551285]