shannonmcgivney/consent-gate

Corrige um site ou aplicativo criado com código de vibração para que nenhum pixel de anúncio, análise, replay de sessão ou script de terceiros opcional carregue, busque ou envie nada até que o visitante opte por aceitar — um carregador de consentimento com recusa padrão, um banner honesto (Aceitar e Recusar igualmente proeminentes, categorias desmarcadas), retirada, Controle Global de Privacidade, sem e-mails de clientes ou URLs completas em cargas de rastreamento e um aviso de privacidade preciso — e então prova isso com testes de visita nova. Use após consent-audit encontrar rastreamento antes do consentimento, ou quando alguém disser que precisa.

O que é consent-gate?

O consent-gate é uma habilidade para agentes de IA (como Claude Code, Cursor, Codex) que transforma um site ou aplicativo que atualmente carrega scripts de rastreamento (pixels de anúncio, analytics, replay de sessão, etc.) antes do consentimento do usuário em uma implementação de recusa padrão (default-deny). Ela garante que nenhum script opcional seja carregado, executado ou envie dados até que o visitante clique em 'Aceitar' em um banner de cookies honesto e equilibrado. A habilidade fornece um carregador central de consentimento, um banner com opções igualmente proeminentes de Aceitar e Recusar, categorias desmarcadas por padrão, suporte ao Global Privacy Control (GPC) e um mecanismo para retirada de consentimento. Também cobre a proteção de dados de primeira parte (como e-mails, IDs de usuário e URLs completas) e a necessidade de um aviso de privacidade preciso. Após a implementação, a habilidade orienta a execução de uma série de testes de verificação em uma aba nova e limpa para provar que o rastreamento só começa após o opt-in, resultando em um relatório com evidências. É útil após uma auditoria de consentimento (consent-audit) identificar rastreamento antes do consentimento ou quando um desenvolvedor precisa corrigir rapidamente a conformidade de privacidade de um aplicativo criado com ferramentas como Lovable, Bolt, v0 ou Replit.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shannonmcgivney/consent-before-tracking/tree/HEAD/skills/consent-gate

Installed? Explore more Produtividade e Colaboração skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Portão de consentimento: nada opcional roda até que eles digam sim

A regra do vídeo, em uma linha: nenhum pixel de rastreamento, análise ou script de terceiros carrega até que o usuário clique em Aceitar no banner de cookies. Um banner que aparece enquanto o pixel já disparou não resolve nada. Esta habilidade constrói a parte de espera.

Não é aconselhamento jurídico. Nunca escreva "totalmente compatível" em código, cópia ou relatórios. Diga o que o aplicativo agora faz e o que foi testado.

Antes de tocar em qualquer coisa

  1. Tenha uma auditoria. Se não houver um relatório consent-audit para este aplicativo, execute-o primeiro. Você precisa do inventário: quais fornecedores, onde eles começam, o que eles enviam.
  2. Pergunte ao proprietário uma questão por rastreador: manter, portão ou remover? Se um rastreador não for usado para decisões ou anúncios, removê-lo é melhor do que portá-lo. Um site com apenas armazenamento necessário não precisa de banner algum; não adicione um.
  3. Saiba o que a publicação liberará. Construtores hospedados (Lovable etc.) enviam todas as alterações não publicadas juntas. Liste-as e obtenha uma aprovação antes de publicar.
  4. Proteja dados de primeira parte. Os rastreadores de portão não devem tocar em login, pagamentos ou gravações próprias do banco de dados do aplicativo (trabalho do aluno, progresso, formulários). Mencione isso no relatório.

O que "portado" significa (a lista de verificação que a correção deve atender)

Carregamento

  • Um carregador central (src/lib/consent.ts, veja references/consent.ts). Nenhum pixel, GTM, gtag, PostHog ou <script> de replay em index.html, no layout raiz ou em main.tsx.
  • Scripts opcionais não são buscados, não apenas não inicializados: import() dinâmico ou injeção de script acontece somente após opt-in.
  • Nenhum evento enfileirado é reproduzido: visualizações de página de antes do consentimento são descartadas, não enviadas tarde.
  • O encaminhamento do lado do servidor (Meta Conversions API, /api/track, funções de borda) verifica a mesma escolha armazenada, enviada com a requisição.
  • A análise injetada pelo host está desligada na fonte (Lovable → Configurações → Análise de visitantes desligada; Vercel/Netlify/Cloudflare análise desligada), ou portada antes da injeção. Remover um script depois que ele carrega é tarde demais, porque a primeira requisição já foi embora.
  • Google Consent Mode (se GA/Ads permanecerem): gtag('consent','default',{ad_storage:'denied',analytics_storage:'denied',ad_user_data:'denied',ad_personalization:'denied'}) e o próprio script gtag ainda espera pelo opt-in na configuração padrão desta habilidade. Consent Mode "básico", não "avançado", porque o avançado envia pings sem cookies antes do consentimento.

O banner

  • Aceitar opcionais e Recusar opcionais são igualmente proeminentes: mesmo tamanho, mesmo estilo, mesma quantidade de cliques. Além de uma opção Configurações.
  • As alternâncias de categoria (Análise, Publicidade, e assim por diante) começam desmarcadas.
  • Fechar o banner (X / Escape) significa recusar.
  • A escolha é salva com uma versão e uma expiração (6 a 12 meses). Alterar a lista de fornecedores aumenta a versão e pergunta novamente.
  • Um link persistente "Escolhas de privacidade" no rodapé reabre as configurações.
  • Retirar o consentimento interrompe chamadas futuras e exclui cookies e armazenamento opcionais de propriedade do aplicativo (_ga*, _fbp, _gcl_au, _ttp, ph_*, ajs_*, _hj*, _clck) sem tocar na autenticação.
  • Controle Global de Privacidade (navigator.globalPrivacyControl === true) é tratado como Recusar para publicidade/venda/compartilhamento, e o banner diz que foi honrado.

O que é enviado, mesmo após o consentimento

  • Nenhum e-mail, número de telefone, nome ou data de nascimento em cargas de pixel ou análise (sem correspondência avançada do Meta, sem identify(email)). Use um ID opaco apenas se realmente necessário.
  • URLs são enviadas sem ?query e #fragment (códigos de presente, tokens de redefinição, termos de pesquisa). Se um fornecedor não puder removê-los, remova o fornecedor.
  • Nada de respostas de quiz, conteúdo de chat, dados de saúde/finanças/nascimento ou campos de formulário.
  • Páginas de vídeo: nenhum pixel de anúncio em páginas que reproduzem vídeos de aula ou curso (risco da Lei Federal de Proteção à Privacidade de Vídeos), a menos que o advogado diga o contrário.

Aviso

  • Um aviso de privacidade/cookies em uma rota pública, vinculado a partir do rodapé e da página de cadastro/login, listando os fornecedores e categorias reais. Use apenas o nome real do operador e e-mail de contato; nunca invente endereços, DPOs ou reivindicações legais.

Como implementar

  • Código local / Claude Code: copie references/consent.ts para o aplicativo, registre cada fornecedor opcional como um loader, exclua as tags codificadas, construa o banner com os componentes do próprio aplicativo e conecte o link do rodapé. Mantenha o diff pequeno e no estilo do aplicativo.
  • Lovable / Bolt / v0 / Replit (construído por agente): cole o prompt Correção de ~/.claude/skills/consent-audit/references/prompts.md (ou o prompt Remover). Em seguida, verifique você mesmo; não confie no resumo do agente.

Prove isso (obrigatório antes de dizer que está pronto)

Execute estes testes contra a pré-visualização e, em seguida, novamente no URL ativo após a publicação. No navegador integrado do Claude, use uma nova aba com armazenamento limpo, depois read_network_requests e javascript_tool (document.cookie, localStorage):

TestePassa quando
Visita nova, sem clique0 requisições para domínios de anúncio, análise ou replay; nenhum cookie ou armazenamento opcional
Recusar, depois 2 navegações de páginaainda 0; banner permanece ausente; escolha salva
Aceitar análise apenasanálise carrega; pixels de anúncio não
Recarregarescolha lembrada; sem banner
Retirar via link do rodapéchamadas futuras param; cookies opcionais limpos; ainda conectado
GPC ligado (navigator.globalPrivacyControl forçado como true)publicidade negada sem clique
Navegação do lado do cliente (SPA)nenhum rastreador surge na mudança de rota
Conectar com uma conta de testenenhum e-mail ou ID de usuário em nenhuma requisição de rastreador
Compilação + verificação de tipopassa

Relatório: arquivos alterados, resultado de cada teste com evidência (domínios vistos ou "nenhum"), testes não executados e por quê, alterações não publicadas enviadas com ele, e "Não é aconselhamento jurídico. Consulte um advogado se você veicular anúncios ou atender visitantes da Califórnia/UE."

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Habilidades Relacionadas