Auditoria de consentimento: o que carrega antes de alguém clicar em Aceitar?
A lição por trás desta skill (Dr. Erin Toussaint Jacques, reel do IG, outubro de 2026): aplicativos criados com vibe-coding são um jeito fácil de ser processado, porque ninguém verifica se o pixel de rastreamento dispara antes de o visitante clicar em Aceitar. Um pixel é um pequeno pedaço de código do Meta, Google e outros que rastreia o que as pessoas fazem no seu site. De acordo com a lei de interceptação da Califórnia (CIPA), o rastreamento que começa antes do consentimento pode ser tratado como interceptação telefônica, com danos legais de até US$ 5.000 por violação, e os processos de pixel já chegam aos milhares. Ter um banner e esperar pela permissão são duas coisas diferentes. Muitos sites processados tinham banner; o rastreamento carregava assim que a página abria.
Portanto, esta auditoria responde a uma pergunta com evidências: em uma visita nova, antes de qualquer clique, o que carrega e o que é enviado, e para quem?
Esta é uma auditoria de engenharia, não um aconselhamento jurídico. Nunca diga a ninguém que eles estão "em conformidade". Diga o que foi encontrado, o que foi corrigido, o que não foi verificado e que um advogado deve revisar se eles veiculam anúncios ou vendem para a UE ou Califórnia.
Padrão: somente leitura
Não altere nada nesta skill: sem edições, publicações, alterações em banco de dados ou autenticação, novos serviços ou aceitação de termos. As correções são trabalho do consent-gate, depois que o proprietário concordar.
Etapa 1: Inventariar o código
Se o código for local (ou um clone do GitHub de um projeto Lovable), execute o scanner:
python3 ~/.claude/skills/consent-audit/scripts/scan_trackers.py /caminho/para/o/app
Ele lista cada assinatura de rastreador, pixel, analytics, replay, embed e script de terceiros que encontra, por arquivo e linha, sinaliza linhas que parecem enviar e-mails ou IDs de usuário e informa se uma verificação de consentimento aparece por perto. Uma nota "verificação de consentimento por perto" é uma pista, não uma prova. Leia o código ao redor de cada resultado para confirmar:
- Onde começa.
index.html<head>,main.tsx,App.tsx,_app/layoutou um provider significa que roda em todas as páginas, para todos os visitantes. - O que bloqueia. O script tag,
importouinit()só roda após um opt-in armazenado e afirmativo? Um banner que se esconde enquantogtag('config')já rodou não é um bloqueio. - O que envia.
identify(email),setUser({ email }), correspondência avançada do Meta (em,ph), URLs completas com strings de consulta?ou fragmentos#(códigos de presente, tokens de redefinição, texto de pesquisa) e campos de formulário. - Encaminhamento no servidor. Conversions API,
/api/track, funções de borda postando para Meta/Google/Segment. Eles devem respeitar a mesma escolha.
Se não houver código local (um projeto Lovable que você só pode acessar no navegador), use o prompt somente auditoria em references/prompts.md dentro do chat desse projeto e, em seguida, verifique o relatório com a Etapa 2.
Etapa 2: Verificar o site ao vivo (a parte que um banner não pode falsificar)
O código pode mentir por omissão (gerenciadores de tags, complementos de hospedagem, snippets de CMS). Sempre verifique a URL publicada em uma aba de navegador nova e sem cookies:
- Abra o site em um novo contexto privado (no navegador embutido do Claude: uma nova aba após limpar o armazenamento ou um site nunca visitado ali). Não clique em nada.
- Leia as requisições de rede (
read_network_requests). Qualquer requisição a um domínio de anúncio, analytics ou replay antes de um clique é um resultado: liste o domínio, o caminho da URL e se carrega identificadores (fbp,_ga,cid,uid,em,ttp). - Leia cookies e armazenamento via
javascript_tool:document.cookie,Object.keys(localStorage). Observe qualquer_ga,_fbp,_gcl_au,_ttp,_hj*,ph_*,ajs_*,_clckou_uetsid. - Clique em Rejeitar (ou feche o banner se não houver rejeitar). Navegue para mais duas páginas. Qualquer coisa nova disparando é um resultado.
- Clique em Aceitar em um novo contexto. Confirme que os rastreadores carregam agora, para que o bloqueio não esteja apenas quebrado.
- Faça login com uma conta de teste, se existir (nunca a de um cliente real). Verifique se o e-mail ou ID de usuário sai em alguma requisição de rastreador.
Etapa 3: Verificar configurações de hospedagem e plataforma
Rastreadores injetados pelo host não aparecem no código do aplicativo:
- Lovable: Projeto → Configurações → Visitor analytics. Está ativado por padrão; desligue-o (ou bloqueie-o) em todos os projetos, incluindo os novos.
- Vercel (Web Analytics / Speed Insights), Netlify (Analytics), Cloudflare (Web Analytics, Zaraz), Framer/Webflow/Wix/Squarespace (configurações do site → código personalizado / analytics / pixels), EzyCourse / Systeme / Kajabi (campos de código de rastreamento, campo de Pixel do Facebook).
- Gerenciadores de tags: abra o contêiner do GTM e liste cada tag e seu gatilho. "Todas as páginas" sem uma condição de consentimento significa que dispara antes do consentimento.
Etapa 4: Classificar e relatar
Classifique cada item:
| Classe | Exemplos | Regra |
|---|---|---|
| Necessário | sessão de login, CSRF, carrinho, Stripe na página de checkout, verificações de fraude/bot, preferências de UI salvas | Pode rodar sem consentimento. Nenhum banner necessário apenas para esses. |
| Embed funcional | Mapbox na página do mapa, players do YouTube/Vimeo, Calendly, widgets de chat | Carregar apenas onde usado. Preferir modo clique-para-carregar ou modos de privacidade (youtube-nocookie). |
| Opcional | pixels de anúncio, GA/GTM, PostHog, Hotjar, Clarity, HeyCatch, gravação de sessão, retargeting | Não deve carregar, buscar ou inicializar até que o visitante opte por essa categoria. |
Formato do relatório (seja breve e baseado em evidências):
AUDITORIA DE CONSENTIMENTO: <app> (<url>), <data>
Antes de qualquer clique: <N> rastreadores opcionais dispararam -> APROVADO / REPROVADO
| Fornecedor | Onde começa (arquivo:linha ou configuração do host) | Dispara antes do consentimento? | Envia dados de identidade/URL? | Classe | Correção mínima |
Serviços necessários (OK sem consentimento): ...
Aviso de privacidade: presente/ausente, linkado no rodapé? lista de fornecedores precisa?
Opção de retirar consentimento: há um link persistente "Escolhas de privacidade"?
Global Privacy Control honrado? sim/não/não testado
Alterações não publicadas que a publicação também liberaria: ...
Não verificado: ...
Não é aconselhamento jurídico. Consulte um advogado se você veicular anúncios, atender visitantes da Califórnia/UE ou colocar pixels em páginas de vídeo.
Em seguida, ofereça o consent-gate para aplicar as correções. Se um rastreador não estiver gerando retorno, recomende removê-lo em vez de bloqueá-lo: nenhum rastreador é a conformidade mais barata (em auditorias reais, remover uma ferramenta de analytics não utilizada muitas vezes foi toda a correção).
Pontos de atenção de auditorias reais
- Analytics iniciado a partir do arquivo de entrada do aplicativo (
src/main.tsx) em todas as páginas para todos os visitantes, sem verificação de consentimento, e o código de login enviava os e-mails e IDs de usuário dos clientes logados para a ferramenta de analytics em cada login. A ferramenta não conseguia remover strings de consulta, então foi removida completamente. - O Visitor analytics do Lovable está ativado por padrão e é injetado pelo host. Não está no código.
- Publicar libera tudo que não foi publicado. Antes de publicar uma correção de privacidade, liste as alterações mais antigas não publicadas que ela também enviará (auxiliares de login, atualizações de dependências, correções de pagamento) e obtenha a aprovação do proprietário.
- Desligar o analytics não é o mesmo que desligar a captura de dados. O banco de dados do próprio aplicativo (trabalho de alunos, progresso, mensagens) é próprio e separado. Diga isso explicitamente, porque os proprietários se preocupam.
- Páginas de vídeo + pixel do Meta adicionam outro risco federal (Lei de Proteção à Privacidade de Vídeo). Sites de cursos com vídeos de aula devem tratar qualquer pixel nessas páginas como alta prioridade.