[{"data":1,"prerenderedAt":850},["ShallowReactive",2],{"navigation:en":3,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fconfiguration: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":39,"body":313,"description":844,"extension":845,"meta":846,"navigation":847,"path":40,"seo":848,"stem":41,"__hash__":849},"docs\u002Fdocs\u002F1.saas-starter-kit\u002F1.getting-started\u002F3.configuration.md",{"type":314,"value":315,"toc":841},"minimark",[316,325,344,626,640,797,814,819,827,832,837],[317,318,319,320,324],"p",{},"Choose your feature flags. Disable in ",[321,322,323],"code",{},"flags"," any integration you won't use (Stripe, Paddle, websockets, queues, whichever email providers you don't need) — this reduces how many secrets you have to configure.",[317,326,327,328,332,333,336,337,340,341,343],{},"Your identity is ",[329,330,331],"strong",{},"not"," set in this file: the brand name, your production domain and the full sender email are the ",[321,334,335],{},"BRAND_*"," variables in the Branding section of your stage's env file — the single place they live. Fill them in with your credentials in ",[338,339,43],"a",{"href":44},"; ",[338,342,47],{"href":48}," explains each one.",[345,346,352],"pre",{"className":347,"code":348,"filename":349,"language":350,"meta":351,"style":351},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","export const flags: {\n  stripe?: boolean;\n  paddle?: boolean;\n  googleAuth?: boolean;\n  githubAuth?: boolean;\n  resend?: boolean;\n  mailgun?: boolean;\n  ses?: boolean;\n  sparkPost?: boolean;\n  smtp?: boolean;\n  websockets?: boolean;\n  cron?: boolean;\n  jobsQueue?: boolean;\n} = {\n  stripe: true,\n  paddle: true,\n  githubAuth: true,\n  googleAuth: true,\n  resend: true,\n  websockets: true,\n  jobsQueue: true,\n};\n","config.ts","typescript","",[321,353,354,379,396,408,420,432,444,456,468,480,492,504,516,528,539,554,565,576,587,598,609,620],{"__ignoreMap":351},[355,356,359,363,367,371,375],"span",{"class":357,"line":358},"line",1,[355,360,362],{"class":361},"sRxSC","export",[355,364,366],{"class":365},"srJo8"," const",[355,368,370],{"class":369},"s91G_"," flags",[355,372,374],{"class":373},"sGXK2",":",[355,376,378],{"class":377},"swvn1"," {\n",[355,380,382,386,389,393],{"class":357,"line":381},2,[355,383,385],{"class":384},"sIDdj","  stripe",[355,387,388],{"class":373},"?:",[355,390,392],{"class":391},"s_MOj"," boolean",[355,394,395],{"class":377},";\n",[355,397,399,402,404,406],{"class":357,"line":398},3,[355,400,401],{"class":384},"  paddle",[355,403,388],{"class":373},[355,405,392],{"class":391},[355,407,395],{"class":377},[355,409,411,414,416,418],{"class":357,"line":410},4,[355,412,413],{"class":384},"  googleAuth",[355,415,388],{"class":373},[355,417,392],{"class":391},[355,419,395],{"class":377},[355,421,423,426,428,430],{"class":357,"line":422},5,[355,424,425],{"class":384},"  githubAuth",[355,427,388],{"class":373},[355,429,392],{"class":391},[355,431,395],{"class":377},[355,433,435,438,440,442],{"class":357,"line":434},6,[355,436,437],{"class":384},"  resend",[355,439,388],{"class":373},[355,441,392],{"class":391},[355,443,395],{"class":377},[355,445,447,450,452,454],{"class":357,"line":446},7,[355,448,449],{"class":384},"  mailgun",[355,451,388],{"class":373},[355,453,392],{"class":391},[355,455,395],{"class":377},[355,457,459,462,464,466],{"class":357,"line":458},8,[355,460,461],{"class":384},"  ses",[355,463,388],{"class":373},[355,465,392],{"class":391},[355,467,395],{"class":377},[355,469,471,474,476,478],{"class":357,"line":470},9,[355,472,473],{"class":384},"  sparkPost",[355,475,388],{"class":373},[355,477,392],{"class":391},[355,479,395],{"class":377},[355,481,483,486,488,490],{"class":357,"line":482},10,[355,484,485],{"class":384},"  smtp",[355,487,388],{"class":373},[355,489,392],{"class":391},[355,491,395],{"class":377},[355,493,495,498,500,502],{"class":357,"line":494},11,[355,496,497],{"class":384},"  websockets",[355,499,388],{"class":373},[355,501,392],{"class":391},[355,503,395],{"class":377},[355,505,507,510,512,514],{"class":357,"line":506},12,[355,508,509],{"class":384},"  cron",[355,511,388],{"class":373},[355,513,392],{"class":391},[355,515,395],{"class":377},[355,517,519,522,524,526],{"class":357,"line":518},13,[355,520,521],{"class":384},"  jobsQueue",[355,523,388],{"class":373},[355,525,392],{"class":391},[355,527,395],{"class":377},[355,529,531,534,537],{"class":357,"line":530},14,[355,532,533],{"class":377},"}",[355,535,536],{"class":373}," =",[355,538,378],{"class":377},[355,540,542,545,547,551],{"class":357,"line":541},15,[355,543,385],{"class":544},"squCx",[355,546,374],{"class":377},[355,548,550],{"class":549},"s8HiA"," true",[355,552,553],{"class":377},",\n",[355,555,557,559,561,563],{"class":357,"line":556},16,[355,558,401],{"class":544},[355,560,374],{"class":377},[355,562,550],{"class":549},[355,564,553],{"class":377},[355,566,568,570,572,574],{"class":357,"line":567},17,[355,569,425],{"class":544},[355,571,374],{"class":377},[355,573,550],{"class":549},[355,575,553],{"class":377},[355,577,579,581,583,585],{"class":357,"line":578},18,[355,580,413],{"class":544},[355,582,374],{"class":377},[355,584,550],{"class":549},[355,586,553],{"class":377},[355,588,590,592,594,596],{"class":357,"line":589},19,[355,591,437],{"class":544},[355,593,374],{"class":377},[355,595,550],{"class":549},[355,597,553],{"class":377},[355,599,601,603,605,607],{"class":357,"line":600},20,[355,602,497],{"class":544},[355,604,374],{"class":377},[355,606,550],{"class":549},[355,608,553],{"class":377},[355,610,612,614,616,618],{"class":357,"line":611},21,[355,613,521],{"class":544},[355,615,374],{"class":377},[355,617,550],{"class":549},[355,619,553],{"class":377},[355,621,623],{"class":357,"line":622},22,[355,624,625],{"class":377},"};\n",[317,627,628,629,632,633,635,636,639],{},"The same file also declares ",[321,630,631],{},"layers"," — separate from ",[321,634,323],{},", and about the Nuxt Layers that get compiled into ",[321,637,638],{},"apps\u002Fapp"," at all, not about which Cloudflare resources get provisioned:",[345,641,643],{"className":347,"code":642,"filename":349,"language":350,"meta":351,"style":351},"export const layers = {\n  \u002F\u002F Always extended, never toggleable — every tenant needs them.\n  core: [\"teams\", \"billing\", \"notifications\", \"admin\"] as string[],\n\n  \u002F\u002F Toggleable per build\u002Fdeploy. `false` drops the layer's pages, components\n  \u002F\u002F and Nuxt config from the bundle entirely — it does NOT drop its tables\n  \u002F\u002F from the database schema (see Database).\n  features: {\n    kanban: true,\n  } satisfies Record\u003Cstring, boolean>,\n};\n",[321,644,645,658,664,728,733,738,743,748,757,768,793],{"__ignoreMap":351},[355,646,647,649,651,654,656],{"class":357,"line":358},[355,648,362],{"class":361},[355,650,366],{"class":365},[355,652,653],{"class":369}," layers",[355,655,536],{"class":373},[355,657,378],{"class":377},[355,659,660],{"class":357,"line":381},[355,661,663],{"class":662},"ss7Ak","  \u002F\u002F Always extended, never toggleable — every tenant needs them.\n",[355,665,666,669,671,675,679,683,685,688,691,694,696,698,700,703,705,707,709,712,714,717,720,723,726],{"class":357,"line":398},[355,667,668],{"class":544},"  core",[355,670,374],{"class":377},[355,672,674],{"class":673},"ss--_"," [",[355,676,678],{"class":677},"siCPE","\"",[355,680,682],{"class":681},"sLACW","teams",[355,684,678],{"class":677},[355,686,687],{"class":377},",",[355,689,690],{"class":677}," \"",[355,692,693],{"class":681},"billing",[355,695,678],{"class":677},[355,697,687],{"class":377},[355,699,690],{"class":677},[355,701,702],{"class":681},"notifications",[355,704,678],{"class":677},[355,706,687],{"class":377},[355,708,690],{"class":677},[355,710,711],{"class":681},"admin",[355,713,678],{"class":677},[355,715,716],{"class":673},"] ",[355,718,719],{"class":361},"as",[355,721,722],{"class":391}," string",[355,724,725],{"class":673},"[]",[355,727,553],{"class":377},[355,729,730],{"class":357,"line":410},[355,731,732],{"emptyLinePlaceholder":22},"\n",[355,734,735],{"class":357,"line":422},[355,736,737],{"class":662},"  \u002F\u002F Toggleable per build\u002Fdeploy. `false` drops the layer's pages, components\n",[355,739,740],{"class":357,"line":434},[355,741,742],{"class":662},"  \u002F\u002F and Nuxt config from the bundle entirely — it does NOT drop its tables\n",[355,744,745],{"class":357,"line":446},[355,746,747],{"class":662},"  \u002F\u002F from the database schema (see Database).\n",[355,749,750,753,755],{"class":357,"line":458},[355,751,752],{"class":544},"  features",[355,754,374],{"class":377},[355,756,378],{"class":377},[355,758,759,762,764,766],{"class":357,"line":470},[355,760,761],{"class":544},"    kanban",[355,763,374],{"class":377},[355,765,550],{"class":549},[355,767,553],{"class":377},[355,769,770,773,776,780,783,786,788,790],{"class":357,"line":482},[355,771,772],{"class":377},"  }",[355,774,775],{"class":361}," satisfies",[355,777,779],{"class":778},"sKvfc"," Record",[355,781,782],{"class":377},"\u003C",[355,784,785],{"class":391},"string",[355,787,687],{"class":377},[355,789,392],{"class":391},[355,791,792],{"class":377},">,\n",[355,794,795],{"class":357,"line":494},[355,796,625],{"class":377},[317,798,799,802,803,805,806,809,810,813],{},[321,800,801],{},"core"," lists the four business-domain layers every deployment ships (multi-tenancy\u002FRBAC, billing, notifications, the platform admin console) — see ",[338,804,59],{"href":60},". ",[321,807,808],{},"features"," is where an optional layer like ",[321,811,812],{},"kanban"," gets turned off for a build that doesn't need it.",[317,815,816],{},[329,817,818],{},"Prompt for AI agents:",[345,820,825],{"className":821,"code":823,"language":824,"meta":351},[822],"language-text","Open config.ts. Ask the user which integrations they want before\nediting the flags object — do not guess or invent any of these values.\nThe domain, sender email and brand name are not in this file: they are\nthe BRAND_* variables the user fills in their own env file — never\nedit or fill those in yourself. Only touch layers.features if the user explicitly asks to\ndisable an optional layer (e.g. kanban) — never touch layers.core.\n","text",[321,826,823],{"__ignoreMap":351},[828,829,831],"h2",{"id":830},"next","Next",[317,833,834,836],{},[338,835,43],{"href":44}," — load your credentials into SST's vault.",[838,839,840],"style",{},"html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sIDdj, html code.shiki .sIDdj{--shiki-light:#E53935;--shiki-default:#E36209;--shiki-dark:#FFAB70;--shiki-sepia:#F8F8F2}html pre.shiki code .s_MOj, html code.shiki .s_MOj{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .squCx, html code.shiki .squCx{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .s8HiA, html code.shiki .s8HiA{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sKvfc, html code.shiki .sKvfc{--shiki-light:#E2931D;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}",{"title":351,"searchDepth":381,"depth":381,"links":842},[843],{"id":830,"depth":381,"text":831},"Choose your feature flags in config.ts.","md",{},{"title":39},{"title":39,"description":844},"Wi0axL-StX4xVC_UNX02Vb0pqKT_czL7ezMV3t6h14s",1790707485287]