README.md: - Add multilingual support badge and live demo link - Document Norwegian and English language switching - Add i18n API section with language functions - Include instructions for adding new languages - Update file listing with current filenames CLAUDE.md: - Add internationalization system architecture details - Document language preference persistence - Include i18n testing commands and API usage - Add customization points for translations - Update key files section with favicon info 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
5.2 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Repository Information
- Git Repository: ssh://git@kode.naiv.no:2222/olemd/gdpr.git
- Forgejo Server: https://kode.naiv.no
- Owner: olemd
Project Overview
This is a GDPR-compliant optional tracking solution that provides a privacy-first approach to website analytics. The core concept is "minimal tracking by default, enhanced tracking by consent" - users start with privacy-protected minimal tracking and can opt-in to enhanced features. Features comprehensive i18n support for Norwegian and English.
Architecture
Core Components
GDPRTrackingConsent Class (index.html)
- Main JavaScript class that manages consent state and UI interactions
- Handles localStorage persistence with key 'gdpr-tracking-consent'
- Integrates with Google Analytics consent modes (
analytics_storage,ad_storage,personalization_storage) - Manages cookie cleanup for tracking cookies (
_ga,_gid,_gat,_fbp,_fbc) - Fires custom events (
trackingModeChanged) for external integrations
Internationalization System
- Complete translation system supporting Norwegian (Bokmål) and English
- Language preference persisted with key 'gdpr-language' in localStorage
- Real-time translation updates without page reload
- Language toggle button (EN/NO) in top-right corner
- All UI text, modal content, and notifications fully localized
Two-Mode System
- Minimal Mode: Essential cookies only, anonymized analytics, consent denied by default
- Enhanced Mode: Full tracking enabled only after explicit user consent
Key Files
index.html- Complete demo with hero section, feature explanations, live status indicator, and i18n supportintegration-example.js- Production-ready integration examples for React, Vue, WordPress, and vanilla JSREADME.md- Documentation covering API, customization, i18n, and legal compliancefavicon.svg,favicon.ico- Privacy-themed favicon with shield and lock design
Development Commands
Repository Operations
# Clone the repository
git clone ssh://git@kode.naiv.no:2222/olemd/gdpr.git
# Use fj (Forgejo CLI) for repository management
fj repo view olemd/gdpr
fj issue list
fj pr list
Testing the Demo
# Open the demo in your browser
open index.html
# or
python3 -m http.server 8000 # Then visit http://localhost:8000
Git Workflow
# Standard git operations work with the Forgejo server
git push origin main
git pull origin main
Integration Testing
The solution integrates with Google Analytics via consent modes:
// Check current consent status
localStorage.getItem('gdpr-tracking-consent') === 'true'
// Check current language
localStorage.getItem('gdpr-language') || 'en'
// Listen for mode changes
document.addEventListener('trackingModeChanged', (e) => {
console.log('Mode:', e.detail.mode); // 'minimal' or 'enhanced'
});
// Set language programmatically
setLanguage('no'); // Norwegian
setLanguage('en'); // English
Key Implementation Details
Consent Flow
- Page loads with minimal tracking (GDPR compliant by default)
- User sees "Plz trac me!" button in bottom-right
- Clicking shows consent modal with clear explanation
- User can enable enhanced tracking or dismiss
- Status persisted in localStorage, toggleable anytime
Google Analytics Integration
The solution expects Google Analytics to be initialized with consent mode:
gtag('consent', 'default', {
'analytics_storage': 'denied',
'ad_storage': 'denied',
'personalization_storage': 'denied'
});
The button automatically calls gtag('consent', 'update', {...}) when user changes preferences.
Cookie Management
- Automatically cleans up tracking cookies when switching to minimal mode
- Uses domain-aware cookie deletion for cross-subdomain cleanup
- Preserves essential functionality cookies (
functionality_storage: 'granted')
Customization Points
UI Customization
- Button styling via CSS classes
.tracking-consent-btnand.tracking-consent-btn.enabled - Modal content in
.consent-modal-content - Status indicator in
.tracking-status - Language toggle styling via
.language-toggleand.lang-btn
Behavioral Customization
- Change storage key by modifying
this.storageKeyin constructor - Customize consent message in modal HTML
- Add additional tracking services in
enableEnhancedTracking()method
Internationalization Customization
- Add new languages to
translationsobject with all required keys - Modify Norwegian translations for local variants (e.g., Nynorsk)
- Add language detection based on browser locale
- Customize language button labels and positioning
Framework Integration
The integration-example.js contains complete examples for:
- WordPress (functions.php and shortcode approaches)
- React (hooks-based component)
- Vue.js (composition API)
- Minified standalone snippet for any website
Legal Compliance Notes
This implementation addresses technical requirements for:
- GDPR Article 7 (explicit consent)
- ePrivacy Directive cookie requirements
- CCPA transparency requirements
However, legal compliance requires consultation with legal experts for specific jurisdictions and use cases.