[{"data":1,"prerenderedAt":511},["ShallowReactive",2],{"docsNavigation":3,"contentNavigation":145,"$f33KesTH4sSy4U-Njo2WelY7ftWNegNpenIZRZJMuYNY":225,"\u002Fblog\u002Fbuild-saas-with-nuxt-4-better-auth-polar":228,"\u002Fblog\u002Fbuild-saas-with-nuxt-4-better-auth-polar-blog-surround":507},[4,32,44,52,60,67,75,83,90,97,104,112,119,127,139],{"title":5,"path":6,"stem":7,"children":8,"icon":31},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started\u002F1.index",[9,11,15,19,23,27],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F01.getting-started\u002F2.installation",{"title":16,"path":17,"stem":18},"Setup","\u002Fdocs\u002Fgetting-started\u002Fsetup","docs\u002F01.getting-started\u002F3.setup",{"title":20,"path":21,"stem":22},"Pull Updates","\u002Fdocs\u002Fgetting-started\u002Fpull-updates","docs\u002F01.getting-started\u002F4.pull-updates",{"title":24,"path":25,"stem":26},"Deployment","\u002Fdocs\u002Fgetting-started\u002Fdeployment","docs\u002F01.getting-started\u002F5.deployment",{"title":28,"path":29,"stem":30},"Going to production","\u002Fdocs\u002Fgetting-started\u002Fgoing-to-production","docs\u002F01.getting-started\u002F6.going-to-production","i-lucide-square-play",{"title":33,"path":34,"stem":35,"children":36,"icon":43},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002F02.architecture\u002F1.index",[37,39],{"title":38,"path":34,"stem":35},"Tech Stack",{"title":40,"path":41,"stem":42},"Layers","\u002Fdocs\u002Farchitecture\u002Flayers","docs\u002F02.architecture\u002F2.layers","i-lucide-layers",{"title":45,"path":46,"stem":47,"children":48,"icon":51},"Database","\u002Fdocs\u002Fdatabase","docs\u002F03.database\u002F1.index",[49],{"title":50,"path":46,"stem":47},"PostgreSQL","i-lucide-database",{"title":53,"path":54,"stem":55,"children":56,"icon":59},"Emails","\u002Fdocs\u002Femails","docs\u002F04.emails\u002F1.index",[57],{"title":58,"path":54,"stem":55},"Overview","i-lucide-mail",{"title":61,"path":62,"stem":63,"children":64,"icon":66},"Authentication","\u002Fdocs\u002Fauthentication","docs\u002F05.authentication\u002F1.index",[65],{"title":58,"path":62,"stem":63},"i-lucide-lock-keyhole",{"title":68,"path":69,"stem":70,"children":71,"icon":74},"Payments","\u002Fdocs\u002Fpayments","docs\u002F06.payments\u002F1.index",[72],{"title":73,"path":69,"stem":70},"Polar","i-lucide-circle-dollar-sign",{"title":76,"path":77,"stem":78,"children":79,"icon":82},"Admin","\u002Fdocs\u002Fadmin","docs\u002F07.admin\u002F1.index",[80],{"title":81,"path":77,"stem":78},"Features","i-lucide-user-cog",{"title":84,"path":85,"stem":86,"children":87,"icon":89},"Images","\u002Fdocs\u002Fimages","docs\u002F08.images\u002F1.index",[88],{"title":58,"path":85,"stem":86},"i-lucide-image",{"title":91,"path":92,"stem":93,"children":94,"icon":96},"i18n","\u002Fdocs\u002Fi18n","docs\u002F09.i18n\u002F1.index",[95],{"title":58,"path":92,"stem":93},"i-lucide-languages",{"title":98,"path":99,"stem":100,"children":101,"icon":103},"SEO","\u002Fdocs\u002Fseo","docs\u002F10.seo\u002F1.index",[102],{"title":58,"path":99,"stem":100},"i-lucide-globe",{"title":105,"path":106,"stem":107,"children":108,"icon":111},"Analytics","\u002Fdocs\u002Fanalytics","docs\u002F11.analytics\u002F1.index",[109],{"title":110,"path":106,"stem":107},"Umami","i-lucide-chart-line",{"title":113,"path":114,"stem":115,"children":116,"icon":118},"Security","\u002Fdocs\u002Fsecurity","docs\u002F12.security\u002F1.index",[117],{"title":58,"path":114,"stem":115},"i-lucide-file-lock",{"title":120,"path":121,"stem":122,"children":123,"icon":126},"Testing","\u002Fdocs\u002Ftesting","docs\u002F13.testing\u002F1.index",[124],{"title":125,"path":121,"stem":122},"E2E Testing","i-lucide-test-tube",{"title":128,"path":129,"stem":130,"children":131,"icon":138},"Support","\u002Fdocs\u002Fsupport","docs\u002F14.support\u002F1.index",[132,134],{"title":133,"path":129,"stem":130},"Help",{"title":135,"path":136,"stem":137},"Troubleshooting","\u002Fdocs\u002Fsupport\u002Ftroubleshooting","docs\u002F14.support\u002F2.troubleshooting","i-lucide-message-circle-question",{"title":140,"path":141,"stem":142,"children":143},"LLMs","\u002Fdocs\u002Fllms","docs\u002F15.llms\u002F1.index",[144],{"title":140,"path":141,"stem":142},[146,168],{"title":147,"path":148,"stem":149,"children":150,"page":167},"Blog","\u002Fblog","blog",[151,155,159,163],{"title":152,"path":153,"stem":154},"How to Build a SaaS with Nuxt 4, better-auth, and Polar","\u002Fblog\u002Fbuild-saas-with-nuxt-4-better-auth-polar","blog\u002Fbuild-saas-with-nuxt-4-better-auth-polar",{"title":156,"path":157,"stem":158},"DIY vs Nuxt Starter Kit — The Real Cost of Auth and Payments","\u002Fblog\u002Fdiy-vs-nuxt-starter-kit-cost","blog\u002Fdiy-vs-nuxt-starter-kit-cost",{"title":160,"path":161,"stem":162},"Nuxt Boilerplate for Solo Founders — Ship Without Rebuilding Foundations","\u002Fblog\u002Fnuxt-boilerplate-for-solo-founders","blog\u002Fnuxt-boilerplate-for-solo-founders",{"title":164,"path":165,"stem":166},"Best Nuxt SaaS Boilerplate in 2026 — What Actually Matters","\u002Fblog\u002Fnuxt-saas-boilerplate-comparison","blog\u002Fnuxt-saas-boilerplate-comparison",false,{"title":169,"path":170,"stem":171,"children":172,"page":167},"Documentation","\u002Fdocs","docs",[173,181,185,188,191,194,197,200,203,206,209,212,215,218,222],{"title":5,"path":6,"stem":7,"children":174,"icon":31},[175,176,177,178,179,180],{"title":10,"path":6,"stem":7},{"title":12,"path":13,"stem":14},{"title":16,"path":17,"stem":18},{"title":20,"path":21,"stem":22},{"title":24,"path":25,"stem":26},{"title":28,"path":29,"stem":30},{"title":33,"path":34,"stem":35,"children":182,"icon":43},[183,184],{"title":38,"path":34,"stem":35},{"title":40,"path":41,"stem":42},{"title":45,"path":46,"stem":47,"children":186,"icon":51},[187],{"title":50,"path":46,"stem":47},{"title":53,"path":54,"stem":55,"children":189,"icon":59},[190],{"title":58,"path":54,"stem":55},{"title":61,"path":62,"stem":63,"children":192,"icon":66},[193],{"title":58,"path":62,"stem":63},{"title":68,"path":69,"stem":70,"children":195,"icon":74},[196],{"title":73,"path":69,"stem":70},{"title":76,"path":77,"stem":78,"children":198,"icon":82},[199],{"title":81,"path":77,"stem":78},{"title":84,"path":85,"stem":86,"children":201,"icon":89},[202],{"title":58,"path":85,"stem":86},{"title":91,"path":92,"stem":93,"children":204,"icon":96},[205],{"title":58,"path":92,"stem":93},{"title":98,"path":99,"stem":100,"children":207,"icon":103},[208],{"title":58,"path":99,"stem":100},{"title":105,"path":106,"stem":107,"children":210,"icon":111},[211],{"title":110,"path":106,"stem":107},{"title":113,"path":114,"stem":115,"children":213,"icon":118},[214],{"title":58,"path":114,"stem":115},{"title":120,"path":121,"stem":122,"children":216,"icon":126},[217],{"title":125,"path":121,"stem":122},{"title":128,"path":129,"stem":130,"children":219,"icon":138},[220,221],{"title":133,"path":129,"stem":130},{"title":135,"path":136,"stem":137},{"title":140,"path":141,"stem":142,"children":223},[224],{"title":140,"path":141,"stem":142},{"amount":226,"formatted":227},99,"$99",{"id":229,"title":152,"body":230,"date":497,"description":498,"draft":167,"extension":499,"image":500,"meta":501,"navigation":502,"path":153,"seo":503,"sitemap":504,"stem":154,"tags":505,"__hash__":506},"blog\u002Fblog\u002Fbuild-saas-with-nuxt-4-better-auth-polar.md",{"type":231,"value":232,"toc":485},"minimark",[233,253,264,269,272,291,294,298,301,304,316,320,329,332,346,349,353,360,363,377,380,384,387,404,407,411,414,417,428,436,440,460,463,467],[234,235,236,237,241,242,241,245,248,249,252],"p",{},"Building a SaaS on Nuxt is more approachable than ever. AI can scaffold pages, forms, and CRUD in minutes. The parts that still decide whether you ship are the same: ",[238,239,240],"strong",{},"auth",", ",[238,243,244],{},"payments",[238,246,247],{},"data",", and ",[238,250,251],{},"security",".",[234,254,255,256,241,259,248,262,252],{},"This guide outlines a modern stack: ",[238,257,258],{},"Nuxt 4",[238,260,261],{},"better-auth",[238,263,73],{},[265,266,268],"h2",{"id":267},"the-product-shape-you-are-aiming-for","The product shape you are aiming for",[234,270,271],{},"Most early SaaS apps need:",[273,274,275,279,282,285,288],"ol",{},[276,277,278],"li",{},"Users who can sign up and sign in",[276,280,281],{},"A paid plan (one-time or subscription)",[276,283,284],{},"An authenticated app area",[276,286,287],{},"An admin path for support and abuse cases",[276,289,290],{},"Deployability without locking into one host",[234,292,293],{},"Everything else is product-specific.",[265,295,297],{"id":296},"step-1-start-with-nuxt-4-as-the-application-shell","Step 1: Start with Nuxt 4 as the application shell",[234,299,300],{},"Nuxt 4 gives you SSR\u002FSPA flexibility, file-based routing, server routes, and a mature module ecosystem.",[234,302,303],{},"For a SaaS, prefer:",[305,306,307,310,313],"ul",{},[276,308,309],{},"TypeScript everywhere",[276,311,312],{},"Server routes for webhooks and privileged actions",[276,314,315],{},"Clear separation between marketing site and app (or shared layers if you use a monorepo)",[265,317,319],{"id":318},"step-2-put-better-auth-at-the-center-of-identity","Step 2: Put better-auth at the center of identity",[234,321,322,328],{},[323,324,261],"a",{"href":325,"rel":326},"https:\u002F\u002Fbetter-auth.com\u002F",[327],"nofollow"," is a strong fit when you want email\u002Fpassword, social providers, and modern auth features without owning a custom auth framework.",[234,330,331],{},"Minimum production checklist:",[305,333,334,337,340,343],{},[276,335,336],{},"Secure session cookies",[276,338,339],{},"Email verification \u002F password reset flows",[276,341,342],{},"Rate-limited auth endpoints",[276,344,345],{},"Role or admin flag for privileged actions",[234,347,348],{},"Do not treat auth as “done” when the login page works. Treat it as done when sessions, resets, and abuse controls exist.",[265,350,352],{"id":351},"step-3-monetize-with-polar-as-merchant-of-record","Step 3: Monetize with Polar as Merchant of Record",[234,354,355,359],{},[323,356,73],{"href":357,"rel":358},"https:\u002F\u002Fpolar.sh\u002F",[327]," is compelling for indie and solo founders because it can act as Merchant of Record — reducing tax and payment ops overhead compared to wiring everything yourself.",[234,361,362],{},"You will still need:",[305,364,365,368,371,374],{},[276,366,367],{},"Product\u002Fprice configuration",[276,369,370],{},"Checkout links or embedded checkout",[276,372,373],{},"Webhook verification",[276,375,376],{},"Mapping Polar customers to your users",[234,378,379],{},"The webhook handler is the heart of billing correctness. Design it to be idempotent from day one.",[265,381,383],{"id":382},"step-4-add-the-unglamorous-saas-essentials","Step 4: Add the unglamorous SaaS essentials",[234,385,386],{},"These rarely show up in Twitter demos and always show up in real products:",[305,388,389,392,395,398,401],{},[276,390,391],{},"Database migrations you trust",[276,393,394],{},"Admin user management",[276,396,397],{},"Basic auditability for support",[276,399,400],{},"Security headers and rate limits",[276,402,403],{},"Error monitoring",[234,405,406],{},"This is also where a polished starter kit pays for itself.",[265,408,410],{"id":409},"where-a-starter-kit-saves-weeks","Where a starter kit saves weeks",[234,412,413],{},"You can assemble Nuxt + better-auth + Polar yourself. Many people should.",[234,415,416],{},"You should buy time when:",[305,418,419,422,425],{},[276,420,421],{},"You have already rebuilt auth\u002Fpayments twice",[276,423,424],{},"You want layer-based architecture instead of inventing structure under deadline",[276,426,427],{},"You would rather ship product features this month",[234,429,430,431,435],{},"That is the problem ",[323,432,434],{"href":433},"\u002F","Nuxt Starter Kit"," is built to solve: a production-minded Nuxt 4 SaaS foundation with auth, Polar payments, admin, and security already wired.",[265,437,439],{"id":438},"suggested-build-order-solo-founder","Suggested build order (solo founder)",[273,441,442,445,448,451,454,457],{},[276,443,444],{},"Auth + protected routes",[276,446,447],{},"Database models for users\u002Fplans",[276,449,450],{},"Checkout + webhook → entitlement",[276,452,453],{},"Core product loop",[276,455,456],{},"Admin + monitoring",[276,458,459],{},"Marketing pages and SEO content",[234,461,462],{},"If step 1–3 are still open after a week, your foundation is the bottleneck — not your idea.",[265,464,466],{"id":465},"next-steps","Next steps",[305,468,469,475,482],{},[276,470,471,472,474],{},"Browse the ",[323,473,171],{"href":6}," for the kit’s architecture",[276,476,477,478],{},"Compare scope on ",[323,479,481],{"href":480},"\u002Fpricing","pricing",[276,483,484],{},"Or start from scratch with Nuxt, better-auth, and Polar using the checklist above",{"title":486,"searchDepth":487,"depth":487,"links":488},"",2,[489,490,491,492,493,494,495,496],{"id":267,"depth":487,"text":268},{"id":296,"depth":487,"text":297},{"id":318,"depth":487,"text":319},{"id":351,"depth":487,"text":352},{"id":382,"depth":487,"text":383},{"id":409,"depth":487,"text":410},{"id":438,"depth":487,"text":439},{"id":465,"depth":487,"text":466},"2026-08-07","A practical path to shipping a Nuxt SaaS — authentication with better-auth, payments with Polar, and the foundation pieces AI will not get right for you.","md",null,{},true,{"title":152,"description":498},{"loc":153},[258,261,73],"Tyn9z35o0CbcMKxY0eAoGxX-59pQ7XpedC8CjYabp7I",[500,508],{"title":156,"path":157,"stem":158,"description":509,"date":510,"children":-1},"A realistic breakdown of what it costs (in hours) to build Nuxt SaaS foundations yourself versus starting from a production boilerplate.","2026-08-06",1786184750446]