Experience truly optional tracking. Your privacy is protected by default, with enhanced features available only when you choose to enable them. https://gdpr.naiv.no/
Find a file
Ole-Morten Duesund 54e9712a63 feat: Add privacy-first enhancements celebrating user choice
- Enhanced consent modal with equally prominent 'No thanks' option
- Added live cookie counter showing real-time cookie status
- Implemented privacy score (100% when privacy mode active)
- Added achievement system rewarding privacy choices
- Show statistics that 73% of users choose privacy
- Created before/after comparison showing benefits
- Added cookie education with detailed explanations
- Celebratory messages when choosing privacy
- Developer education showing GDPR compliance in ~100 lines
- Created ultra-simple 30-line implementation (simple-gdpr.html)
- Added AGENTS.md with development guidelines

Makes refusing tracking the celebrated default choice, showing that privacy-first is easy and everything works perfectly without tracking.
2025-09-25 13:55:12 +02:00
AGENTS.md feat: Add privacy-first enhancements celebrating user choice 2025-09-25 13:55:12 +02:00
CLAUDE.md Update documentation with comprehensive i18n features 2025-09-08 13:19:26 +02:00
favicon-16x16.png Add favicon and improve demo page 2025-09-08 13:05:14 +02:00
favicon-32x32.png Add favicon and improve demo page 2025-09-08 13:05:14 +02:00
favicon.ico Add favicon and improve demo page 2025-09-08 13:05:14 +02:00
favicon.svg Add favicon and improve demo page 2025-09-08 13:05:14 +02:00
index.html feat: Add privacy-first enhancements celebrating user choice 2025-09-25 13:55:12 +02:00
integration-example.js Add GDPR compliant optional tracking solution 2025-09-08 12:59:47 +02:00
README.md feat: Add privacy-first enhancements celebrating user choice 2025-09-25 13:55:12 +02:00
simple-gdpr.html feat: Add privacy-first enhancements celebrating user choice 2025-09-25 13:55:12 +02:00

GDPR Compliant Optional Tracking Button

A lightweight, user-friendly JavaScript solution for implementing GDPR-compliant optional tracking on websites. This project celebrates privacy as the default choice, showing that refusing tracking is normal, easy, and has zero negative impact on user experience.

🌐 Now with full Norwegian and English language support!

Features

Core Privacy Features

  • 🔒 GDPR Compliant by Default: Minimal tracking until user consents
  • 🎉 Privacy-First Design: Refusing tracking is celebrated with achievements and positive messaging
  • 🏆 Privacy Achievements: Unlock badges for choosing privacy
  • 📊 Live Cookie Counter: See exactly how many cookies are active
  • 💯 Privacy Score: Visual indicator showing your privacy level
  • 🆚 Before/After Comparison: Clear visualization of what changes with tracking

User Experience

  • 🌐 Multilingual Support: Norwegian and English with instant language switching
  • 🎨 Beautiful UI: Gradient button with hover effects and smooth animations
  • 📱 Mobile Responsive: Works perfectly on all device sizes
  • Equal Choice Design: "No thanks" is as prominent as "Yes" in consent modal
  • 📈 Privacy Statistics: Shows that 73% of users choose privacy
  • 🍪 Cookie Education: Click cookie counter to learn about each cookie

Developer Features

  • Lightweight: Pure vanilla JavaScript, no dependencies
  • 🔧 Easy Integration: Drop-in solution for any website
  • 📝 Ultra-Simple Version: 30-line implementation in simple-gdpr.html
  • 🍪 Cookie Management: Automatic cleanup when tracking is disabled
  • 📊 Analytics Ready: Google Analytics consent mode integration
  • 💾 Persistent Preferences: Language and consent choices remembered between visits

Demo

🚀 Live Demo: https://kode.naiv.no/olemd/gdpr

Open index.html in your browser to see the button in action!

Language Support:

  • Click EN/NO toggle in the top-right corner to switch languages
  • All content translates instantly without page reload
  • Language preference persists between visits

Quick Start

<!-- Copy the contents of gdpr-tracking-consent.html -->
<!-- Everything you need is in one file -->

Option 2: Minified Snippet (Production ready)

<!-- Add this anywhere in your HTML body -->
<div class="tracking-consent-container" style="position:fixed;bottom:20px;right:20px;z-index:1000">
  <button id="trackingConsentBtn" class="tracking-consent-btn">
    <span>📊</span>
    <span id="btnText">Plz trac me!</span>
  </button>
</div>
<script>
// Minified version available in integration-example.js
</script>

How It Works

Default State (GDPR Compliant)

  • Only essential cookies are allowed
  • Basic analytics with anonymized IP
  • No personalization or ad tracking
  • No cross-site tracking

Enhanced Tracking (User Opt-in)

  • Detailed page interactions
  • User preferences for personalization
  • Marketing campaign effectiveness
  • Full Google Analytics features

Integration Examples

WordPress

// Add to functions.php
function add_gdpr_tracking_consent() {
    // Include the snippet
}
add_action('wp_footer', 'add_gdpr_tracking_consent');

React

import GDPRTrackingConsent from './GDPRTrackingConsent';

function App() {
  return (
    <div>
      {/* Your app content */}
      <GDPRTrackingConsent />
    </div>
  );
}

Google Analytics Setup

<script>
  gtag('consent', 'default', {
    'analytics_storage': 'denied',
    'ad_storage': 'denied'
  });
  
  // The button will update these settings when user consents
</script>

Customization

Button Text

// Change the button text
btnText.textContent = 'Enable Analytics';

Styling

.tracking-consent-btn {
  /* Customize colors, position, size */
  background: your-gradient;
  bottom: 30px;
  right: 30px;
}
// Customize the consent message
const consentText = "Your custom consent message here";

API Events

The button fires custom events you can listen to:

document.addEventListener('trackingModeChanged', (e) => {
  console.log('Tracking mode:', e.detail.mode); // 'minimal' or 'enhanced'
});
// Access the consent status
const isTrackingEnabled = localStorage.getItem('gdpr-tracking-consent') === 'true';

// Programmatically enable/disable
window.trackingConsent.enableTracking();
window.trackingConsent.disableTracking();

Internationalization (i18n)

Language Support

Supports Norwegian (Bokmål) and English with:

  • Complete UI translation including consent modal
  • Proper Norwegian capitalization and compound words
  • Real-time language switching
  • Persistent language preference

Language API

// Switch language programmatically
setLanguage('no'); // Norwegian
setLanguage('en'); // English

// Get current language
const currentLang = localStorage.getItem('gdpr-language') || 'en';

// Listen for language changes
document.addEventListener('DOMContentLoaded', () => {
  // Language is automatically loaded from localStorage
});

Adding New Languages

  1. Add translations to the translations object:
const translations = {
  en: { /* English translations */ },
  no: { /* Norwegian translations */ },
  de: { /* German translations */ }
};
  1. Add language button:
<button class="lang-btn" onclick="setLanguage('de')" id="langDe">DE</button>

Browser Support

  • Modern browsers (ES6+)
  • Internet Explorer 11+ (with polyfills)
  • All mobile browsers

Files

  • index.html - Complete demo with all privacy-first features and i18n support
  • simple-gdpr.html - Ultra-simple 30-line GDPR compliance example
  • integration-example.js - Integration examples for different frameworks
  • README.md - This documentation
  • CLAUDE.md - Repository guidance for Claude Code
  • AGENTS.md - Development guidelines for coding agents
  • favicon.svg, favicon.ico - Privacy-themed favicon files

This solution helps with:

  • GDPR Article 7 (Consent)
  • ePrivacy Directive
  • CCPA compliance
  • Cookie Law compliance

Note: This is a technical implementation. Always consult with legal experts for complete GDPR compliance in your specific jurisdiction and use case.

License

MIT License - Feel free to use in any project!