[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-navigation":3,"docs-page-mcp":166},[4,38,57,65,114,138,157],{"id":5,"group":6,"pages":7},"get-started","Get started",[8,13,18,23,28,33],{"path":9,"title":10,"description":11,"navTitle":10,"group":6,"order":12},"\u002Fdocs\u002Fgetting-started","Getting started","Create your app from the kit, run it locally with no credentials, make yourself superadmin and find where your own code goes.",1,{"path":14,"title":15,"description":16,"navTitle":15,"group":6,"order":17},"\u002Fdocs\u002Flayout","Project structure","Where code lives by where it runs, and which server\u002F directories turn a new file into a route, a job or a provider.",2,{"path":19,"title":20,"description":21,"navTitle":20,"group":6,"order":22},"\u002Fdocs\u002Fconfiguration","Configuration","starter.config.ts switches each part of the kit and its providers, environment variables hold the secrets: every key and what it changes.",3,{"path":24,"title":25,"description":26,"navTitle":25,"group":6,"order":27},"\u002Fdocs\u002Ftemplate","Updating from the kit","Keep the kit as a git remote and take each update as one commit you review, with pnpm template:update, then resolve what conflicts.",4,{"path":29,"title":30,"description":31,"navTitle":30,"group":6,"order":32},"\u002Fdocs\u002Fdeployment","Deployment","Ship the app as one Cloudflare Worker: create the resources, set the secrets, deploy main from GitHub Actions or your machine.",5,{"path":34,"title":35,"description":36,"navTitle":35,"group":6,"order":37},"\u002Fdocs\u002Fmcp","MCP server","Connect Claude Code, Cursor or VS Code to https:\u002F\u002Fnuxter.app\u002Fmcp, so your agent searches and reads these docs and their design notes.",6,{"id":39,"group":40,"pages":41},"accounts","Accounts",[42,47,52],{"path":43,"title":44,"description":45,"navTitle":44,"group":40,"order":46},"\u002Fdocs\u002Fauth","Auth","Pick the sign-in methods, add an OAuth provider, protect a route, and handle sessions, second factors and account deletion.",7,{"path":48,"title":49,"description":50,"navTitle":49,"group":40,"order":51},"\u002Fdocs\u002Ftenancy","Organizations","Scope routes and pages to an organization, and work with its members, roles, seats, invitations and a second level such as branches.",8,{"path":53,"title":54,"description":55,"navTitle":54,"group":40,"order":56},"\u002Fdocs\u002Fpermissions","Roles and permissions","Routes check permissions that an account’s role or its organization’s plan grants: checking one, adding a role, and the staff tools.",9,{"id":58,"group":59,"pages":60},"payments","Payments",[61],{"path":62,"title":59,"description":63,"navTitle":59,"group":59,"order":64},"\u002Fdocs\u002Fpayments","Sell plans through Stripe, Polar, Lemon Squeezy or Creem: define plans, connect a provider, gate features, trials, coupons and refunds.",10,{"id":66,"group":67,"pages":68},"building-blocks","Building blocks",[69,74,79,84,89,94,99,104,109],{"path":70,"title":71,"description":72,"navTitle":71,"group":67,"order":73},"\u002Fdocs\u002Fdatabase","Database","Postgres through Drizzle, on Hyperdrive in production and PGlite locally: add a table, query, transactions, migrations and seed data.",11,{"path":75,"title":76,"description":77,"navTitle":76,"group":67,"order":78},"\u002Fdocs\u002Fbackground-jobs","Background jobs","Run work after the response on Cloudflare Queues with retries: add and enqueue a job, run jobs locally, and schedule cron tasks.",12,{"path":80,"title":81,"description":82,"navTitle":81,"group":67,"order":83},"\u002Fdocs\u002Fevents","Events","React to what the kit does by adding a file to server\u002Flisteners\u002F, fire events of your own, and look up every event’s payload.",13,{"path":85,"title":86,"description":87,"navTitle":86,"group":67,"order":88},"\u002Fdocs\u002Femail","Email","Set up sending, send your own mail with deliverEmail, change the templates and wording, handle unsubscribes and add a provider.",14,{"path":90,"title":91,"description":92,"navTitle":91,"group":67,"order":93},"\u002Fdocs\u002Fcontact","Contact","A \u002Fcontact page that mails you a message or shows your address after a Turnstile check: choose the channels, set the address, know the limits.",15,{"path":95,"title":96,"description":97,"navTitle":96,"group":67,"order":98},"\u002Fdocs\u002Fnotifications","Notifications","The dashboard bell: add a notification type, send one with notify(), and how categories, opt-outs and retention apply.",16,{"path":100,"title":101,"description":102,"navTitle":101,"group":67,"order":103},"\u002Fdocs\u002Fstorage","Storage","Uploads in R2 with one policy per purpose: add a purpose, accept an upload, replace or delete a file, and serve it to its owner.",17,{"path":105,"title":106,"description":107,"navTitle":106,"group":67,"order":108},"\u002Fdocs\u002Ffeature-flags","Feature flags","Declare typed flags in starter.config.ts, read them with flag() or useFlag(), roll them out by rule or percentage, and add a provider.",18,{"path":110,"title":111,"description":112,"navTitle":111,"group":67,"order":113},"\u002Fdocs\u002Fai","AI","Call models from server code by role: text, images, speech, transcription, embeddings and video, with provider fallbacks.",19,{"id":115,"group":116,"pages":117},"web","Web",[118,123,128,133],{"path":119,"title":120,"description":121,"navTitle":120,"group":116,"order":122},"\u002Fdocs\u002Fsecurity-headers","Security headers","The Content-Security-Policy and hardening headers on every response: allow another origin, keep tokens out of Referer, accept cross-site posts.",20,{"path":124,"title":125,"description":126,"navTitle":125,"group":116,"order":127},"\u002Fdocs\u002Frate-limiting","Rate limiting","Cap how often a caller hits a route with requireRateLimit, count only failures, space out sends, and protect the zone.",21,{"path":129,"title":130,"description":131,"navTitle":130,"group":116,"order":132},"\u002Fdocs\u002Fanalytics","Analytics","Product analytics and ad conversions sent from the server with no browser script: add an event, connect a provider, and handle consent.",22,{"path":134,"title":135,"description":136,"navTitle":135,"group":116,"order":137},"\u002Fdocs\u002Fobservability","Observability","Find a failed request by its id, send faults to Sentry or Better Stack, report an error you caught, and change the error page.",23,{"id":139,"group":140,"pages":141},"content-and-look","Content and look",[142,147,152],{"path":143,"title":144,"description":145,"navTitle":144,"group":140,"order":146},"\u002Fdocs\u002Fblog","Blog","Markdown posts with an RSS feed per language, and workflows that draft posts with an AI model and open each one as a pull request.",24,{"path":148,"title":149,"description":150,"navTitle":149,"group":140,"order":151},"\u002Fdocs\u002Flanguages","Languages","Add or remove a language, write copy in the locale files, and write code, refusals and links that follow the reader’s language.",25,{"path":153,"title":154,"description":155,"navTitle":154,"group":140,"order":156},"\u002Fdocs\u002Ftheme","Theme","Change the brand colour and font, and build dashboard sections, list pages, loading placeholders and charts that match the kit.",26,{"id":158,"group":159,"pages":160},"quality","Quality",[161],{"path":162,"title":163,"description":164,"navTitle":163,"group":159,"order":165},"\u002Fdocs\u002Ftesting","Testing","Unit tests in Node, component tests in a real Nuxt app and Playwright end to end: test a route or a component, and what CI runs.",27,{"page":167,"surround":463,"linksToKit":466},{"path":34,"title":35,"description":36,"navTitle":35,"group":6,"seo":168,"body":170},{"title":169,"description":36},"Docs MCP server for Claude Code, Cursor, VS Code",{"type":171,"value":172,"toc":458},"minimark",[173,177,186,189,194,197,234,241,308,314,366,369,373,433,436,440,451,454],[174,175,35],"h1",{"id":176},"mcp-server",[178,179,180,181,185],"p",{},"These docs are also an MCP server at ",[182,183,184],"code",{},"https:\u002F\u002Fnuxter.app\u002Fmcp",". Connect your\ncoding agent to it, and the agent searches these pages and their design notes\nand reads the part it needs, instead of guessing from what it was trained on.",[178,187,188],{},"It is public and read-only: no account, no key.",[190,191,193],"h2",{"id":192},"connect","Connect",[178,195,196],{},"Claude Code:",[198,199,204],"pre",{"className":200,"code":201,"language":202,"meta":203,"style":203},"language-sh shiki shiki-themes github-light github-light github-dark","claude mcp add --transport http nuxter https:\u002F\u002Fnuxter.app\u002Fmcp\n","sh","",[182,205,206],{"__ignoreMap":203},[207,208,210,214,218,221,225,228,231],"span",{"class":209,"line":12},"line",[207,211,213],{"class":212},"snPdu","claude",[207,215,217],{"class":216},"sIIMD"," mcp",[207,219,220],{"class":216}," add",[207,222,224],{"class":223},"sBjJW"," --transport",[207,226,227],{"class":216}," http",[207,229,230],{"class":216}," nuxter",[207,232,233],{"class":216}," https:\u002F\u002Fnuxter.app\u002Fmcp\n",[178,235,236,237,240],{},"Cursor, in ",[182,238,239],{},".cursor\u002Fmcp.json",":",[198,242,246],{"className":243,"code":244,"language":245,"meta":203,"style":203},"language-json shiki shiki-themes github-light github-light github-dark","{\n  \"mcpServers\": {\n    \"nuxter\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fnuxter.app\u002Fmcp\"\n    }\n  }\n}\n","json",[182,247,248,254,262,269,283,293,298,303],{"__ignoreMap":203},[207,249,250],{"class":209,"line":12},[207,251,253],{"class":252},"sxrX7","{\n",[207,255,256,259],{"class":209,"line":17},[207,257,258],{"class":223},"  \"mcpServers\"",[207,260,261],{"class":252},": {\n",[207,263,264,267],{"class":209,"line":22},[207,265,266],{"class":223},"    \"nuxter\"",[207,268,261],{"class":252},[207,270,271,274,277,280],{"class":209,"line":27},[207,272,273],{"class":223},"      \"type\"",[207,275,276],{"class":252},": ",[207,278,279],{"class":216},"\"http\"",[207,281,282],{"class":252},",\n",[207,284,285,288,290],{"class":209,"line":32},[207,286,287],{"class":223},"      \"url\"",[207,289,276],{"class":252},[207,291,292],{"class":216},"\"https:\u002F\u002Fnuxter.app\u002Fmcp\"\n",[207,294,295],{"class":209,"line":37},[207,296,297],{"class":252},"    }\n",[207,299,300],{"class":209,"line":46},[207,301,302],{"class":252},"  }\n",[207,304,305],{"class":209,"line":51},[207,306,307],{"class":252},"}\n",[178,309,310,311,240],{},"VS Code, in ",[182,312,313],{},".vscode\u002Fmcp.json",[198,315,317],{"className":243,"code":316,"language":245,"meta":203,"style":203},"{\n  \"servers\": {\n    \"nuxter\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fnuxter.app\u002Fmcp\"\n    }\n  }\n}\n",[182,318,319,323,330,336,346,354,358,362],{"__ignoreMap":203},[207,320,321],{"class":209,"line":12},[207,322,253],{"class":252},[207,324,325,328],{"class":209,"line":17},[207,326,327],{"class":223},"  \"servers\"",[207,329,261],{"class":252},[207,331,332,334],{"class":209,"line":22},[207,333,266],{"class":223},[207,335,261],{"class":252},[207,337,338,340,342,344],{"class":209,"line":27},[207,339,273],{"class":223},[207,341,276],{"class":252},[207,343,279],{"class":216},[207,345,282],{"class":252},[207,347,348,350,352],{"class":209,"line":32},[207,349,287],{"class":223},[207,351,276],{"class":252},[207,353,292],{"class":216},[207,355,356],{"class":209,"line":37},[207,357,297],{"class":252},[207,359,360],{"class":209,"line":46},[207,361,302],{"class":252},[207,363,364],{"class":209,"line":51},[207,365,307],{"class":252},[178,367,368],{},"Any other client that speaks MCP over Streamable HTTP takes the same URL.",[190,370,372],{"id":371},"tools","Tools",[374,375,376,389],"table",{},[377,378,379],"thead",{},[380,381,382,386],"tr",{},[383,384,385],"th",{},"Tool",[383,387,388],{},"What it does",[390,391,392,403,413,423],"tbody",{},[380,393,394,400],{},[395,396,397],"td",{},[182,398,399],{},"search-docs",[395,401,402],{},"Finds the sections that match a query, with the page URL or note topic to read next.",[380,404,405,410],{},[395,406,407],{},[182,408,409],{},"list-docs-pages",[395,411,412],{},"Lists every page by group, and every design note.",[380,414,415,420],{},[395,416,417],{},[182,418,419],{},"get-docs-page",[395,421,422],{},"Reads a page, or one section of it, as markdown.",[380,424,425,430],{},[395,426,427],{},[182,428,429],{},"get-design-note",[395,431,432],{},"Reads the design note behind a page: why that part works the way it does.",[178,434,435],{},"A long page or note comes back as an outline of its sections, and the agent\nthen asks for the one it needs.",[190,437,439],{"id":438},"which-version-it-describes","Which version it describes",[178,441,442,443,446,447,450],{},"The docs follow the kit's ",[182,444,445],{},"main"," branch. If your app has not taken the latest\nupdate (",[448,449,25],"a",{"href":24},"), a page may describe something\nyour copy does not have yet. Your code is the source of truth for what it has.",[178,452,453],{},"Calls are rate limited per IP address.",[455,456,457],"style",{},"html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":203,"searchDepth":17,"depth":17,"links":459},[460,461,462],{"id":192,"depth":17,"text":193},{"id":371,"depth":17,"text":372},{"id":438,"depth":17,"text":439},[464,465],{"path":29,"title":30,"description":31,"navTitle":30,"group":6,"order":32},{"path":43,"title":44,"description":45,"navTitle":44,"group":40,"order":46},false]