MÓDULO 4.2

🔐 Produção Real: Auth, Segurança, Pagamentos & Integração

Login, proteção de dados, receita e ligar um frontend a um workflow n8n. Você protege o app com autenticação via Supabase, isola dados com Row-Level Security, roda a migração SQL e configura as URLs de auth, faz uma auditoria de segurança, adiciona pagamento freemium com Stripe, dá interface a um workflow n8n por webhook e fecha com a recap da iteração incremental.

9
Tópicos
~80
Minutos
Avançado
Nível
Produto
Tipo
Progresso do módulo 0% · 0 de 9

Levar um app à produção é empilhar camadas sobre o que já funciona. O diagrama abaixo mostra a ordem: começar do app no ar, proteger com autenticação e RLS, monetizar com pagamento e, por fim, ligar workflows externos por webhook.

App no ar primeiro app (4.1) Auth + RLS Supabase · isola dados + auditoria Pagamento Stripe · freemium grátis + pro n8n webhook Banco (Supabase) leads · subscriptions · RLS

Diagrama ilustrativo — recriação conceitual das camadas de produção, não uma captura de tela real.

1

🛡️ Por que autenticar

Um app sem login é um app aberto: qualquer pessoa com a URL pode disparar o workflow e consumir os seus tokens de IA — e você paga pelo uso dos outros. Autenticar resolve dois problemas de uma vez: protege o uso (só usuários cadastrados acionam o backend) e protege os dados (cada um vê só o que é seu).

💡 O risco do app aberto

Enquanto o app está sem autenticação em produção, o relógio dos seus tokens roda para qualquer um. Adicionar login é o primeiro passo da "produção real" — antes de pensar em receita, você fecha a porta.

  • Uso: só usuários autenticados acionam o workflow.
  • Dados: cada usuário tem os seus, isolados dos demais.
  • Custo: você deixa de pagar pelo consumo de estranhos.

✗ App aberto em produção

  • Qualquer URL compartilhada vira consumo dos seus tokens.
  • Sem usuários, não há como isolar dados.
  • Sem login, não há como cobrar depois.

✓ App autenticado

  • Login/cadastro filtra quem aciona o backend.
  • Cada usuário tem dados próprios e protegidos.
  • Base pronta para tiers grátis e pago.

🎯 Dica prática

Não deixe um app sem autenticação no ar por muito tempo. Login é a primeira camada da produção — tudo o mais (segurança fina, pagamento) se apoia nela.

2

🔑 Autenticação com Supabase

O Supabase entra como provedor de banco e autenticação: em Plan Mode, você pede à IA para adicionar login/cadastro ao app usando o Supabase. Do lado da plataforma, você cria o projeto, define a senha do banco (distinta da senha de login) e escolhe a região.

Setup do Supabase

1

Criar o projeto

Defina a senha do banco (diferente da senha de login!) e escolha a região mais próxima dos seus usuários.

2

Copiar URL + publishable key

Pegue o project URL e a publishable key do Supabase para usar como variáveis de ambiente.

3

Adicionar como env vars no Vercel

Coloque URL e key como env vars no Vercel e redeploye para o frontend conhecer o Supabase.

⚠️ Atenção

  • A senha do banco não é a senha de login — guarde as duas separadamente.
  • Segredos só em env vars; nunca no código do frontend nem no chat.
Projeto

Banco + auth prontos.

Senha do banco

≠ senha de login.

Região

Perto do usuário.

URL + key

Env vars no Vercel.

3

🧱 Row-Level Security (RLS)

Row-Level Security são regras que vivem dentro do banco, não no código da interface. Elas garantem que um usuário só veja as suas próprias linhas — mesmo que haja um bug no frontend. É uma camada de defesa que não depende do código da tela estar perfeito: uma trava no nível mais profundo.

✗ Sem RLS

  • Um bug no frontend pode vazar dados de outro usuário.
  • A segurança depende inteiramente do código da tela.
  • Uma única falha expõe a base toda.

✓ Com RLS ativo

  • O banco recusa devolver linhas de outro usuário.
  • Defesa em profundidade: trava extra além do frontend.
  • Isolamento por linha, no nível mais baixo.

🧭 Defesa em profundidade

A boa segurança não confia em uma única camada. RLS soma-se à autenticação: mesmo se o login for burlado ou a tela tiver bug, o banco continua recusando o que não pertence ao usuário. Ative o RLS na tabela e teste.

🎯 Dica prática

Trate o RLS como inegociável: ative-o desde o início e confirme na auditoria de segurança que ele está ligado em todas as tabelas com dados de usuário.

No banco

Não no frontend.

Por linha

Isola dados.

Camada extra

Defesa em profundidade.

Ativar

Na tabela, e testar.

4

🗄️ Migração SQL & URLs de auth

Duas configurações fazem a autenticação funcionar de ponta a ponta. A migração SQL: rodar no SQL editor do Supabase o SQL gerado pela IA para criar a tabela (ex.: a tabela de leads). E as URLs de auth: configurar a URL do app (Vercel) e a redirect URL, para que o login volte corretamente para o app.

SQL editor (exemplo ilustrativo)
-- migração gerada pela IA
create table leads (
  id uuid primary key default gen_random_uuid(),
  user_id uuid references auth.users not null,
  empresa text,
  score int,
  created_at timestamptz default now()
);

-- liga o Row-Level Security
alter table leads enable row level security;

🗄️ Migração SQL

  • Abrir o SQL editor do Supabase.
  • Colar e rodar o SQL gerado pela IA.
  • Confirmar a tabela criada (ex.: leads).

🔗 URLs de auth

  • Definir a URL do app (a do Vercel).
  • Definir a redirect URL do login.
  • Em authentication → URL configuration.

🎯 Dica prática

Se o login "funciona" mas não volta para o app, o suspeito é quase sempre a redirect URL. Confirme que a URL do Vercel e a redirect estão exatas na configuração de auth do Supabase.

SQL editor

Roda a migração.

Tabela

Criada por SQL.

URL do app

A do Vercel.

Redirect

Volta do login.

5

🔎 Auditoria de segurança

Antes de seguir, faça uma auditoria explícita: limpe a conversa e peça à IA para atuar como especialista em segurança e revisar o app. Uma auditoria pedida de propósito pega vulnerabilidades que passam batido no dia a dia — e dá uma lista clara do que corrigir.

O checklist da auditoria

1

Rotas protegidas

Confirmar que as páginas/endpoints sensíveis exigem usuário autenticado.

2

Nenhuma chave exposta

Garantir que nenhuma API key apareça no frontend (que roda no navegador do usuário).

3

Segredos só em env vars

Conferir que todos os segredos vêm de variáveis de ambiente, nunca do código versionado.

4

RLS ativo

Verificar que o Row-Level Security está ligado em todas as tabelas com dados de usuário.

✓ Aprovado na auditoria

  • Rotas sensíveis exigem login.
  • Nada de chave no frontend.
  • RLS confirmado em todas as tabelas.

✗ Bandeiras vermelhas

  • Endpoint acessível sem autenticação.
  • Secret key chegando ao navegador.
  • Tabela com dados de usuário sem RLS.

🎯 Dica prática

Peça a auditoria com escopo explícito ("revise rotas protegidas, chaves expostas, segredos em env e RLS"). Quanto mais específico o pedido, mais útil o relatório — e corrija tudo o que falhar antes de avançar.

6

💳 Stripe: modelo freemium

Com o Stripe, o app vira um SaaS: um modelo freemium com um tier grátis limitado e um tier pago por assinatura, via Stripe Checkout. A motivação é a mesma da autenticação — limitar o uso para você não pagar pelo consumo ilimitado de IA dos usuários — mas agora com receita do outro lado.

🆓 Tier grátis

Limitado — ex.: 2 qualificações de lead por dia.

  • Permite experimentar o app.
  • Limite controla o seu custo de tokens.

⭐ Tier pro

Assinatura — ex.: US$ 29/mês, qualificações ilimitadas.

  • Cobrança recorrente via Checkout.
  • Receita que sustenta o app.

🧭 De workflow a produto

O pagamento completa a transição: o que começou como "só um workflow" agora é um app que pode gerar receita. Em Plan Mode, a IA cria os pacotes, env vars, tabelas, o cliente/servidor do Stripe, a página de preços e atualiza a navbar.

🎯 Dica prática

Pense o freemium como dois objetivos casados: o tier grátis protege o seu custo e o tier pago abre receita. Defina o limite do grátis de olho no consumo real de tokens.

Freemium

Grátis + pago.

Limite

Controla custo.

Assinatura

Recorrente.

Checkout

Fluxo de pagamento.

7

🧾 Produto, chaves & webhook do Stripe

A integração do Stripe junta quatro peças que vêm de momentos diferentes. Você cria o produto recorrente e copia o price ID; pega as chaves (publishable + secret); cria o webhook apontando para a sua URL com os eventos certos; e roda a migração da tabela de assinaturas no Supabase.

As peças da integração

1

Produto recorrente + price ID

Crie um produto de assinatura mensal, defina o preço e copie o price ID.

2

Chaves: publishable + secret

Em developers → API keys, copie a publishable key e a secret key.

3

Webhook + eventos + webhook secret

Crie um endpoint apontando para a URL do Vercel + /api/stripe-webhook, ouvindo checkout.session.completed e os eventos de assinatura; copie o webhook secret.

4

Migração da tabela de assinaturas

Rode o SQL gerado para criar a tabela de subscriptions e adicione as quatro chaves como env vars no Vercel; redeploye.

⚠️ Atenção

  • Use a URL de webhook exata fornecida pela IA — não invente uma.
  • Mantenha um bloco de notas para colar as chaves/IDs durante o processo.
  • Teste o checkout com cartão de teste (data futura, CVC qualquer).
Price ID

Do produto.

Chaves

Publishable + secret.

Webhook

Eventos + secret.

Subscriptions

Tabela no banco.

8

🪝 Frontend para workflow n8n

Para dar uma interface bonita a um workflow n8n, o padrão é trocar dois nós: o primeiro (o formulário) por um Webhook trigger, e o último por um nó "Respond to Webhook". O frontend (gerado e melhorado com a skill de design) envia os dados para a URL do webhook e exibe a resposta — ligado por uma env var no Vercel.

Converter o workflow + ligar o frontend

1

Trocar o primeiro nó por um Webhook

Remova o nó de formulário e adicione um Webhook trigger, conectando-o à lógica existente.

2

Trocar o último nó por "Respond to Webhook"

Remova o nó de saída final e adicione "Respond to Webhook" para devolver a resposta ao frontend.

3

Publicar e copiar a URL de produção

Publique o workflow no n8n e copie a URL de produção do webhook (não a de teste).

4

Ligar via env var no Vercel

Adicione a URL do webhook n8n como env var no Vercel e redeploye; teste preenchendo o formulário em produção.

🎯 Dica prática

O padrão para conectar qualquer workflow n8n a um site é sempre o mesmo: troque o primeiro e o último nó por webhooks. Confirme que o workflow está publicado antes de copiar a URL — e use sempre a de produção.

Webhook

Substitui o form.

Respond

Devolve a resposta.

Produção

URL publicada.

Env var

Liga no Vercel.

9

🪜 Iteração incremental (recap)

A jornada inteira é uma lição de iteração incremental: o app começou como um prompt de uma frase e cresceu por camadas — design → autenticação → pagamento → integração. Boa engenharia é assim: começar pequeno, publicar cedo e escalar conforme a necessidade, sem planejar tudo de uma vez.

As camadas, em ordem

1

App + design

Da ideia ao app no ar, com design profissional que foge da cara de IA (Módulo 4.1).

2

Autenticação + segurança

Usuários reais com seus dados protegidos: Supabase, RLS e auditoria.

3

Pagamento + integração

Receita por assinatura com Stripe e workflows externos ligados por webhook.

✓ Iteração incremental

  • Começar pequeno e publicar a primeira versão.
  • Crescer por camadas, uma feature por vez.
  • Colher feedback real entre as camadas.

✗ Big bang

  • Tentar planejar tudo antes de publicar nada.
  • Adicionar design, auth e pagamento de uma vez só.
  • Adiar o lançamento esperando a "versão perfeita".

🎯 Dica prática

Resultado da trilha: você consegue ligar um backend/lógica a um frontend bonito que pessoas realmente usam. Não precisa planejar tudo de antemão — publique pequeno e cresça por camadas.

Auto-recuperação (opcional): por que o Row-Level Security é uma camada extra de segurança?

📌 Resumo do Módulo

Por que autenticar — app aberto deixa qualquer um gastar seus tokens; login protege uso e dados.
Supabase + RLS — auth e banco prontos; regras no banco isolam dados entre usuários.
Migração SQL & URLs + auditoria — rodar o SQL, configurar URL/redirect e checar rotas, chaves, env e RLS.
Stripe freemium — tier grátis limitado + tier pago; produto, chaves, webhook e tabela de assinaturas.
Frontend n8n + iteração — Webhook/Respond to Webhook ligados por env var; crescer por camadas.

Fim da trilha:

Você foi do conceito a um app de verdade no ar — com automações, deploy, autenticação e pagamento. Hora de construir o seu.