replica-backend
Lê replica/architecture.md. Escreve migrações e código do servidor, e mantém
replica/backend.md (checklist abaixo) atualizado.
As regras
- Apenas APIs oficiais e públicas, com as chaves do próprio usuário. Nunca chame os endpoints privados do aplicativo original, nunca reutilize seu cliente OAuth, nunca faça proxy através dele.
- O usuário cria contas e chaves. O agente nunca se cadastra em serviços,
nunca digita senha, cartão ou chave ao vivo. O usuário cria o projeto Stripe,
Supabase, Resend ou Google Cloud e coloca as chaves em
.env.local. O agente escreve.env.examplecom cada nome de variável e sem valores. - Modo de teste primeiro. Chaves de teste do Stripe e cartões de teste até replica-deploy.
Autenticação
- Cadastro por e-mail com verificação, redefinição de senha, link mágico se o original tiver. OAuth (Google, Apple) com os próprios aplicativos de desenvolvedor do usuário.
- Sessões: cookies seguros http-only. Sair de todas as sessões.
- Papéis e equipes se o mapa de reconhecimento os tiver: proprietário, administrador, membro, com uma função que responda "este usuário pode fazer isso neste registro".
- Exclusão de conta que realmente exclui. A Apple exige isso para aplicativos com cadastro.
Banco de dados
- Migrações a partir de
architecture.md, versionadas, executadas por um script. - Regras de acesso em cada tabela: políticas de segurança em nível de linha no Supabase, ou a função de autorização chamada em cada consulta. Teste: um segundo usuário não deve receber nada.
- Script de seed com dados falsos realistas (nenhuma pessoa real).
- Backups ativados (conte com os backups diários do host, verifique se estão ativados).
Pagamentos
- Stripe Checkout para inscrição em um plano, o Portal do Cliente para alterações e cancelamento. Não crie formulários de cartão.
- Webhooks: verifique a assinatura, armazene o id do evento, torne cada manipulador
idempotente (Stripe faz retentativas). Lide com
checkout.session.completed,customer.subscription.updated,customer.subscription.deleted,invoice.payment_failed. - O status da assinatura vive no seu banco de dados, atualizado por webhooks, lido pelo seu aplicativo. Nunca confie no cliente.
- Cancelar é um clique. Cobrança difícil de cancelar é uma das principais reclamações sobre a maioria dos aplicativos e, em muitos lugares, é ilegal.
E-mail e jobs
- E-mail transacional através do Resend ou Postmark a partir do seu próprio domínio. Modelos escritos do zero.
- Jobs para qualquer coisa baseada em tempo (lembretes, resumos, sincronização, limpeza) com retentativas e um log de mensagens mortas. Horários em UTC, exibidos no fuso do usuário.
Integrações
Para cada integração na matriz de funcionalidades: a API oficial, os escopos OAuth
necessários (o mínimo possível), o processo de revisão do provedor, limites de taxa.
Escopos do Google como Agenda precisam da verificação OAuth do Google antes do lançamento
público, o que leva semanas. Comece cedo e escreva isso em backend.md.
Lista de verificação de segurança
- segredos apenas em variáveis de ambiente,
.env*no.gitignore, nada em bundles do cliente - entrada validada no servidor (zod ou similar) em cada rota
- autorização verificada em cada leitura e escrita, testada com um segundo usuário
- limites de taxa em autenticação, cadastro e qualquer coisa que envie e-mail ou SMS
- webhooks verificam assinaturas
- uploads: limites de tamanho e tipo, servidos a partir de um domínio ou bucket separado
- nenhum dado de usuário em URLs ou logs
- dependências auditadas (
npm audit) - política de privacidade lista cada processador (Stripe, Resend, host, analytics)
Resultado
Autenticação funcional, banco de dados, pagamentos em modo de teste, e-mail e as integrações,
.env.example, replica/backend.md com o checklist marcado, linhas da matriz de
funcionalidades atualizadas. Próximo: /replica-test.