[{"data":1,"prerenderedAt":1071},["ShallowReactive",2],{"blog-es-is-supabase-down-or-your-app":3,"blog-index-es":717},{"id":4,"title":5,"body":6,"category":671,"cover":672,"coverAlt":673,"description":674,"draft":675,"extension":676,"faq":677,"image":695,"keywords":696,"meta":706,"navigation":707,"ogTitle":26,"path":708,"published":709,"seo":710,"stem":711,"tldr":712,"updated":709,"__hash__":716},"blog_es\u002Fblog\u002Fis-supabase-down-or-your-app.md","¿Supabase está caído o es tu app? Cómo distinguirlo",{"type":7,"value":8,"toc":653},"minimark",[9,13,16,19,22,27,30,59,62,68,71,75,80,91,103,109,112,117,120,123,127,135,139,142,163,169,172,186,189,193,196,211,238,251,372,378,382,385,450,464,468,471,474,477,481,484,487,492,495,521,530,534,537,570,574,579,605,617,621,647],[10,11,12],"p",{},"Tu app se abre y luego no carga nada. La lista que debería mostrar los pedidos\nde tus clientes está vacía, el botón de inicio de sesión se queda girando o la\npágina se queda en blanco. Alguien ya te ha escrito por eso. Así que buscas\n«supabase está caído», porque tu app se hizo con Lovable o Bolt sobre un\nproyecto de Supabase, y Supabase es la única pieza de la maquinaria que conoces\npor su nombre.",[10,14,15],{},"Aquí es donde la respuesta habitual se equivoca. Dice: mira la página de estado\nde Supabase. Es el primer paso correcto, y responde a una pregunta de cuatro. Tu\nproyecto deja de responder a tu app cuando Supabase tiene una caída, y también\ncuando Supabase lo ha pausado, cuando ha llegado a un límite y cuando tu propia\napp está rota mientras Supabase responde bien a cada petición. Tus clientes ven\nla misma pantalla en blanco en los cuatro casos, y la página de estado solo sabe\ndel primero.",[10,17,18],{},"Piénsalo como un apagón en casa. Lo primero que hace cualquiera es asomarse a la\nventana para ver si los vecinos también están a oscuras. Esa es la página de\nestado, y te habla de la calle. No dice nada de la carta en el buzón, del cuadro\neléctrico del pasillo ni de la bombilla.",[10,20,21],{},"Cada página de Supabase, cada incidente y cada cifra de este artículo se leyeron\nel 30 de septiembre de 2026.",[23,24,26],"h2",{"id":25},"supabase-está-caído-o-es-tu-app","¿Supabase está caído o es tu app?",[10,28,29],{},"Desde la pantalla no puedes saberlo, y por eso la búsqueda te deja atascado.\nCuatro fallos distintos producen el mismo resultado:",[31,32,33,41,47,53],"ol",{},[34,35,36,40],"li",{},[37,38,39],"strong",{},"Supabase está caído."," Algo ha fallado del lado de Supabase, normalmente en\nuna región o en un servicio. Se ha ido la luz en toda la calle.",[34,42,43,46],{},[37,44,45],{},"Tu proyecto está pausado."," Supabase detiene los proyectos gratuitos que\nllevan alrededor de una semana sin actividad. Te han cortado el suministro, y\na nadie más de la calle le afecta.",[34,48,49,52],{},[37,50,51],{},"Tu proyecto ha llegado a un límite."," Llenó su espacio y pasó a solo\nlectura, o se quedó sin capacidad y se fue volviendo lento hasta que las\npeticiones se quedaron sin respuesta, o tu organización superó un cupo y\nquedó restringida. Ha saltado un interruptor.",[34,54,55,58],{},[37,56,57],{},"Tu app está rota."," Supabase responde, y algo de tu lado, una clave, las\nreglas de acceso de una tabla o un trozo de código, convierte esa respuesta\nen una pantalla en blanco. La luz llega bien. Es la bombilla.",[10,60,61],{},"Aquí y en adelante, tu proyecto es la base de datos de Supabase donde tu app\nguarda sus datos, junto con el inicio de sesión, el almacenamiento de archivos y\nla API que la rodean.",[63,64],"diagram",{"alt":65,"caption":66,"src":67},"Cuatro recuadros a la izquierda, todos dibujados en ámbar: una nube, un signo de pausa, un interruptor que ha saltado y un editor de código. Sus líneas se juntan y desembocan en una única ventana de navegador en blanco con un círculo de carga dentro.","Cuatro fallos distintos, una sola pantalla. Tus clientes no pueden distinguirlos, y tú tampoco hasta que lo compruebas.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Ffour-causes-one-screen-1600x620.png",[10,69,70],{},"Las comprobaciones de abajo los recorren en orden, de la más barata a la más\ncara, y cada una confirma o descarta un fallo.",[23,72,74],{"id":73},"cuatro-comprobaciones-de-la-más-barata-a-la-más-cara","Cuatro comprobaciones, de la más barata a la más cara",[76,77,79],"h3",{"id":78},"paso-1-supabase-está-caído-para-todos","Paso 1: ¿Supabase está caído para todos?",[10,81,82,83,90],{},"Abre ",[84,85,89],"a",{"href":86,"rel":87},"https:\u002F\u002Fstatus.supabase.com\u002F",[88],"nofollow","status.supabase.com",". Si un incidente\nabierto nombra tu región o un servicio que usa tu app, ya tienes la respuesta, y\nla sección sobre caídas, más abajo, te dice qué hacer con ella.",[10,92,93,94,98,99,102],{},"La página enumera los servicios de Supabase uno a uno: la base de datos y la API\na través de la que tu app la lee, Auth para el inicio de sesión, Storage para\nlos archivos subidos, Realtime, Edge Functions, el panel y unos cuantos más.\nDebajo hay una lista de regiones. Una región es la parte del mundo en la que\nfunciona tu proyecto, y la tuya aparece en la página Infrastructure de los\najustes del proyecto, con un código como ",[95,96,97],"code",{},"eu-west-1",". Un incidente en\n",[95,100,101],{},"us-east-1"," no tiene nada que ver con un proyecto en Irlanda, así que busca tu\ncódigo antes de leer nada más.",[10,104,105,106,108],{},"Lo que la página no tiene es una fila para tu proyecto. Informa de los problemas\nque afectan a suficientes proyectos como para anunciarlos, y los incidentes\nreales suelen ser acotados. Los cincuenta más recientes, que llegan hasta el 15\nde julio de 2026, incluyen uno que tumbó solo los proyectos alojados en un\nconjunto concreto de hardware en ",[95,107,97],{},", otro que dejó sin respuesta, tras\nunas horas funcionando, a los proyectos del tamaño más pequeño, el del plan\ngratuito, y otro sobre errores 401 en una parte de los proyectos nuevos que\nsiguió abierto 46 días.",[10,110,111],{},"Así que una página en verde te dice que Supabase no ha anunciado ningún\nproblema. Tu proyecto puede estar caído por debajo, y de eso tratan las tres\ncomprobaciones siguientes.",[63,113],{"alt":114,"caption":115,"src":116},"Un panel de estado con todas las filas encendidas en verde. Debajo, una fila de proyectos, todos iluminados menos uno, que está a oscuras y rodeado por un círculo.","La página de estado informa sobre Supabase en conjunto. No tiene ninguna fila para tu proyecto.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fgreen-page-dark-project-1600x620.png",[10,118,119],{},"El panel tiene su propia fila y sus propios incidentes. El 1 de septiembre de\n2026 nadie podía iniciar sesión en él, y una app puede seguir funcionando\ndurante algo así.",[10,121,122],{},"Ya que estás en la página, suscríbete a las actualizaciones. Basta con una\ndirección de correo, y Supabase publica además el historial de incidentes como\nfeed RSS.",[76,124,126],{"id":125},"paso-2-tu-proyecto-está-pausado","Paso 2: ¿Tu proyecto está pausado?",[10,128,129,130,134],{},"Abre el panel de Supabase y mira tu lista de proyectos. Un proyecto con Paused\njunto al nombre lo detuvo Supabase, casi siempre un proyecto gratuito que pasó\nalrededor de una semana sin actividad, y seguirá detenido hasta que lo reanudes.\nTodo lo demás sobre la pausa, incluido el plazo de un año y qué hacer cuando la\nopción de reanudar ya no está, lo tienes en ",[84,131,133],{"href":132},"\u002Fblog\u002Fsupabase-project-paused-recover","qué hacer cuando tu proyecto de\nSupabase está pausado",".",[76,136,138],{"id":137},"paso-3-tu-proyecto-ha-llegado-a-un-límite","Paso 3: ¿Tu proyecto ha llegado a un límite?",[10,140,141],{},"Fíjate en lo que todavía funciona. Cada límite rompe algo distinto, y el patrón\nte dice qué interruptor ha saltado.",[10,143,144,147,148,151,152,156,157,162],{},[37,145,146],{},"Las páginas cargan y no se guarda nada."," Eso es el modo de solo lectura. Un\nproyecto gratuito pasa a solo lectura cuando su base de datos supera los 500 MB,\ny uno de pago cuando su disco se llena más deprisa de lo que Supabase tiene\npermitido ampliarlo. La lectura sigue funcionando, así que la app parece estar\nbien hasta que alguien intenta registrarse, hacer un pedido o guardar un\nformulario, y cada escritura vuelve con\n",[95,149,150],{},"cannot execute INSERT in a read-only transaction",". La salida es más espacio,\npasándote a un plan superior o borrando datos. ",[84,153,155],{"href":154},"\u002Fblog\u002Fsupabase-free-plan-limits","Qué apaga cada límite del plan\ngratuito"," cubre las dos vías, y la ",[84,158,161],{"href":159,"rel":160},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fdatabase-size",[88],"guía de\ntamaño de la base de\ndatos"," de Supabase trae\nel SQL.",[10,164,165,168],{},[37,166,167],{},"Todo va más lento y luego deja de responder."," El proyecto se ha quedado sin\nmargen. Su tamaño de cómputo fija cuánta memoria tiene y cuánto puede exigirle a\nsu disco, y los tamaños más pequeños reciben un cupo diario para superar ese\nnivel, que Supabase llama Disk IO Budget. Cuando se agota, la propia lista de\nSupabase de lo que puede pasar incluye tiempos de respuesta que suben de forma\nnotable y una instancia que deja de responder. El cupo se recarga al día\nsiguiente, y la página Database Health, dentro de Observability, te muestra\ndónde estás.",[10,170,171],{},"Puede que recibas un correo diciendo que el proyecto «is running out of Disk IO\nBudget», o que veas en el panel un aviso de que está unhealthy, con el botón\nRestart project debajo. Toma el correo como una pista. Tras un incidente el 10\nde septiembre de 2026, Supabase avisó a los dueños afectados de que el correo\nsobre el Disk IO que habían recibido ya no era válido: lo había provocado el\npropio incidente.",[10,173,174,177,178,181,182,185],{},[37,175,176],{},"Todas las peticiones fallan con un 402."," Tu organización ha quedado\nrestringida por la Fair Use Policy de Supabase, por seguir por encima de un cupo\ntras su periodo de gracia o por una factura sin pagar, y la restricción suele\nalcanzar a todos los proyectos de la organización. El 402 indica el motivo con\nun código como ",[95,179,180],{},"exceed_db_size_quota"," u ",[95,183,184],{},"overdue_payment",", y Supabase dice que\nmientras dure puedes seguir accediendo a tus datos desde el panel. Pasarte a un\nplan superior levanta al momento una restricción por uso; si no, se levanta\ncuando empieza el siguiente ciclo de facturación.",[10,187,188],{},"Eso es el cuadro eléctrico. Las tres cosas ocurren dentro de tu propio proyecto,\nasí que la página de estado no muestra ninguna.",[76,190,192],{"id":191},"paso-4-pregúntale-directamente-a-tu-proyecto","Paso 4: pregúntale directamente a tu proyecto",[10,194,195],{},"Envíale una petición y lee la respuesta. Si Supabase responde con normalidad, el\nfallo está en tu lado de la conexión.",[10,197,198,199,202,203,206,207,210],{},"La versión más rápida no necesita herramientas. La dirección de tu proyecto se\nparece a ",[95,200,201],{},"https:\u002F\u002Fabcdefghijklmnopqrst.supabase.co",", y la ristra de letras antes\nde ",[95,204,205],{},".supabase.co"," aparece en la barra de direcciones de tu navegador siempre que\ntienes el proyecto abierto en el panel. Añade ",[95,208,209],{},"\u002Frest\u002Fv1\u002F"," al final, pégalo en\nuna pestaña nueva y mira qué vuelve.",[212,213,214,220,232],"ul",{},[34,215,216,219],{},[37,217,218],{},"Una línea de texto entre llaves que dice que no se encontró ninguna clave de\nAPI."," Supabase está respondiendo en la dirección de tu proyecto. Te ha\nrechazado porque la pestaña no envió ninguna clave, que es lo correcto. El\nproyecto existe y no está pausado.",[34,221,222,225,226,231],{},[37,223,224],{},"«No se puede acceder a este sitio web» o «servidor no encontrado»."," La\ndirección no se resuelve. La ",[84,227,230],{"href":228,"rel":229},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Fnxdomain-error-connecting-to-a-supabase-project",[88],"página de ayuda de Supabase sobre ese\nerror","\nda los motivos habituales: un proyecto pausado, uno borrado o una dirección\nmal escrita.",[34,233,234,237],{},[37,235,236],{},"Una página de error con un número de los 500, o nada después de una larga\nespera."," La dirección existe y el proyecto que hay detrás está en apuros.\nVuelve al paso 3 y mira otra vez la página de estado.",[10,239,240,241,244,245,250],{},"La versión completa es la pestaña ",[37,242,243],{},"Network"," de tu navegador, que muestra las\nrespuestas que recibe tu app con su propia clave. Abre tu app, pulsa F12, elige\nNetwork, recarga la página y escribe en el cuadro de filtro las letras de la\ndirección de tu proyecto. Cada petición a tu proyecto aparece con un código de\nestado, y el código es casi todo el diagnóstico. Los significados de abajo salen\nde la ",[84,246,249],{"href":247,"rel":248},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Fhttp-status-codes",[88],"lista de códigos de\nestado"," de\nSupabase y de la API de base de datos que funciona allí:",[252,253,254,270],"table",{},[255,256,257],"thead",{},[258,259,260,264,267],"tr",{},[261,262,263],"th",{},"Estado",[261,265,266],{},"Qué significa",[261,268,269],{},"A dónde ir",[271,272,273,287,304,317,330,343,361],"tbody",{},[258,274,275,281,284],{},[276,277,278],"td",{},[95,279,280],{},"200",[276,282,283],{},"Supabase respondió y devolvió algo",[276,285,286],{},"Tu app, más abajo",[258,288,289,298,301],{},[276,290,291,294,295],{},[95,292,293],{},"401"," o ",[95,296,297],{},"403",[276,299,300],{},"Supabase respondió y rechazó la clave, la tabla o la sesión",[276,302,303],{},"La sección siguiente",[258,305,306,311,314],{},[276,307,308],{},[95,309,310],{},"402",[276,312,313],{},"Tu organización está restringida",[276,315,316],{},"Paso 3",[258,318,319,325,328],{},[276,320,321,324],{},[95,322,323],{},"405"," al guardar, mientras las lecturas reciben 200",[276,326,327],{},"La base de datos está en solo lectura",[276,329,316],{},[258,331,332,337,340],{},[276,333,334],{},[95,335,336],{},"540",[276,338,339],{},"El proyecto está pausado",[276,341,342],{},"Paso 2",[258,344,345,355,358],{},[276,346,347,350,351,354],{},[95,348,349],{},"503",", ",[95,352,353],{},"544"," o ninguna respuesta",[276,356,357],{},"El proyecto está en marcha y no da abasto",[276,359,360],{},"Paso 3, y luego un reinicio",[258,362,363,366,369],{},[276,364,365],{},"fallida, con «name not resolved»",[276,367,368],{},"La dirección no existe en este momento",[276,370,371],{},"Paso 2, y luego revisa la dirección",[10,373,374,375,377],{},"La fila que hay que buscar primero es la de ",[95,376,280],{},". Si las peticiones de tu app a\nSupabase vuelven con 200 y la pantalla sigue en blanco, Supabase ha hecho su\nparte, y la bombilla es tuya. Puede que las reglas de una tabla no dejen ver\nninguna fila a este visitante, lo que llega como un 200 con una lista vacía.\nPuede que la app apunte a un proyecto distinto del que estás mirando. O que el\ncódigo que dibuja la página se haya roto con lo que recibió, y eso es una\npregunta para tu builder, con la petición y su respuesta en la mano.",[23,379,381],{"id":380},"por-qué-supabase-me-da-de-repente-errores-401","¿Por qué Supabase me da de repente errores 401?",[10,383,384],{},"Porque Supabase respondió y rechazó a quien preguntaba. Un 401 significa que la\npetición llegó a tu proyecto, así que la plataforma funciona. Lo que se rechazó\nes una de tres cosas, y el mensaje te dice cuál: haz clic en la petición en la\npestaña Network y abre su Response.",[212,386,387,424,438],{},[34,388,389,392,393,396,397,400,401,404,405,408,409,414,415,418,419,423],{},[37,390,391],{},"La clave."," El mensaje dice ",[95,394,395],{},"Invalid API key"," o\n",[95,398,399],{},"Legacy API keys are disabled",". Tu app envía una clave que el proyecto ya no\nacepta. La clave ",[95,402,403],{},"anon"," antigua, una cadena larga que empieza por ",[95,406,407],{},"eyJ",", deja\nde funcionar cuando alguien desactiva las claves heredadas en los ajustes del\nproyecto, y Supabase ha advertido que un proyecto pausado que se restaura\ndesde el 1 de noviembre de 2025 vuelve sin ella. ",[84,410,413],{"href":411,"rel":412},"https:\u002F\u002Fgithub.com\u002Forgs\u002Fsupabase\u002Fdiscussions\u002F29260",[88],"En palabras de la propia\nSupabase",", los proyectos\npausados que se restauran corren el riesgo de romperse porque no tendrán las\nclaves heredadas. La solución es poner la clave publicable actual del\nproyecto, la que empieza por ",[95,416,417],{},"sb_publishable_",", en los ajustes de entorno de\ntu builder. ",[84,420,422],{"href":421},"\u002Fblog\u002Fsupabase-new-api-keys","Los dos formatos de clave"," se\ncomparan uno junto al otro.",[34,425,426,392,429,432,433,437],{},[37,427,428],{},"La tabla.",[95,430,431],{},"permission denied for table",". La clave está\nbien, y esa tabla no se ha abierto a este tipo de visitante. Desde el 30 de\noctubre de 2026 una tabla nueva de Supabase empieza así, y ",[84,434,436],{"href":435},"\u002Fblog\u002Fsupabase-permission-denied-for-table","la forma segura de\nabrirla"," tiene su propio artículo.",[34,439,440,443,444,449],{},[37,441,442],{},"La sesión."," Las páginas sin iniciar sesión funcionan, las personas que han\niniciado sesión reciben errores 401 que van y vienen, y el mensaje suele\nmencionar un JWT, el token firmado que tu app guarda por cada persona con la\nsesión iniciada. Del 14 de agosto al 29 de septiembre de 2026, la página de\nestado de Supabase mantuvo un incidente titulado ",[84,445,448],{"href":446,"rel":447},"https:\u002F\u002Fstatus.supabase.com\u002Fincidents\u002F6q5902p2xd9f",[88],"«401 errors due to JWT\nrejections»",": una parte de\nlos proyectos nuevos rechazaba sesiones que acababan de renovarse. La solución\nde Supabase, publicada el 29 de septiembre, es una versión nueva del proyecto\nque instalas tú, con el botón Upgrade project de la página General de los\najustes del proyecto.",[10,451,452,453,458,459,463],{},"Esa actualización deja el proyecto fuera de servicio mientras dura, y el panel\nte muestra una estimación de cuánto antes de que confirmes. La ",[84,454,457],{"href":455,"rel":456},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fupgrading",[88],"guía de\nactualización"," de Supabase\nrecomienda hacer antes una copia de tus datos. En el plan gratuito nadie más la\nestá haciendo, y ",[84,460,462],{"href":461},"\u002Fblog\u002Fback-up-supabase-free-tier","hacer una desde el panel"," no\nrequiere terminal.",[23,465,467],{"id":466},"cómo-reinicio-un-proyecto-de-supabase","¿Cómo reinicio un proyecto de Supabase?",[10,469,470],{},"Desde el panel: abre el proyecto, ve a Project Settings, luego a General, y\npulsa Restart project en Project availability. La flecha junto al botón ofrece\nFast database reboot, que reinicia solo la base de datos y acorta el tiempo sin\nservicio. En ambos casos, Supabase avisa de unos minutos sin servicio.",[10,472,473],{},"Un reinicio es la herramienta adecuada para un proyecto sobrecargado o marcado\ncomo unhealthy, y es lo que Supabase pidió a los dueños afectados tras el\nincidente del 10 de septiembre. Si el proyecto se queda pequeño para su trabajo,\nel problema vuelve, y la solución duradera es un tamaño de cómputo mayor o\nconsultas más ligeras. Un proyecto pausado necesita Resume project, que está en\nel mismo sitio. Una base de datos llena sigue llena después de un reinicio, y\nuna clave rechazada sigue rechazada.",[10,475,476],{},"No toques el botón mientras haya un incidente que mencione acciones sobre\nproyectos. El 4 de septiembre de 2026, los reinicios, las restauraciones y los\ncambios de tamaño de cómputo daban errores en todas las regiones, Supabase pidió\nque no se intentaran y durante un tiempo los desactivó por completo.",[23,478,480],{"id":479},"qué-puedes-hacer-durante-una-caída-de-supabase","¿Qué puedes hacer durante una caída de Supabase?",[10,482,483],{},"Muy poco, y esperar es lo correcto. La caída le toca arreglarla a Supabase, y tu\nproyecto vuelve sin que lo toques.",[10,485,486],{},"Eso hace de la caída el único fallo de este artículo que se arregla esperando, y\nes la razón de que el paso 2 vaya antes que cualquier cosa que hagas aquí. Un\napagón se espera. Un corte del suministro sigue ahí hasta que llamas a la\ncompañía, y un proyecto pausado sigue parado hasta que lo reanudas, con un año\nen el reloj desde el día en que se detuvo.",[63,488],{"alt":489,"caption":490,"src":491},"Dos líneas de tiempo. En la de arriba, una línea cae y vuelve a subir sola. En la de abajo, la línea cae y se queda abajo. Un botón de encendido sobre ella abre un camino discontinuo de vuelta hacia arriba, y la línea de abajo sigue hasta una marca tachada.","Una caída se recupera sola. Un proyecto pausado vuelve cuando lo reanudas, y solo dentro del año.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fwait-or-act-1600x560.png",[10,493,494],{},"Lo que sí merece la pena mientras esperas:",[212,496,497,503,509,515],{},[34,498,499,502],{},[37,500,501],{},"Confirma que te afecta."," Comprueba que el incidente nombra tu región o un\nservicio que usa tu app.",[34,504,505,508],{},[37,506,507],{},"Suscríbete a ese incidente",", para que te llegue la actualización que\nanuncia su final.",[34,510,511,514],{},[37,512,513],{},"Avisa a tus usuarios."," Una línea allí donde te busquen, diciendo que la app\nestá afectada por una caída de su proveedor de base de datos y que volverá.",[34,516,517,520],{},[37,518,519],{},"Deja el proyecto en paz."," Durante el incidente del 4 de septiembre,\nSupabase desaconsejó crear proyectos, cambiar configuraciones, reiniciar o\ncambiar el tamaño de cómputo hasta que se resolviera. Los proyectos en marcha\nsiguieron funcionando mientras esas acciones fallaban.",[10,522,523,524,529],{},"Además, no hay nada que reclamar por el tiempo sin servicio salvo que estés en\nEnterprise. El ",[84,525,528],{"href":526,"rel":527},"https:\u002F\u002Fsupabase.com\u002Fsla",[88],"compromiso de disponibilidad"," de\nSupabase, con créditos de servicio para un mes por debajo del 99,9 %, está\npensado solo para clientes Enterprise.",[23,531,533],{"id":532},"qué-tener-preparado-antes-de-la-próxima","Qué tener preparado antes de la próxima",[10,535,536],{},"Cuatro cosas, todas más fáciles un día en que no pasa nada:",[212,538,539,545,558,564],{},[34,540,541,544],{},[37,542,543],{},"Tu región, apuntada"," junto a la dirección de tu proyecto, y una suscripción\na la página de estado.",[34,546,547,550,551,553,554,557],{},[37,548,549],{},"Tu app con la clave publicable."," Supabase retira las claves antiguas ",[95,552,403],{},"\ny ",[95,555,556],{},"service_role"," antes de que acabe 2026, y una app que todavía envíe una\nempezará a acumular errores 401 cuando desaparezcan.",[34,559,560,563],{},[37,561,562],{},"Una copia de tu base de datos fuera de tu cuenta de Supabase."," Una caída,\nuna pausa y una restricción ocurren todas dentro de Supabase, y una copia\nguardada en otro sitio queda fuera de su alcance. En el plan gratuito,\nSupabase no guarda ninguna copia por ti.",[34,565,566,569],{},[37,567,568],{},"Algo que note cuando tu app deja de responder"," y te avise antes de que\ntenga que hacerlo un cliente.",[23,571,573],{"id":572},"dónde-encaja-reeve","Dónde encaja Reeve",[10,575,576],{},[37,577,578],{},"Reeve Monitor vigila la dirección que cargan tus visitantes. Reeve Care,\nademás, se conecta a la base de datos de Supabase que hay detrás y guarda una\ncopia de ella fuera de tu cuenta de Supabase.",[212,580,581,587,593,599],{},[34,582,583,586],{},[37,584,585],{},"Monitor comprueba la dirección de tu app cada 60 segundos"," desde fuera, y\nte envía un correo cuando deja de responder y otro cuando vuelve. Además,\nrepite cada hora nuestras nueve comprobaciones de seguridad, en hasta tres\napps.",[34,588,589,592],{},[37,590,591],{},"Care se conecta él mismo a tu base de datos de Supabase"," para hacer una\ncopia, a diario en Care y más a menudo en los planes superiores. Una noche en\nla que la base de datos no responde es una copia que no se pudo hacer, y\nrecibes un correo que cuenta qué pasó.",[34,594,595,598],{},[37,596,597],{},"La copia vive fuera de tu cuenta de Supabase",", cifrada, y se vuelve a leer\nantes de contar como válida, así que una pausa o una restricción dejan tu\núltima copia buena donde puedes llegar a ella.",[34,600,601,604],{},[37,602,603],{},"Restaurar es un botón",", y antes se toma una instantánea del estado actual,\nasí que la restauración tiene su propio deshacer.",[10,606,607,608,612,613,134],{},"Lo que cubre cada plan está en la ",[84,609,611],{"href":610},"\u002Fpricing","página de precios",", y la copia, la\ncomprobación y la restauración aparecen dibujadas paso a paso en la ",[84,614,616],{"href":615},"\u002Fsupabase-backups","página de\nbackups de Supabase",[23,618,620],{"id":619},"qué-hacer-ahora","Qué hacer ahora",[622,623,624],"key-takeaways",{},[212,625,626,629,632,635,638,641],{},[34,627,628],{},"Busca la región de tu proyecto en la página Infrastructure de sus ajustes y suscríbete a la página de estado de Supabase.",[34,630,631],{},"Cuando tu app se quede en blanco, comprueba en este orden: la página de estado, si tu lista de proyectos dice Paused, si las páginas cargan mientras guardar falla, y los códigos de estado en la pestaña Network de tu navegador.",[34,633,634],{},"Si el proyecto está pausado, reanúdalo hoy. Esperar solo gasta el año que tienes.",[34,636,637],{},"Si las peticiones vuelven con 401, lee el mensaje antes de cambiar nada. Una clave, una tabla y una sesión tienen cada una su propia solución.",[34,639,640],{},"Durante una caída de verdad, deja el proyecto en paz: nada de reinicios, restauraciones ni actualizaciones hasta que el incidente se resuelva.",[34,642,643,644,646],{},"Pasa tu app a la clave ",[95,645,417],{}," y guarda una copia de tu base de datos fuera de Supabase, mientras nada esté roto.",[10,648,649,650,134],{},"Antes de cerrar esta pestaña, abre los ajustes Infrastructure de tu proyecto,\napunta el código de su región junto a su dirección y suscríbete a la página de\nestado. Si la pantalla en blanco de hoy ha resultado ser una pausa, ",[84,651,652],{"href":132},"aquí tienes\nqué hacer a continuación",{"title":654,"searchDepth":655,"depth":655,"links":656},"",3,[657,659,665,666,667,668,669,670],{"id":25,"depth":658,"text":26},2,{"id":73,"depth":658,"text":74,"children":660},[661,662,663,664],{"id":78,"depth":655,"text":79},{"id":125,"depth":655,"text":126},{"id":137,"depth":655,"text":138},{"id":191,"depth":655,"text":192},{"id":380,"depth":658,"text":381},{"id":466,"depth":658,"text":467},{"id":479,"depth":658,"text":480},{"id":532,"depth":658,"text":533},{"id":572,"depth":658,"text":573},{"id":619,"depth":658,"text":620},"Fundamentos de seguridad","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcover-1200x630.png","Una calle de noche con edificios iluminados y, delante, un edificio con todas las ventanas a oscuras.","¿Supabase está caído o es tu app? Un proyecto pausado, una base de datos llena y un fallo tuyo parecen lo mismo. Cuatro comprobaciones los separan.",false,"md",[678,681,684,687,689,692],{"q":679,"a":680},"¿Supabase está caído ahora mismo?","Mira status.supabase.com, que es donde Supabase publica sus propios incidentes, servicio por servicio y región por región. Busca primero la región de tu proyecto: aparece en la página Infrastructure de los ajustes del proyecto, con un código como eu-west-1. Si nada en la página de estado nombra esa región o un servicio que use tu app, Supabase no ha anunciado ningún problema, y el siguiente sitio donde mirar es tu propio proyecto.",{"q":682,"a":683},"Mi app no funciona pero la página de estado de Supabase está en verde. ¿Y ahora qué?","Mira tu propio proyecto. Comprueba en la lista de proyectos del panel de Supabase si pone Paused, y después si el proyecto aparece como unhealthy, en solo lectura o restringido. Si todo eso parece normal, abre tu app, pulsa F12, elige la pestaña Network y recarga. Una petición a tu proyecto que vuelve con 200 significa que Supabase respondió, y el fallo está de tu lado.",{"q":685,"a":686},"¿Un proyecto de Supabase pausado es lo mismo que una caída?","No, y piden respuestas opuestas. Una caída es cosa de Supabase y termina cuando la arreglan, así que esperar es lo correcto. Una pausa es Supabase deteniendo tu proyecto, casi siempre uno gratuito que pasó una semana sin actividad, y nada cambia hasta que lo reanudas desde el panel. Tienes un año para hacerlo. Después, el panel te ofrece una descarga en su lugar, y volver a estar en línea exige un proyecto nuevo con una dirección nueva.",{"q":381,"a":688},"Un 401 significa que Supabase respondió y rechazó a quien preguntaba. Puede que tu app envíe una clave que el proyecto ya no acepta, algo que pasa cuando se desactiva la clave anon antigua o cuando un proyecto pausado se restaura sin ella. Una tabla puede negarse con permission denied. O pueden rechazarse las sesiones: del 14 de agosto al 29 de septiembre de 2026 le pasó justo eso a una parte de los proyectos nuevos, y la solución es Upgrade project en la página General.",{"q":690,"a":691},"¿Cómo reinicio mi proyecto de Supabase?","Abre el proyecto en el panel de Supabase y ve a Project Settings y luego a General. En Project availability, Restart project lo reinicia todo, y la flecha de al lado ofrece Fast database reboot, que reinicia solo la base de datos con menos tiempo fuera de servicio. Cuenta con unos minutos sin servicio en ambos casos. Un reinicio ayuda a un proyecto sobrecargado o marcado como unhealthy. Un proyecto pausado necesita Resume, en la misma página, y una base de datos llena necesita espacio.",{"q":693,"a":694},"¿Puedo hacer algo durante una caída de Supabase?","Muy poco, y esperar es lo correcto. Comprueba que el incidente nombra tu región, suscríbete a sus actualizaciones y cuéntales a tus usuarios qué están viendo. Deja los reinicios, las restauraciones, las actualizaciones y los cambios de tamaño de cómputo hasta que se resuelva: en un incidente de toda la plataforma el 4 de septiembre de 2026, Supabase desaconsejó justamente eso. La garantía de disponibilidad con créditos de servicio solo cubre a los clientes Enterprise.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",[697,698,699,700,701,702,703,704,705],"supabase caído","supabase está caído","supabase no funciona","estado de supabase","supabase status","caída de supabase","supabase error 401","reiniciar proyecto supabase","mi app no conecta con supabase",{},true,"\u002Fblog\u002Fis-supabase-down-or-your-app","2026-10-01",{"title":5,"description":674},"blog\u002Fis-supabase-down-or-your-app",[713,714,715],"¿Supabase está caído? Puede ser. Un proyecto pausado, un proyecto que ha llegado a un límite y un fallo en tu propia app producen la misma pantalla en blanco.","La página de estado de Supabase responde solo a la primera pregunta. Tu lista de proyectos y las páginas de tu propio proyecto responden a las dos siguientes, y los códigos de estado de tu navegador resuelven la última.","Una caída termina sin ti. Un proyecto pausado sigue parado hasta que lo reanudas, y pasado un año esa opción desaparece.","sL4WfxhDzok-RgJehBUu0H-CaylStFczkH_4HRsJ8pU",[718,724,730,736,742,748,754,760,766,772,778,779,785,790,797,803,809,813,819,825,831,837,843,849,855,861,867,873,879,885,891,896,902,908,914,920,926,932,938,944,950,956,962,968,973,979,985,991,997,1003,1009,1015,1021,1027,1033,1038,1043,1049,1055,1060,1066],{"path":719,"title":720,"description":721,"published":722,"category":671,"image":723,"draft":675},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" al subir","\"New row violates row-level security policy for table objects\" significa que tu subida no tiene regla insert. Hacer público el bucket no añade ninguna.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":725,"title":726,"description":727,"published":728,"category":671,"image":729,"draft":675},"\u002Fblog\u002Fbase44-security-scan","Escaneo de seguridad de Base44: lo que solo él ve","El escaneo de seguridad de Base44 revisa siete tipos de problema desde dentro. Esta es la mitad que lee y nadie más puede leer, y la mitad que nunca mira.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":731,"title":732,"description":733,"published":734,"category":671,"image":735,"draft":675},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Tu clave API se filtró. El orden en el que hay que actuar","Una clave API se filtró y no sabes por dónde empezar. No todas las claves de tu frontend lo son, y el orden importa más que la velocidad.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":737,"title":738,"description":739,"published":740,"category":671,"image":741,"draft":675},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" sin desactivar RLS","\"Infinite recursion detected in policy for relation\" significa que tu policy preguntó a la tabla que protege. Así se rompe el círculo.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":743,"title":744,"description":745,"published":746,"category":671,"image":747,"draft":675},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" en Supabase, y el arreglo equivocado","\"No API key found in request\" significa que tu petición llegó a Supabase sin clave. Casi todas las respuestas apuntan a las reglas de tu base de datos.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":749,"title":750,"description":751,"published":752,"category":671,"image":753,"draft":675},"\u002Fblog\u002Fis-base44-safe","¿Es seguro Base44? Lo que vimos en 5.442 apps Base44","¿Es seguro Base44? Pasamos nueve comprobaciones a 5.442 apps Base44 en producción. Casi todas sacaron B por motivos que su dueño nunca eligió.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":755,"title":756,"description":757,"published":758,"category":671,"image":759,"draft":675},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Ocultar una clave API: muévela a una Edge Function de Supabase","Ocultar una clave API significa sacarla del navegador, y una Edge Function de Supabase es el sitio más pequeño donde ponerla. Dos pasos importan más.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":761,"title":762,"description":763,"published":764,"category":671,"image":765,"draft":675},"\u002Fblog\u002Fenv-file-exposed-on-your-server","¿Tu archivo .env está expuesto? Las doce rutas a revisar","¿Tu archivo .env está expuesto en tu propio servidor web? Doce direcciones te lo dicen, y un acierto significa que todo lo que contiene ya es público.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":767,"title":768,"description":769,"published":770,"category":671,"image":771,"draft":675},"\u002Fblog\u002Fis-v0-safe","Seguridad de v0: las 1.790 aplicaciones escaneadas sacaron una A","Seguridad de v0, medida en 1.790 aplicaciones v0 en vivo: todas sacaron A. Solo 17 nombraban una base de datos, y eso es casi todo lo que mide la A.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":773,"title":774,"description":775,"published":776,"category":671,"image":777,"draft":675},"\u002Fblog\u002Fis-bolt-safe","¿Es seguro Bolt? Lo que vimos en 1.123 aplicaciones Bolt","¿Es seguro Bolt? Pasamos 1.123 aplicaciones Bolt en vivo por nueve comprobaciones. El hosting salió limpio. Los hallazgos eran claves y tablas abiertas dentro.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":708,"title":5,"description":674,"published":709,"category":671,"image":695,"draft":675},{"path":780,"title":781,"description":782,"published":783,"category":671,"image":784,"draft":675},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","¿Supabase cifra mis datos? Sí. Esto es lo que detiene","¿Supabase cifra los datos? Sí: AES-256 en reposo, TLS en tránsito, SOC 2 e ISO 27001. Qué cubre cada uno, y la fuga que ninguno de ellos detiene.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":154,"title":786,"description":787,"published":788,"category":671,"image":789,"draft":675},"¿Cuánto cuesta Supabase? Los límites del plan gratuito","Los límites del plan gratuito de Supabase: 500 MB de base de datos, 5 GB de egress y ningún backup. Qué pasa en cada uno y qué cambia Pro por $25.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":791,"title":792,"description":793,"published":794,"category":795,"image":796,"draft":675},"\u002Fblog\u002Ftest-your-supabase-backup","Prueba tu backup de Supabase antes del día que lo necesites","Cómo probar tu backup de Supabase: restaurarlo en un proyecto de prueba, contar filas, iniciar sesión y buscar la línea que le falta a un archivo cortado.","2026-09-28","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":798,"title":799,"description":800,"published":801,"category":795,"image":802,"draft":675},"\u002Fblog\u002Fsupabase-backup-github-action","Backup gratis de Supabase con una GitHub Action, y la trampa","Un backup de Supabase con GitHub Action es gratis y sirve a muchas apps. El workflow, el connection string correcto y el egress de cada ejecución.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":804,"title":805,"description":806,"published":807,"category":795,"image":808,"draft":675},"\u002Fblog\u002Fdownload-your-supabase-backup","Por qué no puedes descargar tu backup de Supabase","No puedes descargar tu backup de Supabase en un proyecto actual: la copia diaria es una instantánea física. Cómo comprobarlo y tener tu propia copia.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":435,"title":810,"description":811,"published":807,"category":671,"image":812,"draft":675},"Supabase \"permission denied for table\": el grant que falta","Desde el 30 de octubre, una tabla nueva de Supabase responde \"permission denied for table\" hasta que le das acceso. El grant del email es la mitad del arreglo.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":814,"title":815,"description":816,"published":817,"category":671,"image":818,"draft":675},"\u002Fblog\u002Fopen-api-endpoint-exposed","¿Un endpoint de API abierto es un problema? Mira el JSON","Tu escaneo señaló un endpoint de API abierto. Que importe depende de lo que devolvió, y la mayoría de los que encontramos eran de la plataforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":820,"title":821,"description":822,"published":823,"category":671,"image":824,"draft":675},"\u002Fblog\u002Flovable-security-scan","Escaneo de seguridad de Lovable: lo que no puede probar","Escaneo de seguridad de Lovable: qué revisan el Quick scan y el Deep scan, cuándo corre cada uno, y lo único que ningún escaneo desde dentro puede probar.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":826,"title":827,"description":828,"published":829,"category":795,"image":830,"draft":675},"\u002Fblog\u002Fsupabase-backup-auth-users","Por qué tu dump de Supabase no tiene usuarios dentro","Ejecuta supabase db dump por sí solo y obtienes la forma de tu base de datos y ninguna de sus filas, sin el esquema auth donde viven tus usuarios.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":832,"title":833,"description":834,"published":835,"category":671,"image":836,"draft":675},"\u002Fblog\u002Fdomain-and-certificate-expiry","Dominio caducado, web caída: qué pasa a partir de ahora","Tu dominio caducó y tu web está caída. Aquí tienes el reloj que acaba de arrancar, por qué el certificado es el menor problema, y cómo comprobar ambos.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":838,"title":839,"description":840,"published":841,"category":671,"image":842,"draft":675},"\u002Fblog\u002Fis-lovable-safe","¿Es seguro Lovable? Lo que vimos en 18.554 aplicaciones Lovable","¿Es seguro Lovable? Pasamos 18.554 aplicaciones Lovable por nueve comprobaciones. La plataforma fue la más limpia de cinco. Los hallazgos estaban dentro.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":844,"title":845,"description":846,"published":847,"category":671,"image":848,"draft":675},"\u002Fblog\u002Fvibe-coded-app-security-checklist","La lista de seguridad del vibe coding, en nueve comprobaciones","Una lista de seguridad del vibe coding con nueve puntos, cada uno verificable en tu app desde fuera por cualquiera, y cada uno con una prueba de una línea.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":850,"title":851,"description":852,"published":853,"category":671,"image":854,"draft":675},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Una clave secreta de Stripe en tu frontend puede mover dinero","Una clave secreta de Stripe expuesta en tu frontend puede reembolsar, cobrar y leer cada ficha de cliente que tienes. Tu clave pk_live_ sí debe estar ahí.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":856,"title":857,"description":858,"published":859,"category":671,"image":860,"draft":675},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variables de entorno de Vite expuestas: el prefijo dice publica esto","Variables de entorno de Vite expuestas en tu app: hicieron lo que pedía el prefijo. VITE_ y NEXT_PUBLIC_ significan publica esto, y la IA nunca supo el coste.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":862,"title":863,"description":864,"published":865,"category":671,"image":866,"draft":675},"\u002Fblog\u002Fbase44-source-maps","Seguridad en Base44: qué marca un escaneo y qué te toca arreglar a ti","Seguridad en Base44 en 5.438 apps escaneadas: tres hallazgos en casi todas son de la plataforma, el source map es la insignia de Base44 y lo tuyo es poco.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":868,"title":869,"description":870,"published":871,"category":671,"image":872,"draft":675},"\u002Fblog\u002Fis-cursor-ai-safe","¿Es seguro Cursor AI? El editor, el código y la app que publicaste","¿Es seguro Cursor AI? Tres preguntas en una búsqueda: qué guarda Cursor, en qué falla el código que escribe y si la app que publicaste está abierta.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":874,"title":875,"description":876,"published":877,"category":671,"image":878,"draft":675},"\u002Fblog\u002Fis-replit-safe","¿Es seguro Replit? Lo que vimos en 3.042 aplicaciones Replit en vivo","¿Es seguro Replit? Pasamos 3.042 aplicaciones Replit en vivo por nueve comprobaciones externas. Los hallazgos estaban en la aplicación publicada, no en el host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":880,"title":881,"description":882,"published":883,"category":795,"image":884,"draft":675},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: tu copia de la base no tiene archivos","Un Supabase storage backup es una tarea aparte. Las copias de la base guardan la lista de tus archivos y ninguno de ellos, así que cada upload queda roto.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":886,"title":887,"description":888,"published":889,"category":795,"image":890,"draft":675},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery de Supabase: precio y límites","El point-in-time recovery de Supabase rebobina tu base de datos a cualquier segundo de la última semana. Cuesta $100 al mes sobre Pro y solo cubre la base.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":132,"title":892,"description":893,"published":894,"category":795,"image":895,"draft":675},"¿Proyecto de Supabase pausado? Tus datos siguen ahí","Supabase pausó tu proyecto tras una semana sin actividad. No se ha borrado nada, Restaurar está junto al nombre y tienes un año antes de que eso cambie.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":897,"title":898,"description":899,"published":900,"category":671,"image":901,"draft":675},"\u002Fblog\u002Fsafest-ai-app-builder","¿Qué builder de apps con IA es más seguro? 30.998 apps escaneadas","¿Qué builder de apps con IA es más seguro? Escaneamos 30.998 apps activas de Lovable, Base44, Replit, v0 y Bolt. El builder no es lo que decide tu nota.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":903,"title":904,"description":905,"published":906,"category":671,"image":907,"draft":675},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Activa Row Level Security en cada tabla de Supabase y compruébalo","Activar Row Level Security en Supabase sin política cierra la tabla del todo. Una política sin el interruptor no hace nada. Aquí tienes el SQL y la prueba.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":909,"title":910,"description":911,"published":912,"category":671,"image":913,"draft":675},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": lo que el aviso no ve","Supabase marca \"RLS disabled in public\" como error. No dice nada de la política de lectura que deja tu tabla igual de abierta a cualquiera.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":915,"title":916,"description":917,"published":918,"category":671,"image":919,"draft":675},"\u002Fblog\u002Frotate-supabase-service-role-key","Cómo rotar una clave service_role de Supabase filtrada","Supabase dice que primero cierres la fuga. Otras guías dicen que rotes ya. Cuál es lo correcto depende de dónde se filtró tu clave service_role.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":921,"title":922,"description":923,"published":924,"category":671,"image":925,"draft":675},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Escáneres de seguridad vibe coding comparados, el nuestro incluido","El mejor escáner de seguridad para vibe coding depende de tres preguntas que ninguna lista de funciones responde. Diez herramientas, con precios.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":927,"title":928,"description":929,"published":930,"category":671,"image":931,"draft":675},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: haz tú mismo las cinco comprobaciones","Un Supabase security checker lee tu app publicada en lugar de la configuración de tu proyecto. Estas son las cinco comprobaciones y cómo hacer cada una.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":933,"title":934,"description":935,"published":936,"category":671,"image":937,"draft":675},"\u002Fblog\u002Fvibe-coding-security-scanner","Escáner de seguridad para vibe coding: qué se le escapa","Un escáner de seguridad para vibe coding lee tu app en vivo desde fuera. Qué cubre eso, las cuatro cosas que no puede ver y cómo leer el resultado.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":939,"title":940,"description":941,"published":942,"category":671,"image":943,"draft":675},"\u002Fblog\u002Fmissing-security-headers","Faltan cabeceras de seguridad: cuándo importa de verdad","Que falten cabeceras de seguridad es el hallazgo que más imprime nuestro escáner. Contra qué protegen y cuándo son la línea menos urgente de tu informe.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":945,"title":946,"description":947,"published":948,"category":671,"image":949,"draft":675},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Tu clave de API de OpenAI está expuesta en tu frontend. Rótala.","Una clave de API de OpenAI expuesta en tu frontend no se puede atar a un dominio. Rótala hoy, mueve la llamada a tu servidor y limita el gasto.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":951,"title":952,"description":953,"published":954,"category":671,"image":955,"draft":675},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Clave de API expuesta en el frontend: qué llevan 30.998 apps","Una clave de API expuesta en tu frontend suele ser una clave de Google Maps. Escaneamos 30.998 apps vibe-coded y contamos qué secretos se filtran de verdad.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":957,"title":958,"description":959,"published":960,"category":795,"image":961,"draft":675},"\u002Fblog\u002Fsupabase-backup-tools-compared","Herramientas de backup de Supabase comparadas, la nuestra incluida","Cuatro tipos de herramienta de backup de Supabase, qué copia cada una y cuándo una GitHub Action gratuita le gana a pagar a cualquiera, nosotros incluidos.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":963,"title":964,"description":965,"published":966,"category":671,"image":967,"draft":675},"\u002Fblog\u002Freplit-secrets-explained","Cómo usar secrets en Replit, y qué se publica de todos modos","Cómo usar secrets en Replit: añadir uno, leerlo y arreglar las dos causas del undefined. Y las claves que la herramienta Secrets no puede mantener privadas.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":461,"title":969,"description":970,"published":971,"category":795,"image":972,"draft":675},"Backups del plan gratuito de Supabase: cómo hacer uno sin terminal","No hay backups en el plan gratuito de Supabase: la copia tienes que hacerla tú. Cómo sacarla desde el panel y qué deja fuera la vía CSV.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":974,"title":975,"description":976,"published":977,"category":671,"image":978,"draft":675},"\u002Fblog\u002Fis-supabase-secure","¿Supabase es seguro? Sí. Tu proyecto es otra pregunta","¿Supabase es seguro? La plataforma está auditada, cifrada y sometida a pentests. Su propia documentación dice dónde termina eso y empiezan tus ajustes.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":980,"title":981,"description":982,"published":983,"category":671,"image":984,"draft":675},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Dónde están tus claves API de Supabase: anon, service_role y URL","La URL del proyecto, la clave anon y la clave service_role están en una sola página del panel. Aquí tienes dónde está, y cuál de los cuatro va en tu app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":986,"title":987,"description":988,"published":989,"category":671,"image":990,"draft":675},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy en Supabase. ¿Y ahora?","\"New row violates row-level security policy\" significa que Supabase rechazó una escritura. El arreglo rápido vuelve a abrir la tabla para cualquiera.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":992,"title":993,"description":994,"published":995,"category":671,"image":996,"draft":675},"\u002Fblog\u002Fcors-wildcard-security-risk","¿Es un comodín CORS un riesgo de seguridad? Casi nunca.","¿Es un comodín CORS un riesgo de seguridad? Casi siempre es el ajuste por defecto de tu builder y no entrega nada que tu servidor no diera ya a cualquiera.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":998,"title":999,"description":1000,"published":1001,"category":795,"image":1002,"draft":675},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Supabase branching no es un backup. Solo va hacia adelante.","Por qué el branching de Supabase no es un backup: una rama arranca sin tus datos y un merge solo mueve el esquema. Para qué sirve y qué usar en su lugar.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":1004,"title":1005,"description":1006,"published":1007,"category":795,"image":1008,"draft":675},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Cómo restaurar un backup de Supabase, y qué se rompe después","Cómo restaurar un backup de Supabase desde el panel o desde un archivo de volcado, qué reemplaza la restauración y por qué tu app puede seguir rota al terminar.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":1010,"title":1011,"description":1012,"published":1013,"category":671,"image":1014,"draft":675},"\u002Fblog\u002Fsupabase-storage-bucket-public","Tu bucket de Supabase Storage es público. ¿Es un problema?","Un bucket público de Supabase Storage significa que quien tenga la URL de un archivo puede abrirlo. No significa que alguien pueda listar lo que hay dentro.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":1016,"title":1017,"description":1018,"published":1019,"category":671,"image":1020,"draft":675},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","¿Es un problema una clave de API de Google en tu frontend?","Una clave de API de Google en tu frontend es la clave que más encuentra nuestro escáner, y casi siempre no pasa nada. Un ajuste gratuito decide cuál es cuál.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":1022,"title":1023,"description":1024,"published":1025,"category":795,"image":1026,"draft":675},"\u002Fblog\u002Fai-agent-deleted-my-database","Un agente de IA borró mis datos de Supabase. ¿Qué puedo recuperar?","Un agente de IA borró datos de tu base. Lo que puedes recuperar ya estaba decidido antes de que se ejecutara, y los próximos minutos deciden el resto.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":1028,"title":1029,"description":1030,"published":1031,"category":671,"image":1032,"draft":675},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","¿Puede cualquiera leer tu base de datos Supabase? 3.680 apps","¿Puede cualquiera leer tu base de datos Supabase sin iniciar sesión? Escaneamos 30.998 apps activas hechas con builders de IA y medimos cuántas dicen que sí.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":1034,"title":1035,"description":1036,"published":1031,"category":671,"image":1037,"draft":675},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source maps expuestos: tu app está publicando su código original","Un source map expuesto deja que cualquiera lea el código original de tu app, comentarios incluidos. La comprobación de 30 segundos y lo que de verdad importa.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":421,"title":1039,"description":1040,"published":1041,"category":671,"image":1042,"draft":675},"Las nuevas claves de API de Supabase: ¿cuál va en tu app?","Supabase sustituyó anon y service_role por claves publicables y secretas. ¿Cuál pertenece a tu app y cuál no debe estar nunca?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":1044,"title":1045,"description":1046,"published":1047,"category":795,"image":1048,"draft":675},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","¿Supabase respalda mi base de datos? Depende de tu plan.","¿Supabase respalda tu base de datos? A diario en los planes de pago, y nada en el gratuito. Cómo saber cuál tienes y qué es lo que esa copia no cubre.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":1050,"title":1051,"description":1052,"published":1053,"category":671,"image":1054,"draft":675},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security está activado. Tu tabla sigue pública.","Activar Supabase Row Level Security no protege una tabla. Lo hacen tus políticas, y la que arregló tu app rota puede dejar entrar a cualquiera.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":1056,"title":1057,"description":1058,"published":1053,"category":795,"image":1059,"draft":675},"\u002Fblog\u002Fversion-history-is-not-a-backup","El historial de versiones no es un backup. No recupera una tabla.","Lovable y Bolt guardan un historial de versiones de tu código. Tu base de datos es un servicio aparte, y volver atrás no te devuelve tus datos.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":1061,"title":1062,"description":1063,"published":1064,"category":795,"image":1065,"draft":675},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Tres formas de respaldar una base Supabase, y qué falta en cada una","El panel, pg_dump y un servicio gestionado. Qué guarda de verdad cada uno, qué deja fuera sin avisar y cuál sobrevive a perder la cuenta.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":1067,"title":1068,"description":1069,"published":1064,"category":671,"image":1070,"draft":675},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Qué claves de API son seguras en el navegador y cuáles no","Tu clave anon de Supabase está pensada para ser pública. Tu clave service_role no, y se salta todas las reglas que pongas. Cómo distinguirlas.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791705962983]