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>
150 lines
No EOL
5.2 KiB
Markdown
150 lines
No EOL
5.2 KiB
Markdown
# 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 support
|
|
- `integration-example.js` - Production-ready integration examples for React, Vue, WordPress, and vanilla JS
|
|
- `README.md` - Documentation covering API, customization, i18n, and legal compliance
|
|
- `favicon.svg`, `favicon.ico` - Privacy-themed favicon with shield and lock design
|
|
|
|
## Development Commands
|
|
|
|
### Repository Operations
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# Open the demo in your browser
|
|
open index.html
|
|
# or
|
|
python3 -m http.server 8000 # Then visit http://localhost:8000
|
|
```
|
|
|
|
### Git Workflow
|
|
```bash
|
|
# 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:
|
|
```javascript
|
|
// 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
|
|
1. Page loads with minimal tracking (GDPR compliant by default)
|
|
2. User sees "Plz trac me!" button in bottom-right
|
|
3. Clicking shows consent modal with clear explanation
|
|
4. User can enable enhanced tracking or dismiss
|
|
5. Status persisted in localStorage, toggleable anytime
|
|
|
|
### Google Analytics Integration
|
|
The solution expects Google Analytics to be initialized with consent mode:
|
|
```javascript
|
|
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-btn` and `.tracking-consent-btn.enabled`
|
|
- Modal content in `.consent-modal-content`
|
|
- Status indicator in `.tracking-status`
|
|
- Language toggle styling via `.language-toggle` and `.lang-btn`
|
|
|
|
### Behavioral Customization
|
|
- Change storage key by modifying `this.storageKey` in constructor
|
|
- Customize consent message in modal HTML
|
|
- Add additional tracking services in `enableEnhancedTracking()` method
|
|
|
|
### Internationalization Customization
|
|
- Add new languages to `translations` object 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. |