Vibecoding
Como conectar um formulário ao seu banco de dados
Um formulário que só manda e-mail é bonito e inútil. Aprenda a salvar os dados de verdade, com segurança.
Seu formulário está lindo. Envia. Mostra "obrigado".
E não salva nada.
Ou pior: salva num banco que qualquer pessoa do mundo consegue ler. Vou te mostrar como fazer certo.
O que é "conectar ao banco" na prática
Quando alguém preenche o formulário, três coisas precisam acontecer:
1. Os dados são validados (o e-mail é e-mail mesmo?)
2. Os dados são gravados numa coleção do banco
3. As regras do banco permitem só o que deve ser permitido
A IA faz o passo 2 fácil. Ela quase sempre ignora o 1 e o 3. Esse é o buraco.
Passo 1: escolha o banco
Pra vibecoding, dois caminhos simples:
Firestore (Firebase) se você já usa o ecossistema Google
Supabase se você prefere SQL e um painel mais direto
Meu take: Firestore pra começar rápido. É o que roda em vários dos meus produtos. Mas o princípio de segurança vale pros dois.
Passo 2: peça a conexão com um prompt bom
Não peça "salva o formulário no banco". Peça com contexto:
Você é dev full-stack. Conecte este formulário ao Firestore.
Grave nome, e-mail e mensagem numa coleção chamada contatos.
Valide o e-mail antes de gravar. Rejeite campos vazios.
Retorne uma mensagem de erro clara se a gravação falhar.
Repare que eu já pedi validação e tratamento de erro no prompt. Se você não pedir, não vem.
Passo 3: leia o que veio
Abra o código gerado e procure três coisas:
A validação está lá? Campo vazio é rejeitado?
O erro é tratado ou o app quebra em silêncio?
A gravação usa a coleção certa?
Isso é a camada Ler do Protocolo de 5 Camadas. Cinco minutos aqui evitam uma dor de cabeça depois.
Passo 4: feche as regras do banco (a parte que ninguém faz)
Aqui está o erro que derruba app de vibecoder. O Firestore, por padrão em muitos setups, deixa a regra assim:
allow read, write: if true;
Isso quer dizer: qualquer um, no mundo, lê e escreve no seu banco. Seus dados de clientes, expostos.
O certo pra um formulário público é permitir só a escrita controlada e bloquear a leitura geral:
allow create: if request.resource.data.email is string;
allow read: if false;
Ou seja: pode criar um registro se tiver e-mail válido. Ninguém lê a coleção pelo navegador. A leitura fica no seu painel autenticado.
Passo 5: teste como um invasor
Não confie. Teste.
Tente enviar o formulário com campo vazio. Foi rejeitado?
Abra o console e tente ler a coleção sem login. Deu erro? Ótimo.
Envie um dado real. Ele apareceu no banco?
Segundo a Veracode, código gerado por IA tem 2,74 vezes mais chance de trazer falhas de segurança. Formulário aberto é uma das mais comuns. Testar não é paranoia. É o mínimo.
O resumo
Salvar dado é fácil. Salvar dado com segurança é o que separa protótipo de produto.
A IA te dá o formulário funcionando em minutos. Blindar o banco é seu trabalho. Vibecoding com engenharia é não pular esse passo.
A decisão é sua.
Fontes
Veracode, State of Software Security 2025, sobre vulnerabilidades em código gerado por IA.
Perguntas frequentes
Perguntas rápidas
+Preciso de servidor pra salvar dados de um formulário?
Não necessariamente. Firestore ou Supabase resolvem sem você montar servidor. Mas as regras de acesso precisam estar fechadas.
+Por que não salvar direto do navegador no banco?
Pode, se as regras estiverem certas. O perigo é deixar o banco aberto, onde qualquer um lê e escreve. Isso é o erro número um.
+Como sei se meus dados estão protegidos?
Teste. Tente ler a coleção sem estar logado. Se conseguir, sua regra está aberta e precisa ser corrigida antes de subir.
Continue lendo
Como não virar refém de uma ferramenta de IA
A ferramenta que você ama hoje pode dobrar de preço, mudar de dono ou fechar amanhã. Não construa em cima de uma só.
VibecodingO que fazer quando a IA te dá código que você não entende
A tentação é apertar aceitar e seguir. Não faça. Código que você não entende é código que você não mantém.
VibecodingPor que backup não é opcional
Existe quem faz backup e quem ainda não perdeu tudo. Você escolhe de qual lado ficar antes ou depois.