[{"data":1,"prerenderedAt":830},["ShallowReactive",2],{"navigation:en":3,"\u002Fblog\u002Fcomo-construir-saas-escalavel-nuxt-4-cloudflare":129},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11],{"title":5,"path":6,"stem":7,"icon":10},"i-ph-squares-four-duotone",{"title":12,"path":13,"stem":14,"children":15,"icon":18},"Flow Videos","\u002Fdocs\u002Fflow-videos","docs\u002Fflow-videos\u002F0.index",[16,19,36,67,93],{"title":17,"path":13,"stem":14,"icon":18},"Serelius Flow Video","i-ph-video-camera-duotone",{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":35},"Getting Started","i-ph-rocket-launch-duotone","\u002Fdocs\u002Fflow-videos\u002Fgetting-started","docs\u002Fflow-videos\u002F1.getting-started",[25,30],{"title":26,"path":27,"stem":28,"icon":29},"Overview","\u002Fdocs\u002Fflow-videos\u002Fgetting-started\u002Foverview","docs\u002Fflow-videos\u002F1.getting-started\u002F0.overview","i-ph-play-circle-duotone",{"title":31,"path":32,"stem":33,"icon":34},"Global Features","\u002Fdocs\u002Fflow-videos\u002Fgetting-started\u002Fglobal-features","docs\u002Fflow-videos\u002F1.getting-started\u002F1.global-features","i-ph-gear-six-duotone",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Pipeline","i-ph-film-strip-duotone","\u002Fdocs\u002Fflow-videos\u002Fpipeline","docs\u002Fflow-videos\u002F2.pipeline",[42,47,52,57,62],{"title":43,"path":44,"stem":45,"icon":46},"Phase 1 — Script","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fscript","docs\u002Fflow-videos\u002F2.pipeline\u002F1.script","i-ph-scroll-duotone",{"title":48,"path":49,"stem":50,"icon":51},"Phase 2 — Style & Identity","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fstyle-and-identity","docs\u002Fflow-videos\u002F2.pipeline\u002F2.style-and-identity","i-ph-palette-duotone",{"title":53,"path":54,"stem":55,"icon":56},"Phase 3 — Storyboard","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fstoryboard","docs\u002Fflow-videos\u002F2.pipeline\u002F3.storyboard","i-ph-image-duotone",{"title":58,"path":59,"stem":60,"icon":61},"Phase 4 — Videos","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fvideos","docs\u002Fflow-videos\u002F2.pipeline\u002F4.videos","i-ph-video-duotone",{"title":63,"path":64,"stem":65,"icon":66},"Phase 5 — Final Assembly","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Ffinal-assembly","docs\u002Fflow-videos\u002F2.pipeline\u002F5.final-assembly","i-ph-scissors-duotone",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":35},"Settings & Models","i-ph-sliders-duotone","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models","docs\u002Fflow-videos\u002F3.settings-and-models",[73,78,83,88],{"title":74,"path":75,"stem":76,"icon":77},"Settings","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fsettings","docs\u002Fflow-videos\u002F3.settings-and-models\u002F0.settings","i-ph-sliders-horizontal-duotone",{"title":79,"path":80,"stem":81,"icon":82},"AI Models & Limits","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fmodels-and-limits","docs\u002Fflow-videos\u002F3.settings-and-models\u002F1.models-and-limits","i-ph-cpu-duotone",{"title":84,"path":85,"stem":86,"icon":87},"Option Catalogs","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fcatalogs","docs\u002Fflow-videos\u002F3.settings-and-models\u002F2.catalogs","i-ph-list-bullets-duotone",{"title":89,"path":90,"stem":91,"icon":92},"Pipeline Calibration","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fcalibration","docs\u002Fflow-videos\u002F3.settings-and-models\u002F3.calibration","i-ph-gauge-duotone",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":35},"Reference","i-ph-book-open-duotone","\u002Fdocs\u002Fflow-videos\u002Freference","docs\u002Fflow-videos\u002F4.reference",[99,104,109,114,119,124],{"title":100,"path":101,"stem":102,"icon":103},"Delivered Files","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fdelivered-files","docs\u002Fflow-videos\u002F4.reference\u002F0.delivered-files","i-ph-folder-duotone",{"title":105,"path":106,"stem":107,"icon":108},"Supported Video Types","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fvideo-types","docs\u002Fflow-videos\u002F4.reference\u002F1.video-types","i-ph-television-duotone",{"title":110,"path":111,"stem":112,"icon":113},"What the Tool Does NOT Do","\u002Fdocs\u002Fflow-videos\u002Freference\u002Flimitations","docs\u002Fflow-videos\u002F4.reference\u002F2.limitations","i-ph-prohibit-duotone",{"title":115,"path":116,"stem":117,"icon":118},"Business Models","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fbusiness-models","docs\u002Fflow-videos\u002F4.reference\u002F3.business-models","i-ph-briefcase-duotone",{"title":120,"path":121,"stem":122,"icon":123},"FAQ & Glossary","\u002Fdocs\u002Fflow-videos\u002Freference\u002Ffaq-and-glossary","docs\u002Fflow-videos\u002F4.reference\u002F4.faq-and-glossary","i-ph-question-duotone",{"title":125,"path":126,"stem":127,"icon":128},"Technical and Architectural Audit","\u002Fdocs\u002Fflow-videos\u002Freference\u002Faudit","docs\u002Fflow-videos\u002F4.reference\u002F5.audit","i-ph-shield-check-duotone",{"id":130,"title":131,"author":132,"authorType":133,"body":134,"category":810,"date":811,"description":812,"extension":813,"image":814,"lang":815,"meta":816,"navigation":426,"ogImage":817,"path":818,"readTime":819,"seo":820,"stem":821,"tags":822,"translations":825,"updated":133,"__hash__":829},"blog\u002Fblog\u002Fcomo-construir-saas-escalavel-nuxt-4-cloudflare.md","Como Construir um SaaS Escalável com Nuxt 4 e Cloudflare Workers: O Guia Definitivo","Equipe Nuxfire",null,{"type":135,"value":136,"toc":802},"minimark",[137,141,161,164,169,172,175,202,207,213,233,491,493,497,506,558,589,591,595,602,616,757,759,763,769,789,798],[138,139,140],"p",{},"Lançar um produto SaaS em 2026 exige muito mais do que apenas criar uma interface bonita. Usuários esperam respostas instantâneas em qualquer lugar do mundo, investidores exigem custos operacionais previsíveis e desenvolvedores não querem perder fins de semana gerenciando pods do Kubernetes ou pagando contas astronômicas de servidores dedicados ociosos.",[138,142,143,144,148,149,152,153,156,157,160],{},"Neste guia completo, exploramos a arquitetura do ",[145,146,147],"strong",{},"Nuxfire",": uma base de código pronta para produção baseada em ",[145,150,151],{},"Nuxt 4",", ",[145,154,155],{},"SST v4"," e ",[145,158,159],{},"Cloudflare Workers",".",[162,163],"hr",{},[165,166,168],"h2",{"id":167},"por-que-a-arquitetura-tradicional-de-saas-ficou-obsoleta","Por que a Arquitetura Tradicional de SaaS Ficou Obsoleta?",[138,170,171],{},"Durante anos, o padrão da indústria para novas startups foi alugar instâncias virtuais (AWS EC2, DigitalOcean) ou usar provedores PaaS com precificação agressiva por assento e consumo.",[138,173,174],{},"Os problemas desse modelo tradicional aparecem rapidamente:",[176,177,178,185,196],"ol",{},[179,180,181,184],"li",{},[145,182,183],{},"Cold Starts Críticos",": Lambdas tradicionais demoram de 800ms a 2s para aquecer conexões com bancos e módulos pesados.",[179,186,187,190,191,195],{},[145,188,189],{},"Latência Regional",": Usuários na América Latina ou Europa sofrem com rotas que precisam bater em servidores nos Estados Unidos (",[192,193,194],"code",{},"us-east-1",").",[179,197,198,201],{},[145,199,200],{},"Escalonamento Complexo",": Configurar autoscaling de containers requer monitoramento de métricas, limites de memória e custos que escalam muito antes da sua receita.",[203,204,206],"h3",{"id":205},"a-alternativa-edge-computing-global","A Alternativa: Edge Computing Global",[138,208,209,210,212],{},"Com os ",[145,211,159],{},", seu código JavaScript\u002FTypeScript roda diretamente na rede V8 distribuída em mais de 300 cidades ao redor do globo:",[214,215,216,222,227],"ul",{},[179,217,218,221],{},[145,219,220],{},"Tempo de inicialização de 0ms"," (zero cold starts).",[179,223,224,160],{},[145,225,226],{},"Execução a milissegundos do usuário final",[179,228,229,232],{},[145,230,231],{},"Custo operacional até 80% menor"," que servidores dedicados.",[234,235,240],"pre",{"className":236,"code":237,"language":238,"meta":239,"style":239},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u002F\u002F Exemplo de endpoint serverless de alta performance no Nuxt 4\nexport default defineEventHandler(async (event) => {\n  const { user } = await requireUserSession(event);\n  \n  \u002F\u002F Executado na borda mais próxima do usuário com conexão em pool via Hyperdrive\n  const team = await useDatabase().query.teams.findFirst({\n    where: eq(teams.ownerId, user.id)\n  });\n\n  return { team, edgeRegion: event.context.cloudflare?.region ?? \"edge\" };\n});\n","typescript","",[192,241,242,251,291,327,333,339,377,411,421,428,481],{"__ignoreMap":239},[243,244,247],"span",{"class":245,"line":246},"line",1,[243,248,250],{"class":249},"ss7Ak","\u002F\u002F Exemplo de endpoint serverless de alta performance no Nuxt 4\n",[243,252,254,258,261,265,269,273,277,281,284,288],{"class":245,"line":253},2,[243,255,257],{"class":256},"sRxSC","export",[243,259,260],{"class":256}," default",[243,262,264],{"class":263},"sD0ED"," defineEventHandler",[243,266,268],{"class":267},"ss--_","(",[243,270,272],{"class":271},"sTNss","async",[243,274,276],{"class":275},"swvn1"," (",[243,278,280],{"class":279},"sQgqH","event",[243,282,283],{"class":275},")",[243,285,287],{"class":286},"srJo8"," =>",[243,289,290],{"class":275}," {\n",[243,292,294,297,300,304,307,311,314,317,320,322,324],{"class":245,"line":293},3,[243,295,296],{"class":286},"  const",[243,298,299],{"class":275}," {",[243,301,303],{"class":302},"s91G_"," user",[243,305,306],{"class":275}," }",[243,308,310],{"class":309},"sGXK2"," =",[243,312,313],{"class":256}," await",[243,315,316],{"class":263}," requireUserSession",[243,318,268],{"class":319},"squCx",[243,321,280],{"class":267},[243,323,283],{"class":319},[243,325,326],{"class":275},";\n",[243,328,330],{"class":245,"line":329},4,[243,331,332],{"class":319},"  \n",[243,334,336],{"class":245,"line":335},5,[243,337,338],{"class":249},"  \u002F\u002F Executado na borda mais próxima do usuário com conexão em pool via Hyperdrive\n",[243,340,342,344,347,349,351,354,357,359,362,364,367,369,372,374],{"class":245,"line":341},6,[243,343,296],{"class":286},[243,345,346],{"class":302}," team",[243,348,310],{"class":309},[243,350,313],{"class":256},[243,352,353],{"class":263}," useDatabase",[243,355,356],{"class":319},"()",[243,358,160],{"class":275},[243,360,361],{"class":267},"query",[243,363,160],{"class":275},[243,365,366],{"class":267},"teams",[243,368,160],{"class":275},[243,370,371],{"class":263},"findFirst",[243,373,268],{"class":319},[243,375,376],{"class":275},"{\n",[243,378,380,383,386,389,391,393,395,398,401,403,405,408],{"class":245,"line":379},7,[243,381,382],{"class":319},"    where",[243,384,385],{"class":275},":",[243,387,388],{"class":263}," eq",[243,390,268],{"class":319},[243,392,366],{"class":267},[243,394,160],{"class":275},[243,396,397],{"class":267},"ownerId",[243,399,400],{"class":275},",",[243,402,303],{"class":267},[243,404,160],{"class":275},[243,406,407],{"class":267},"id",[243,409,410],{"class":319},")\n",[243,412,414,417,419],{"class":245,"line":413},8,[243,415,416],{"class":275},"  }",[243,418,283],{"class":319},[243,420,326],{"class":275},[243,422,424],{"class":245,"line":423},9,[243,425,427],{"emptyLinePlaceholder":426},true,"\n",[243,429,431,434,436,438,440,443,445,448,450,453,455,458,461,464,467,471,475,478],{"class":245,"line":430},10,[243,432,433],{"class":256},"  return",[243,435,299],{"class":275},[243,437,346],{"class":267},[243,439,400],{"class":275},[243,441,442],{"class":319}," edgeRegion",[243,444,385],{"class":275},[243,446,447],{"class":267}," event",[243,449,160],{"class":275},[243,451,452],{"class":267},"context",[243,454,160],{"class":275},[243,456,457],{"class":267},"cloudflare",[243,459,460],{"class":275},"?.",[243,462,463],{"class":267},"region",[243,465,466],{"class":309}," ??",[243,468,470],{"class":469},"siCPE"," \"",[243,472,474],{"class":473},"sLACW","edge",[243,476,477],{"class":469},"\"",[243,479,480],{"class":275}," };\n",[243,482,484,487,489],{"class":245,"line":483},11,[243,485,486],{"class":275},"}",[243,488,283],{"class":267},[243,490,326],{"class":275},[162,492],{},[165,494,496],{"id":495},"o-monorepo-bun-estrutura-profissional-de-um-saas-enterprise","O Monorepo Bun: Estrutura Profissional de um SaaS Enterprise",[138,498,499,500,502,503,385],{},"Muitos boilerplates empacotam código como um bloco monolítico e desordenado. No ",[145,501,147],{},", adotamos um monorepo orquestrado com ",[145,504,505],{},"Bun Workspaces",[214,507,508,516,524,532,540,548],{},[179,509,510,515],{},[145,511,512],{},[192,513,514],{},"apps\u002Fapp",": O dashboard principal do SaaS, com layouts de equipe, tRPC ponta a ponta e configurações de conta.",[179,517,518,523],{},[145,519,520],{},[192,521,522],{},"apps\u002Fweb",": O portal público de marketing com documentação completa, landing page de alta conversão e blog.",[179,525,526,531],{},[145,527,528],{},[192,529,530],{},"apps\u002Flogin",": Interface estática e ultra-segura para OpenAuth.js, suportando magic links e logins sociais (Google, GitHub).",[179,533,534,539],{},[145,535,536],{},[192,537,538],{},"apps\u002Ffunctions",": Workers auxiliares da Cloudflare para filas assíncronas, CRON periódico de faturamento e WebSockets.",[179,541,542,547],{},[145,543,544],{},[192,545,546],{},"layers\u002F*",": Módulos desacoplados de domínio (Admin, Billing, Teams, Notifications).",[179,549,550,555,556,160],{},[145,551,552],{},[192,553,554],{},"infra\u002F*.ts",": Toda a infraestrutura declarada como código TypeScript usando ",[145,557,155],{},[234,559,563],{"className":560,"code":561,"language":562,"meta":239,"style":239},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","# Inicialização ultra-rápida no Bun Monorepo\nbun install\nbun run dev\n","bash",[192,564,565,570,579],{"__ignoreMap":239},[243,566,567],{"class":245,"line":246},[243,568,569],{"class":249},"# Inicialização ultra-rápida no Bun Monorepo\n",[243,571,572,576],{"class":245,"line":253},[243,573,575],{"class":574},"sR7ES","bun",[243,577,578],{"class":473}," install\n",[243,580,581,583,586],{"class":245,"line":293},[243,582,575],{"class":574},[243,584,585],{"class":473}," run",[243,587,588],{"class":473}," dev\n",[162,590],{},[165,592,594],{"id":593},"conectando-postgresql-à-edge-com-cloudflare-hyperdrive","Conectando PostgreSQL à Edge com Cloudflare Hyperdrive",[138,596,597,598,601],{},"O maior mito sobre bancos de dados relacionais e Workers era que conexões diretas esgotavam o pool do PostgreSQL. Com o ",[145,599,600],{},"Cloudflare Hyperdrive",", suas instâncias Postgres conectam-se à borda com:",[214,603,604,607,610],{},[179,605,606],{},"Pooling inteligente de conexões TCP reutilizadas.",[179,608,609],{},"Cache de consultas de leitura próximo ao usuário.",[179,611,612,613,160],{},"Compatibilidade total com queries tipadas usando ",[145,614,615],{},"Drizzle ORM",[234,617,619],{"className":236,"code":618,"language":238,"meta":239,"style":239},"import { drizzle } from \"drizzle-orm\u002Fpostgres-js\";\nimport postgres from \"postgres\";\n\nexport function createDatabaseClient(connectionString: string) {\n  const sql = postgres(connectionString, { max: 1 });\n  return drizzle(sql, { schema });\n}\n",[192,620,621,645,664,668,693,728,752],{"__ignoreMap":239},[243,622,623,626,628,631,633,636,638,641,643],{"class":245,"line":246},[243,624,625],{"class":256},"import",[243,627,299],{"class":275},[243,629,630],{"class":267}," drizzle",[243,632,306],{"class":275},[243,634,635],{"class":256}," from",[243,637,470],{"class":469},[243,639,640],{"class":473},"drizzle-orm\u002Fpostgres-js",[243,642,477],{"class":469},[243,644,326],{"class":275},[243,646,647,649,652,655,657,660,662],{"class":245,"line":253},[243,648,625],{"class":256},[243,650,651],{"class":267}," postgres ",[243,653,654],{"class":256},"from",[243,656,470],{"class":469},[243,658,659],{"class":473},"postgres",[243,661,477],{"class":469},[243,663,326],{"class":275},[243,665,666],{"class":245,"line":293},[243,667,427],{"emptyLinePlaceholder":426},[243,669,670,672,675,678,680,683,685,689,691],{"class":245,"line":329},[243,671,257],{"class":256},[243,673,674],{"class":286}," function",[243,676,677],{"class":263}," createDatabaseClient",[243,679,268],{"class":275},[243,681,682],{"class":279},"connectionString",[243,684,385],{"class":309},[243,686,688],{"class":687},"s_MOj"," string",[243,690,283],{"class":275},[243,692,290],{"class":275},[243,694,695,697,700,702,705,707,709,711,713,716,718,722,724,726],{"class":245,"line":335},[243,696,296],{"class":286},[243,698,699],{"class":302}," sql",[243,701,310],{"class":309},[243,703,704],{"class":263}," postgres",[243,706,268],{"class":319},[243,708,682],{"class":267},[243,710,400],{"class":275},[243,712,299],{"class":275},[243,714,715],{"class":319}," max",[243,717,385],{"class":275},[243,719,721],{"class":720},"sYThS"," 1",[243,723,306],{"class":275},[243,725,283],{"class":319},[243,727,326],{"class":275},[243,729,730,732,734,736,739,741,743,746,748,750],{"class":245,"line":341},[243,731,433],{"class":256},[243,733,630],{"class":263},[243,735,268],{"class":319},[243,737,738],{"class":267},"sql",[243,740,400],{"class":275},[243,742,299],{"class":275},[243,744,745],{"class":267}," schema",[243,747,306],{"class":275},[243,749,283],{"class":319},[243,751,326],{"class":275},[243,753,754],{"class":245,"line":379},[243,755,756],{"class":275},"}\n",[162,758],{},[165,760,762],{"id":761},"comece-com-o-nuxfire-economize-meses-de-desenvolvimento","Comece com o Nuxfire: Economize Meses de Desenvolvimento",[138,764,765,766,768],{},"Em vez de gastar de 3 a 6 meses configurando autenticação, WebSockets, filas de background, faturamento Stripe e permissões multi-tenant do zero, o ",[145,767,147],{}," entrega todo esse código pronto, testado e com tipagem estrita de ponta a ponta.",[214,770,771,777,783],{},[179,772,773,776],{},[145,774,775],{},"Acesso Completo ao Código-Fonte",": Sem pacotes privados fechados ou mensalidades por desenvolvedor.",[179,778,779,782],{},[145,780,781],{},"Entrega Imediata",": Tenha acesso imediato ao repositório e ao Grupo VIP oficial logo após a confirmação.",[179,784,785,788],{},[145,786,787],{},"Licença Perpétua",": Crie projetos comerciais ilimitados.",[138,790,791],{},[792,793,795],"a",{"href":794},"\u002Fpt-br#pricing",[145,796,797],{},"Garantir Acesso Imediato ao Código-Fonte no Preço Promocional →",[799,800,801],"style",{},"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 .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 .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}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 .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--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 .sQgqH, html code.shiki .sQgqH{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}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 .squCx, html code.shiki .squCx{--shiki-light:#E53935;--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 .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 .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}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 .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}",{"title":239,"searchDepth":253,"depth":253,"links":803},[804,807,808,809],{"id":167,"depth":253,"text":168,"children":805},[806],{"id":205,"depth":293,"text":206},{"id":495,"depth":253,"text":496},{"id":593,"depth":253,"text":594},{"id":761,"depth":253,"text":762},"Arquitetura Edge","2026-09-15","Aprenda a estruturar um SaaS moderno em 2026 com Nuxt 4, SST v4 e Cloudflare Workers. Cold starts zero, latência global sub-50ms e economia massiva de infraestrutura.","md","\u002Fimages\u002Fblog\u002Fnuxt4-cloudflare-saas.svg","pt-br",{},"\u002Fimages\u002Fblog\u002Fnuxt4-cloudflare-saas.png","\u002Fblog\u002Fcomo-construir-saas-escalavel-nuxt-4-cloudflare","7 min",{"title":131,"description":812},"blog\u002Fcomo-construir-saas-escalavel-nuxt-4-cloudflare",[151,159,823,824,155],"SaaS","Serverless",{"en":826,"pt-br":827,"es":828},"build-scalable-saas-nuxt-4-cloudflare","como-construir-saas-escalavel-nuxt-4-cloudflare","como-construir-saas-escalable-nuxt-4-cloudflare","_J1faUFvy4qSb8nP80-QweYUK3Oy0-5U4MYznCU_qrQ",1794055329842]