shannonmcgivney/consent-audit

Audite un site web ou une application « vibe-codée » (Lovable, Bolt, v0, Replit, Next.js, React, HTML simple) pour détecter les traceurs qui se chargent ou envoient des données AVANT que le visiteur n'accepte dans la bannière de cookies – pixels publicitaires (Meta, Google, TikTok, LinkedIn), Google Tag Manager, analytics, session replay, widgets de chat, embeds, analytiques injectées par l'hébergeur, ainsi que les emails ou IDs clients envoyés aux traceurs. En lecture seule – une analyse de code associée à une vérification réseau en direct sur une visite vierge – aboutissant à un inventaire et une liste minimale de correctifs. À utiliser quand quelqu'un demande « est-ce que… »

Qu'est-ce que consent-audit ?

L'audit de consentement est un outil d'ingénierie automatisé qui répond à une question juridique et technique critique : sur un site web, quels traceurs (pixels publicitaires, analytics, session replay, widgets de chat, etc.) se déclenchent et envoient des données avant que le visiteur n'ait cliqué sur « Accepter » dans la bannière de cookies ? En s'appuyant sur des affaires réelles où des sites ont été poursuivis pour interception illégale (CIPA, Californie) jusqu'à 5 000 $ par violation, cet outil effectue une double vérification : (1) un scan du code source à la recherche de signatures de traceurs, de pixels et d'envois d'identifiants, et (2) une inspection réseau en direct sur une visite vierge (sans cookies) pour détecter les requêtes qui partent avant tout clic. Il classe chaque traceur en « nécessaire », « fonctionnel » ou « optionnel », et génère un rapport concis avec des preuves. L'outil est conçu pour fonctionner en lecture seule — il ne modifie rien — et s'intègre aux workflows de Claude Code, Cursor, ou tout agent capable d'exécuter un script Python et de lire les requêtes réseau. Il propose ensuite d'appliquer les correctifs via un mécanisme associé (« consent-gate »). Une attention particulière est portée aux analyses injectées par l'hébergeur (Lovable, Vercel, Netlify…), aux tag managers, et aux pages vidéo (risque VPPA).

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

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Audit de consentement : ce qui se lance avant que quiconque clique sur « Accepter » ?

La leçon derrière cette compétence (Dr. Erin Toussaint Jacques, reel Instagram, octobre 2026) : les applications « vibe-codées » sont un moyen facile de se faire poursuivre, car personne ne vérifie si le pixel de tracking se déclenche avant que le visiteur n'accepte. Un pixel est un petit bout de code provenant de Meta, Google et autres qui suit ce que les gens font sur votre site. En vertu de la loi californienne sur les écoutes clandestines (CIPA), un tracking qui commence avant le consentement peut être considéré comme une interception illégale, avec des dommages-intérêts légaux allant jusqu'à 5 000 $ par violation, et les procès pour pixels se comptent désormais par milliers. Avoir une bannière et attendre l'autorisation sont deux choses différentes. De nombreux sites poursuivis avaient une bannière ; le tracking se chargeait dès l'ouverture de la page.

Cet audit répond donc à une question avec des preuves : lors d'une visite vierge, avant tout clic, qu'est-ce qui se charge et qu'est-ce qui est envoyé, et à qui ?

Il s'agit d'un audit technique, pas d'un conseil juridique. Ne dites jamais à personne qu'il est « conforme ». Dites ce qui a été trouvé, ce qui a été corrigé, ce qui n'a pas été vérifié, et qu'un avocat devrait examiner la situation si le site diffuse des publicités ou vend dans l'UE ou en Californie.

Par défaut : lecture seule

Ne modifiez rien dans cette compétence : pas d'édition, de publication, de modification de base de données ou d'authentification, de nouveaux services, ou d'acceptation de conditions. Les correctifs sont du ressort de consent-gate, une fois que le propriétaire est d'accord.

Étape 1 : Inventorier le code

Si le code est local (ou un clone GitHub d'un projet Lovable), lancez le scanner :

python3 ~/.claude/skills/consent-audit/scripts/scan_trackers.py /chemin/vers/app

Il liste chaque traceur, pixel, analytique, replay, embed et signature de script tiers qu'il trouve, par fichier et ligne, signale les lignes qui semblent envoyer des emails ou des IDs utilisateur, et indique si une vérification de consentement apparaît à proximité. Une mention « vérification de consentement à proximité » est une piste, pas une preuve. Lisez le code autour de chaque résultat pour confirmer :

  • Où cela commence. index.html <head>, main.tsx, App.tsx, _app/layout, ou un fournisseur signifie que cela s'exécute sur chaque page, pour chaque visiteur.
  • Ce qui le verrouille. La balise script, l'import, ou le init() ne s'exécute-t-il qu'après un opt-in affirmé et stocké ? Une bannière qui se cache alors que gtag('config') a déjà été exécuté n'est pas un verrou.
  • Ce qu'il envoie. identify(email), setUser({ email }), correspondance avancée Meta (em, ph), URLs complètes avec chaînes de requête ? ou fragments # (codes cadeaux, jetons de réinitialisation, texte de recherche), et champs de formulaire.
  • Transfert côté serveur. Conversions API, /api/track, fonctions edge envoyant à Meta/Google/Segment. Elles doivent respecter le même choix.

S'il n'y a pas de code local (un projet Lovable accessible uniquement dans le navigateur), utilisez l'invite d'audit uniquement dans references/prompts.md dans le chat de ce projet, puis vérifiez son rapport avec l'Étape 2.

Étape 2 : Vérifier le site en direct (la partie qu'une bannière ne peut pas dissimuler)

Le code peut mentir par omission (tag managers, modules complémentaires de l'hébergeur, extraits CMS). Vérifiez toujours l'URL publiée dans un onglet de navigateur vierge, sans cookies :

  1. Ouvrez le site dans un nouveau contexte privé (dans le navigateur intégré de Claude : un nouvel onglet après avoir effacé le stockage, ou un site jamais visité ici). Ne cliquez sur rien.
  2. Lisez les requêtes réseau (read_network_requests). Toute requête vers un domaine de publicité, d'analytique ou de replay avant un clic est un résultat : listez le domaine, le chemin de l'URL, et si elle transporte des identifiants (fbp, _ga, cid, uid, em, ttp).
  3. Lisez les cookies et le stockage via javascript_tool : document.cookie, Object.keys(localStorage). Notez tout _ga, _fbp, _gcl_au, _ttp, _hj*, ph_*, ajs_*, _clck ou _uetsid.
  4. Cliquez sur Refuser (ou fermez la bannière s'il n'y a pas de refus). Naviguez vers deux autres pages. Tout nouveau déclenchement est un résultat.
  5. Cliquez sur Accepter dans un nouveau contexte vierge. Confirmez que les traceurs se chargent maintenant, pour que le verrou ne soit pas simplement cassé.
  6. Connectez-vous avec un compte de test s'il en existe un (jamais un vrai client). Vérifiez si l'email ou l'ID utilisateur part dans une requête de traceur.

Étape 3 : Vérifier les paramètres de l'hébergeur et de la plateforme

Les traceurs injectés par l'hôte n'apparaissent pas dans le code de l'application :

  • Lovable : Projet → Paramètres → Analytiques des visiteurs. C'est activé par défaut ; désactivez-le (ou verrouillez-le) sur chaque projet, y compris les nouveaux.
  • Vercel (Web Analytics / Speed Insights), Netlify (Analytics), Cloudflare (Web Analytics, Zaraz), Framer/Webflow/Wix/Squarespace (paramètres du site → code personnalisé / analytiques / pixels), EzyCourse / Systeme / Kajabi (champs de code de suivi, champ Facebook Pixel).
  • Tag managers : ouvrez le conteneur GTM et listez chaque tag et son déclencheur. « Toutes les pages » sans condition de consentement signifie qu'il se déclenche avant le consentement.

Étape 4 : Trier et rapporter

Classifiez chaque élément :

ClasseExemplesRègle
Nécessairesession de connexion, CSRF, panier, Stripe sur la page de paiement, vérifications anti-fraude/bot, préférences d'interface utilisateur sauvegardéesPeut s'exécuter sans consentement. Aucune bannière nécessaire pour ceux-ci seuls.
Embed fonctionnelMapbox sur la page de carte, lecteurs YouTube/Vimeo, Calendly, widgets de chatSe charge uniquement là où il est utilisé. Privilégier le clic-pour-charger ou les modes de confidentialité (youtube-nocookie).
Optionnelpixels publicitaires, GA/GTM, PostHog, Hotjar, Clarity, HeyCatch, session replay, reciblageNe doit pas se charger, chercher ou s'initialiser tant que le visiteur n'a pas opté pour cette catégorie.

Format du rapport (soyez court et fondé sur des preuves) :

AUDIT DE CONSENTEMENT : <app> (<url>), <date>
Avant tout clic : <N> traceurs optionnels se sont déclenchés  ->  SUCCÈS / ÉCHEC

| Fournisseur | Où cela commence (fichier:ligne ou paramètre hôte) | Se déclenche avant consentement ? | Envoie des données d'identité/URL ? | Classe | Correctif minimal |

Services nécessaires (OK sans consentement) : ...
Mention de confidentialité : présente/absente, liée depuis le pied de page ? liste des fournisseurs précise ?
Choix de retrait : y a-t-il un lien persistant « Choix de confidentialité » ?
Global Privacy Control respecté ? oui/non/non testé
Modifications non publiées dont la publication libérerait également : ...
Non vérifié : ...
Ceci n'est pas un conseil juridique. Faites examiner par un avocat si vous diffusez des publicités, servez des visiteurs de Californie/de l'UE, ou placez des pixels sur des pages vidéo.

Proposez ensuite consent-gate pour appliquer les correctifs. Si un traceur ne rapporte pas, recommandez de le supprimer plutôt que de le verrouiller : aucun traceur n'est la conformité la moins chère (dans les audits réels, supprimer un outil d'analyse inutilisé était souvent le seul correctif).

Points de vigilance issus d'audits réels

  • L'analytique démarrée depuis le fichier d'entrée de l'application (src/main.tsx) sur chaque page pour chaque visiteur, sans vérification de consentement, et le code de connexion envoyait les emails et IDs utilisateur des clients connectés à l'outil d'analyse à chaque connexion. L'outil ne pouvait pas supprimer les chaînes de requête, il a donc été entièrement supprimé.
  • Les analytiques de visiteurs de Lovable sont activées par défaut et sont injectées par l'hôte. Elles ne figurent pas dans le code.
  • Publier libère tout ce qui n'est pas publié. Avant de publier un correctif de confidentialité, listez les anciennes modifications non publiées qu'il va également diffuser (aides à la connexion, mises à jour de dépendances, correctifs de paiement) et obtenez l'accord du propriétaire.
  • Désactiver les analytiques n'est pas la même chose que désactiver la capture de données. La propre base de données de l'application (travaux des étudiants, progression, messages) est propriétaire et distincte. Dites-le explicitement, car les propriétaires s'inquiètent.
  • Pages vidéo + pixel Meta ajoutent un autre risque fédéral (Video Privacy Protection Act). Les sites de cours avec vidéos de leçons doivent traiter tout pixel sur ces pages comme une priorité élevée.

Individual skills in this repo

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

Skills associés