[{"data":1,"prerenderedAt":1469},["ShallowReactive",2],{"\u002Fblog\u002Fshipahead-vs-nuxtbeyond":3,"\u002Fblog\u002Fshipahead-vs-nuxtbeyond-surround":1459},{"id":4,"title":5,"authors":6,"badge":12,"body":14,"date":1447,"description":1448,"extension":1449,"image":1450,"meta":1452,"navigation":560,"path":1453,"seo":1454,"stem":1457,"__hash__":1458},"posts\u002Fblog\u002Fshipahead-vs-nuxtbeyond.md","ShipAhead vs Nuxt Beyond: Which AI SaaS Boilerplate?",[7],{"name":8,"to":9,"avatar":10},"Rares","https:\u002F\u002Fx.com\u002FRaress96_",{"src":11},"\u002Fimages\u002Favatar.png",{"label":13},"Comparison",{"type":15,"value":16,"toc":1427},"minimark",[17,21,32,40,43,48,55,61,64,68,306,319,323,326,331,334,337,341,344,352,356,359,371,375,378,381,385,388,392,395,399,402,405,413,421,424,975,985,993,1000,1003,1007,1010,1013,1016,1019,1023,1041,1048,1051,1173,1180,1183,1194,1198,1206,1209,1213,1288,1301,1304,1307,1310,1314,1317,1342,1345,1349,1352,1369,1372,1379,1383,1386,1389,1392,1399,1405,1408,1423],[18,19,20],"p",{},"I built Nuxt Beyond, so this is not a neutral review. I will still tell you when ShipAhead is the better buy, because for a lot of Nuxt products it is.",[18,22,23,24,31],{},"ShipAhead is the other Nuxt 4 kit that actually ships AI, not a chatbot demo buried next to a todo app. Tom Han built it. The landing page says 95+ makers. If you want Vue, payments, and \"add AI chat in minutes,\" you will land on ",[25,26,30],"a",{"href":27,"rel":28},"https:\u002F\u002Fshipahe.ad\u002F",[29],"nofollow","shipahe.ad"," and on this site in the same afternoon.",[18,33,34,35,39],{},"I already covered the wider field (Supastarter, Supersaas, NuxtBase, ShipFast) in the ",[25,36,38],{"href":37},"\u002Fblog\u002Fbest-nuxt-boilerplates-compared","Nuxt 4 boilerplate comparison",". This post is the head-to-head: ShipAhead vs Nuxt Beyond.",[18,41,42],{},"Prices and feature lists below were checked on each product's own site on 2026-09-26.",[44,45,47],"h2",{"id":46},"the-short-version","The short version",[18,49,50,54],{},[51,52,53],"strong",{},"ShipAhead"," is a Nuxt 4 SaaS kit: auth (including magic links), Stripe \u002F Polar \u002F Dodo, Postgres (Supabase or Neon) with Drizzle, i18n, PWA, cron, an admin panel, a blog, and AI chat plus text and image generation through OpenRouter. It is $99 right now ($199 list, $100 off for the first 100 customers, 4 left on 2026-09-26). It does not list RAG or an embeddable chat widget.",[18,56,57,60],{},[51,58,59],{},"Nuxt Beyond"," is a Nuxt 4 kit built around AI products: Cloudflare AI Search (formerly AutoRAG), streaming chat, an embeddable widget, Stripe or Polar, and project-based workspaces on Cloudflare Workers + D1. It is $59 one-time. Auth is basic. There is no i18n, no PWA, no cron UI. Two people have bought it.",[18,62,63],{},"Pick ShipAhead if you want a classic Nuxt SaaS shell, Postgres, i18n, and model-switchable chat\u002Fimage gen. Pick Nuxt Beyond if the product is document Q&A or a chatbot you paste onto someone else's site.",[44,65,67],{"id":66},"feature-comparison","Feature comparison",[69,70,71,87],"table",{},[72,73,74],"thead",{},[75,76,77,81,84],"tr",{},[78,79,80],"th",{},"Feature",[78,82,83],{},"ShipAhead ($99 promo \u002F $199 list)",[78,85,86],{},"Nuxt Beyond ($59)",[88,89,90,103,116,129,142,154,166,179,192,205,218,231,243,255,267,280,293],"tbody",{},[75,91,92,98,101],{},[93,94,95],"td",{},[51,96,97],{},"Framework",[93,99,100],{},"Nuxt 4 (Vue 3)",[93,102,100],{},[75,104,105,110,113],{},[93,106,107],{},[51,108,109],{},"AI chat",[93,111,112],{},"Yes (OpenRouter, switch GPT model)",[93,114,115],{},"Vercel AI SDK v6, streaming, tool calling",[75,117,118,123,126],{},[93,119,120],{},[51,121,122],{},"RAG \u002F semantic search",[93,124,125],{},"Not listed",[93,127,128],{},"Cloudflare AI Search (formerly AutoRAG)",[75,130,131,136,139],{},[93,132,133],{},[51,134,135],{},"Image generation",[93,137,138],{},"Yes (OpenRouter)",[93,140,141],{},"Present in the repo around retired OpenAI image APIs; do not buy it for that",[75,143,144,149,151],{},[93,145,146],{},[51,147,148],{},"Embeddable widget",[93,150,125],{},[93,152,153],{},"One-line script, domain validation",[75,155,156,161,163],{},[93,157,158],{},[51,159,160],{},"Prompt injection protection",[93,162,125],{},[93,164,165],{},"Yes",[75,167,168,173,176],{},[93,169,170],{},[51,171,172],{},"Auth",[93,174,175],{},"Email\u002Fpassword, magic links, Google, admin area",[93,177,178],{},"Google OAuth + email\u002Fpassword",[75,180,181,186,189],{},[93,182,183],{},[51,184,185],{},"Payments",[93,187,188],{},"Stripe, Polar, Dodo",[93,190,191],{},"Stripe + Polar",[75,193,194,199,202],{},[93,195,196],{},[51,197,198],{},"Multi-tenancy",[93,200,201],{},"Organizations\u002Fprojects show up in the DB demo",[93,203,204],{},"Project-based workspaces, RAG scoped per project",[75,206,207,212,215],{},[93,208,209],{},[51,210,211],{},"Database",[93,213,214],{},"PostgreSQL (Supabase \u002F Neon) + Drizzle",[93,216,217],{},"Cloudflare D1 + Drizzle",[75,219,220,225,228],{},[93,221,222],{},[51,223,224],{},"Deployment",[93,226,227],{},"Vercel or Cloudflare Workers",[93,229,230],{},"Cloudflare Workers",[75,232,233,238,240],{},[93,234,235],{},[51,236,237],{},"i18n",[93,239,165],{},[93,241,242],{},"No",[75,244,245,250,252],{},[93,246,247],{},[51,248,249],{},"PWA \u002F cron \u002F admin",[93,251,165],{},[93,253,254],{},"No dedicated PWA, cron UI, or admin panel",[75,256,257,262,265],{},[93,258,259],{},[51,260,261],{},"Blog",[93,263,264],{},"Nuxt Content",[93,266,264],{},[75,268,269,274,277],{},[93,270,271],{},[51,272,273],{},"File storage",[93,275,276],{},"S3-compatible (R2 logo also on the page)",[93,278,279],{},"Cloudflare R2",[75,281,282,287,290],{},[93,283,284],{},[51,285,286],{},"Community",[93,288,289],{},"95+ makers, Discord",[93,291,292],{},"Small (launched January 2026, 2 sales)",[75,294,295,300,303],{},[93,296,297],{},[51,298,299],{},"Refunds",[93,301,302],{},"None",[93,304,305],{},"None by default; case by case if you DM me on X",[18,307,308,309,312,313,318],{},"ShipAhead source: ",[25,310,30],{"href":27,"rel":311},[29]," (checked 2026-09-26). Nuxt Beyond: ",[25,314,317],{"href":315,"rel":316},"https:\u002F\u002Fnuxtbeyond.com\u002F",[29],"nuxtbeyond.com"," (checked 2026-09-26).",[44,320,322],{"id":321},"where-shipahead-wins","Where ShipAhead wins",[18,324,325],{},"I am not going to pretend a $59 kit with 2 sales beats a $99 kit with 95+ buyers on \"feels safe to purchase.\"",[327,328,330],"h3",{"id":329},"it-is-a-fuller-saas-shell","It is a fuller SaaS shell",[18,332,333],{},"ShipAhead's page is a checklist of the boring product: magic links, an admin area, cron jobs, PWA, analytics, legal page templates, customer-support widgets, language switching. That is a lot of tickets you will not file in week one.",[18,335,336],{},"Nuxt Beyond has auth, Stripe\u002FPolar, a blog, Resend, and projects. It does not have i18n. It does not have a PWA toggle. It does not have a cron UI. If your launch list is \"signup in French, installable on a phone, nightly report email,\" ShipAhead is already closer.",[327,338,340],{"id":339},"postgres","Postgres",[18,342,343],{},"ShipAhead points at PostgreSQL, Supabase, and Neon. If you already think in SQL joins, row-level security, and a hosted Postgres dashboard, that is a real preference, not a fashion take.",[18,345,346,347,351],{},"Nuxt Beyond uses Cloudflare D1 (SQLite at the edge) and Drizzle. Fine for a lot of SaaS. Not fine if you know you need Postgres on day one. I wrote the deploy side of that tradeoff in ",[25,348,350],{"href":349},"\u002Fblog\u002Fmulti-tenant-saas-cloudflare-workers-nuxt-4","Deploying a multi-tenant SaaS to Cloudflare Workers",".",[327,353,355],{"id":354},"more-ways-to-get-paid","More ways to get paid",[18,357,358],{},"Stripe, Polar, and Dodo. Nuxt Beyond has Stripe and Polar, switched with an env var. Polar as merchant of record is the same idea on both. Dodo is extra on their side.",[18,360,361,362,366,367,351],{},"If you want the payment-provider comparison without the rest of this post: ",[25,363,365],{"href":364},"\u002Fblog\u002Fstripe-vs-polar-which-to-choose","Stripe vs Polar",". Webhook wiring in Nuxt 4: ",[25,368,370],{"href":369},"\u002Fblog\u002Fstripe-subscriptions-nuxt-4","Stripe subscriptions in Nuxt 4",[327,372,374],{"id":373},"magic-links-and-an-admin-area","Magic links and an admin area",[18,376,377],{},"ShipAhead lists magic links, social logins, password recovery, protected pages, and an admin area. Nuxt Beyond is Google OAuth and email\u002Fpassword via nuxt-auth-utils. No 2FA, no passkeys, no magic links.",[18,379,380],{},"If your users will fight you over \"I don't want another password,\" magic links matter. I did not build them.",[327,382,384],{"id":383},"social-proof","Social proof",[18,386,387],{},"95+ makers and a Discord vs 2 sales. I will not dress that up. ShipAhead has been through more other people's apps. Bug reports exist in a channel you can join. Nuxt Beyond is me, the repo, and lifetime updates I actually use on my own products.",[327,389,391],{"id":390},"ai-coding-agents-are-table-stakes","AI coding agents are table stakes",[18,393,394],{},"Both kits sell an agent-ready codebase. ShipAhead has AGENTS.md. Nuxt Beyond has CLAUDE.md. In 2026 that is not a reason to pick either one. Every paid Nuxt kit now claims it.",[44,396,398],{"id":397},"the-ai-split-is-the-actual-decision","The AI split is the actual decision",[18,400,401],{},"Both sites say \"AI.\" They do not mean the same work.",[18,403,404],{},"ShipAhead's AI block is: add AI chat, text generation, or image creation; switch GPT model anytime; OpenRouter is in the stack. That is the right shape if you want a chat box and a \"generate an image\" button, and you want to swap models without rewriting providers.",[18,406,407,408,412],{},"A ",[409,410,411],"code",{},"fetch"," to a chat API is an afternoon. OpenRouter makes that afternoon shorter. I am not going to pretend I invented streaming.",[18,414,415,416,420],{},"What I kept rebuilding, and why I extracted Nuxt Beyond, is the other pile: documents go in, embeddings happen, answers come back from ",[417,418,419],"em",{},"that"," tenant's files, streaming works, the model has tools so \"hi\" does not hit the vector index, and a script tag on a customer site does not let a random domain burn your credits.",[18,422,423],{},"That path is Cloudflare AI Search (formerly AutoRAG) plus Vercel AI SDK v6. One AI Search instance, results filtered by folder so tenant A does not see tenant B's PDF:",[425,426,431],"pre",{"className":427,"code":428,"language":429,"meta":430,"style":430},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const findRelevantContent = async (question: string, projectId: string) => {\n  const autorag = event.context.cloudflare.env.AI.autorag(\n    process.env.CLOUDFLARE_AUTO_RAG_ID!\n  )\n\n  const searchResult = await autorag.search({\n    query: question,\n    rewrite_query: true,\n    max_num_results: 5,\n    ranking_options: { score_threshold: 0.4 },\n    filters: {\n      type: 'and',\n      filters: [\n        { type: 'gt', key: 'folder', value: `projects\u002F${projectId}\u002F\u002F` },\n        { type: 'lte', key: 'folder', value: `projects\u002F${projectId}\u002Fz` },\n      ],\n    },\n  })\n\n  return searchResult.data.map((item) => ({\n    filename: item.filename,\n    content: item.content.map((c) => c.text).join('\\n'),\n    score: item.score,\n  }))\n}\n","ts","",[409,432,433,486,531,549,555,562,589,603,617,631,653,663,683,694,756,807,815,821,830,835,868,886,944,961,969],{"__ignoreMap":430},[434,435,438,442,446,450,453,456,460,463,467,470,473,475,477,480,483],"span",{"class":436,"line":437},"line",1,[434,439,441],{"class":440},"spNyl","const",[434,443,445],{"class":444},"sTEyZ"," findRelevantContent ",[434,447,449],{"class":448},"sMK4o","=",[434,451,452],{"class":440}," async",[434,454,455],{"class":448}," (",[434,457,459],{"class":458},"sHdIc","question",[434,461,462],{"class":448},":",[434,464,466],{"class":465},"sBMFI"," string",[434,468,469],{"class":448},",",[434,471,472],{"class":458}," projectId",[434,474,462],{"class":448},[434,476,466],{"class":465},[434,478,479],{"class":448},")",[434,481,482],{"class":440}," =>",[434,484,485],{"class":448}," {\n",[434,487,489,492,495,498,501,503,506,508,511,513,516,518,521,523,527],{"class":436,"line":488},2,[434,490,491],{"class":440},"  const",[434,493,494],{"class":444}," autorag",[434,496,497],{"class":448}," =",[434,499,500],{"class":444}," event",[434,502,351],{"class":448},[434,504,505],{"class":444},"context",[434,507,351],{"class":448},[434,509,510],{"class":444},"cloudflare",[434,512,351],{"class":448},[434,514,515],{"class":444},"env",[434,517,351],{"class":448},[434,519,520],{"class":444},"AI",[434,522,351],{"class":448},[434,524,526],{"class":525},"s2Zo4","autorag",[434,528,530],{"class":529},"swJcz","(\n",[434,532,534,537,539,541,543,546],{"class":436,"line":533},3,[434,535,536],{"class":444},"    process",[434,538,351],{"class":448},[434,540,515],{"class":444},[434,542,351],{"class":448},[434,544,545],{"class":444},"CLOUDFLARE_AUTO_RAG_ID",[434,547,548],{"class":448},"!\n",[434,550,552],{"class":436,"line":551},4,[434,553,554],{"class":529},"  )\n",[434,556,558],{"class":436,"line":557},5,[434,559,561],{"emptyLinePlaceholder":560},true,"\n",[434,563,565,567,570,572,576,578,580,583,586],{"class":436,"line":564},6,[434,566,491],{"class":440},[434,568,569],{"class":444}," searchResult",[434,571,497],{"class":448},[434,573,575],{"class":574},"s7zQu"," await",[434,577,494],{"class":444},[434,579,351],{"class":448},[434,581,582],{"class":525},"search",[434,584,585],{"class":529},"(",[434,587,588],{"class":448},"{\n",[434,590,592,595,597,600],{"class":436,"line":591},7,[434,593,594],{"class":529},"    query",[434,596,462],{"class":448},[434,598,599],{"class":444}," question",[434,601,602],{"class":448},",\n",[434,604,606,609,611,615],{"class":436,"line":605},8,[434,607,608],{"class":529},"    rewrite_query",[434,610,462],{"class":448},[434,612,614],{"class":613},"sfNiH"," true",[434,616,602],{"class":448},[434,618,620,623,625,629],{"class":436,"line":619},9,[434,621,622],{"class":529},"    max_num_results",[434,624,462],{"class":448},[434,626,628],{"class":627},"sbssI"," 5",[434,630,602],{"class":448},[434,632,634,637,639,642,645,647,650],{"class":436,"line":633},10,[434,635,636],{"class":529},"    ranking_options",[434,638,462],{"class":448},[434,640,641],{"class":448}," {",[434,643,644],{"class":529}," score_threshold",[434,646,462],{"class":448},[434,648,649],{"class":627}," 0.4",[434,651,652],{"class":448}," },\n",[434,654,656,659,661],{"class":436,"line":655},11,[434,657,658],{"class":529},"    filters",[434,660,462],{"class":448},[434,662,485],{"class":448},[434,664,666,669,671,674,678,681],{"class":436,"line":665},12,[434,667,668],{"class":529},"      type",[434,670,462],{"class":448},[434,672,673],{"class":448}," '",[434,675,677],{"class":676},"sfazB","and",[434,679,680],{"class":448},"'",[434,682,602],{"class":448},[434,684,686,689,691],{"class":436,"line":685},13,[434,687,688],{"class":529},"      filters",[434,690,462],{"class":448},[434,692,693],{"class":529}," [\n",[434,695,697,700,703,705,707,710,712,714,717,719,721,724,726,728,731,733,736,739,742,745,748,751,754],{"class":436,"line":696},14,[434,698,699],{"class":448},"        {",[434,701,702],{"class":529}," type",[434,704,462],{"class":448},[434,706,673],{"class":448},[434,708,709],{"class":676},"gt",[434,711,680],{"class":448},[434,713,469],{"class":448},[434,715,716],{"class":529}," key",[434,718,462],{"class":448},[434,720,673],{"class":448},[434,722,723],{"class":676},"folder",[434,725,680],{"class":448},[434,727,469],{"class":448},[434,729,730],{"class":529}," value",[434,732,462],{"class":448},[434,734,735],{"class":448}," `",[434,737,738],{"class":676},"projects\u002F",[434,740,741],{"class":448},"${",[434,743,744],{"class":444},"projectId",[434,746,747],{"class":448},"}",[434,749,750],{"class":676},"\u002F\u002F",[434,752,753],{"class":448},"`",[434,755,652],{"class":448},[434,757,759,761,763,765,767,770,772,774,776,778,780,782,784,786,788,790,792,794,796,798,800,803,805],{"class":436,"line":758},15,[434,760,699],{"class":448},[434,762,702],{"class":529},[434,764,462],{"class":448},[434,766,673],{"class":448},[434,768,769],{"class":676},"lte",[434,771,680],{"class":448},[434,773,469],{"class":448},[434,775,716],{"class":529},[434,777,462],{"class":448},[434,779,673],{"class":448},[434,781,723],{"class":676},[434,783,680],{"class":448},[434,785,469],{"class":448},[434,787,730],{"class":529},[434,789,462],{"class":448},[434,791,735],{"class":448},[434,793,738],{"class":676},[434,795,741],{"class":448},[434,797,744],{"class":444},[434,799,747],{"class":448},[434,801,802],{"class":676},"\u002Fz",[434,804,753],{"class":448},[434,806,652],{"class":448},[434,808,810,813],{"class":436,"line":809},16,[434,811,812],{"class":529},"      ]",[434,814,602],{"class":448},[434,816,818],{"class":436,"line":817},17,[434,819,820],{"class":448},"    },\n",[434,822,824,827],{"class":436,"line":823},18,[434,825,826],{"class":448},"  }",[434,828,829],{"class":529},")\n",[434,831,833],{"class":436,"line":832},19,[434,834,561],{"emptyLinePlaceholder":560},[434,836,838,841,843,845,848,850,853,855,857,860,862,864,866],{"class":436,"line":837},20,[434,839,840],{"class":574},"  return",[434,842,569],{"class":444},[434,844,351],{"class":448},[434,846,847],{"class":444},"data",[434,849,351],{"class":448},[434,851,852],{"class":525},"map",[434,854,585],{"class":529},[434,856,585],{"class":448},[434,858,859],{"class":458},"item",[434,861,479],{"class":448},[434,863,482],{"class":440},[434,865,455],{"class":529},[434,867,588],{"class":448},[434,869,871,874,876,879,881,884],{"class":436,"line":870},21,[434,872,873],{"class":529},"    filename",[434,875,462],{"class":448},[434,877,878],{"class":444}," item",[434,880,351],{"class":448},[434,882,883],{"class":444},"filename",[434,885,602],{"class":448},[434,887,889,892,894,896,898,901,903,905,907,909,912,914,916,919,921,924,926,928,931,933,935,938,940,942],{"class":436,"line":888},22,[434,890,891],{"class":529},"    content",[434,893,462],{"class":448},[434,895,878],{"class":444},[434,897,351],{"class":448},[434,899,900],{"class":444},"content",[434,902,351],{"class":448},[434,904,852],{"class":525},[434,906,585],{"class":529},[434,908,585],{"class":448},[434,910,911],{"class":458},"c",[434,913,479],{"class":448},[434,915,482],{"class":440},[434,917,918],{"class":444}," c",[434,920,351],{"class":448},[434,922,923],{"class":444},"text",[434,925,479],{"class":529},[434,927,351],{"class":448},[434,929,930],{"class":525},"join",[434,932,585],{"class":529},[434,934,680],{"class":448},[434,936,937],{"class":444},"\\n",[434,939,680],{"class":448},[434,941,479],{"class":529},[434,943,602],{"class":448},[434,945,947,950,952,954,956,959],{"class":436,"line":946},23,[434,948,949],{"class":529},"    score",[434,951,462],{"class":448},[434,953,878],{"class":444},[434,955,351],{"class":448},[434,957,958],{"class":444},"score",[434,960,602],{"class":448},[434,962,964,966],{"class":436,"line":963},24,[434,965,826],{"class":448},[434,967,968],{"class":529},"))\n",[434,970,972],{"class":436,"line":971},25,[434,973,974],{"class":448},"}\n",[18,976,977,980,981,984],{},[409,978,979],{},"rewrite_query"," turns \"how much is it\" into a search for pricing. ",[409,982,983],{},"score_threshold"," drops junk chunks. The folder range is tenant isolation without a vector database per customer.",[18,986,987,988,992],{},"ShipAhead's public page does not list RAG, embeddings, or document search. If they have shipped it since 2026-09-26, ",[25,989,991],{"href":9,"rel":990},[29],"tell me on X"," and I will update this.",[18,994,995,996,351],{},"Nuxflare Pro does list a RAG chatbot demo on Cloudflare Vectorize. So \"Nuxt Beyond is the only Nuxt kit with RAG\" is false. What I will say is: RAG is the product in this repo, not a demo app next to notes and a URL shortener. Full walkthrough: ",[25,997,999],{"href":998},"\u002Fblog\u002Fhow-to-build-ai-chatbot-with-rag-nuxt-4","How to build an AI chatbot with RAG in Nuxt 4",[18,1001,1002],{},"Image generation: ShipAhead has it via OpenRouter. Nuxt Beyond still has image\u002Fvideo code paths built on OpenAI APIs that OpenAI has retired. Do not buy Nuxt Beyond because you want DALL-E or Sora. That claim on my homepage is stale. If image gen is the product, ShipAhead is the one that still advertises a working path.",[44,1004,1006],{"id":1005},"database-and-hosting","Database and hosting",[18,1008,1009],{},"ShipAhead: Postgres + Drizzle, deploy to Vercel or Cloudflare Workers, S3-compatible uploads (Cloudflare R2 is on the logos too). You can stay in the Vercel + Supabase world a lot of people already know, or you can put the app on Workers.",[18,1011,1012],{},"Nuxt Beyond wants one vendor for compute, database, files, rate limits, and retrieval: Workers, D1, R2, KV, AI Gateway, AI Search. Cold starts and the bill at 10k users look different from Vercel + Postgres + a separate vector store + OpenAI.",[18,1014,1015],{},"If you already pay for Supabase and like the dashboard, ShipAhead will feel like home. If you want the database next to the Worker that served the request, and RAG without standing up Pinecone, that is the point of Nuxt Beyond.",[18,1017,1018],{},"I am not going to tell you SQLite is as good as Postgres for every app. Heavy reporting, PostGIS, a team that already runs Supabase: pick the Postgres kit.",[44,1020,1022],{"id":1021},"the-widget-and-what-multi-tenant-means","The widget, and what \"multi-tenant\" means",[18,1024,1025,1026,1029,1030,1029,1033,1036,1037,1040],{},"ShipAhead's database demo shows ",[409,1027,1028],{},"users",", ",[409,1031,1032],{},"subscriptions",[409,1034,1035],{},"organizations",", and ",[409,1038,1039],{},"projects",". I have not bought the repo, so I will not describe their tenancy model as if I had. The marketing page does not sell an embeddable chatbot for third-party sites.",[18,1042,1043,1044,1047],{},"Nuxt Beyond models a customer as a project: members, billing, chats, and files under ",[409,1045,1046],{},"projects\u002F{id}\u002F",". The RAG filter above uses the same id.",[18,1049,1050],{},"The embeddable widget is the other business-model difference. A bubble on someone else's site:",[425,1052,1056],{"className":1053,"code":1054,"language":1055,"meta":430,"style":430},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript>\n  window.__nuxtbeyond_config = {\n    projectId: 'proj_123',\n    primaryColor: '#0d9488',\n    position: 'bottom-right',\n  }\n\u003C\u002Fscript>\n\u003Cscript src=\"https:\u002F\u002Fyourdomain.com\u002Fembed.js\" async>\u003C\u002Fscript>\n","html",[409,1057,1058,1069,1083,1099,1115,1131,1136,1145],{"__ignoreMap":430},[434,1059,1060,1063,1066],{"class":436,"line":437},[434,1061,1062],{"class":448},"\u003C",[434,1064,1065],{"class":529},"script",[434,1067,1068],{"class":448},">\n",[434,1070,1071,1074,1076,1079,1081],{"class":436,"line":488},[434,1072,1073],{"class":444},"  window",[434,1075,351],{"class":448},[434,1077,1078],{"class":444},"__nuxtbeyond_config ",[434,1080,449],{"class":448},[434,1082,485],{"class":448},[434,1084,1085,1088,1090,1092,1095,1097],{"class":436,"line":533},[434,1086,1087],{"class":529},"    projectId",[434,1089,462],{"class":448},[434,1091,673],{"class":448},[434,1093,1094],{"class":676},"proj_123",[434,1096,680],{"class":448},[434,1098,602],{"class":448},[434,1100,1101,1104,1106,1108,1111,1113],{"class":436,"line":551},[434,1102,1103],{"class":529},"    primaryColor",[434,1105,462],{"class":448},[434,1107,673],{"class":448},[434,1109,1110],{"class":676},"#0d9488",[434,1112,680],{"class":448},[434,1114,602],{"class":448},[434,1116,1117,1120,1122,1124,1127,1129],{"class":436,"line":557},[434,1118,1119],{"class":529},"    position",[434,1121,462],{"class":448},[434,1123,673],{"class":448},[434,1125,1126],{"class":676},"bottom-right",[434,1128,680],{"class":448},[434,1130,602],{"class":448},[434,1132,1133],{"class":436,"line":564},[434,1134,1135],{"class":448},"  }\n",[434,1137,1138,1141,1143],{"class":436,"line":591},[434,1139,1140],{"class":448},"\u003C\u002F",[434,1142,1065],{"class":529},[434,1144,1068],{"class":448},[434,1146,1147,1149,1151,1154,1156,1159,1162,1164,1166,1169,1171],{"class":436,"line":605},[434,1148,1062],{"class":448},[434,1150,1065],{"class":529},[434,1152,1153],{"class":440}," src",[434,1155,449],{"class":448},[434,1157,1158],{"class":448},"\"",[434,1160,1161],{"class":676},"https:\u002F\u002Fyourdomain.com\u002Fembed.js",[434,1163,1158],{"class":448},[434,1165,452],{"class":440},[434,1167,1168],{"class":448},">\u003C\u002F",[434,1170,1065],{"class":529},[434,1172,1068],{"class":448},[18,1174,1175,1176,351],{},"The script is the easy part. The rest is iframe isolation, Safari and third-party cookies, a domain allowlist so random sites cannot burn your credits, and KV rate limits. That work is in the repo. Walkthrough: ",[25,1177,1179],{"href":1178},"\u002Fblog\u002Fembeddable-chat-widget-nuxt-4","How to build an embeddable chat widget in Nuxt 4",[18,1181,1182],{},"If you are building chatbot-as-a-service, this is the product. ShipAhead is not selling that, at least not on the page I checked.",[18,1184,1185,1186,1189,1190,1193],{},"ShipAhead does list \"customer support\" as live chat or feedback widgets to help ",[417,1187,1188],{},"your"," users. That is you supporting your SaaS. It is not you selling a branded chat bubble to ",[417,1191,1192],{},"their"," customers.",[44,1195,1197],{"id":1196},"auth-honestly","Auth, honestly",[18,1199,1200,1201,1205],{},"Neither of us is Supastarter. No 2FA, no passkeys, no RBAC comparison that ends with Nuxt Beyond winning. If your buyer is enterprise IT, read ",[25,1202,1204],{"href":1203},"\u002Fblog\u002Fsupastarter-vs-nuxtbeyond","Supastarter vs Nuxt Beyond"," and budget for Better Auth.",[18,1207,1208],{},"Between these two: ShipAhead has the longer auth list (magic links, admin). Nuxt Beyond has Google + password. For a lot of indie tools either is enough. For \"I need magic links this week,\" ShipAhead.",[44,1210,1212],{"id":1211},"price","Price",[69,1214,1215,1225],{},[72,1216,1217],{},[75,1218,1219,1221,1223],{},[78,1220],{},[78,1222,53],{},[78,1224,59],{},[88,1226,1227,1240,1253,1265,1277],{},[75,1228,1229,1234,1237],{},[93,1230,1231],{},[51,1232,1233],{},"Entry",[93,1235,1236],{},"$99 promo ($199 list). $100 off for the first 100 customers, 4 left on 2026-09-26.",[93,1238,1239],{},"$59 boilerplate (list $249). 2\u002F5 sold at the current price; it goes up $10 every 5 sales.",[75,1241,1242,1247,1250],{},[93,1243,1244],{},[51,1245,1246],{},"Bundle",[93,1248,1249],{},"Not listed as a second SKU",[93,1251,1252],{},"$89 with the distribution framework",[75,1254,1255,1260,1263],{},[93,1256,1257],{},[51,1258,1259],{},"Updates",[93,1261,1262],{},"Lifetime",[93,1264,1262],{},[75,1266,1267,1272,1275],{},[93,1268,1269],{},[51,1270,1271],{},"Projects",[93,1273,1274],{},"Unlimited",[93,1276,1274],{},[75,1278,1279,1283,1285],{},[93,1280,1281],{},[51,1282,299],{},[93,1284,242],{},[93,1286,1287],{},"No by default",[18,1289,1290,1291,1295,1296,1300],{},"Sources: ",[25,1292,1294],{"href":27,"rel":1293},[29],"ShipAhead pricing"," and ",[25,1297,1299],{"href":1298},"\u002F#pricing","Nuxt Beyond pricing",", both checked 2026-09-26.",[18,1302,1303],{},"$59 vs $99 is $40. $59 vs $199 is $140 if the promo is gone. Both are one-time.",[18,1305,1306],{},"ShipAhead's $99 is a first-100 discount. If you like the kit, the promo ending is a reason to buy it, not a reason to skip the comparison.",[18,1308,1309],{},"Nuxt Beyond is cheaper because it is newer and narrower. You are paying for the RAG and widget work, not for 95 people who can unblock you in Discord.",[44,1311,1313],{"id":1312},"when-to-choose-shipahead","When to choose ShipAhead",[18,1315,1316],{},"Pick ShipAhead if:",[1318,1319,1320,1324,1327,1330,1333,1339],"ul",{},[1321,1322,1323],"li",{},"You want Nuxt 4 and a classic SaaS checklist (i18n, PWA, cron, admin, magic links)",[1321,1325,1326],{},"You want Postgres (Supabase or Neon), not D1",[1321,1328,1329],{},"AI means chat, text, and image gen with model switching, not document Q&A",[1321,1331,1332],{},"You care that 95+ people already bought it",[1321,1334,1335,1336,1338],{},"You want Stripe, Polar, ",[417,1337,677],{}," Dodo",[1321,1340,1341],{},"$99 (or $199 later) is fine and you want the bigger kit",[18,1343,1344],{},"Do not pick ShipAhead if the product is \"upload PDFs, answer from them\" or \"paste a script tag on the customer's site.\" Their public page does not list that work.",[44,1346,1348],{"id":1347},"when-to-choose-nuxt-beyond","When to choose Nuxt Beyond",[18,1350,1351],{},"Pick Nuxt Beyond if:",[1318,1353,1354,1357,1360,1363,1366],{},[1321,1355,1356],{},"The product needs RAG, document Q&A, or a knowledge-base chatbot",[1321,1358,1359],{},"You want to sell an embeddable widget, not only a logged-in app",[1321,1361,1362],{},"You want Cloudflare D1 + R2 + Workers + AI Search as the default",[1321,1364,1365],{},"$59 is the budget and you still need auth, Stripe or Polar, and project workspaces",[1321,1367,1368],{},"You already write Vue\u002FNuxt and you do not need i18n on day one",[18,1370,1371],{},"Do not pick Nuxt Beyond if you need magic links, 2FA, passkeys, i18n, a PWA, a cron UI, or a busy Discord. Those gaps are real. Also do not pick it for image or video generation in 2026. That path is broken until I migrate it.",[18,1373,1374,1375,351],{},"If the team only hires React, neither of these is the conversation. That one is ",[25,1376,1378],{"href":1377},"\u002Fblog\u002Fshipfast-vs-nuxtbeyond","ShipFast vs Nuxt Beyond",[44,1380,1382],{"id":1381},"what-i-would-do","What I would do",[18,1384,1385],{},"If a Nuxt founder said \"I need a SaaS starter with some AI chat\" and they already like Postgres, I would say ShipAhead. The kit is broader. The community is larger. OpenRouter chat and image gen are what they actually advertise.",[18,1387,1388],{},"If they said \"customers upload docs and ask questions\" or \"I need a script tag on their marketing site,\" I would say Nuxt Beyond, and I would not hedge. You can add a chat route to any boilerplate. You cannot add tenant-filtered retrieval, ingestion, and a third-party embed in a weekend without being angry at yourself.",[18,1390,1391],{},"They overlap on Nuxt 4, Stripe, Polar, Drizzle, and \"AI\" on the landing page. The products you would actually ship with them do not overlap that much.",[18,1393,1394,1395,1398],{},"If you are still shopping the whole Nuxt field, start with ",[25,1396,1397],{"href":37},"best Nuxt 4 boilerplates compared",", then come back here only if ShipAhead is still in the tab.",[18,1400,1401,1402,351],{},"Current Nuxt Beyond price is on the ",[25,1403,1404],{"href":1298},"pricing section",[1406,1407],"hr",{},[18,1409,1410],{},[417,1411,1412,1413,1295,1416,1419,1420,992],{},"I am the founder of Nuxt Beyond. Features and prices checked 2026-09-26 against ",[25,1414,30],{"href":27,"rel":1415},[29],[25,1417,317],{"href":315,"rel":1418},[29],". If ShipAhead has shipped RAG, a third-party embed, or new pricing, ",[25,1421,991],{"href":9,"rel":1422},[29],[1424,1425,1426],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":430,"searchDepth":488,"depth":488,"links":1428},[1429,1430,1431,1439,1440,1441,1442,1443,1444,1445,1446],{"id":46,"depth":488,"text":47},{"id":66,"depth":488,"text":67},{"id":321,"depth":488,"text":322,"children":1432},[1433,1434,1435,1436,1437,1438],{"id":329,"depth":533,"text":330},{"id":339,"depth":533,"text":340},{"id":354,"depth":533,"text":355},{"id":373,"depth":533,"text":374},{"id":383,"depth":533,"text":384},{"id":390,"depth":533,"text":391},{"id":397,"depth":488,"text":398},{"id":1005,"depth":488,"text":1006},{"id":1021,"depth":488,"text":1022},{"id":1196,"depth":488,"text":1197},{"id":1211,"depth":488,"text":1212},{"id":1312,"depth":488,"text":1313},{"id":1347,"depth":488,"text":1348},{"id":1381,"depth":488,"text":1382},"2026-09-26","An honest comparison of ShipAhead ($99 Nuxt 4 kit with OpenRouter AI) and Nuxt Beyond ($59, RAG chat and an embeddable widget on Cloudflare). Features, stack, price, and when to pick each.","md",{"src":1451},"\u002Fimages\u002Fhomepage\u002Fdemo2.png",{},"\u002Fblog\u002Fshipahead-vs-nuxtbeyond",{"title":1455,"description":1456},"ShipAhead vs Nuxt Beyond: AI SaaS Boilerplate Comparison (2026)","ShipAhead vs Nuxt Beyond in 2026. Both are Nuxt 4 AI kits. OpenRouter chat and Postgres vs Cloudflare RAG and an embeddable widget. $99 vs $59, and which one fits the product you are building.","blog\u002Fshipahead-vs-nuxtbeyond","b8RMqT-hhg_-RXpXQu8XMN1VnqcN3IrNJtnBLVsDXa8",[1460,1465],{"title":1461,"path":1462,"stem":1463,"description":1464,"children":-1},"NuxtBeyond Initial Release: Ship AI-Powered SaaS in Days, Not Months","\u002Fblog\u002Fnuxtbeyond-initial-release","blog\u002Fnuxtbeyond-initial-release","Introducing NuxtBeyond, the complete Nuxt 4 boilerplate for building AI-first SaaS products with authentication, payments, AI chat with RAG, and Cloudflare deployment - all pre-configured.",{"title":1466,"path":1377,"stem":1467,"description":1468,"children":-1},"ShipFast vs Nuxt Beyond: Which SaaS Boilerplate Should You Pick?","blog\u002Fshipfast-vs-nuxtbeyond","An honest comparison of ShipFast (Next.js, $199-249) and Nuxt Beyond (Nuxt 4, $59). Features, AI, pricing, community, and when each boilerplate is the right call.",1790406430921]