# Snauw Counter - Mobile-first Webapplicatie De **Snauw Counter** is een complete, privacy-bewuste webapplicatie om onvriendelijk gedrag bij te houden. Gebouwd met Flask (Python) en geoptimaliseerd voor mobiele apparaten. ## ✅ Volledige Features Geïmplementeerd ### 🔧 Technische Specificaties - **Backend**: Flask 2.3.3 + SQLAlchemy - **Database**: SQLite (ontwikkeling) / PostgreSQL (productie ready) - **Frontend**: Mobile-first responsive design - **Authentication**: Flask-Login sessie management - **Privacy**: GDPR/AVG compliant ### 📱 Gebruiksmodi 1. **Anonieme gebruikers**: Data opslag via localStorage + cookies 2. **Geregistreerde gebruikers**: Database opslag met account sync ### 🎯 Kernfunctionaliteit - ⚡ **Snelle incident registratie** (1 klik ernstscore 1-10) - 📊 **Uitgebreide statistieken** met Chart.js visualisaties - 📈 **Trend analyse** (dag/week/maand overzichten) - 🔄 **Automatische data migratie** van anoniem naar geregistreerd - 📱 **Mobile-first design** geoptimaliseerd voor smartphones ### 🔒 Privacy & Veiligheid - ✅ **Cookie consent** en transparante data gebruik - ✅ **Data export** functionaliteit (JSON format) - ✅ **Account verwijdering** met volledige data wissing - ✅ **Anonieme modus** zonder account vereiste - ✅ **Locale opslag** voor anonieme gebruikers - ✅ **Veilige wachtwoord hashing** met bcrypt ### 🌐 API Endpoints Geïmplementeerd - `GET /` - Homepage met incident formulier - `POST /add-incident` - Nieuwe incident registratie - `POST /api/incidents` - AJAX incident toevoeging - `GET /statistics` - Statistieken dashboard - `GET /api/statistics` - API voor statistiek data - `POST /register` - Gebruiker registratie - `POST /login` - Inloggen - `GET /logout` - Uitloggen - `POST /migrate-data` - Data migratie - `GET /export-data` - GDPR data export - `POST /delete-account` - Account verwijdering - `GET /privacy` - Privacy beleid ## 🚀 Installatie & Gebruik ### Vereisten - Python 3.8+ - Virtual environment (aanbevolen) ### Setup ```bash # Clone het project cd snauwcounter # Maak virtual environment python3 -m venv snauwcounter_env source snauwcounter_env/bin/activate # Installeer dependencies pip install -r requirements.txt # Start de applicatie python run.py ``` De applicatie draait op: http://localhost:5000 ### Database Initialisatie De database wordt automatisch geïnitialiseerd bij de eerste start. ## 🏗️ Architectuur ### Database Schema ```sql Users: - id (Primary Key) - email (Unique) - password_hash - created_at Incidents: - id (Primary Key) - user_id (Foreign Key, nullable voor anonieme gebruikers) - session_id (Voor anonieme tracking) - timestamp (Incident tijd) - severity (1-10 schaal) - notes (Optionele beschrijving) - created_at ``` ### Frontend Componenten - **Responsive Grid Layout** (CSS Grid/Flexbox) - **Interactive Severity Selector** (1-10 knoppen) - **Chart.js Visualisaties** (Trends, statistieken) - **Progressive Web App** (PWA) features - **Floating Action Button** voor snelle incident toevoeging - **Modal Dialogs** voor anonieme gebruikers ### Security Features - **CSRF Protection** via Flask-WTF - **Password Hashing** met bcrypt - **Session Management** via Flask-Login - **SQL Injection Prevention** via SQLAlchemy ORM - **XSS Protection** via Jinja2 escaping ## 📊 Statistieken & Visualisaties ### Beschikbare Metrics - Totaal aantal incidenten - Gemiddelde ernstscore - Incidenten per dag/week/maand - Trend analyse laatste 7 dagen - Piek ernstscore tracking ### Chart Types - **Bar Charts** voor incident counts - **Line Charts** voor trends over tijd - **Combined Charts** voor count + severity trends ## 🌍 Productie Deployment ### Environment Variabelen ```bash SECRET_KEY=your-secret-key-here DATABASE_URL=postgresql://user:pass@host:port/db ``` ### PostgreSQL Setup ```sql CREATE DATABASE snauwcounter; CREATE USER snauw_user WITH PASSWORD 'secure_password'; GRANT ALL PRIVILEGES ON DATABASE snauwcounter TO snauw_user; ``` ### WSGI Server (Gunicorn) ```bash pip install gunicorn gunicorn -w 4 -b 0.0.0.0:8000 run:app ``` ### Nginx Reverse Proxy ```nginx location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ``` ## 🎨 UI/UX Highlights ### Mobile-First Design - Touch-friendly buttons (min 44px) - Optimized voor one-handed gebruik - Fast loading (critical CSS inline) - Progressive enhancement ### Accessibility - Semantic HTML markup - ARIA labels waar nodig - Keyboard navigation support - High contrast ratio (4.5:1+) ### Performance - Minimale JavaScript dependencies - Efficient database queries - Gzip compression ready - CDN ready voor static assets ## 🔧 Development Tools ### CLI Commands ```bash # Initialize database python run.py init-db # Create test user python run.py create-test-user ``` ### Testing (Future Enhancement) Ready voor implementatie van: - Unit tests (pytest) - Integration tests - E2E tests (Playwright/Selenium) ## 📋 Features Overzicht ### ✅ Volledig Geïmplementeerd - [x] Mobile-first responsive design - [x] Incident registratie (1-10 ernstscore) - [x] Gebruiker authenticatie (register/login) - [x] Anonieme gebruiker ondersteuning - [x] localStorage/cookies voor anonieme data - [x] Automatische data migratie - [x] Statistieken dashboard - [x] Trend visualisaties - [x] GDPR compliance (export/delete) - [x] Privacy beleid pagina - [x] PWA manifest - [x] API endpoints voor AJAX - [x] Session management - [x] Database models & migrations - [x] Error handling - [x] Flash messaging systeem ### 🚀 Production Ready De applicatie is volledig functioneel en production-ready met: - Veilige database configuratie - Environment variabelen support - WSGI server compatibiliteit - HTTPS ready - Database connection pooling support - Logging configuratie - Error pages De **Snauw Counter** is een complete implementatie van alle gevraagde features en klaar voor deployment!