Contact Us

Consent & Analytics

Consent showcase: consent banner, script injection, state management, event dispatch.

Analytics Configuration (Build-Time)

These values are read from site.ts at build time. Changes require a dev server restart (or rebuild for production).

{
  "consentRequired": true,
  "gtmEnabled": false,
  "gtmId": "GTM-XXXXXX",
  "ga4Enabled": false,
  "ga4Id": "G-XXXXXXX",
  "customSnippetsCount": 0,
  "expirationDays": 365,
  "policyUrl": "/privacy/",
  "cookieClearingPatterns": [
    "_ga",
    "_gid",
    "_gat",
    "_gcl",
    "_custom"
  ]
}
Show code
import { siteConfig } from "@site/config/site";

const { analytics } = siteConfig;
// analytics.consentRequired — boolean
// analytics.googleTagManager.enabled / .id
// analytics.googleAnalyticsGA4.enabled / .id
// analytics.consent.expirationDays / .policyUrl

Current consent state read from localStorage. Updates when you interact with the consent banner or use the console commands below.

Status: loading...

Timestamp: loading...

Expired: loading...

Show code
{/* Read consent state from localStorage */}
const raw = localStorage.getItem("analytics-consent");
const parsed = JSON.parse(raw);
// parsed.status — "accepted" | "declined" | undefined
// parsed.timestamp — Unix ms timestamp

Injected Scripts (Runtime)

Checks the DOM for known analytics script patterns. Click "Scan" to inspect.

GTM script:

GA4 script:

dataLayer entries:

Custom snippets in DOM:

trackEvent Test

Fires a test event via window.trackEvent(). In dev mode, check console.debug. In production, check window.dataLayer.

Show code
// Fire a custom event via the trackEvent helper
window.trackEvent('event_name', { key: 'value' });

// In dev mode: events log to console.debug
// In production: events push to window.dataLayer

Console Commands

Useful commands for testing consent flows:

Clear consent and reload:

localStorage.removeItem('analytics-consent'); location.reload();

Simulate expired consent:

var c = JSON.parse(localStorage.getItem('analytics-consent')); c.timestamp = 0; localStorage.setItem('analytics-consent', JSON.stringify(c)); location.reload();

Check dataLayer:

console.table(window.dataLayer);
Show code
// Clear consent and reload (resets to banner shown state)
localStorage.removeItem('analytics-consent'); location.reload();

// Simulate expired consent
var c = JSON.parse(localStorage.getItem('analytics-consent'));
c.timestamp = 0;
localStorage.setItem('analytics-consent', JSON.stringify(c));
location.reload();

// Inspect dataLayer entries
console.table(window.dataLayer);

Search

Search across pages and articles. Use arrow keys to navigate results.

Search across pages and articles.

Loading search...

Search is unavailable. Please try again later.

    No results for ""

    Try different keywords or fewer words.