[{"data":1,"prerenderedAt":1071},["ShallowReactive",2],{"blog-pt-is-supabase-down-or-your-app":3,"blog-index-pt":717},{"id":4,"title":5,"body":6,"category":670,"cover":671,"coverAlt":672,"description":673,"draft":674,"extension":675,"faq":676,"image":694,"keywords":695,"meta":705,"navigation":706,"ogTitle":707,"path":708,"published":709,"seo":710,"stem":711,"tldr":712,"updated":709,"__hash__":716},"blog_pt\u002Fblog\u002Fis-supabase-down-or-your-app.md","O Supabase caiu ou o problema é o seu app? Como saber",{"type":7,"value":8,"toc":652},"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,371,377,381,384,449,463,467,470,473,476,480,483,486,491,494,520,529,533,536,569,573,578,604,616,620,646],[10,11,12],"p",{},"O seu app abre e depois não carrega nada. A lista que deveria mostrar os pedidos\ndos seus clientes está vazia, o botão de login fica girando, ou a página\ncontinua branca. Alguém já mandou mensagem sobre isso. Então você pesquisa\n«supabase caiu», porque o seu app foi feito com o Lovable ou o Bolt em cima de\num projeto do Supabase, e o Supabase é a única peça da máquina que você conhece\npelo nome.",[10,14,15],{},"É aqui que a resposta de sempre erra. Ela diz: olhe a página de status do\nSupabase. É o primeiro passo certo, e ele responde a uma pergunta de quatro. O\nseu projeto para de responder ao seu app quando o Supabase tem uma queda, mas\ntambém quando o Supabase o pausou, quando ele chegou a um limite e quando o seu\npróprio app está quebrado enquanto o Supabase responde certinho a cada\nrequisição. Os seus clientes veem a mesma tela em branco nos quatro casos, e a\npágina de status só sabe do primeiro.",[10,17,18],{},"Pense nisso como uma falta de luz em casa. A primeira coisa que qualquer pessoa\nfaz é olhar pela janela para ver se os vizinhos também estão no escuro. Essa é a\npágina de status, e ela fala da rua. Não diz nada sobre a carta embaixo da\nporta, o quadro de luz no corredor ou a lâmpada.",[10,20,21],{},"Cada página do Supabase, cada incidente e cada número deste artigo foram lidos\nem 30 de setembro de 2026.",[23,24,26],"h2",{"id":25},"o-supabase-caiu-ou-o-problema-é-o-seu-app","O Supabase caiu, ou o problema é o seu app?",[10,28,29],{},"Pela tela você não consegue saber, e é por isso que a busca deixa as pessoas\ntravadas. Quatro falhas diferentes produzem o mesmo resultado:",[31,32,33,41,47,53],"ol",{},[34,35,36,40],"li",{},[37,38,39],"strong",{},"O Supabase caiu."," Alguma coisa falhou do lado do Supabase, normalmente\nnuma região ou num serviço. A rua inteira ficou sem luz.",[34,42,43,46],{},[37,44,45],{},"O seu projeto está pausado."," O Supabase para os projetos gratuitos que\nficaram mais ou menos uma semana sem atividade. Cortaram a sua luz, e ninguém\nmais na rua foi afetado.",[34,48,49,52],{},[37,50,51],{},"O seu projeto chegou a um limite."," Ele encheu o espaço e passou para\nsomente leitura, ou ficou sem capacidade e foi ficando lento até as\nrequisições pararem de ter resposta, ou a sua organização passou de uma cota\ne foi restringida. Um disjuntor desarmou.",[34,54,55,58],{},[37,56,57],{},"O seu app está quebrado."," O Supabase está respondendo, e alguma coisa do\nseu lado, uma chave, as regras de acesso de uma tabela ou um trecho de\ncódigo, transforma essa resposta numa tela em branco. A energia está\nchegando. É a lâmpada.",[10,60,61],{},"Aqui e daqui em diante, o seu projeto é o banco de dados do Supabase onde o seu\napp guarda os dados, junto com o login, o armazenamento de arquivos e a API ao\nredor dele.",[63,64],"diagram",{"alt":65,"caption":66,"src":67},"Quatro quadros à esquerda, todos desenhados em âmbar: uma nuvem, um sinal de pausa, um interruptor desarmado e um editor de código. As linhas deles se juntam e desembocam numa única janela de navegador em branco, com um círculo de carregamento no meio.","Quatro falhas diferentes, uma tela só. Os seus clientes não conseguem distinguir uma da outra, e você também não, até verificar.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Ffour-causes-one-screen-1600x620.png",[10,69,70],{},"As verificações abaixo passam por elas em ordem, da mais barata para a mais\ncara, e cada uma confirma ou descarta uma falha.",[23,72,74],{"id":73},"quatro-verificações-da-mais-barata-para-a-mais-cara","Quatro verificações, da mais barata para a mais cara",[76,77,79],"h3",{"id":78},"passo-1-o-supabase-caiu-para-todo-mundo","Passo 1: o Supabase caiu para todo mundo?",[10,81,82,83,90],{},"Abra ",[84,85,89],"a",{"href":86,"rel":87},"https:\u002F\u002Fstatus.supabase.com\u002F",[88],"nofollow","status.supabase.com",". Se um incidente aberto\ncitar a sua região ou um serviço que o seu app usa, você tem a sua resposta, e a\nseção sobre quedas, mais abaixo, diz o que fazer com ela.",[10,92,93,94,98,99,102],{},"A página lista os serviços do Supabase um por um: o banco de dados e a API pela\nqual o seu app o lê, Auth para o login, Storage para os arquivos enviados,\nRealtime, Edge Functions, o painel e mais alguns. Embaixo vem uma lista de\nregiões. Uma região é a parte do mundo onde o seu projeto roda, e a sua aparece\nna página Infrastructure das configurações do projeto, com um código como\n",[95,96,97],"code",{},"eu-west-1",". Um incidente em ",[95,100,101],{},"us-east-1"," não tem nada a ver com um projeto na\nIrlanda, então descubra o seu código antes de ler qualquer outra coisa.",[10,104,105,106,108],{},"O que a página não tem é uma linha para o seu projeto. Ela informa os problemas\nque atingem projetos suficientes para serem anunciados, e os incidentes reais\ncostumam ser bem localizados. Os cinquenta mais recentes, que voltam até 15 de\njulho de 2026, incluem um que derrubou só os projetos num conjunto específico de\nmáquinas em ",[95,107,97],{},", outro que deixou sem resposta, depois de algumas horas\nrodando, os projetos do menor tamanho, o do plano gratuito, e outro sobre erros\n401 em parte dos projetos novos que ficou aberto por 46 dias.",[10,110,111],{},"Então uma página verde diz que o Supabase não anunciou nenhum problema. O seu\nprojeto pode estar fora do ar por baixo dela, e é disso que tratam as próximas\ntrês verificações.",[63,113],{"alt":114,"caption":115,"src":116},"Um painel de status com todas as linhas acesas em verde. Embaixo, uma fileira de projetos, todos iluminados menos um, apagado e circulado.","A página de status fala do Supabase como um todo. Ela não tem nenhuma linha para o seu projeto.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fgreen-page-dark-project-1600x620.png",[10,118,119],{},"O painel tem uma linha e incidentes próprios. Em 1º de setembro de 2026 ninguém\nconseguia entrar nele, e um app pode continuar funcionando durante uma coisa\ndessas.",[10,121,122],{},"Já que você está na página, assine as atualizações. Basta um endereço de e-mail,\ne o Supabase também publica o histórico de incidentes como feed RSS.",[76,124,126],{"id":125},"passo-2-o-seu-projeto-está-pausado","Passo 2: o seu projeto está pausado?",[10,128,129,130,134],{},"Abra o painel do Supabase e olhe a sua lista de projetos. Um projeto com Paused\nao lado do nome foi parado pelo Supabase, quase sempre um projeto gratuito que\npassou mais ou menos uma semana sem atividade, e ele continua parado até você\nretomá-lo. Todo o resto sobre a pausa, incluindo o prazo de um ano e o que fazer\nquando a opção de retomar sumiu, está em ",[84,131,133],{"href":132},"\u002Fblog\u002Fsupabase-project-paused-recover","o que fazer quando o seu projeto do\nSupabase está pausado",".",[76,136,138],{"id":137},"passo-3-o-seu-projeto-chegou-a-um-limite","Passo 3: o seu projeto chegou a um limite?",[10,140,141],{},"Veja o que ainda funciona. Cada limite quebra uma coisa diferente, e o padrão\ndiz qual disjuntor desarmou.",[10,143,144,147,148,151,152,156,157,162],{},[37,145,146],{},"As páginas carregam e nada é salvo."," Isso é o modo somente leitura. Um\nprojeto gratuito entra em somente leitura quando o banco passa de 500 MB, e um\npago quando o disco enche mais rápido do que o Supabase tem permissão de\naumentá-lo. A leitura continua funcionando, então o app parece normal até alguém\ntentar se cadastrar, fazer um pedido ou salvar um formulário, e toda gravação\nvolta com ",[95,149,150],{},"cannot execute INSERT in a read-only transaction",". A saída é mais\nespaço, mudando de plano ou apagando dados. ",[84,153,155],{"href":154},"\u002Fblog\u002Fsupabase-free-plan-limits","O que cada limite do plano gratuito\ndesliga"," cobre os dois caminhos, e o ",[84,158,161],{"href":159,"rel":160},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fdatabase-size",[88],"guia de\ntamanho do banco"," do\nSupabase traz o SQL.",[10,164,165,168],{},[37,166,167],{},"Tudo fica lento e depois para de responder."," O projeto ficou sem folga. O\ntamanho de computação dele define quanta memória ele tem e quanto pode exigir do\ndisco, e os tamanhos menores ganham uma cota diária para passar desse nível, que\no Supabase chama de Disk IO Budget. Quando ela acaba, a própria lista do\nSupabase do que pode acontecer inclui tempos de resposta que sobem bastante e\numa instância que para de responder. A cota se recarrega no dia seguinte, e a\npágina Database Health, em Observability, mostra onde você está.",[10,170,171],{},"Talvez chegue um e-mail dizendo que o projeto «is running out of Disk IO\nBudget», ou você veja no painel um aviso de que ele está unhealthy, com o botão\nRestart project embaixo. Trate o e-mail como uma pista. Depois de um incidente\nem 10 de setembro de 2026, o Supabase avisou os donos afetados de que o e-mail\nde Disk IO que eles tinham recebido não valia mais: o próprio incidente o tinha\nprovocado.",[10,173,174,177,178,181,182,185],{},[37,175,176],{},"Toda requisição falha com um 402."," A sua organização foi restringida pela\nFair Use Policy do Supabase, por continuar acima de uma cota depois do período\nde carência ou por uma fatura em aberto, e a restrição costuma valer para todos\nos projetos da organização. O 402 diz o motivo com um código como\n",[95,179,180],{},"exceed_db_size_quota"," ou ",[95,183,184],{},"overdue_payment",", e o Supabase diz que, enquanto ela\ndurar, você ainda consegue chegar aos seus dados pelo painel. Mudar de plano\ntira na hora uma restrição por uso; se não, ela cai quando começa o próximo\nciclo de cobrança.",[10,187,188],{},"Esse é o quadro de luz. Os três casos acontecem dentro do seu próprio projeto,\nentão a página de status não mostra nenhum deles.",[76,190,192],{"id":191},"passo-4-pergunte-direto-ao-seu-projeto","Passo 4: pergunte direto ao seu projeto",[10,194,195],{},"Mande uma requisição e leia a resposta. Se o Supabase responder normalmente, o\nproblema está do seu lado da conexão.",[10,197,198,199,202,203,206,207,210],{},"A versão mais rápida não precisa de ferramenta nenhuma. O endereço do seu\nprojeto é parecido com ",[95,200,201],{},"https:\u002F\u002Fabcdefghijklmnopqrst.supabase.co",", e a sequência\nde letras antes de ",[95,204,205],{},".supabase.co"," aparece na barra de endereços do navegador\nsempre que o projeto está aberto no painel. Acrescente ",[95,208,209],{},"\u002Frest\u002Fv1\u002F"," no final,\ncole numa aba nova e veja o que volta.",[212,213,214,220,232],"ul",{},[34,215,216,219],{},[37,217,218],{},"Uma linha de texto entre chaves dizendo que nenhuma chave de API foi\nencontrada."," O Supabase está respondendo no endereço do seu projeto. Ele\nrecusou você porque a aba não enviou chave nenhuma, o que é o correto. O\nprojeto existe e não está pausado.",[34,221,222,225,226,231],{},[37,223,224],{},"«Não é possível acessar esse site» ou «servidor não encontrado»."," O\nendereço não resolve. A ",[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 ajuda do Supabase sobre esse\nerro","\nlista os motivos comuns: um projeto pausado, um apagado ou um endereço\ndigitado errado.",[34,233,234,237],{},[37,235,236],{},"Uma página de erro com um número na casa dos 500, ou nada depois de uma\nlonga espera."," O endereço existe e o projeto por trás dele está sofrendo.\nVolte ao passo 3 e olhe de novo a página de status.",[10,239,240,241,244,245,250],{},"A versão completa é a aba ",[37,242,243],{},"Network"," do navegador, que mostra as respostas que\no seu app recebe com a própria chave. Abra o seu app, aperte F12, escolha\nNetwork, recarregue a página e digite na caixa de filtro as letras do endereço\ndo seu projeto. Cada requisição ao seu projeto aparece com um código de status,\ne o código já é quase todo o diagnóstico. Os significados abaixo vêm da ",[84,246,249],{"href":247,"rel":248},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Fhttp-status-codes",[88],"lista\nde códigos de\nstatus"," do\nSupabase e da API de banco de dados que roda lá:",[252,253,254,270],"table",{},[255,256,257],"thead",{},[258,259,260,264,267],"tr",{},[261,262,263],"th",{},"Status",[261,265,266],{},"O que significa",[261,268,269],{},"Para onde ir",[271,272,273,287,303,316,329,342,360],"tbody",{},[258,274,275,281,284],{},[276,277,278],"td",{},[95,279,280],{},"200",[276,282,283],{},"O Supabase respondeu e devolveu alguma coisa",[276,285,286],{},"O seu app, logo abaixo",[258,288,289,297,300],{},[276,290,291,181,294],{},[95,292,293],{},"401",[95,295,296],{},"403",[276,298,299],{},"O Supabase respondeu e recusou a chave, a tabela ou a sessão",[276,301,302],{},"A próxima seção",[258,304,305,310,313],{},[276,306,307],{},[95,308,309],{},"402",[276,311,312],{},"A sua organização está restrita",[276,314,315],{},"Passo 3",[258,317,318,324,327],{},[276,319,320,323],{},[95,321,322],{},"405"," ao salvar, enquanto as leituras recebem 200",[276,325,326],{},"O banco está em somente leitura",[276,328,315],{},[258,330,331,336,339],{},[276,332,333],{},[95,334,335],{},"540",[276,337,338],{},"O projeto está pausado",[276,340,341],{},"Passo 2",[258,343,344,354,357],{},[276,345,346,349,350,353],{},[95,347,348],{},"503",", ",[95,351,352],{},"544"," ou nenhuma resposta",[276,355,356],{},"O projeto está no ar e não dá conta",[276,358,359],{},"Passo 3, depois um reinício",[258,361,362,365,368],{},[276,363,364],{},"falhou, com «name not resolved»",[276,366,367],{},"O endereço não existe neste momento",[276,369,370],{},"Passo 2, depois confira o endereço",[10,372,373,374,376],{},"A linha a procurar primeiro é a do ",[95,375,280],{},". Se as requisições do seu app ao\nSupabase voltam com 200 e a tela continua em branco, o Supabase fez a parte\ndele, e a lâmpada é sua. Talvez as regras de uma tabela não deixem este\nvisitante ver nenhuma linha, o que chega como um 200 com uma lista vazia. Talvez\no app esteja apontando para um projeto diferente do que você está olhando. Ou o\ncódigo que desenha a página quebrou com o que recebeu, e isso é uma pergunta\npara o seu builder, com a requisição e a resposta em mãos.",[23,378,380],{"id":379},"por-que-o-supabase-de-repente-me-dá-erros-401","Por que o Supabase de repente me dá erros 401?",[10,382,383],{},"Porque o Supabase respondeu e recusou quem estava pedindo. Um 401 significa que\na requisição chegou ao seu projeto, então a plataforma está no ar. O que foi\nrecusado é uma de três coisas, e a mensagem diz qual: clique na requisição na\naba Network e abra a Response dela.",[212,385,386,423,437],{},[34,387,388,391,392,395,396,399,400,403,404,407,408,413,414,417,418,422],{},[37,389,390],{},"A chave."," A mensagem diz ",[95,393,394],{},"Invalid API key"," ou\n",[95,397,398],{},"Legacy API keys are disabled",". O seu app está enviando uma chave que o\nprojeto não aceita mais. A chave ",[95,401,402],{},"anon"," antiga, uma sequência longa que começa\ncom ",[95,405,406],{},"eyJ",", para de funcionar quando alguém desativa as chaves legadas nas\nconfigurações do projeto, e o Supabase avisou que um projeto pausado\nrestaurado desde 1º de novembro de 2025 volta sem ela. ",[84,409,412],{"href":410,"rel":411},"https:\u002F\u002Fgithub.com\u002Forgs\u002Fsupabase\u002Fdiscussions\u002F29260",[88],"Nas palavras do\npróprio Supabase",",\nprojetos pausados que são restaurados correm o risco de quebrar porque não\nterão as chaves legadas. A solução é colocar a chave publicável atual do\nprojeto, a que começa com ",[95,415,416],{},"sb_publishable_",", nas configurações de ambiente do\nseu builder. ",[84,419,421],{"href":420},"\u002Fblog\u002Fsupabase-new-api-keys","Os dois formatos de chave"," estão\ncomparados lado a lado.",[34,424,425,391,428,431,432,436],{},[37,426,427],{},"A tabela.",[95,429,430],{},"permission denied for table",". A chave está\ncerta, e essa tabela não foi aberta para esse tipo de visitante. A partir de\n30 de outubro de 2026, toda tabela nova do Supabase começa assim, e ",[84,433,435],{"href":434},"\u002Fblog\u002Fsupabase-permission-denied-for-table","o jeito\nseguro de abri-la"," tem um artigo\npróprio.",[34,438,439,442,443,448],{},[37,440,441],{},"A sessão."," As páginas sem login funcionam, as pessoas logadas recebem erros\n401 que vão e voltam, e a mensagem costuma mencionar um JWT, o token assinado\nque o seu app guarda para cada pessoa logada. De 14 de agosto a 29 de setembro\nde 2026, a página de status do Supabase manteve um incidente com o título\n",[84,444,447],{"href":445,"rel":446},"https:\u002F\u002Fstatus.supabase.com\u002Fincidents\u002F6q5902p2xd9f",[88],"«401 errors due to JWT\nrejections»",": uma parte\ndos projetos novos rejeitava sessões que tinham acabado de ser renovadas. A\nsolução do Supabase, lançada em 29 de setembro, é uma versão nova do projeto\nque você mesmo instala, com o botão Upgrade project na página General das\nconfigurações do projeto.",[10,450,451,452,457,458,462],{},"Esse upgrade deixa o projeto fora do ar enquanto roda, e o painel mostra uma\nestimativa de quanto tempo antes de você confirmar. O ",[84,453,456],{"href":454,"rel":455},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fupgrading",[88],"guia de\nupgrade"," do Supabase\nrecomenda fazer antes uma cópia dos seus dados. No plano gratuito ninguém mais\nestá fazendo essa cópia, e ",[84,459,461],{"href":460},"\u002Fblog\u002Fback-up-supabase-free-tier","fazer uma pelo\npainel"," não precisa de terminal.",[23,464,466],{"id":465},"como-reiniciar-um-projeto-do-supabase","Como reiniciar um projeto do Supabase?",[10,468,469],{},"Pelo painel: abra o projeto, vá em Project Settings, depois em General, e clique\nem Restart project em Project availability. A seta ao lado do botão oferece Fast\ndatabase reboot, que reinicia só o banco de dados e encurta o tempo fora do ar.\nNos dois casos, o Supabase avisa de alguns minutos fora do ar.",[10,471,472],{},"Um reinício é a ferramenta certa para um projeto sobrecarregado ou marcado como\nunhealthy, e foi o que o Supabase pediu aos donos afetados depois do incidente\nde 10 de setembro. Se o projeto é pequeno demais para o trabalho que faz, o\nproblema volta, e a solução duradoura é um tamanho de computação maior ou\nconsultas mais leves. Um projeto pausado precisa de Resume project, que fica no\nmesmo lugar. Um banco cheio continua cheio depois de um reinício, e uma chave\nrecusada continua recusada.",[10,474,475],{},"Não mexa no botão enquanto houver um incidente que cite ações em projetos. Em 4\nde setembro de 2026, reinícios, restaurações e mudanças de tamanho de computação\ndavam erro em todas as regiões, o Supabase pediu que ninguém tentasse, e por um\ntempo desativou tudo isso de vez.",[23,477,479],{"id":478},"o-que-você-pode-fazer-durante-uma-queda-do-supabase","O que você pode fazer durante uma queda do Supabase?",[10,481,482],{},"Muito pouco, e esperar é a decisão certa. Consertar a queda é trabalho do\nSupabase, e o seu projeto volta sem você encostar nele.",[10,484,485],{},"Isso faz da queda a única falha deste artigo que se resolve esperando, e é por\nisso que o passo 2 vem antes de qualquer coisa que você faça aqui. Falta de luz\na gente espera passar. Um corte feito pela companhia continua até você ligar\npara ela, e um projeto pausado continua parado até você retomá-lo, com um ano no\nrelógio a partir do dia em que parou.",[63,487],{"alt":488,"caption":489,"src":490},"Duas linhas do tempo. Na de cima, uma linha cai e volta a subir sozinha. Na de baixo, a linha cai e fica embaixo. Um botão de ligar em cima dela abre um caminho tracejado de volta para cima, e a linha de baixo segue até uma marca riscada.","Uma queda volta sozinha. Um projeto pausado volta quando você o retoma, e só dentro do ano.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fwait-or-act-1600x560.png",[10,492,493],{},"O que vale a pena fazer enquanto espera:",[212,495,496,502,508,514],{},[34,497,498,501],{},[37,499,500],{},"Confirme que é com você."," Veja se o incidente cita a sua região ou um\nserviço que o seu app usa.",[34,503,504,507],{},[37,505,506],{},"Assine esse incidente",", para receber a atualização que anuncia o fim dele.",[34,509,510,513],{},[37,511,512],{},"Avise os seus usuários."," Uma linha onde eles procuram você, dizendo que o\napp foi afetado por uma queda no fornecedor do banco de dados e que vai\nvoltar.",[34,515,516,519],{},[37,517,518],{},"Deixe o projeto quieto."," Durante o incidente de 4 de setembro, o Supabase\ndesaconselhou criar projetos, mudar configurações, reiniciar ou mudar o\ntamanho de computação até o incidente ser resolvido. Os projetos no ar\ncontinuaram rodando enquanto essas ações falhavam.",[10,521,522,523,528],{},"Também não há nada a reivindicar pelo tempo fora do ar, a não ser que você\nesteja no Enterprise. O ",[84,524,527],{"href":525,"rel":526},"https:\u002F\u002Fsupabase.com\u002Fsla",[88],"compromisso de\ndisponibilidade"," do Supabase, com créditos de serviço\npara um mês abaixo de 99,9%, foi escrito só para clientes Enterprise.",[23,530,532],{"id":531},"o-que-ter-pronto-antes-da-próxima","O que ter pronto antes da próxima",[10,534,535],{},"Quatro coisas, todas mais fáceis num dia em que nada quebrou:",[212,537,538,544,557,563],{},[34,539,540,543],{},[37,541,542],{},"A sua região, anotada"," ao lado do endereço do seu projeto, e uma assinatura\nda página de status.",[34,545,546,549,550,552,553,556],{},[37,547,548],{},"O seu app na chave publicável."," O Supabase está aposentando as chaves\nantigas ",[95,551,402],{}," e ",[95,554,555],{},"service_role"," até o fim de 2026, e um app que ainda envie\numa delas vai começar a colecionar erros 401 quando elas sumirem.",[34,558,559,562],{},[37,560,561],{},"Uma cópia do seu banco fora da sua conta do Supabase."," Uma queda, uma pausa\ne uma restrição acontecem todas dentro do Supabase, e uma cópia guardada em\noutro lugar fica fora do alcance delas. No plano gratuito, o Supabase não\nguarda nenhuma cópia para você.",[34,564,565,568],{},[37,566,567],{},"Alguma coisa que perceba quando o seu app para de responder"," e avise você\nantes que um cliente precise fazer isso.",[23,570,572],{"id":571},"onde-o-reeve-entra","Onde o Reeve entra",[10,574,575],{},[37,576,577],{},"O Reeve Monitor vigia o endereço que os seus visitantes carregam. O Reeve Care\ntambém se conecta ao banco de dados do Supabase por trás dele e guarda uma cópia\nfora da sua conta do Supabase.",[212,579,580,586,592,598],{},[34,581,582,585],{},[37,583,584],{},"O Monitor verifica o endereço do seu app a cada 60 segundos"," de fora, e\nmanda um e-mail quando ele para de responder e outro quando ele volta. Ele\ntambém repete de hora em hora as nossas nove verificações de segurança, em até\ntrês apps.",[34,587,588,591],{},[37,589,590],{},"O Care se conecta ele mesmo ao seu banco do Supabase"," para fazer uma cópia,\ntodo dia no Care e com mais frequência nos planos acima. Uma noite em que o\nbanco não responde é uma cópia que não pôde ser feita, e você recebe um e-mail\ncontando o que aconteceu.",[34,593,594,597],{},[37,595,596],{},"A cópia fica fora da sua conta do Supabase",", criptografada, e é lida de\nvolta antes de contar, então uma pausa ou uma restrição deixam a sua última\ncópia boa onde você consegue alcançá-la.",[34,599,600,603],{},[37,601,602],{},"Restaurar é um botão",", e antes é feito um retrato do estado atual, então a\nrestauração tem o seu próprio desfazer.",[10,605,606,607,611,612,134],{},"O que cada plano cobre está na ",[84,608,610],{"href":609},"\u002Fpricing","página de preços",", e a cópia, a\nverificação e a restauração estão desenhadas passo a passo na ",[84,613,615],{"href":614},"\u002Fsupabase-backups","página de backups\ndo Supabase",[23,617,619],{"id":618},"o-que-fazer-agora","O que fazer agora",[621,622,623],"key-takeaways",{},[212,624,625,628,631,634,637,640],{},[34,626,627],{},"Descubra a região do seu projeto na página Infrastructure das configurações dele e assine a página de status do Supabase.",[34,629,630],{},"Quando o seu app ficar em branco, verifique nesta ordem: a página de status, a palavra Paused na sua lista de projetos, páginas que carregam enquanto salvar falha, e os códigos de status na aba Network do navegador.",[34,632,633],{},"Se o projeto está pausado, retome-o hoje. Esperar só gasta o ano que você tem.",[34,635,636],{},"Se as requisições voltam com 401, leia a mensagem antes de mudar qualquer coisa. Uma chave, uma tabela e uma sessão têm cada uma a sua solução.",[34,638,639],{},"Durante uma queda de verdade, deixe o projeto quieto: nada de reinícios, restaurações ou upgrades até o incidente ser resolvido.",[34,641,642,643,645],{},"Passe o seu app para a chave ",[95,644,416],{}," e guarde uma cópia do seu banco fora do Supabase, enquanto nada está quebrado.",[10,647,648,649,134],{},"Antes de fechar esta aba, abra as configurações Infrastructure do seu projeto,\nanote o código da região ao lado do endereço e assine a página de status. Se a\ntela em branco de hoje acabou sendo uma pausa, ",[84,650,651],{"href":132},"veja aqui o que fazer em\nseguida",{"title":653,"searchDepth":654,"depth":654,"links":655},"",3,[656,658,664,665,666,667,668,669],{"id":25,"depth":657,"text":26},2,{"id":73,"depth":657,"text":74,"children":659},[660,661,662,663],{"id":78,"depth":654,"text":79},{"id":125,"depth":654,"text":126},{"id":137,"depth":654,"text":138},{"id":191,"depth":654,"text":192},{"id":379,"depth":657,"text":380},{"id":465,"depth":657,"text":466},{"id":478,"depth":657,"text":479},{"id":531,"depth":657,"text":532},{"id":571,"depth":657,"text":572},{"id":618,"depth":657,"text":619},"Noções de segurança","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcover-1200x630.png","Uma rua à noite com prédios iluminados e, na frente deles, um prédio com todas as janelas apagadas.","O Supabase caiu ou o problema é o seu app? Um projeto pausado, um banco cheio e um erro seu parecem iguais. Quatro verificações separam os casos.",false,"md",[677,680,683,686,688,691],{"q":678,"a":679},"O Supabase está fora do ar agora?","Confira status.supabase.com, que é onde o Supabase publica os próprios incidentes, serviço por serviço e região por região. Descubra primeiro a região do seu projeto: ela aparece na página Infrastructure das configurações do projeto, com um código como eu-west-1. Se nada na página de status citar essa região ou um serviço que o seu app usa, o Supabase não anunciou nenhum problema, e o próximo lugar para olhar é o seu próprio projeto.",{"q":681,"a":682},"Meu app quebrou, mas a página de status do Supabase está verde. E agora?","Olhe o seu próprio projeto. Confira na lista de projetos do painel do Supabase se aparece a palavra Paused, e depois se o projeto está marcado como unhealthy, em somente leitura ou restrito. Se tudo isso parecer normal, abra o seu app, aperte F12, escolha a aba Network e recarregue. Uma requisição ao seu projeto que volta com 200 significa que o Supabase respondeu, e o problema está do seu lado.",{"q":684,"a":685},"Um projeto do Supabase pausado é a mesma coisa que uma queda?","Não, e os dois pedem reações opostas. Uma queda é problema do Supabase e acaba quando eles consertam, então esperar é o certo. Uma pausa é o Supabase parando o seu projeto, quase sempre um gratuito que passou uma semana sem atividade, e nada muda até você retomá-lo pelo painel. Você tem um ano para isso. Depois, o painel oferece um download no lugar, e voltar ao ar exige um projeto novo com um endereço novo.",{"q":380,"a":687},"Um 401 significa que o Supabase respondeu e recusou quem estava pedindo. Talvez o seu app esteja enviando uma chave que o projeto não aceita mais, o que acontece quando a chave anon antiga é desativada ou quando um projeto pausado é restaurado sem ela. Uma tabela pode recusar com permission denied. Ou as sessões podem ser rejeitadas: de 14 de agosto a 29 de setembro de 2026 isso aconteceu com uma parte dos projetos novos, e a solução é Upgrade project na página General.",{"q":689,"a":690},"Como reinicio o meu projeto do Supabase?","Abra o projeto no painel do Supabase e vá em Project Settings, depois em General. Em Project availability, Restart project reinicia tudo, e a seta ao lado oferece Fast database reboot, que reinicia só o banco de dados, com menos tempo fora do ar. Conte com alguns minutos fora do ar nos dois casos. Um reinício ajuda um projeto sobrecarregado ou marcado como unhealthy. Um projeto pausado precisa de Resume, na mesma página, e um banco cheio precisa de espaço.",{"q":692,"a":693},"Dá para fazer alguma coisa durante uma queda do Supabase?","Muito pouco, e esperar é a decisão certa. Confira se o incidente cita a sua região, assine as atualizações dele e conte aos seus usuários o que eles estão vendo. Deixe reinícios, restaurações, upgrades e mudanças de tamanho de computação para depois que ele for resolvido: num incidente em toda a plataforma em 4 de setembro de 2026, o Supabase desaconselhou exatamente isso. A garantia de disponibilidade com créditos de serviço vale só para clientes Enterprise.","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",[696,697,698,699,700,701,702,703,704],"supabase caiu","supabase está fora do ar","supabase fora do ar","supabase não funciona","status do supabase","supabase status","supabase erro 401","reiniciar projeto supabase","meu app não conecta no supabase",{},true,"O Supabase caiu ou o problema é o seu app?","\u002Fblog\u002Fis-supabase-down-or-your-app","2026-10-01",{"title":5,"description":673},"blog\u002Fis-supabase-down-or-your-app",[713,714,715],"O Supabase caiu? Pode ser. Um projeto pausado, um projeto que chegou a um limite e um erro no seu próprio app produzem a mesma tela em branco.","A página de status do Supabase responde só à primeira pergunta. A sua lista de projetos e as páginas do seu projeto respondem às duas seguintes, e os códigos de status no seu navegador resolvem a última.","Uma queda termina sem você. Um projeto pausado fica parado até você retomá-lo, e depois de um ano essa opção desaparece.","et9-tUnmAWfnP0N2O6ZHoDm-5ts21hCkNURwRYLyG_Y",[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":670,"image":723,"draft":674},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" ao enviar","\"New row violates row-level security policy for table objects\" quer dizer que o seu envio não tem regra insert. Deixar o bucket público não cria nenhuma.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":725,"title":726,"description":727,"published":728,"category":670,"image":729,"draft":674},"\u002Fblog\u002Fbase44-security-scan","Scan de segurança do Base44: o que só ele enxerga","O scan de segurança do Base44 verifica sete tipos de problema por dentro. Esta é a metade que ele lê e mais ninguém, e a metade que ele nunca olha.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":731,"title":732,"description":733,"published":734,"category":670,"image":735,"draft":674},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Sua chave de API vazou. A ordem em que agir","Uma chave de API vazou e você não sabe o que fazer primeiro. Nem toda chave no seu frontend é um vazamento, e a ordem importa mais que a pressa.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":737,"title":738,"description":739,"published":740,"category":670,"image":741,"draft":674},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" sem desligar o RLS","\"Infinite recursion detected in policy for relation\" significa que a sua policy perguntou à tabela que ela protege. Veja como quebrar o círculo.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":743,"title":744,"description":745,"published":746,"category":670,"image":747,"draft":674},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" no Supabase, e a correção errada","\"No API key found in request\" significa que sua requisição chegou ao Supabase sem chave. Quase toda resposta aponta para as regras do seu banco.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":749,"title":750,"description":751,"published":752,"category":670,"image":753,"draft":674},"\u002Fblog\u002Fis-base44-safe","O Base44 é seguro? O que vimos em 5.442 apps Base44","O Base44 é seguro? Rodamos nove verificações em 5.442 apps Base44 no ar. Quase todas tiraram B por motivos que o dono nunca escolheu.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":755,"title":756,"description":757,"published":758,"category":670,"image":759,"draft":674},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Esconder uma chave de API: mova para uma Edge Function do Supabase","Esconder uma chave de API é tirá-la do navegador, e uma Edge Function do Supabase é o menor lugar para guardá-la. Dois passos em volta pesam mais.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":761,"title":762,"description":763,"published":764,"category":670,"image":765,"draft":674},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Seu arquivo .env está exposto? Os doze caminhos para testar","Seu arquivo .env está exposto no seu próprio servidor web? Doze endereços dizem isso em um minuto, e um acerto significa que tudo nele já é público.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":767,"title":768,"description":769,"published":770,"category":670,"image":771,"draft":674},"\u002Fblog\u002Fis-v0-safe","Segurança do v0: os 1.790 aplicativos v0 escaneados tiraram A","A segurança do v0 medida em 1.790 aplicativos v0 no ar: todos tiraram A. Só 17 citavam um banco de dados, e é sobretudo isso que esse A mede.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":773,"title":774,"description":775,"published":776,"category":670,"image":777,"draft":674},"\u002Fblog\u002Fis-bolt-safe","O Bolt é seguro? O que vimos em 1.123 aplicativos Bolt","O Bolt é seguro? Passamos 1.123 aplicativos Bolt no ar por nove verificações. A hospedagem saiu limpa. Os achados: chaves e tabelas abertas nos aplicativos.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":708,"title":5,"description":673,"published":709,"category":670,"image":694,"draft":674},{"path":780,"title":781,"description":782,"published":783,"category":670,"image":784,"draft":674},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","O Supabase criptografa meus dados? Sim. Veja o que isso impede","O Supabase criptografa os dados? Sim: AES-256 em repouso, TLS em trânsito, SOC 2 e ISO 27001. O que cada um cobre, e o vazamento que nenhum deles impede.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":154,"title":786,"description":787,"published":788,"category":670,"image":789,"draft":674},"Quanto custa o Supabase? Os limites do plano gratuito","Quanto custa o Supabase: o plano gratuito tem 500 MB de banco, 5 GB de egress e nenhum backup. O que acontece em cada limite e o que o Pro de $25 muda.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":791,"title":792,"description":793,"published":794,"category":795,"image":796,"draft":674},"\u002Fblog\u002Ftest-your-supabase-backup","Teste o backup do seu Supabase antes do dia em que precisar","Como testar o backup do seu Supabase: restaurar num projeto de teste, contar as linhas, entrar e procurar a linha que falta num arquivo 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":674},"\u002Fblog\u002Fsupabase-backup-github-action","Backup grátis do Supabase com uma GitHub Action, e a pegadinha","Um backup do Supabase com GitHub Action é grátis e serve para muitos apps. O workflow, a connection string certa e o egress de cada execução.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":804,"title":805,"description":806,"published":807,"category":795,"image":808,"draft":674},"\u002Fblog\u002Fdownload-your-supabase-backup","Por que você não consegue baixar seu backup do Supabase","Você não consegue baixar seu backup do Supabase num projeto atual, porque a cópia diária é um snapshot físico. Como conferir e como ter uma cópia só sua.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":434,"title":810,"description":811,"published":807,"category":670,"image":812,"draft":674},"Supabase \"permission denied for table\": o grant que falta","A partir de 30 de outubro, uma tabela nova no Supabase responde \"permission denied for table\" até receber um grant. O e-mail mostra só metade.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":814,"title":815,"description":816,"published":817,"category":670,"image":818,"draft":674},"\u002Fblog\u002Fopen-api-endpoint-exposed","Um endpoint de API aberto é um problema? Leia o JSON","Seu scan apontou um endpoint de API aberto. Se isso importa depende do que voltou, e a maioria dos que encontramos era da própria plataforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":820,"title":821,"description":822,"published":823,"category":670,"image":824,"draft":674},"\u002Fblog\u002Flovable-security-scan","Escaneamento de segurança do Lovable: o que ele não prova","Escaneamento de segurança do Lovable: o que o Quick scan e o Deep scan checam, quando cada um roda, e a única coisa que nenhum escaneamento por dentro prova.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":826,"title":827,"description":828,"published":829,"category":795,"image":830,"draft":674},"\u002Fblog\u002Fsupabase-backup-auth-users","Por que seu dump do Supabase não tem usuários dentro","Rode supabase db dump sozinho e você recebe a forma do seu banco e nenhuma das linhas dele, sem o schema auth onde seus usuários moram.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":832,"title":833,"description":834,"published":835,"category":670,"image":836,"draft":674},"\u002Fblog\u002Fdomain-and-certificate-expiry","Domínio expirado, site fora do ar: o que acontece agora","Seu domínio expirou e seu site está fora do ar. O relógio que começa a correr, por que o certificado é o problema menor, e como conferir os dois.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":838,"title":839,"description":840,"published":841,"category":670,"image":842,"draft":674},"\u002Fblog\u002Fis-lovable-safe","O Lovable é seguro? O que vimos em 18.554 aplicativos Lovable","O Lovable é seguro? Passamos 18.554 aplicativos Lovable no ar por nove verificações. A plataforma foi a mais limpa de cinco. Os achados estavam nos aplicativos.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":844,"title":845,"description":846,"published":847,"category":670,"image":848,"draft":674},"\u002Fblog\u002Fvibe-coded-app-security-checklist","O checklist de segurança do vibe coding, em nove verificações","Um checklist de segurança do vibe coding com nove itens, cada um verificável no seu app de fora por qualquer pessoa, e cada um com um teste de uma linha.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":850,"title":851,"description":852,"published":853,"category":670,"image":854,"draft":674},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Uma chave secreta da Stripe no frontend pode mover dinheiro","Uma chave secreta da Stripe exposta no seu frontend pode reembolsar, cobrar e ler cada ficha de cliente que você tem. Sua chave pk_live_ é que deve estar aí.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":856,"title":857,"description":858,"published":859,"category":670,"image":860,"draft":674},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variáveis de ambiente do Vite expostas: o prefixo diz publique isto","Variáveis de ambiente do Vite expostas no seu app: fizeram o que o prefixo pediu. VITE_ e NEXT_PUBLIC_ significam publique isto, e a IA nunca soube o custo.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":862,"title":863,"description":864,"published":865,"category":670,"image":866,"draft":674},"\u002Fblog\u002Fbase44-source-maps","Segurança no Base44: o que um scan aponta e o que é seu para corrigir","Segurança no Base44 em 5.438 apps escaneados: três achados em quase todos são da plataforma, o source map é o selo do Base44, e a sua parte é uma lista curta.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":868,"title":869,"description":870,"published":871,"category":670,"image":872,"draft":674},"\u002Fblog\u002Fis-cursor-ai-safe","O Cursor AI é seguro? O editor, o código e o app que você publicou","O Cursor AI é seguro? Três perguntas em uma busca: o que o Cursor guarda, o que o código que ele escreve erra, e se o app que você publicou está aberto.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":874,"title":875,"description":876,"published":877,"category":670,"image":878,"draft":674},"\u002Fblog\u002Fis-replit-safe","O Replit é seguro? O que vimos em 3.042 aplicativos Replit no ar","O Replit é seguro? Passamos 3.042 aplicativos Replit no ar por nove verificações externas. Os achados estavam no aplicativo publicado, não no host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":880,"title":881,"description":882,"published":883,"category":795,"image":884,"draft":674},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: sua cópia do banco não tem nenhum arquivo","Um Supabase storage backup é uma tarefa à parte. Os backups do banco guardam a lista dos seus arquivos e nenhum deles, então cada upload fica quebrado.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":886,"title":887,"description":888,"published":889,"category":795,"image":890,"draft":674},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery do Supabase: preço e limites","O point-in-time recovery do Supabase rebobina seu banco para qualquer segundo da última semana. Custa $100 por mês além do Pro e cobre só o banco.","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":674},"Projeto Supabase pausado? Seus dados continuam lá","O Supabase pausou seu projeto depois de uma semana sem atividade. Nada foi apagado, Restaurar fica ao lado do nome e você tem um ano antes disso mudar.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":897,"title":898,"description":899,"published":900,"category":670,"image":901,"draft":674},"\u002Fblog\u002Fsafest-ai-app-builder","Qual builder de apps com IA é mais seguro? 30.998 apps testados","Qual builder de apps com IA é mais seguro? Escaneamos 30.998 apps no ar do Lovable, Base44, Replit, v0 e Bolt. O builder não é o que decide sua nota.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":903,"title":904,"description":905,"published":906,"category":670,"image":907,"draft":674},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Ative Row Level Security em toda tabela do Supabase e comprove","Ativar Row Level Security no Supabase sem política fecha a tabela por completo. Uma política sem a chave ligada não faz nada. Aqui está o SQL, e o teste.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":909,"title":910,"description":911,"published":912,"category":670,"image":913,"draft":674},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": o que o aviso não vê","O Supabase marca \"RLS disabled in public\" como erro. Ele não diz nada sobre a política de leitura que deixa a sua tabela igualmente aberta.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":915,"title":916,"description":917,"published":918,"category":670,"image":919,"draft":674},"\u002Fblog\u002Frotate-supabase-service-role-key","Como rotacionar uma chave service_role do Supabase vazada","O Supabase manda fechar o vazamento primeiro. Outros guias mandam rotacionar agora. O que vale depende de para onde a sua chave service_role vazou.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":921,"title":922,"description":923,"published":924,"category":670,"image":925,"draft":674},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Scanners de segurança para vibe coding comparados, o nosso incluído","O melhor scanner de segurança para vibe coding depende de três perguntas que nenhuma lista de recursos responde. Dez ferramentas comparadas, com preços.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":927,"title":928,"description":929,"published":930,"category":670,"image":931,"draft":674},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: faça você mesmo as cinco verificações","Um Supabase security checker lê o seu app publicado em vez das configurações do projeto. Aqui estão as cinco verificações e como fazer cada uma sozinho.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":933,"title":934,"description":935,"published":936,"category":670,"image":937,"draft":674},"\u002Fblog\u002Fvibe-coding-security-scanner","Scanner de segurança para vibe coding: o que ele não vê","Um scanner de segurança para vibe coding lê seu app no ar, de fora. O que isso cobre, as quatro coisas que ele não consegue ver e como ler o resultado.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":939,"title":940,"description":941,"published":942,"category":670,"image":943,"draft":674},"\u002Fblog\u002Fmissing-security-headers","Cabeçalhos de segurança faltando: quando isso importa","Cabeçalhos de segurança faltando é o achado que nosso scanner mais imprime. Contra o que eles protegem e quando são a linha menos urgente do relatório.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":945,"title":946,"description":947,"published":948,"category":670,"image":949,"draft":674},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Sua chave de API da OpenAI está exposta no frontend. Troque-a.","Uma chave de API da OpenAI exposta no frontend não pode ser presa a um domínio. Troque-a hoje, mova a chamada para o seu servidor e limite o gasto.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":951,"title":952,"description":953,"published":954,"category":670,"image":955,"draft":674},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Chave de API exposta no frontend: o que 30.998 apps entregam","Uma chave de API exposta no seu frontend costuma ser uma chave do Google Maps. Escaneamos 30.998 apps vibe-coded e contamos quais segredos vazam de verdade.","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":674},"\u002Fblog\u002Fsupabase-backup-tools-compared","Ferramentas de backup do Supabase comparadas, a nossa incluída","Quatro tipos de ferramenta de backup do Supabase, o que cada uma copia de verdade e quando uma GitHub Action gratuita ganha de pagar, nós inclusive.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":963,"title":964,"description":965,"published":966,"category":670,"image":967,"draft":674},"\u002Fblog\u002Freplit-secrets-explained","Como usar secrets no Replit, e o que ainda assim é publicado","Como usar secrets no Replit: adicionar um, ler de volta e resolver as duas causas do undefined. E as chaves que a ferramenta Secrets não consegue proteger.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":460,"title":969,"description":970,"published":971,"category":795,"image":972,"draft":674},"Backups do plano gratuito do Supabase: como fazer sem terminal","No plano gratuito do Supabase não existe backup nenhum: a cópia é você que faz. Como fazer uma pelo painel e o que a rota do CSV deixa para trás.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":974,"title":975,"description":976,"published":977,"category":670,"image":978,"draft":674},"\u002Fblog\u002Fis-supabase-secure","O Supabase é seguro? É. Seu projeto é outra pergunta","O Supabase é seguro? A plataforma é auditada, criptografada e passa por pentests. A documentação deles diz onde isso termina e começam suas configurações.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":980,"title":981,"description":982,"published":983,"category":670,"image":984,"draft":674},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Onde ficam as chaves de API do Supabase: anon, service_role e URL","A URL do projeto, a chave anon e a chave service_role ficam todas numa página do painel. Aqui está onde ela fica, e qual dos quatro valores vai no seu app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":986,"title":987,"description":988,"published":989,"category":670,"image":990,"draft":674},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy no Supabase. E agora?","\"New row violates row-level security policy\" significa que o Supabase recusou uma escrita. O conserto rápido reabre a tabela para qualquer um.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":992,"title":993,"description":994,"published":995,"category":670,"image":996,"draft":674},"\u002Fblog\u002Fcors-wildcard-security-risk","Um curinga CORS é um risco de segurança? Quase nunca.","Um curinga CORS é um risco de segurança? Em geral é o padrão do seu builder e não entrega nada que o seu servidor já não desse a qualquer um que pedisse.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":998,"title":999,"description":1000,"published":1001,"category":795,"image":1002,"draft":674},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Branching do Supabase não é backup. Ele só anda para a frente.","Por que o branching do Supabase não é backup: um branch começa sem os seus dados e um merge só leva o esquema. Para que ele serve e o que usar no 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":674},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Como restaurar um backup do Supabase, e o que quebra depois","Como restaurar um backup do Supabase pelo painel ou por um arquivo de dump, o que a restauração substitui e por que o seu app pode continuar quebrado no fim.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":1010,"title":1011,"description":1012,"published":1013,"category":670,"image":1014,"draft":674},"\u002Fblog\u002Fsupabase-storage-bucket-public","Seu bucket do Supabase Storage é público. Isso é um problema?","Um bucket público do Supabase Storage significa que quem tem a URL de um arquivo pode abri-lo. Não significa que alguém possa listar o que está lá dentro.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":1016,"title":1017,"description":1018,"published":1019,"category":670,"image":1020,"draft":674},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Uma chave de API do Google no frontend é um problema?","Uma chave de API do Google exposta no seu frontend é a chave que nosso scanner mais encontra, e quase sempre está tudo bem. Um ajuste gratuito decide isso.","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":674},"\u002Fblog\u002Fai-agent-deleted-my-database","Um agente de IA apagou meus dados do Supabase. O que eu recupero?","Um agente de IA apagou dados do seu banco. O que você recupera já estava decidido antes de ele rodar, e os próximos minutos decidem o resto.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":1028,"title":1029,"description":1030,"published":1031,"category":670,"image":1032,"draft":674},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Qualquer um consegue ler seu banco Supabase? Testamos 3.680 apps","Qualquer um consegue ler seu banco de dados Supabase sem fazer login? Escaneamos 30.998 apps no ar criadas com builders de IA e medimos quantas dizem que sim.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":1034,"title":1035,"description":1036,"published":1031,"category":670,"image":1037,"draft":674},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source maps expostos: seu app está publicando o código original","Um source map exposto deixa qualquer um ler o código original do seu app, comentários incluídos. A verificação de 30 segundos e o que importa de verdade.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":420,"title":1039,"description":1040,"published":1041,"category":670,"image":1042,"draft":674},"As novas chaves de API do Supabase: qual vai no seu app?","O Supabase trocou anon e service_role por chaves publicáveis e secretas. Qual delas pertence ao seu app e qual nunca deve estar lá?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":1044,"title":1045,"description":1046,"published":1047,"category":795,"image":1048,"draft":674},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","O Supabase faz backup do meu banco de dados? Depende do plano.","O Supabase faz backup do seu banco de dados? Todo dia nos planos pagos, e nada no gratuito. Como descobrir o que você tem e o que essa cópia não cobre.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":1050,"title":1051,"description":1052,"published":1053,"category":670,"image":1054,"draft":674},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","O Supabase Row Level Security está ligado. A tabela continua pública.","Ligar o Supabase Row Level Security não protege uma tabela. Quem protege são as políticas, e a que consertou o seu app pode deixar qualquer um entrar.","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":674},"\u002Fblog\u002Fversion-history-is-not-a-backup","O histórico de versões não é backup. Ele não desfaz um delete.","Lovable e Bolt guardam um histórico de versões do seu código. Seu banco de dados é um serviço à parte, e voltar atrás não traz os seus dados de volta.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":1061,"title":1062,"description":1063,"published":1064,"category":795,"image":1065,"draft":674},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Três formas de fazer backup de um banco Supabase, e o que falta","O painel, o pg_dump e um serviço gerenciado. O que cada um salva de verdade, o que deixa de fora sem avisar e qual sobrevive a perder a conta.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":1067,"title":1068,"description":1069,"published":1064,"category":670,"image":1070,"draft":674},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quais chaves de API são seguras no navegador e quais não são","Sua chave anon do Supabase foi feita para ser pública. Sua chave service_role não, e ela ignora todas as regras que você criar. Como diferenciar as duas.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791705963257]