[{"data":1,"prerenderedAt":1202},["ShallowReactive",2],{"blog-shipfast-affiliate-program-review":3,"related-shipfast-affiliate-program-review":352},{"id":4,"title":5,"author":6,"body":7,"category":6,"date":337,"description":338,"draft":339,"extension":340,"image":6,"meta":341,"navigation":342,"path":343,"seo":344,"stem":345,"tags":346,"__hash__":351},"blog\u002Fblog\u002Fshipfast-affiliate-program-review.md","ShipFast Affiliate Program: Honest Review vs BoiledPlate",null,{"type":8,"value":9,"toc":316},"minimark",[10,22,27,36,39,43,50,55,60,69,73,76,80,92,107,110,114,126,135,139,146,159,163,176,179,186,192,196,204,207,211,230,234,237,241,247,259,265,269,278,284,288,295,299,302],[11,12,13,14,21],"p",{},"If you searched for \"shipfast affiliate,\" you're probably weighing whether ShipFast is worth promoting — or worth buying in the first place. Both questions deserve an honest answer, and both come back to the same overlooked truth: the framework you pick is never the slow part. Wiring services together is. This is a head-to-head between ShipFast and ",[15,16,20],"a",{"href":17,"rel":18},"https:\u002F\u002Fboiledplate.ai",[19],"nofollow","BoiledPlate",", two SaaS starter kits with very different philosophies, plus a straight look at the affiliate math nobody wants to spell out.",[23,24,26],"h2",{"id":25},"the-saas-starter-problem-nobody-talks-about","The SaaS Starter Problem Nobody Talks About",[11,28,29,30,35],{},"Ask ten founders how to ship fast and you get ten stack arguments — Next vs Nuxt, Prisma vs a hosted DB, Stripe vs Paddle. Pick whatever you already know and that debate is over in an afternoon. As we've ",[15,31,34],{"href":32,"rel":33},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fhow-to-ship-saas-fast",[19],"written before",", the framework is not what slows you down.",[11,37,38],{},"What slows you down is the plumbing between the pieces: webhook idempotency, row-level security, refunds, EU consent flows. ShipFast positions itself as a \"launch in days\" boilerplate that hands you a working snapshot. BoiledPlate takes a different route: your coding agent interviews you, then provisions the services and reshapes the codebase to your answers. One gives you a template; the other automates the setup itself.",[23,40,42],{"id":41},"head-to-head-stack-and-trade-offs","Head-to-Head: Stack and Trade-offs",[11,44,45,49],{},[46,47,48],"strong",{},"ShipFast"," is Next.js on the JavaScript side, typically paired with MongoDB or Postgres and Stripe. If you live in the Next.js ecosystem and deploy to Vercel by reflex, that familiarity is real value.",[11,51,52,54],{},[46,53,20],{}," is Nuxt 4 + Supabase + Stripe + Resend. The Supabase choice changes the entire auth conversation, because security moves into the database via row-level security (RLS) rather than living only in application code.",[56,57,59],"h3",{"id":58},"rls-vs-application-layer-guards","RLS vs. application-layer guards",[11,61,62,63,68],{},"Application-layer guards work until someone adds a new endpoint and forgets the check. RLS is enforced at query time — the database refuses to return rows the caller shouldn't see, no matter which route reaches for them. It's the difference between a rule you must remember and a rule the system enforces. As our ",[15,64,67],{"href":65,"rel":66},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fnuxt-supabase-stripe-saas-boilerplate",[19],"wiring breakdown"," puts it: auth is the fast part, RLS is the part you forget.",[56,70,72],{"id":71},"i18n-and-email","i18n and email",[11,74,75],{},"BoiledPlate ships four languages from day one, so localization isn't a retrofit. Most Next.js boilerplates treat i18n as something you bolt on later. On email, BoiledPlate integrates Resend with transactional templates included; ShipFast generally assumes you'll wire your own provider.",[23,77,79],{"id":78},"the-real-plumbing-webhook-architecture","The Real Plumbing: Webhook Architecture",[11,81,82,83,86,87,91],{},"\"Launch in days\" quietly skips the hardest part: making Stripe webhooks trustworthy. Stripe retries deliveries. Your endpoint will get the same event twice. If your handler isn't ",[46,84,85],{},"idempotent",", a retried ",[88,89,90],"code",{},"checkout.session.completed"," can grant access twice, email twice, or double-count revenue.",[11,93,94,95,100,101,106],{},"BoiledPlate is built around signature-verified, idempotent webhooks — the ",[15,96,99],{"href":97,"rel":98},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-webhooks-source-of-truth",[19],"source of truth"," for billing state lives server-side, not on a client success page a user might never reach. We wrote a whole post on ",[15,102,105],{"href":103,"rel":104},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fthe-github-invite-is-the-product-building-a-stripe-webhook-where-delivery-throws",[19],"a webhook where some failures must throw and some never should",", because getting retry semantics wrong is how you either lose deliveries or duplicate them.",[11,108,109],{},"Refund flows are the same story. A refund is another event that can arrive more than once; without idempotency you risk double-reversing a subscription. This is exactly the kind of edge case a snapshot boilerplate leaves as an exercise for you.",[23,111,113],{"id":112},"billing-edge-cases-that-sink-startups","Billing Edge Cases That Sink Startups",[11,115,116,117,125],{},"If you sell into the EU, you hit consent law fast. German withdrawal-right waivers, for instance, must be encoded into the checkout itself — we documented ",[15,118,121,122],{"href":119,"rel":120},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-checkout-consent-collection-german-withdrawal-waiver",[19],"how to do it with Stripe's ",[88,123,124],{},"consent_collection",". Miss it and you've built a legal problem into your pay button.",[11,127,128,129,134],{},"Multi-plan subscriptions compound every one of these edges: proration, upgrades, downgrades, and refunds all flow through the same webhook pipeline. The ",[15,130,133],{"href":131,"rel":132},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fstripe-subscriptions-nuxt-supabase",[19],"five decisions behind Stripe subscriptions"," on a Nuxt + Supabase stack aren't unique to Nuxt — they're just usually undocumented.",[23,136,138],{"id":137},"agent-ready-code-vs-manual-customization","Agent-Ready Code vs. Manual Customization",[11,140,141,142,145],{},"Here's where the two products genuinely diverge. BoiledPlate ships an ",[88,143,144],{},"AGENTS.md"," contract: one documented way to do data access, where secrets live, and how things are named. That sounds minor until a coding agent touches your codebase and invents a second pattern in a corner you don't review.",[11,147,148,149,152,153,158],{},"BoiledPlate's setup runs on ",[46,150,151],{},"deterministic patches"," — repeatable, reviewable changes that apply your interview answers to the codebase. It's a scaling model for agent work, not a one-time scaffold. We explained the reasoning in ",[15,154,157],{"href":155,"rel":156},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fconventions-for-ai-coding-agents",[19],"write your conventions for the agent, not the next hire",". ShipFast's structure is clean, but it doesn't ship an explicit agent contract, so consistency depends on prompting discipline — and agent drift is what costs teams weeks, not code quality.",[23,160,162],{"id":161},"the-affiliate-conversation-commission-models-and-reality","The Affiliate Conversation: Commission Models and Reality",[11,164,165,166,169,170,175],{},"Now the keyword question. ShipFast runs a public affiliate program. Their materials and documentation reference ",[46,167,168],{},"30% per sale as a recurring share"," — you earn a cut for as long as the referred customer keeps paying — with a cookie window commonly cited around 90 days. Some ShipFast promotional pages have also advertised higher first-touch rates. Because the exact terms shift and are set by ShipFast, verify the current numbers on their ",[15,171,174],{"href":172,"rel":173},"https:\u002F\u002Fshipfa.st\u002Faffiliates",[19],"official affiliate page"," before you commit.",[11,177,178],{},"The math matters. On a recurring subscription, 30% of a monthly plan compounds if customers stick around — but it also depends entirely on retention. If churn is high, \"recurring\" commission looks a lot like one-off.",[11,180,181,182,185],{},"BoiledPlate is priced differently: ",[46,183,184],{},"€159 one-time, lifetime updates, instant delivery via GitHub."," A one-time product means a simpler affiliate conversation — no retention gamble, no dependence on a customer's subscription surviving month six.",[11,187,188,191],{},[46,189,190],{},"Who benefits from each model?"," A high-volume promoter with an audience that resubscribes will prefer recurring commission. A builder with a small, technical audience often does better recommending a one-time product they can vouch for without tracking whether the buyer stayed subscribed.",[23,193,195],{"id":194},"deployment-and-delivery-mechanics","Deployment and Delivery Mechanics",[11,197,198,199,203],{},"ShipFast is a self-hosted deploy path — clone, configure, push to Vercel. BoiledPlate delivers the product itself through a Stripe webhook: buy once, get an instant GitHub invite. The ",[15,200,202],{"href":103,"rel":201},[19],"GitHub invite is literally the product",", which is why its delivery webhook is engineered to never silently fail.",[11,205,206],{},"On first deploy, both get you a running app quickly. The difference is what's already wired: BoiledPlate boots with multi-language, RLS-secured, prerendered defaults, so the plumbing is done before you write your first feature.",[23,208,210],{"id":209},"seo-and-blog-infrastructure","SEO and Blog Infrastructure",[11,212,213,214,217,218,223,224,229],{},"BoiledPlate ships JSON-LD structured data, ",[88,215,216],{},"og:url"," canonicals, and a prerendered Markdown blog by default — the stuff most starters skip and you retrofit at 2 a.m. We know the failure modes intimately: we've written up ",[15,219,222],{"href":220,"rel":221},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Four-blog-canonically-pointed-at-localhost",[19],"a blog that told Google its canonical was localhost:3000"," and ",[15,225,228],{"href":226,"rel":227},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fthe-page-that-returned-200-on-the-server-and-500-in-the-browser-a-json-ld-tempor",[19],"a JSON-LD bug that returned 200 from curl and 500 in Chrome",". Those posts exist because we hit the bugs and fixed them in the product.",[23,231,233],{"id":232},"auth-typescript-and-multilingual-sessions","Auth, TypeScript, and Multilingual Sessions",[11,235,236],{},"Both starters offer Google sign-in. The distinction is enforcement: BoiledPlate leans on Supabase RLS, so a missing check in a route handler doesn't leak data. Sessions work across the four bundled languages out of the box, and the whole codebase runs in TypeScript strict mode — type safety end to end, not \"types added later.\"",[23,238,240],{"id":239},"honest-trade-offs-when-each-starter-wins","Honest Trade-offs: When Each Starter Wins",[11,242,243,246],{},[46,244,245],{},"Choose ShipFast if:"," you're committed to the Next.js ecosystem, you're comfortable owning your service wiring, and you're not routing work through coding agents.",[11,248,249,252,253,258],{},[46,250,251],{},"Choose BoiledPlate if:"," you want RLS-first security, you're comfortable in Nuxt, you build with Claude and want ",[15,254,257],{"href":255,"rel":256},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fnuxt-saas-boilerplate-for-ai-agents",[19],"agent-ready conventions",", or you need multilingual defaults on day one.",[11,260,261,264],{},[46,262,263],{},"Skip both"," if your product is genuinely unusual — a non-standard billing model or data layer — where a starter's assumptions fight you more than they help.",[23,266,268],{"id":267},"the-cost-of-free-vs-paid","The Cost of \"Free\" vs. Paid",[11,270,271,272,277],{},"There's also ",[15,273,276],{"href":274,"rel":275},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Ffree-nuxt-supabase-saas-boilerplate",[19],"BoiledPlate Lite"," — the same app, MIT-licensed and free, minus the AI tooling that makes the paid version set itself up. Clone it, wire it by hand, ship. It makes sense when you have the time and want zero cost.",[11,279,280,283],{},[46,281,282],{},"BoiledPlate Pro (€159)"," buys back that wiring time: agent-driven provisioning, deterministic patches, lifetime updates, and instant GitHub delivery. Against ShipFast's tiers (publicly listed around the $199–$349 range depending on plan), the ROI question is the same for both — how many weeks of your own plumbing does the price replace?",[23,285,287],{"id":286},"the-case-for-deterministic-patches-over-boilerplate","The Case for Deterministic Patches Over Boilerplate",[11,289,290,291,294],{},"Here's the quiet innovation. Traditional starters are a one-time snapshot: the day you clone, you fork away from upstream forever. BoiledPlate ships semantic, agent-readable release notes and ",[46,292,293],{},"opt-in updates to customized code"," — so you can stay current with Nuxt and Supabase without merge hell or manual rewrites. That's the difference between buying a boilerplate and buying a maintained foundation.",[23,296,298],{"id":297},"conclusion-the-plumbing-philosophy","Conclusion: The Plumbing Philosophy",[11,300,301],{},"Your stack choice isn't the slow part — the plumbing is. ShipFast prioritizes the Next.js ecosystem, fast initial setup, and a large community. BoiledPlate prioritizes agent consistency, RLS-enforced security, multilingual defaults, and agent-driven provisioning that runs the setup for you.",[11,303,304,305,309,310,315],{},"On the affiliate question specifically: ShipFast's recurring model rewards volume promoters who trust retention; BoiledPlate's one-time model rewards builders who'd rather recommend something with a clean, single transaction. Either way, always confirm current terms on the source. And if you want to see what \"the plumbing, already done\" actually looks like, ",[15,306,308],{"href":17,"rel":307},[19],"start here"," or read more on the ",[15,311,314],{"href":312,"rel":313},"https:\u002F\u002Fboiledplate.ai\u002Fblog",[19],"blog",".",{"title":317,"searchDepth":318,"depth":318,"links":319},"",3,[320,322,326,327,328,329,330,331,332,333,334,335,336],{"id":25,"depth":321,"text":26},2,{"id":41,"depth":321,"text":42,"children":323},[324,325],{"id":58,"depth":318,"text":59},{"id":71,"depth":318,"text":72},{"id":78,"depth":321,"text":79},{"id":112,"depth":321,"text":113},{"id":137,"depth":321,"text":138},{"id":161,"depth":321,"text":162},{"id":194,"depth":321,"text":195},{"id":209,"depth":321,"text":210},{"id":232,"depth":321,"text":233},{"id":239,"depth":321,"text":240},{"id":267,"depth":321,"text":268},{"id":286,"depth":321,"text":287},{"id":297,"depth":321,"text":298},"2026-08-04","Compare ShipFast affiliate opportunity with BoiledPlate. Learn the real affiliate math, stack differences, and which SaaS starter kit truly ships faster.",false,"md",{},true,"\u002Fblog\u002Fshipfast-affiliate-program-review",{"title":5,"description":338},"blog\u002Fshipfast-affiliate-program-review",[347,348,349,350],"affiliate marketing","saas","shipfast","boilerplate","ba5CKVjkZToypl6G9dabr_-GfiPSEmUlQjAODCKSUIs",[353,417,810],{"id":354,"title":355,"author":6,"body":356,"category":6,"date":407,"description":408,"draft":339,"extension":340,"image":6,"meta":409,"navigation":342,"path":410,"seo":411,"stem":412,"tags":413,"__hash__":416},"blog\u002Fblog\u002Fmarc-shipfast-building-saas-empire.md","Marc ShipFast: Building a $90K\u002FMonth SaaS Empire",{"type":8,"value":357,"toc":404},[358,363,366,372,375,379,394,401],[359,360,362],"h1",{"id":361},"review-results","Review Results",[11,364,365],{},"The article is well-written in English with valid markdown heading hierarchy. However, I found one issue:",[11,367,368,369,371],{},"The internal link to \"BoiledPlate Lite\" at the end (",[88,370,274],{},") is not a clickable URL in the text. It should be formatted as a markdown link. Here is the corrected final section:",[373,374],"hr",{},[56,376,378],{"id":377},"where-to-start-choosing-between-boilerplate-approaches","Where to Start: Choosing Between Boilerplate Approaches",[11,380,381,382,385,386,389,390,393],{},"Decide on three axes: ",[46,383,384],{},"stack preference"," (Next.js vs. Nuxt), ",[46,387,388],{},"team size"," (do you want provisioning done for you?), and ",[46,391,392],{},"agent involvement"," (are you building with Claude?).",[11,395,396,397,400],{},"If you want to try before you buy, ",[15,398,276],{"href":274,"rel":399},[19]," is free and MIT-licensed — clone it and wire it by hand. Pro adds the agent-driven setup, instant GitHub delivery, and lifetime updates.",[11,402,403],{},"Marc Lou proved the market. The question now isn't whether a boilerplate is worth it — it's whether you want to keep wiring plumbing yourself, or let an agent do it while you build the product.",{"title":317,"searchDepth":318,"depth":318,"links":405},[406],{"id":377,"depth":318,"text":378},"2026-08-03","Discover how Marc Lou turned ShipFast into a $90K\u002Fmonth SaaS success. Learn his boilerplate strategy, portfolio playbook, and key insights.",{},"\u002Fblog\u002Fmarc-shipfast-building-saas-empire",{"title":355,"description":408},"blog\u002Fmarc-shipfast-building-saas-empire",[349,348,414,415],"indie-developers","next.js-boilerplate","3KdsN0qui3xYvYoskkEJMoSyxDT8ULfilGPiH0pOAaE",{"id":418,"title":419,"author":6,"body":420,"category":6,"date":799,"description":800,"draft":339,"extension":340,"image":6,"meta":801,"navigation":342,"path":802,"seo":803,"stem":804,"tags":805,"__hash__":809},"blog\u002Fblog\u002Fmarc-lou-shipfast-github-saas-starter.md","Marc Lou ShipFast GitHub: SaaS Starter Evolution",{"type":8,"value":421,"toc":782},[422,425,429,432,435,442,446,449,457,465,469,474,479,485,488,492,495,502,505,509,512,520,528,532,535,569,572,576,579,582,586,594,597,601,609,638,641,645,648,677,680,684,695,698,702,713,716,720,726,732,736,742,748,754,758,761,769],[11,423,424],{},"If you searched for \"marc lou shipfast github,\" you're likely mapping the SaaS starter-kit landscape: what ShipFast solved, where it lives on GitHub, and what comes next. This guide covers that lineage and explains why the space is moving toward AI-native starters that provision services instead of handing you a box of parts.",[23,426,428],{"id":427},"what-marc-lou-built-and-why-it-matters","What Marc Lou Built (And Why It Matters)",[11,430,431],{},"Marc Lou popularized the modern SaaS boilerplate with ShipFast, a private GitHub repository you clone after purchase. It bundles payments, a database, login, and battle-tested UI so founders skip weeks of setup. The pitch worked: Marc publicly documented making $250K+ in five months selling it, and the template became a reference point for the whole \"launch in days, not weeks\" category.",[11,433,434],{},"ShipFast's insight was correct and durable: the framework choice is not what slows you down. The wiring between services is. But ShipFast is a manual template. You clone it, read the README, and configure everything by hand.",[11,436,437,438,441],{},"The next generation moves that setup work onto a coding agent. That's the idea behind ",[15,439,20],{"href":17,"rel":440},[19],": an AI-native Nuxt + Supabase starter whose setup runs itself. Your agent interviews you, then provisions Stripe products and webhooks, a Supabase database with row-level security, and Google sign-in in a single session.",[23,443,445],{"id":444},"the-real-cost-of-saas-setup-that-nobody-talks-about","The Real Cost of SaaS Setup (That Nobody Talks About)",[11,447,448],{},"Ask ten founders how to ship fast and you get ten stack arguments — Next vs Nuxt, Postgres vs a hosted DB, Stripe vs Paddle. Pick whatever you already know and that debate is over in an afternoon.",[11,450,451,452,456],{},"What actually eats your launch is the plumbing between the pieces: ",[15,453,455],{"href":32,"rel":454},[19],"webhook idempotency, RLS, refunds, and EU consent",". None of it is clever. It's endless, slightly different every time, and invisible until it breaks in production.",[11,458,459,460,464],{},"Agents change the equation. Instead of you wiring four services by hand, the agent provisions them while you answer questions about your product. The slow part — ",[15,461,463],{"href":255,"rel":462},[19],"bolting the parts to each other"," — moves off your plate.",[23,466,468],{"id":467},"boiledplate-vs-shipfast-vs-building-from-scratch","BoiledPlate vs. ShipFast vs. Building from Scratch",[11,470,471,473],{},[46,472,48],{}," is the manual template that proved the market. You get a complete repo and configure it yourself.",[11,475,476,478],{},[46,477,20],{}," is the agent-driven evolution. It ships an AGENTS.md contract and applies deterministic patches — automated, repeatable code changes that reshape the codebase to your answers.",[11,480,481,484],{},[46,482,483],{},"Building from scratch"," is the DIY trap. \"Just use these libraries\" still leaves you wiring Stripe webhooks against your database, writing RLS policies, and handling refund flows by hand.",[11,486,487],{},"Each approach trades time for control. Scratch gives maximum flexibility and costs the most weeks. ShipFast gives a head start with manual setup. BoiledPlate compresses the setup itself into a session.",[23,489,491],{"id":490},"how-boiledplate-actually-sets-itself-up","How BoiledPlate Actually Sets Itself Up",[11,493,494],{},"The first session is an interview. Your agent asks for the product name, languages, theme, and billing model — then reshapes the entire codebase with deterministic patches.",[11,496,497,498,315],{},"Deterministic patches are not freehand code generation. They're repeatable transformations, so the same answers produce the same result. That reliability comes from the AGENTS.md contract: one documented way to do data access and secrets, so the agent stays consistent instead of ",[15,499,501],{"href":155,"rel":500},[19],"inventing a new pattern every file",[11,503,504],{},"By the end of a session, Supabase RLS, Stripe products, and Google sign-in are provisioned — not stubbed for you to finish later.",[23,506,508],{"id":507},"webhook-architecture-that-actually-works","Webhook Architecture That Actually Works",[11,510,511],{},"\"It worked in testing\" is where most billing implementations die. Stripe retries webhooks. They arrive twice. They arrive out of order. If your handler isn't idempotent, a repeated call duplicates side effects.",[11,513,514,515,519],{},"The correct model treats ",[15,516,518],{"href":97,"rel":517},[19],"Stripe webhooks as the source of truth"," for billing state — not the client-side success page a user might never reach. BoiledPlate builds on this: signature-verified, idempotent webhooks that survive retries and race conditions.",[11,521,522,523,527],{},"Delivery is subtle. In BoiledPlate's own product webhook, ",[15,524,526],{"href":103,"rel":525},[19],"some failures must throw and some must never do"," — because a throw tells Stripe to retry, and retrying the wrong step doubles the damage.",[23,529,531],{"id":530},"billing-edge-cases-that-ship-ready-starters-must-handle","Billing Edge Cases That Ship-Ready Starters Must Handle",[11,533,534],{},"Real billing is more than a checkout button:",[536,537,538,553,563],"ul",{},[539,540,541,544,545,549,550,552],"li",{},[46,542,543],{},"EU consent laws."," Selling to Germany means encoding a ",[15,546,548],{"href":119,"rel":547},[19],"withdrawal waiver into the pay button"," via Stripe's ",[88,551,124],{},". Getting this wrong at launch is a compliance problem, not a to-do.",[539,554,555,558,559,315],{},[46,556,557],{},"Multi-plan subscriptions."," Single-tier billing doesn't survive customer reality. BoiledPlate ships ",[15,560,562],{"href":131,"rel":561},[19],"multi-plan Stripe subscriptions",[539,564,565,568],{},[46,566,567],{},"Refunds and state drift."," When Stripe says one thing and your app says another, the webhook wins.",[11,570,571],{},"Staging webhooks rarely reproduce production surprises, which is why the architecture has to be defensive from day one.",[23,573,575],{"id":574},"auth-and-security-row-level-security-done-right","Auth and Security: Row-Level Security Done Right",[11,577,578],{},"A valid JWT proves who someone is. It does not stop a query from returning another user's rows. That's the RLS gap — auth is the fast part; RLS is the part you forget until a user sees data that isn't theirs.",[11,580,581],{},"Supabase enforces permissions at query time in the database, not in application code you might bypass. BoiledPlate ships with RLS patterns already in place, which closes the most common and most dangerous class of starter-kit mistakes. RLS isn't the whole story — you still want signature verification, token expiration, and rate limiting — but it's the foundation.",[23,583,585],{"id":584},"product-delivery-as-a-feature-github-invites-and-instant-delivery","Product Delivery as a Feature: GitHub Invites and Instant Delivery",[11,587,588,589,593],{},"Like ShipFast, BoiledPlate delivers code as a GitHub repository, not an email attachment. Buy Pro and you receive GitHub access within seconds, triggered by the same Stripe webhook architecture the product teaches. The delivery mechanism ",[590,591,592],"em",{},"is"," a working example of the plumbing you're buying.",[11,595,596],{},"Pro is €159 one-time with lifetime updates. Updates ship as semantic, agent-readable release notes, so you can opt into changes even in code you've customized — a genuinely hard problem that raw git merges handle badly.",[23,598,600],{"id":599},"the-anti-plumbing-stack-why-these-tools-work-together","The Anti-Plumbing Stack: Why These Tools Work Together",[11,602,603,604,608],{},"The stack settles quickly, and each piece ",[15,605,607],{"href":65,"rel":606},[19],"demands something specific",":",[536,610,611,617,623,629],{},[539,612,613,616],{},[46,614,615],{},"Nuxt"," — full-stack framework, minimal magic, agent-friendly.",[539,618,619,622],{},[46,620,621],{},"Supabase"," — PostgreSQL with RLS, fewer moving parts than a managed auth service.",[539,624,625,628],{},[46,626,627],{},"Stripe"," — the webhook standard every SaaS founder learns anyway.",[539,630,631,634,635,315],{},[46,632,633],{},"Resend"," — transactional email that's simple to send and annoying to send ",[590,636,637],{},"exactly once",[11,639,640],{},"Tools like Firebase auth and heavier ORMs were left out deliberately to keep the surface small and the conventions consistent.",[23,642,644],{"id":643},"technical-deep-dives-real-bugs-and-lessons-learned","Technical Deep Dives: Real Bugs and Lessons Learned",[11,646,647],{},"The trustworthy version of this stack is a log of edge cases, and BoiledPlate documents its own:",[536,649,650,658,665],{},[539,651,652,653,657],{},"A ",[15,654,656],{"href":226,"rel":655},[19],"JSON-LD hydration bug"," that returned 200 from curl and 500 in Chrome — because of source order.",[539,659,660,661,315],{},"The blog that ",[15,662,664],{"href":220,"rel":663},[19],"told Google its canonical URL was localhost:3000",[539,666,667,668,676],{},"A peer-dependency conflict where ",[15,669,672,673],{"href":670,"rel":671},"https:\u002F\u002Fboiledplate.ai\u002Fblog\u002Fvercel-web-analytics-nuxt-4-analytics-package-breaks-typecheck",[19],"@vercel\u002Fanalytics broke ",[88,674,675],{},"nuxt typecheck"," under strict mode.",[11,678,679],{},"These are the surprises that separate production from a hobby project.",[23,681,683],{"id":682},"seo-typescript-and-i18n-from-day-one","SEO, TypeScript, and i18n From Day One",[11,685,686,687,689,690,694],{},"BoiledPlate ships a prerendered Markdown blog — no CMS, version control as the source of truth — with JSON-LD and ",[88,688,216],{}," canonicals baked in. That matters because organic discovery and honest debugging posts are how SaaS founders (Marc Lou included) build durable traffic. Read the ",[15,691,693],{"href":312,"rel":692},[19],"BoiledPlate blog"," for the running log.",[11,696,697],{},"The codebase is TypeScript in strict mode, typed end to end across database, API, components, and webhooks. Strictness costs more typing upfront and catches bugs before production. It ships four languages from day one, because adding i18n later breaks routing and forces a refactor you'll resent.",[23,699,701],{"id":700},"pricing-and-positioning-free-lite-vs-pro","Pricing and Positioning: Free Lite vs. Pro",[11,703,704,705,708,709,712],{},"There are two tiers. ",[15,706,276],{"href":274,"rel":707},[19]," is MIT-licensed and free — clone it and wire the services manually. ",[46,710,711],{},"Pro"," is €159 one-time with lifetime updates and instant GitHub delivery, and it's the agent-driven setup that provisions services for you.",[11,714,715],{},"The value exchange is straightforward: Lite removes the barrier to trying the stack; Pro removes the weeks of plumbing. One-time pricing suits founders who'd rather pay once and own the code than rent a platform.",[23,717,719],{"id":718},"when-boiledplate-is-the-right-choice-and-when-it-isnt","When BoiledPlate Is the Right Choice (And When It Isn't)",[11,721,722,725],{},[46,723,724],{},"Good fit:"," you're building on Nuxt + Supabase + Stripe, want multi-plan billing, and work with a coding agent like Claude.",[11,727,728,731],{},[46,729,730],{},"Wrong fit:"," you're locked into Rails or Django, you have highly custom payment logic, or your organization can't use agents. You can diverge from BoiledPlate's opinions, but every divergence trades away some of the agent's consistency benefits.",[23,733,735],{"id":734},"common-questions","Common Questions",[11,737,738,741],{},[46,739,740],{},"\"Is this just ShipFast renamed?\""," No. ShipFast is a manual template; BoiledPlate is agent-native with deterministic patches and an AGENTS.md contract. The lineage is real, the mechanism is different.",[11,743,744,747],{},[46,745,746],{},"\"Can I really deploy in minutes?\""," The setup session is fast, but your final timeline depends on your schema and Stripe configuration.",[11,749,750,753],{},[46,751,752],{},"\"Do I need to use Claude?\""," The starter ships agent-ready. Using an agent is optional — Lite is a clone-and-wire template either way.",[23,755,757],{"id":756},"the-bigger-picture","The Bigger Picture",[11,759,760],{},"Marc Lou's ShipFast proved that founders will pay real money to skip plumbing, and its GitHub-delivery model set the template for the category. The next move is obvious in hindsight: if the plumbing is the project, and agents can now read conventions and apply patches, then the setup itself should run itself.",[11,762,763,764,768],{},"That's the bet BoiledPlate makes. The ",[15,765,767],{"href":17,"rel":766},[19],"full product"," is worth a look if you've felt the gap between choosing a stack and actually shipping on it.",[11,770,771,772,776,777,315],{},"For deeper background on Marc Lou's work, see ",[15,773,48],{"href":774,"rel":775},"https:\u002F\u002Fshipfa.st\u002F",[19]," and his write-up of the launch on ",[15,778,781],{"href":779,"rel":780},"https:\u002F\u002Fjustship.it\u002F",[19],"Just Ship It",{"title":317,"searchDepth":318,"depth":318,"links":783},[784,785,786,787,788,789,790,791,792,793,794,795,796,797,798],{"id":427,"depth":321,"text":428},{"id":444,"depth":321,"text":445},{"id":467,"depth":321,"text":468},{"id":490,"depth":321,"text":491},{"id":507,"depth":321,"text":508},{"id":530,"depth":321,"text":531},{"id":574,"depth":321,"text":575},{"id":584,"depth":321,"text":585},{"id":599,"depth":321,"text":600},{"id":643,"depth":321,"text":644},{"id":682,"depth":321,"text":683},{"id":700,"depth":321,"text":701},{"id":718,"depth":321,"text":719},{"id":734,"depth":321,"text":735},{"id":756,"depth":321,"text":757},"2026-08-02","Explore Marc Lou's ShipFast GitHub template, how it revolutionized SaaS launches, and why AI-native starters are the next evolution.",{},"\u002Fblog\u002Fmarc-lou-shipfast-github-saas-starter",{"title":419,"description":800},"blog\u002Fmarc-lou-shipfast-github-saas-starter",[806,48,807,808],"SaaS","GitHub","Startup Tools","rFETvBQgWaU8ppz1yTtkXSF7WuFDQU_aJ1ff8-N81v0",{"id":811,"title":812,"author":6,"body":813,"category":6,"date":1191,"description":1192,"draft":339,"extension":340,"image":6,"meta":1193,"navigation":342,"path":1194,"seo":1195,"stem":1196,"tags":1197,"__hash__":1201},"blog\u002Fblog\u002Fmarc-lou-shipfast-business-breakdown.md","Marc Lou's ShipFast: From $0 to $90K Monthly",{"type":8,"value":814,"toc":1173},[815,818,822,825,828,835,839,846,853,856,860,863,877,885,889,892,895,907,918,929,933,936,943,947,950,958,962,965,973,975,978,1003,1011,1015,1018,1047,1050,1054,1060,1063,1067,1074,1082,1086,1093,1096,1100,1103,1117,1120,1124,1135,1138,1142,1149,1152,1156,1159],[11,816,817],{},"Marc Lou didn't invent the SaaS boilerplate. He turned it into a business that reportedly clears $90K in a good month. If you want to understand why a folder of Next.js code sells better than most funded startups, you have to look past the code and at the playbook: the launch, the pricing, the portfolio, and the marketing. Here's the full breakdown — and what it teaches anyone building on a different stack.",[23,819,821],{"id":820},"the-origin-story-from-broke-to-90k-monthly","The Origin Story: From Broke to $90K+ Monthly",[11,823,824],{},"Before ShipFast, Marc Lou was broke. He'd shipped a string of startups that didn't stick, and the desperation shows in how he built ShipFast: fast, cheap, and aimed at solving his own repeated pain.",[11,826,827],{},"He chose Next.js for a boring, correct reason — market demand. Next.js had the largest mindshare among indie hackers, which meant the widest possible buyer pool. He wasn't picking the best framework; he was picking the most sellable one.",[11,829,830,831,834],{},"The proof came at launch. ShipFast reportedly earned about ",[46,832,833],{},"$6,000 of profit in 48 hours"," — more than he'd made in the entire prior year. That validation shaped everything after: the product wasn't \"a better React app,\" it was \"the thing that gets you to revenue this weekend.\"",[23,836,838],{"id":837},"what-makes-shipfast-different-from-generic-bootstraps","What Makes ShipFast Different From Generic Bootstraps",[11,840,841,842,845],{},"The most common skeptical question — and it's a real Reddit thread — is ",[590,843,844],{},"\"what does ShipFast do differently than any bootstrapper?\""," There are free starters for every stack. Why pay?",[11,847,848,849,852],{},"The answer isn't the parts. It's the wiring. Every starter hands you auth, a database client, a Stripe integration, and a landing page. As we've ",[15,850,34],{"href":255,"rel":851},[19],", the parts were never the problem — bolting them to each other is the part that eats your weekends. ShipFast sells the integrated ecosystem: Stripe, auth, and email that already agree with each other.",[11,854,855],{},"The stack choice is the easy decision. The plumbing is the project.",[23,857,859],{"id":858},"the-real-cost-of-saas-setup-what-shipfast-solves","The Real Cost of SaaS Setup (What ShipFast Solves)",[11,861,862],{},"Ask ten founders how to ship fast and you get ten stack arguments. Meanwhile the actual time sink is invisible until it breaks:",[536,864,865,868,871,874],{},[539,866,867],{},"The Stripe webhook that has to reconcile with your database",[539,869,870],{},"The row-level security policy you forgot until a user saw someone else's data",[539,872,873],{},"The five files a new locale string has to land in before the build stops complaining",[539,875,876],{},"Subscription state that drifts between Stripe and your own tables",[11,878,879,880,884],{},"None of it is clever work. It's endless, slightly-different-every-time work. That's the ",[15,881,883],{"href":32,"rel":882},[19],"real cost of shipping SaaS",", and it's exactly the weeks a boilerplate reclaims.",[23,886,888],{"id":887},"webhook-architecture-and-billing-edge-cases","Webhook Architecture and Billing Edge Cases",[11,890,891],{},"The hardest part of any billing system is the webhook, not the checkout button. Checkout is a redirect. The webhook is where money becomes truth.",[11,893,894],{},"Two principles separate a toy integration from a trustworthy one:",[11,896,897,900,901,906],{},[46,898,899],{},"Idempotency."," Stripe ",[15,902,905],{"href":903,"rel":904},"https:\u002F\u002Fdocs.stripe.com\u002Fwebhooks",[19],"retries webhooks"," on failure, which means your handler will receive the same event more than once. A non-idempotent handler double-grants access or double-emails. You need to safely absorb repeats.",[11,908,909,912,913,917],{},[46,910,911],{},"Stripe as source of truth."," Your ",[15,914,916],{"href":97,"rel":915},[19],"checkout success page should never touch billing state",". The success page is a client redirect a user can refresh, close, or fake. The webhook is the only event you can trust.",[11,919,920,921,925,926,928],{},"Then there's compliance. Selling to EU customers means encoding things like the ",[15,922,924],{"href":119,"rel":923},[19],"German withdrawal waiver"," directly into the pay button via Stripe's ",[88,927,124],{},". Refunds and subscription reconciliation are more of the same: unglamorous, mandatory, easy to get subtly wrong.",[23,930,932],{"id":931},"the-interconnected-portfolio-strategy","The Interconnected Portfolio Strategy",[11,934,935],{},"ShipFast isn't a standalone product. It's the hub of a portfolio. It feeds CodeFast (a coding course), a YouTube channel, and a stream of smaller startups. Each one cross-promotes the others.",[11,937,938,939,942],{},"The genius is that shipping many startups ",[590,940,941],{},"validates the boilerplate itself",". Every new launch is a live demo that the tool works. Revenue diversifies across product sales, courses, content, and affiliates — and the boilerplate sits underneath all of it as proof.",[23,944,946],{"id":945},"ai-agent-consistency-the-agentsmd-solution","AI Agent Consistency: The AGENTS.md Solution",[11,948,949],{},"Here's where the playbook is about to change. When you build with coding agents, agents drift. Ask Claude to add a feature twice and you can get two different data-access patterns, two secret-handling conventions, two shapes of the same thing.",[11,951,952,953,957],{},"The fix is a contract. An ",[15,954,956],{"href":155,"rel":955},[19],"AGENTS.md file documents the one way"," to do data access and secrets, so the agent produces consistent output every session. This is why BoiledPlate ships one — the setup interview and every later change route through documented conventions instead of the agent's mood that day. Write your conventions for the agent, not the next hire.",[23,959,961],{"id":960},"product-delivery-mechanics-github-invites-as-the-product","Product Delivery Mechanics: GitHub Invites as the Product",[11,963,964],{},"There's a quiet lesson in how ShipFast delivers: you don't get a download, you get a GitHub repository invite. The purchase triggers automation, not a human.",[11,966,967,968,972],{},"We build the same way, and it's harder than it looks. When ",[15,969,971],{"href":103,"rel":970},[19],"the GitHub invite IS the product",", your Stripe webhook has to decide which failures throw (retry me) and which must never throw (don't retry, you'll spam invites). Get that logic right and fulfillment scales to thousands of buyers with zero manual work.",[23,974,600],{"id":599},[11,976,977],{},"The specific tools matter because each one carries its weight and demands something back:",[536,979,980,986,991,996],{},[539,981,982,985],{},[46,983,984],{},"Nuxt \u002F Next.js"," — the framework everyone already knows, so onboarding friction is near zero.",[539,987,988,990],{},[46,989,621],{}," — auth is the fast part; RLS is the part you forget. Rolling your own auth is a mistake you make once.",[539,992,993,995],{},[46,994,627],{}," — reliable webhook delivery and mature refund handling, if you respect idempotency.",[539,997,998,1000,1001,315],{},[46,999,633],{}," — transactional email without running mail infrastructure. Simple to send, annoying to send ",[590,1002,637],{},[11,1004,1005,1006,1010],{},"We break down ",[15,1007,1009],{"href":65,"rel":1008},[19],"what each piece actually demands"," in detail. The short version: good stack, real wiring cost.",[23,1012,1014],{"id":1013},"technical-debt-and-real-bugs-youll-actually-hit","Technical Debt and Real Bugs You'll Actually Hit",[11,1016,1017],{},"Shipping to thousands of developers surfaces the same recurring bugs, and they're rarely the ones you plan for:",[536,1019,1020,1026,1035,1041],{},[539,1021,1022,1025],{},[46,1023,1024],{},"JSON-LD hydration crashes"," — a page can return 200 from curl and 500 in Chrome purely because of source order in structured data.",[539,1027,1028,1031,1032,315],{},[46,1029,1030],{},"Canonical URL edge cases"," — a misconfigured blog can quietly tell Google its canonical URL is ",[88,1033,1034],{},"localhost:3000",[539,1036,1037,1040],{},[46,1038,1039],{},"Peer dependency conflicts"," — the Node ecosystem where one analytics package breaks your typecheck.",[539,1042,1043,1046],{},[46,1044,1045],{},"Webhook retry failures"," — the hardest to debug because they only fail intermittently, under load, in production.",[11,1048,1049],{},"A boilerplate's real value is that someone already hit these bugs so you don't have to.",[23,1051,1053],{"id":1052},"the-marketing-advantage-why-marc-lous-approach-works","The Marketing Advantage: Why Marc Lou's Approach Works",[11,1055,1056,1057,1059],{},"Marc Lou's biggest edge isn't the code — it's the marketing. He publishes his revenue figures, his failures, and his playbooks openly. Transparency ",[590,1058,592],{}," the marketing. His YouTube channel doubles as proof of concept and an SEO moat that competitors can't buy their way past.",[11,1061,1062],{},"Building in public beat stealth here because the product's promise — \"you can ship fast\" — is best demonstrated by a founder visibly shipping fast, in public, on repeat.",[23,1064,1066],{"id":1065},"pricing-strategy-and-unit-economics","Pricing Strategy and Unit Economics",[11,1068,1069,1070,1073],{},"ShipFast is a one-time purchase with lifetime updates, and so is BoiledPlate at ",[46,1071,1072],{},"€159",". This pricing model works for boilerplates specifically because the buyer's mental math is simple: one payment versus weeks of their own billable time.",[11,1075,1076,1077,1081],{},"A free, MIT-licensed tier acts as the top of the funnel. Developers try ",[15,1078,1080],{"href":274,"rel":1079},[19],"the free version",", hit the plumbing wall, and upgrade for the automation. Low CAC, high perceived value, no subscription to churn out of.",[23,1083,1085],{"id":1084},"customization-without-merge-hell","Customization Without Merge Hell",[11,1087,1088,1089,1092],{},"The dirty secret of boilerplates is what happens ",[590,1090,1091],{},"after"," you buy. You customize the code, then a new version ships, and merging updates into your fork becomes hell.",[11,1094,1095],{},"The way out is semantic, agent-readable release notes and opt-in, deterministic patches. Updates apply to customized code without forcing a full re-fork. This is the difference between a boilerplate you use once and a boilerplate you keep.",[23,1097,1099],{"id":1098},"seo-and-technical-foundation-as-differentiator","SEO and Technical Foundation as Differentiator",[11,1101,1102],{},"The foundation that ships out of the box quietly compounds:",[536,1104,1105,1108,1111,1114],{},[539,1106,1107],{},"JSON-LD, canonical URLs, and og:meta tags configured correctly from day one",[539,1109,1110],{},"TypeScript strict mode for long-term maintainability",[539,1112,1113],{},"i18n in four languages so localization isn't a rewrite later",[539,1115,1116],{},"A prerendered Markdown blog for content and SEO",[11,1118,1119],{},"None of this wins a demo. All of it matters six months in.",[23,1121,1123],{"id":1122},"comparing-boiledplate-to-shipfast-stack-specific-positioning","Comparing BoiledPlate to ShipFast: Stack-Specific Positioning",[11,1125,1126,1127,1130,1131,1134],{},"ShipFast owns the Next.js crowd. ",[15,1128,20],{"href":17,"rel":1129},[19]," is built for the Nuxt + Supabase + Stripe + Resend stack, with heavier emphasis on webhook idempotency, EU compliance, and — the real differentiator — agent-driven setup where your coding agent interviews you and ",[590,1132,1133],{},"provisions the services",", not just the code.",[11,1136,1137],{},"Choose based on your stack and how you work. If you live in Next.js, ShipFast is the default. If you're on Nuxt and building with agents, BoiledPlate is the more natural fit.",[23,1139,1141],{"id":1140},"the-myth-vs-reality-what-boilerplates-actually-solve","The Myth vs. Reality: What Boilerplates Actually Solve",[11,1143,1144,1145,1148],{},"A boilerplate does ",[46,1146,1147],{},"not"," solve product-market fit. You still need an idea people want. It does not make your startup good.",[11,1150,1151],{},"What it solves is weeks of plumbing — the endless, error-prone integration work between services. Framework choice is easy; service integration is the bottleneck. The shipping-speed advantage is real, and speed is a genuine moat when your competitors are still wiring their webhooks.",[23,1153,1155],{"id":1154},"building-a-sustainable-business-on-top-of-boilerplates","Building a Sustainable Business on Top of Boilerplates",[11,1157,1158],{},"The durable version of this business isn't one-time sales — it's the ecosystem. Lifetime updates keep the product alive, community and content keep customers around, and each new startup the founder ships re-validates the framework in public.",[11,1160,1161,1162,1164,1165,1168,1169,315],{},"As the underlying stack commodifies, the moat shifts from ",[590,1163,88],{}," to ",[590,1166,1167],{},"automation and consistency",". That's the future Marc Lou pointed at, and the one AGENTS.md-driven, webhook-provisioned tools are built for: fewer manual steps, higher switching costs, and delivery that runs itself. Read more on how the ",[15,1170,1172],{"href":32,"rel":1171},[19],"plumbing — not the stack — is the real project",{"title":317,"searchDepth":318,"depth":318,"links":1174},[1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190],{"id":820,"depth":321,"text":821},{"id":837,"depth":321,"text":838},{"id":858,"depth":321,"text":859},{"id":887,"depth":321,"text":888},{"id":931,"depth":321,"text":932},{"id":945,"depth":321,"text":946},{"id":960,"depth":321,"text":961},{"id":599,"depth":321,"text":600},{"id":1013,"depth":321,"text":1014},{"id":1052,"depth":321,"text":1053},{"id":1065,"depth":321,"text":1066},{"id":1084,"depth":321,"text":1085},{"id":1098,"depth":321,"text":1099},{"id":1122,"depth":321,"text":1123},{"id":1140,"depth":321,"text":1141},{"id":1154,"depth":321,"text":1155},"2026-08-01","Discover how Marc Lou built ShipFast into a $90K\u002Fmonth SaaS boilerplate business. Full breakdown of the launch strategy, pricing, and marketing playbook.",{},"\u002Fblog\u002Fmarc-lou-shipfast-business-breakdown",{"title":812,"description":1192},"blog\u002Fmarc-lou-shipfast-business-breakdown",[348,349,1198,1199,1200],"marc-lou","entrepreneurship","next.js","fzGsPclYe-SEgSFSnBCfMY7tIr5Sh9tjst7GBr9MEpQ",1785804707800]