shannonmcgivney/consent-gate

Corrige un sitio web o una aplicación generada con IA para que ningún píxel de anuncios, analytics, reproducción de sesión o script de terceros opcional se cargue, busque o envíe nada hasta que el visitante lo acepte – un cargador de consentimiento con rechazo por defecto, un banner honesto (Aceptar y Rechazar iguales, categorías sin marcar), retirada, Control Global de Privacidad, sin correos de clientes ni URLs completas en los payloads de seguimiento, y un aviso de privacidad preciso – y luego lo prueba con visitas nuevas.

¿Qué es consent-gate?

Este skill (consent-gate) implementa un sistema de gestión de consentimiento con rechazo por defecto para aplicaciones web y construidas con IA (vibe-coded). Su objetivo principal es asegurar que ningún script de terceros (píxeles de anuncios, analytics, reproducción de sesión) se cargue, ejecute o envíe datos hasta que el usuario haga clic explícitamente en “Aceptar” en un banner de cookies. Es útil para desarrolladores que quieren cumplir con regulaciones de privacidad (como GDPR, CCPA) y evitar el seguimiento no consentido. Funciona con un archivo central (consent.ts) que controla la carga dinámica de scripts, un banner con opciones igualmente prominentes (Aceptar y Rechazar), categorías sin marcar por defecto, y soporte para Control Global de Privacidad (GPC). Además, incluye una lista detallada de pruebas para verificar que ningún tracker se ejecute antes del consentimiento. Está diseñado para usarse después de una auditoría de consentimiento y es compatible con plataformas como Claude Code, Lovable, Bolt, v0 y Replit. No proporciona asesoría legal y recomienda revisión por un abogado si se manejan anuncios o visitantes de California/UE.

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

Installed? Explore more Productividad y colaboración skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Consent gate: nada opcional se ejecuta hasta que digan que sí

La regla del video, en una línea: ningún píxel de seguimiento, analytics o scripts de terceros se carga hasta que el usuario haga clic en Aceptar en el banner de cookies. Un banner que aparece mientras el píxel ya se ha disparado no arregla nada. Este skill construye la parte de espera.

No es asesoría legal. Nunca escribas "totalmente compliant" en código, copias o informes. Di lo que la aplicación ahora hace y lo que se probó.

Antes de tocar nada

  1. Ten una auditoría. Si no hay un informe de consent-audit para esta aplicación, ejecútalo primero. Necesitas el inventario: qué proveedores, dónde comienzan, qué envían.
  2. Pregunta al propietario una pregunta por tracker: mantener, poner puerta o eliminar? Si un tracker no se usa para decisiones o anuncios, eliminarlo es mejor que ponerle puerta. Un sitio que solo tiene almacenamiento necesario no necesita ningún banner; no agregues uno.
  3. Sepan lo que publicará. Los constructores alojados (Lovable, etc.) envían todos los cambios no publicados juntos. Haz una lista y obtén una aprobación antes de publicar.
  4. Protege los datos propios. Poner puerta a los trackers no debe tocar el inicio de sesión, pagos ni las escrituras en la base de datos de la aplicación (trabajos de estudiantes, progreso, formularios). Dilo en el informe.

Qué significa "con puerta" (la lista de verificación que la corrección debe cumplir)

Carga

  • Un cargador central (src/lib/consent.ts, ver references/consent.ts). Sin píxel, GTM, gtag, PostHog o <script> de reproducción en index.html, el layout raíz o main.tsx.
  • Los scripts opcionales no se obtienen, no solo no se inicializan: import() dinámico o inyección de script ocurre solo después de la aceptación.
  • No se reproducen eventos encolados: las visitas a páginas anteriores al consentimiento se descartan, no se envían tarde.
  • El reenvío del lado del servidor (Meta Conversions API, /api/track, funciones edge) verifica la misma elección almacenada, enviada con la solicitud.
  • Los analytics inyectados por el host están desactivados en el origen (Lovable → Configuración → Analytics de visitantes desactivado; Vercel/Netlify/Cloudflare analytics desactivados), o tienen puerta antes de la inyección. Eliminar un script después de que se carga es demasiado tarde, porque la primera solicitud ya se fue.
  • Modo de Consentimiento de Google (si GA/Ads permanecen): gtag('consent','default',{ad_storage:'denied',analytics_storage:'denied',ad_user_data:'denied',ad_personalization:'denied'}) y el propio script de gtag aún espera la aceptación en la configuración por defecto de este skill. Modo de Consentimiento "básico", no "avanzado", porque el avanzado envía pings sin cookies antes del consentimiento.

El banner

  • Aceptar opcionales y Rechazar opcionales son igualmente prominentes: mismo tamaño, mismo estilo, misma cantidad de clics. Además, una opción Configuración.
  • Los interruptores de categoría (Analítica, Publicidad, etc.) comienzan sin marcar.
  • Cerrar el banner (X / Escape) significa rechazar.
  • La elección se guarda con una versión y una caducidad (6 a 12 meses). Cambiar la lista de proveedores aumenta la versión y pregunta de nuevo.
  • Un enlace persistente "Opciones de privacidad" en el pie de página reabre la configuración.
  • Retirar detiene futuras llamadas y elimina las cookies y almacenamiento opcionales propiedad de la aplicación (_ga*, _fbp, _gcl_au, _ttp, ph_*, ajs_*, _hj*, _clck) sin tocar la autenticación.
  • Control Global de Privacidad (navigator.globalPrivacyControl === true) se trata como Rechazar para publicidad/venta/compartición, y el banner dice que fue respetado.

Qué se envía, incluso después del consentimiento

  • Sin correos electrónicos, números de teléfono, nombres o datos de nacimiento en los payloads de píxeles o analytics (sin emparejamiento avanzado de Meta, sin identify(email)). Usa un ID opaco solo si es realmente necesario.
  • Las URLs se envían sin ?query y #fragment (códigos de regalo, tokens de restablecimiento, términos de búsqueda). Si un proveedor no puede eliminarlos, elimina al proveedor.
  • Nada de respuestas de cuestionarios, contenido de chat, datos de salud/finanzas/nacimiento o campos de formulario.
  • Páginas de video: ningún píxel de anuncios en páginas que reproducen videos de lecciones o cursos (riesgo de la Ley federal de Protección de la Privacidad de Video), a menos que el asesor legal diga lo contrario.

Aviso

  • Un aviso de privacidad/cookies en una ruta pública, enlazado desde el pie de página y la página de registro/inicio de sesión, que enumera los proveedores y categorías reales. Usa solo el nombre real del operador y el correo de contacto; nunca inventes direcciones, DPOs o afirmaciones legales.

Cómo implementar

  • Código local / Claude Code: copia references/consent.ts en la aplicación, registra cada proveedor opcional como un loader, elimina las etiquetas codificadas, construye el banner con los componentes propios de la aplicación y conecta el enlace del pie de página. Mantén el diff pequeño y en el estilo de la aplicación.
  • Lovable / Bolt / v0 / Replit (construido por agente): pega el prompt de Corrección de ~/.claude/skills/consent-audit/references/prompts.md (o el prompt de Eliminación). Luego verifícalo tú mismo; no confíes en el resumen del agente.

Pruébalo (requerido antes de decir que está listo)

Ejecuta estas pruebas contra la vista previa y luego contra la URL en vivo después de publicar. En el navegador integrado de Claude, usa una pestaña nueva con almacenamiento limpio, luego read_network_requests y javascript_tool (document.cookie, localStorage):

PruebaPasa cuando
Visita nueva, sin clic0 solicitudes a dominios de anuncios, analytics o reproducción; sin cookies opcionales ni almacenamiento
Rechazar, luego 2 navegaciones de páginasigue siendo 0; el banner desaparece; la elección se guarda
Aceptar solo analyticsanalytics se carga; los píxeles de anuncios no
Recargarla elección se recuerda; no hay banner
Retirar mediante el enlace del pie de páginalas llamadas futuras se detienen; las cookies opcionales se eliminan; aún con sesión iniciada
GPC activado (navigator.globalPrivacyControl forzado a true)publicidad denegada sin un clic
Navegación del lado del cliente (SPA)ningún tracker se cuela al cambiar de ruta
Iniciar sesión con una cuenta de pruebasin correo ni ID de usuario en ninguna solicitud de tracker
Compilación + verificación de tipospasa

Informe: archivos modificados, resultado de cada prueba con evidencia (dominios vistos o "ninguno"), pruebas no ejecutadas y por qué, cambios no publicados que se envían junto con ella, y "No es asesoría legal. Pide revisión de un abogado si manejas anuncios o atiendes a visitantes de California/UE".

Individual skills in this repo

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

Skills relacionados