[{"data":1,"prerenderedAt":830},["ShallowReactive",2],{"navigation:en":3,"\u002Fblog\u002Fcomo-construir-saas-escalable-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-escalable-nuxt-4-cloudflare.md","Cómo Construir un SaaS Escalable con Nuxt 4 y Cloudflare Workers: La Guía Definitiva","Equipo 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",{},"Lanzar un producto SaaS en 2026 exige mucho más que crear una interfaz bonita. Los usuarios esperan respuestas instantáneas en cualquier lugar del mundo, los inversores exigen costos operativos predecibles y los desarrolladores no quieren perder fines de semana administrando pods de Kubernetes ni pagando facturas astronómicas por servidores dedicados ociosos.",[138,142,143,144,148,149,152,153,156,157,160],{},"En esta guía completa exploramos la arquitectura de ",[145,146,147],"strong",{},"Nuxfire",": una base de código lista para producción basada en ",[145,150,151],{},"Nuxt 4",", ",[145,154,155],{},"SST v4"," y ",[145,158,159],{},"Cloudflare Workers",".",[162,163],"hr",{},[165,166,168],"h2",{"id":167},"por-qué-la-arquitectura-tradicional-de-saas-quedó-obsoleta","¿Por qué la Arquitectura Tradicional de SaaS Quedó Obsoleta?",[138,170,171],{},"Durante años, el estándar de la industria para las nuevas startups fue alquilar instancias virtuales (AWS EC2, DigitalOcean) o usar proveedores PaaS con precios agresivos por asiento y por consumo.",[138,173,174],{},"Los problemas de este modelo tradicional aparecen rápidamente:",[176,177,178,185,196],"ol",{},[179,180,181,184],"li",{},[145,182,183],{},"Cold Starts Críticos",": Las Lambdas tradicionales tardan de 800 ms a 2 s en calentar las conexiones con bases de datos y módulos pesados.",[179,186,187,190,191,195],{},[145,188,189],{},"Latencia Regional",": Los usuarios de América Latina o Europa sufren con rutas que tienen que llegar a servidores en Estados Unidos (",[192,193,194],"code",{},"us-east-1",").",[179,197,198,201],{},[145,199,200],{},"Escalado Complejo",": Configurar el autoscaling de contenedores requiere monitorear métricas, límites de memoria y costos que crecen mucho antes que tus ingresos.",[203,204,206],"h3",{"id":205},"la-alternativa-edge-computing-global","La Alternativa: Edge Computing Global",[138,208,209,210,212],{},"Con ",[145,211,159],{},", tu código JavaScript\u002FTypeScript se ejecuta directamente en la red V8 distribuida en más de 300 ciudades alrededor del mundo:",[214,215,216,222,227],"ul",{},[179,217,218,221],{},[145,219,220],{},"Tiempo de arranque de 0 ms"," (cero cold starts).",[179,223,224,160],{},[145,225,226],{},"Ejecución a milisegundos del usuario final",[179,228,229,232],{},[145,230,231],{},"Costo operativo hasta un 80 % menor"," que el de los 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 Ejemplo de endpoint serverless de alto rendimiento en Nuxt 4\nexport default defineEventHandler(async (event) => {\n  const { user } = await requireUserSession(event);\n  \n  \u002F\u002F Se ejecuta en el edge más cercano al usuario, con conexión en pool mediante 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 Ejemplo de endpoint serverless de alto rendimiento en 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 Se ejecuta en el edge más cercano al usuario, con conexión en pool mediante 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},"el-monorepo-bun-la-estructura-profesional-de-un-saas-enterprise","El Monorepo Bun: la Estructura Profesional de un SaaS Enterprise",[138,498,499,500,502,503,385],{},"Muchos boilerplates empaquetan el código como un bloque monolítico y desordenado. En ",[145,501,147],{}," adoptamos un monorepo orquestado con ",[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",": El dashboard principal del SaaS, con layouts de equipo, tRPC de extremo a extremo y ajustes de cuenta.",[179,517,518,523],{},[145,519,520],{},[192,521,522],{},"apps\u002Fweb",": El portal público de marketing con documentación completa, una landing page de alta conversión y un blog.",[179,525,526,531],{},[145,527,528],{},[192,529,530],{},"apps\u002Flogin",": Interfaz estática y ultraseguro para OpenAuth.js, con soporte de magic links e inicios de sesión sociales (Google, GitHub).",[179,533,534,539],{},[145,535,536],{},[192,537,538],{},"apps\u002Ffunctions",": Workers auxiliares de Cloudflare para colas asíncronas, CRON periódico de facturación y WebSockets.",[179,541,542,547],{},[145,543,544],{},[192,545,546],{},"layers\u002F*",": Módulos de dominio desacoplados (Admin, Billing, Teams, Notifications).",[179,549,550,555,556,160],{},[145,551,552],{},[192,553,554],{},"infra\u002F*.ts",": Toda la infraestructura declarada como código TypeScript con ",[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","# Inicio ultrarrápido en el monorepo Bun\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},"# Inicio ultrarrápido en el monorepo Bun\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-al-edge-con-cloudflare-hyperdrive","Conectando PostgreSQL al Edge con Cloudflare Hyperdrive",[138,596,597,598,601],{},"El mayor mito sobre las bases de datos relacionales y los Workers era que las conexiones directas agotaban el pool de PostgreSQL. Con ",[145,599,600],{},"Cloudflare Hyperdrive",", tus instancias de Postgres se conectan al edge con:",[214,603,604,607,610],{},[179,605,606],{},"Pooling inteligente de conexiones TCP reutilizadas.",[179,608,609],{},"Caché de consultas de lectura cerca del usuario.",[179,611,612,613,160],{},"Compatibilidad total con consultas 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},"empieza-con-nuxfire-ahorra-meses-de-desarrollo","Empieza con Nuxfire: Ahorra Meses de Desarrollo",[138,764,765,766,768],{},"En lugar de gastar de 3 a 6 meses configurando desde cero la autenticación, los WebSockets, las colas en segundo plano, la facturación con Stripe y los permisos multi-tenant, ",[145,767,147],{}," entrega todo ese código listo, probado y con tipado estricto de extremo a extremo.",[214,770,771,777,783],{},[179,772,773,776],{},[145,774,775],{},"Acceso Completo al Código Fuente",": Sin paquetes privados cerrados ni mensualidades por desarrollador.",[179,778,779,782],{},[145,780,781],{},"Entrega Inmediata",": Obtén acceso inmediato al repositorio y al Grupo VIP oficial justo después de la confirmación.",[179,784,785,788],{},[145,786,787],{},"Licencia Perpetua",": Crea proyectos comerciales ilimitados.",[138,790,791],{},[792,793,795],"a",{"href":794},"\u002Fes#pricing",[145,796,797],{},"Asegura el Acceso Inmediato al Código Fuente al Precio 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},"Arquitectura Edge","2026-09-15","Aprende a estructurar un SaaS moderno en 2026 con Nuxt 4, SST v4 y Cloudflare Workers. Cold starts cero, latencia global inferior a 50 ms y un enorme ahorro de infraestructura.","md","\u002Fimages\u002Fblog\u002Fnuxt4-cloudflare-saas-es.svg","es",{},"\u002Fimages\u002Fblog\u002Fnuxt4-cloudflare-saas-es.png","\u002Fblog\u002Fcomo-construir-saas-escalable-nuxt-4-cloudflare","7 min",{"title":131,"description":812},"blog\u002Fcomo-construir-saas-escalable-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","VIus77mILU0o6hBZjaayHtRfaOzMLUwkEk1ItSiOK80",1794055329842]