[{"data":1,"prerenderedAt":1107},["ShallowReactive",2],{"navigation:en":3,"\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fnuxfire-stack:en":311},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11,152],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-layout-grid",{"title":12,"path":13,"stem":14,"children":15,"icon":151},"SaaS Starter Kit","\u002Fdocs\u002Fsaas-starter-kit","docs\u002F1.saas-starter-kit\u002F0.index",[16,19,63,129],{"title":17,"path":13,"stem":14,"icon":18},"What is the SaaS Starter Kit?","i-lucide-info",{"title":20,"icon":21,"hide":22,"path":23,"stem":24,"children":25,"page":62},"Getting Started","i-lucide-play",true,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started","docs\u002F1.saas-starter-kit\u002F1.getting-started",[26,30,34,38,42,46,50,54,58],{"title":27,"path":28,"stem":29},"Quick Start","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fquick-start","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F0.quick-start",{"title":31,"path":32,"stem":33},"Installation","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Finstallation","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F1.installation",{"title":35,"path":36,"stem":37},"Cloudflare Access","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fcloudflare-access","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F2.cloudflare-access",{"title":39,"path":40,"stem":41},"Configuration","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fconfiguration","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F3.configuration",{"title":43,"path":44,"stem":45},"Secrets","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fsecrets","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F4.secrets",{"title":47,"path":48,"stem":49},"Environment Variables","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fenvironment-variables","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F5.environment-variables",{"title":51,"path":52,"stem":53},"Deploy","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fdeploy","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F6.deploy",{"title":55,"path":56,"stem":57},"Local Development","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Flocal-development","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F7.local-development",{"title":59,"path":60,"stem":61},"Project Structure","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fproject-structure","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F8.project-structure",false,{"title":64,"icon":65,"hide":22,"path":66,"stem":67,"children":68,"page":62},"Features","i-lucide-box","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures","docs\u002F1.saas-starter-kit\u002F2.features",[69,73,77,81,85,89,93,97,101,105,109,113,117,121,125],{"title":70,"path":71,"stem":72},"Authentication","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fauth","docs\u002F1.saas-starter-kit\u002F2.features\u002F1.auth",{"title":74,"path":75,"stem":76},"Rate Limiting","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frate-limiting","docs\u002F1.saas-starter-kit\u002F2.features\u002F10.rate-limiting",{"title":78,"path":79,"stem":80},"WebSockets","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fwebsockets","docs\u002F1.saas-starter-kit\u002F2.features\u002F11.websockets",{"title":82,"path":83,"stem":84},"Blog","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fblog","docs\u002F1.saas-starter-kit\u002F2.features\u002F14.blog",{"title":86,"path":87,"stem":88},"Documentation","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdocumentation","docs\u002F1.saas-starter-kit\u002F2.features\u002F15.documentation",{"title":90,"path":91,"stem":92},"Analytics","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fanalytics","docs\u002F1.saas-starter-kit\u002F2.features\u002F16.analytics",{"title":94,"path":95,"stem":96},"Platform Admin Console","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fplatform-admin","docs\u002F1.saas-starter-kit\u002F2.features\u002F17.platform-admin",{"title":98,"path":99,"stem":100},"Database","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdatabase","docs\u002F1.saas-starter-kit\u002F2.features\u002F2.database",{"title":102,"path":103,"stem":104},"Payments & Billing","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fpayments","docs\u002F1.saas-starter-kit\u002F2.features\u002F3.payments",{"title":106,"path":107,"stem":108},"Emails","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Femails","docs\u002F1.saas-starter-kit\u002F2.features\u002F4.emails",{"title":110,"path":111,"stem":112},"Notifications","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fnotifications","docs\u002F1.saas-starter-kit\u002F2.features\u002F5.notifications",{"title":114,"path":115,"stem":116},"Role-Based Access Control","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frbac","docs\u002F1.saas-starter-kit\u002F2.features\u002F6.rbac",{"title":118,"path":119,"stem":120},"Async Jobs","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fasync-jobs","docs\u002F1.saas-starter-kit\u002F2.features\u002F7.async-jobs",{"title":122,"path":123,"stem":124},"Storage","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fstorage","docs\u002F1.saas-starter-kit\u002F2.features\u002F8.storage",{"title":126,"path":127,"stem":128},"Internationalization","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Finternationalization","docs\u002F1.saas-starter-kit\u002F2.features\u002F9.internationalization",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":62},"Concepts","i-lucide-graduation-cap","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts","docs\u002F1.saas-starter-kit\u002F3.concepts",[135,139,143,147],{"title":136,"path":137,"stem":138},"Technology Stack","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Ftech-stack","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F0.tech-stack",{"title":140,"path":141,"stem":142},"SST.dev","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fsst","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F1.sst",{"title":144,"path":145,"stem":146},"NuxtHub","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fnuxt-hub","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F2.nuxt-hub",{"title":148,"path":149,"stem":150},"Design System & Branding","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fdesign-system","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F3.design-system","i-lucide-zap",{"title":153,"path":154,"stem":155,"children":156,"icon":159},"Fireskills","\u002Fdocs\u002Ffireskills","docs\u002F2.fireskills\u002F0.index",[157,160,219,249,275,293],{"title":158,"path":154,"stem":155,"icon":159},"What is Fireskills?","i-lucide-flame",{"title":20,"icon":21,"hide":22,"path":161,"stem":162,"children":163,"page":62},"\u002Fdocs\u002Ffireskills\u002Fgetting-started","docs\u002F2.fireskills\u002F1.getting-started",[164,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":27,"path":165,"stem":166},"\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fquick-start","docs\u002F2.fireskills\u002F1.getting-started\u002F00.quick-start",{"title":168,"path":169,"stem":170},"Workflow & Governance","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fworkflow","docs\u002F2.fireskills\u002F1.getting-started\u002F01.workflow",{"title":172,"path":173,"stem":174},"Project Context","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fproject-context","docs\u002F2.fireskills\u002F1.getting-started\u002F02.project-context",{"title":176,"path":177,"stem":178},"Step 0: Setup","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-setup","docs\u002F2.fireskills\u002F1.getting-started\u002F03.step-setup",{"title":180,"path":181,"stem":182},"Step 1: Inbox","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-inbox","docs\u002F2.fireskills\u002F1.getting-started\u002F04.step-inbox",{"title":184,"path":185,"stem":186},"Step 2: Backlog","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-backlog","docs\u002F2.fireskills\u002F1.getting-started\u002F05.step-backlog",{"title":188,"path":189,"stem":190},"Step 3: Specify","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-specify","docs\u002F2.fireskills\u002F1.getting-started\u002F06.step-specify",{"title":192,"path":193,"stem":194},"Step 4: Validate","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-validate","docs\u002F2.fireskills\u002F1.getting-started\u002F07.step-validate",{"title":196,"path":197,"stem":198},"Step 5: Tasks","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tasks","docs\u002F2.fireskills\u002F1.getting-started\u002F08.step-tasks",{"title":200,"path":201,"stem":202},"Step 6: TDD\u002FBDD","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tdd-bdd","docs\u002F2.fireskills\u002F1.getting-started\u002F09.step-tdd-bdd",{"title":204,"path":205,"stem":206},"Step 7: Implement","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-implement","docs\u002F2.fireskills\u002F1.getting-started\u002F10.step-implement",{"title":208,"path":209,"stem":210},"Step 8: Documentator","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-documentator","docs\u002F2.fireskills\u002F1.getting-started\u002F11.step-documentator",{"title":212,"path":213,"stem":214},"Late Changes","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Flate-changes","docs\u002F2.fireskills\u002F1.getting-started\u002F12.late-changes",{"title":216,"path":217,"stem":218},"Other Entry Points","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fother-entry-points","docs\u002F2.fireskills\u002F1.getting-started\u002F13.other-entry-points",{"title":220,"icon":221,"hide":22,"path":222,"stem":223,"children":224,"page":62},"Methodology","i-lucide-git-branch","\u002Fdocs\u002Ffireskills\u002Fmethodology","docs\u002F2.fireskills\u002F2.methodology",[225,229,233,237,241,245],{"title":226,"path":227,"stem":228},"The Three Acts","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-acts","docs\u002F2.fireskills\u002F2.methodology\u002F0.three-acts",{"title":230,"path":231,"stem":232},"The Three Gates","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-gates","docs\u002F2.fireskills\u002F2.methodology\u002F1.three-gates",{"title":234,"path":235,"stem":236},"The Canonical Spec","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fcanonical-spec","docs\u002F2.fireskills\u002F2.methodology\u002F2.canonical-spec",{"title":238,"path":239,"stem":240},"Lifecycle States","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Flifecycle-states","docs\u002F2.fireskills\u002F2.methodology\u002F3.lifecycle-states",{"title":242,"path":243,"stem":244},"Effort Scale","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Feffort-scale","docs\u002F2.fireskills\u002F2.methodology\u002F4.effort-scale",{"title":246,"path":247,"stem":248},"Milestones & Governance","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fgovernance-and-milestones","docs\u002F2.fireskills\u002F2.methodology\u002F5.governance-and-milestones",{"title":250,"icon":251,"hide":22,"path":252,"stem":253,"children":254,"page":62},"Skills","i-lucide-layers","\u002Fdocs\u002Ffireskills\u002Fskills","docs\u002F2.fireskills\u002F3.skills",[255,259,263,267,271],{"title":256,"path":257,"stem":258},"Catalog","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fcatalog","docs\u002F2.fireskills\u002F3.skills\u002F0.catalog",{"title":260,"path":261,"stem":262},"Act I: Define","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-1-define","docs\u002F2.fireskills\u002F3.skills\u002F1.act-1-define",{"title":264,"path":265,"stem":266},"Act II: Design & Prove","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-2-design-prove","docs\u002F2.fireskills\u002F3.skills\u002F2.act-2-design-prove",{"title":268,"path":269,"stem":270},"Act III: Deliver","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-3-deliver","docs\u002F2.fireskills\u002F3.skills\u002F3.act-3-deliver",{"title":272,"path":273,"stem":274},"Governance & Decisions","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fgovernance-and-decisions","docs\u002F2.fireskills\u002F3.skills\u002F4.governance-and-decisions",{"title":276,"icon":277,"hide":22,"path":278,"stem":279,"children":280,"page":62},"Specialists","i-lucide-sparkles","\u002Fdocs\u002Ffireskills\u002Fspecialists","docs\u002F2.fireskills\u002F4.specialists",[281,285,289],{"title":282,"path":283,"stem":284},"Overview","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Foverview","docs\u002F2.fireskills\u002F4.specialists\u002F0.overview",{"title":286,"path":287,"stem":288},"Nuxfire Stack","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fnuxfire-stack","docs\u002F2.fireskills\u002F4.specialists\u002F1.nuxfire-stack",{"title":290,"path":291,"stem":292},"Engineering Specialists","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fengineering-specialists","docs\u002F2.fireskills\u002F4.specialists\u002F2.engineering-specialists",{"title":294,"icon":295,"hide":22,"path":296,"stem":297,"children":298,"page":62},"CLI & Tooling","i-lucide-terminal","\u002Fdocs\u002Ffireskills\u002Fcli","docs\u002F2.fireskills\u002F5.cli",[299,303,307],{"title":300,"path":301,"stem":302},"CLI Overview","\u002Fdocs\u002Ffireskills\u002Fcli\u002Foverview","docs\u002F2.fireskills\u002F5.cli\u002F0.overview",{"title":304,"path":305,"stem":306},"Commands","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fcommands","docs\u002F2.fireskills\u002F5.cli\u002F1.commands",{"title":308,"path":309,"stem":310},"Safety Scripts","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fgovernance-scripts","docs\u002F2.fireskills\u002F5.cli\u002F2.governance-scripts",{"id":312,"title":313,"body":314,"description":1101,"extension":1102,"meta":1103,"navigation":1104,"path":287,"seo":1105,"stem":288,"__hash__":1106},"docs\u002Fdocs\u002F2.fireskills\u002F4.specialists\u002F1.nuxfire-stack.md","The 15 Nuxfire Stack Specialists",{"type":315,"value":316,"toc":1067},"minimark",[317,321,324,333,368,370,377,434,436,443,471,473,480,521,523,530,571,573,580,610,612,619,644,646,653,681,683,690,725,727,734,760,762,769,811,813,820,892,894,901,947,949,956,1021,1023,1030],[318,319,320],"p",{},"The 15 Nuxfire Stack Specialists encapsulate the core architectural patterns and runtime constraints of this repository.",[322,323],"hr",{},[325,326,328,329],"h2",{"id":327},"_1-fireskill-specialist-nuxt","1. ",[330,331,332],"code",{},"fireskill-specialist-nuxt",[334,335,336,344,362],"ul",{},[337,338,339,343],"li",{},[340,341,342],"strong",{},"Focus",": Nuxt 4, Nitro server engine, pages, layouts, route middleware, server routes, plugins, runtime configuration, and auto-imports.",[337,345,346,349,350,353,354,357,358,361],{},[340,347,348],{},"Key Knowledge",": Nuxt 4 directory structure (",[330,351,352],{},"apps\u002Fapp","), Nitro event handlers (",[330,355,356],{},"defineEventHandler","), ",[330,359,360],{},"useRuntimeConfig()",", and multi-app orchestration.",[337,363,364,367],{},[340,365,366],{},"When to Load",": When modifying routing, SSR behavior, Nuxt configuration, or Nitro server endpoints.",[322,369],{},[325,371,373,374],{"id":372},"_2-fireskill-specialist-nuxt-ui","2. ",[330,375,376],{},"fireskill-specialist-nuxt-ui",[334,378,379,388,425],{},[337,380,381,383,384,387],{},[340,382,342],{},": ",[330,385,386],{},"@nuxt\u002Fui"," v4 component library (built on Reka UI and Tailwind CSS v4).",[337,389,390,392,393,396,397,396,400,396,403,396,406,396,409,412,413,416,417,420,421,424],{},[340,391,348],{},": Over 125 accessible components (",[330,394,395],{},"UButton",", ",[330,398,399],{},"UModal",[330,401,402],{},"UTable",[330,404,405],{},"UForm",[330,407,408],{},"UFormField",[330,410,411],{},"UInput","), design tokens, ",[330,414,415],{},"app.config.ts"," UI extensions, and composables like ",[330,418,419],{},"useToast()"," and ",[330,422,423],{},"useOverlay()",".",[337,426,427,429,430,433],{},[340,428,366],{},": When developing or updating ",[330,431,432],{},".vue"," files, UI forms, modal dialogs, data tables, or interface layouts.",[322,435],{},[325,437,439,440],{"id":438},"_3-fireskill-specialist-nuxfire-layers","3. ",[330,441,442],{},"fireskill-specialist-nuxfire-layers",[334,444,445,450,466],{},[337,446,447,449],{},[340,448,342],{},": Nuxfire domain layer architecture.",[337,451,452,454,455,357,458,461,462,465],{},[340,453,348],{},": Creating, registering, and composing modular domain layers (",[330,456,457],{},"layers\u002F",[330,459,460],{},"config.ts"," layer toggles, ",[330,463,464],{},"scripts\u002Fcompose-layers.ts",", layer manifests, and dependency boundaries between layers.",[337,467,468,470],{},[340,469,366],{},": When adding a new functional layer or managing cross-layer imports and composition.",[322,472],{},[325,474,476,477],{"id":475},"_4-fireskill-specialist-trpc","4. ",[330,478,479],{},"fireskill-specialist-trpc",[334,481,482,491,516],{},[337,483,484,486,487,490],{},[340,485,342],{},": Type-safe end-to-end APIs via ",[330,488,489],{},"trpc-nuxt"," (tRPC v10).",[337,492,493,495,496,396,499,396,502,396,505,508,509,512,513,424],{},[340,494,348],{},": Router definition, procedures (",[330,497,498],{},"publicProcedure",[330,500,501],{},"protectedProcedure",[330,503,504],{},"abilityProcedure",[330,506,507],{},"platformAdminProcedure",", defined in ",[330,510,511],{},"apps\u002Fapp\u002Fserver\u002Ftrpc\u002Ftrpc.ts","), input validation via Zod, context creation, and client consumption via ",[330,514,515],{},"useTrpcClient()",[337,517,518,520],{},[340,519,366],{},": When authoring or modifying API procedures, routers, or client-side queries\u002Fmutations.",[322,522],{},[325,524,526,527],{"id":525},"_5-fireskill-specialist-drizzle","5. ",[330,528,529],{},"fireskill-specialist-drizzle",[334,531,532,537,554,566],{},[337,533,534,536],{},[340,535,342],{},": Drizzle ORM with PostgreSQL over Cloudflare Hyperdrive.",[337,538,539,541,542,545,546,549,550,553],{},[340,540,348],{},": Schema declarations (",[330,543,544],{},"pgTable","), relations, migrations (",[330,547,548],{},"bun run drizzle-kit generate","), query building, and per-request ",[330,551,552],{},"useDB()"," client lifecycle.",[337,555,556,383,559,561,562,565],{},[340,557,558],{},"Critical Constraint",[330,560,552],{}," must be instantiated per-request and closed via ",[330,563,564],{},"ExecutionContext.waitUntil(closeDB())",". Never cache database clients globally.",[337,567,568,570],{},[340,569,366],{},": When modifying database schema, adding migrations, or writing database queries.",[322,572],{},[325,574,576,577],{"id":575},"_6-fireskill-specialist-nuxt-authorization","6. ",[330,578,579],{},"fireskill-specialist-nuxt-authorization",[334,581,582,587,605],{},[337,583,584,586],{},[340,585,342],{},": Role-Based Access Control (RBAC) and permissions.",[337,588,589,591,592,595,596,598,599,602,603,424],{},[340,590,348],{},": Defining abilities with ",[330,593,594],{},"defineAbility",", securing procedures with ",[330,597,504],{},", template protection using ",[330,600,601],{},"\u003CCan>",", and platform administrator access with ",[330,604,507],{},[337,606,607,609],{},[340,608,366],{},": When implementing authorization checks, member permission scopes, or admin guards.",[322,611],{},[325,613,615,616],{"id":614},"_7-fireskill-specialist-openauth","7. ",[330,617,618],{},"fireskill-specialist-openauth",[334,620,621,626,639],{},[337,622,623,625],{},[340,624,342],{},": Independent authentication server via OpenAuth.js.",[337,627,628,630,631,634,635,638],{},[340,629,348],{},": Password, code, GitHub and Google providers, Cloudflare KV session storage (",[330,632,633],{},"AuthKV","), token verification, callbacks and credential rate limiting in ",[330,636,637],{},"apps\u002Ffunctions\u002Fsrc\u002Fauth.ts",". The user MFA (TOTP) endpoints live in the app, not in that file; the specialist's reference describes them.",[337,640,641,643],{},[340,642,366],{},": When modifying login flows, session handling, authentication providers, or auth cookies.",[322,645],{},[325,647,649,650],{"id":648},"_8-fireskill-specialist-pinia","8. ",[330,651,652],{},"fireskill-specialist-pinia",[334,654,655,663,676],{},[337,656,657,659,660,424],{},[340,658,342],{},": Client-side reactive state management via ",[330,661,662],{},"@pinia\u002Fnuxt",[337,664,665,667,668,671,672,675],{},[340,666,348],{},": Store definition (",[330,669,670],{},"defineStore","), SSR hydration safety, ",[330,673,674],{},"storeToRefs",", lazy loading, and syncing store state with tRPC queries.",[337,677,678,680],{},[340,679,366],{},": When managing persistent client-side application state across views.",[322,682],{},[325,684,686,687],{"id":685},"_9-fireskill-specialist-cloudflare-workers","9. ",[330,688,689],{},"fireskill-specialist-cloudflare-workers",[334,691,692,697,706,720],{},[337,693,694,696],{},[340,695,342],{},": Cloudflare Workers serverless runtime environment.",[337,698,699,701,702,705],{},[340,700,348],{},": Worker resource bindings, Cloudflare KV, R2 Blob storage (",[330,703,704],{},"@nuxthub\u002Fcore","), Cloudflare Queues, Durable Objects, Cron Triggers, and Hyperdrive connection pools.",[337,707,708,711,712,715,716,719],{},[340,709,710],{},"Runtime Constraints",": String durations (e.g. ",[330,713,714],{},"\"120 seconds\"","), zero Node.js filesystem access, zero persistent background listeners, Windows path safety (avoid ",[330,717,718],{},"path.resolve()"," in worker handlers).",[337,721,722,724],{},[340,723,366],{},": When writing background jobs, queue consumers, WebSockets, or Cloudflare resource bindings.",[322,726],{},[325,728,730,731],{"id":729},"_10-fireskill-specialist-sst","10. ",[330,732,733],{},"fireskill-specialist-sst",[334,735,736,748,755],{},[337,737,738,740,741,396,744,747],{},[340,739,342],{},": Infrastructure as code via SST 4 (",[330,742,743],{},"sst.config.ts",[330,745,746],{},"infra\u002F*.ts",").",[337,749,750,383,752,754],{},[340,751,348],{},[330,753,743],{},", Cloudflare provider configuration, secret management, stage deployments, and custom domain routing.",[337,756,757,759],{},[340,758,366],{},": When provisioning new Cloudflare infrastructure, configuring secrets, or diagnosing deployment pipelines.",[322,761],{},[325,763,765,766],{"id":764},"_11-fireskill-specialist-billing","11. ",[330,767,768],{},"fireskill-specialist-billing",[334,770,771,780,796,802],{},[337,772,773,775,776,779],{},[340,774,342],{},": Payments and subscriptions in ",[330,777,778],{},"layers\u002Fbilling",", with Stripe and Paddle both active.",[337,781,782,784,785,788,789,420,792,795],{},[340,783,348],{},": Stripe Checkout (subscription mode) and the restricted cancel-only portal, Paddle.js checkout in the browser, webhook verification with a KV idempotency ledger, ",[330,786,787],{},"syncStripeSubscription",", the exhaustive Stripe status map, and the ",[330,790,791],{},"Plan",[330,793,794],{},"Subscription"," tables.",[337,797,798,801],{},[340,799,800],{},"Not in the code",": invoice history, plan change with proration, seat-limit alerts, LemonSqueezy (enum value only).",[337,803,804,806,807,810],{},[340,805,366],{},": When changing checkout, webhooks, subscription status, plans, prices or the ",[330,808,809],{},"\u002Fadmin\u002Fplans"," console.",[322,812],{},[325,814,816,817],{"id":815},"_12-fireskill-specialist-content-seo","12. ",[330,818,819],{},"fireskill-specialist-content-seo",[334,821,822,831,878,887],{},[337,823,824,826,827,830],{},[340,825,342],{},": Blog posts, docs pages and their translations in ",[330,828,829],{},"apps\u002Fweb",", and the SEO metadata every page carries.",[337,832,833,835,836,839,840,396,843,396,846,396,849,396,852,855,856,859,860,863,864,867,868,396,871,420,874,877],{},[340,834,348],{},": The blog frontmatter contract in ",[330,837,838],{},"content.config.ts"," (",[330,841,842],{},"lang",[330,844,845],{},"translations",[330,847,848],{},"updated",[330,850,851],{},"ogImage",[330,853,854],{},"authorType","), the pure builders in ",[330,857,858],{},"app\u002Futils\u002Fseo\u002Fcontent-seo.ts",", hreflang and sitemap consistency, raster social covers generated from SVG (",[330,861,862],{},"bun run generate:og","), the ",[330,865,866],{},"bun run check:seo"," gate over the built HTML, and the rule that every post exists in ",[330,869,870],{},"en",[330,872,873],{},"pt-br",[330,875,876],{},"es"," (the blog index shows one card per post in the active language).",[337,879,880,882,883,886],{},[340,881,800],{},": per-locale blog URLs, single-language posts (the gate rejects them), runtime OG image generation, an RSS feed, ",[330,884,885],{},"lastmod"," for docs pages.",[337,888,889,891],{},[340,890,366],{},": When writing or translating a post or a docs page, changing a page title, description, structured data, hreflang or sitemap, or adding a locale.",[322,893],{},[325,895,897,898],{"id":896},"_13-fireskill-specialist-web-performance","13. ",[330,899,900],{},"fireskill-specialist-web-performance",[334,902,903,908,929,938],{},[337,904,905,907],{},[340,906,342],{},": What the browser downloads and runs on the public pages: JavaScript, images, fonts, third-party code and the Core Web Vitals (LCP, INP, CLS).",[337,909,910,912,913,916,917,920,921,924,925,928],{},[340,911,348],{},": The Nuxt 4.5 ",[330,914,915],{},"noScripts"," route rule and the ",[330,918,919],{},"defineLazyHydrationComponent"," strategies, the byte budgets and dated baselines of ",[330,922,923],{},"perf-budgets.json"," (a baseline only shrinks), the ",[330,926,927],{},"bun run check:perf"," gate over the built HTML, and the lab protocol for LCP (Lighthouse with applied throttling), because a byte gate cannot measure timings.",[337,930,931,933,934,937],{},[340,932,800],{},": field data for the site, an INP measurement, a page declared ",[330,935,936],{},"js: none"," (the shared header needs JavaScript), lazy hydration of the landing sections, and a CI job that runs the gate.",[337,939,940,942,943,946],{},[340,941,366],{},": When changing what a public page ships to the browser (scripts, images, fonts, ",[330,944,945],{},"routeRules",", hydration), when a page feels slow, or before adding a browser dependency.",[322,948],{},[325,950,952,953],{"id":951},"_14-fireskill-specialist-seo","14. ",[330,954,955],{},"fireskill-specialist-seo",[334,957,958,965,999,1012],{},[337,959,960,962,963,747],{},[340,961,342],{},": What Google and Bing require of any page so it can be crawled, indexed, shown and cited, as distinct from how posts and docs are authored (that is ",[330,964,819],{},[337,966,967,383,969,972,973,976,977,980,981,984,985,987,988,990,991,994,995,998],{},[340,968,348],{},[330,970,971],{},"301"," lines in ",[330,974,975],{},"apps\u002Fweb\u002Fpublic\u002F_redirects"," instead of meta refresh pages, the ",[330,978,979],{},"drop-trailing-slash"," handling of the ",[330,982,983],{},"Web"," Worker, one canonical URL, a sitemap ",[330,986,885],{}," with date and time, structured data chosen per page and never dishonest (no FAQ or rating markup without grounds), the ",[330,989,866],{}," gate with its ",[330,992,993],{},"--live"," audit of a running server, and IndexNow through ",[330,996,997],{},"bun run indexnow"," (a dry run unless the owner authorizes the submission).",[337,1000,1001,1003,1004,1007,1008,1011],{},[340,1002,800],{},": an IndexNow key file, Search Console or Bing Webmaster data, a production audit of the redirect fix, and ",[330,1005,1006],{},"Organization"," or ",[330,1009,1010],{},"SoftwareApplication"," markup on the home page.",[337,1013,1014,1016,1017,1020],{},[340,1015,366],{},": When a URL is created, moved or removed, when a route rule, ",[330,1018,1019],{},"_redirects"," line or sitemap option changes, or when a page head or its structured data changes.",[322,1022],{},[325,1024,1026,1027],{"id":1025},"_15-fireskill-specialist-copywriting","15. ",[330,1028,1029],{},"fireskill-specialist-copywriting",[334,1031,1032,1037,1057,1062],{},[337,1033,1034,1036],{},[340,1035,342],{},": Every text a human reads in the apps: landing and pricing copy, interface labels and buttons, errors, empty states, emails, notifications and legal text.",[337,1038,1039,1041,1042,396,1044,420,1046,1048,1049,1052,1053,1056],{},[340,1040,348],{},": The workflow (brief, voice of customer, messaging hierarchy, draft, claims, localisation in ",[330,1043,870],{},[330,1045,873],{},[330,1047,876],{},", a separate review), a library of 44 original patterns in classes A (no proof needed), B (needs a ledger record) and C (forbidden), the claim ledger ",[330,1050,1051],{},".fireskills\u002FCLAIMS.yml"," for numbers, testimonials and deadlines, and the ",[330,1054,1055],{},"bun run check:copy"," gate with its dated, owned baseline.",[337,1058,1059,1061],{},[340,1060,800],{},": a proven claim (the ledger is empty), voice-of-customer data, verified testimonials, and any test of the copy on real visitors.",[337,1063,1064,1066],{},[340,1065,366],{},": When writing or changing any string a person reads, when a template contains a literal text, or when a page names a number, a comparison, a guarantee, a deadline or a person.",{"title":1068,"searchDepth":1069,"depth":1069,"links":1070},"",2,[1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099],{"id":327,"depth":1069,"text":1072},"1. fireskill-specialist-nuxt",{"id":372,"depth":1069,"text":1074},"2. fireskill-specialist-nuxt-ui",{"id":438,"depth":1069,"text":1076},"3. fireskill-specialist-nuxfire-layers",{"id":475,"depth":1069,"text":1078},"4. fireskill-specialist-trpc",{"id":525,"depth":1069,"text":1080},"5. fireskill-specialist-drizzle",{"id":575,"depth":1069,"text":1082},"6. fireskill-specialist-nuxt-authorization",{"id":614,"depth":1069,"text":1084},"7. fireskill-specialist-openauth",{"id":648,"depth":1069,"text":1086},"8. fireskill-specialist-pinia",{"id":685,"depth":1069,"text":1088},"9. fireskill-specialist-cloudflare-workers",{"id":729,"depth":1069,"text":1090},"10. fireskill-specialist-sst",{"id":764,"depth":1069,"text":1092},"11. fireskill-specialist-billing",{"id":815,"depth":1069,"text":1094},"12. fireskill-specialist-content-seo",{"id":896,"depth":1069,"text":1096},"13. fireskill-specialist-web-performance",{"id":951,"depth":1069,"text":1098},"14. fireskill-specialist-seo",{"id":1025,"depth":1069,"text":1100},"15. fireskill-specialist-copywriting","Core technical specialists tailored to Nuxfire's Nuxt 4, Cloudflare Workers, SST, and Drizzle architecture.","md",{},{"title":286},{"title":313,"description":1101},"yaKtMA0TtVQ9veUPTj32Jv4lEH7-VgcXgX_3a1ZflUo",1790707496404]