# Catimini Mini-site promotionnel de la marque Catimini (Groupe CWF). ## Stack technique - Backend : PHP 8.4 / Symfony 7 / API Platform 4 / Doctrine 3 - Frontend : HTML5, CSS3 (animations, parallax), Vanilla JavaScript - Base de données : MariaDB (défaut), MySQL, MSSQL, PostgreSQL (activables) - Infrastructure : Docker multi-conteneurs (Apache httpd + PHP-FPM 8.4) - QA : PHPStan, PHP-CS-Fixer, Rector, Infection, PHPUnit, Behat, K6 ## Endpoints - `GET /` — Page d'accueil avec scène jungle animée (parallax, CSS animations) et formulaire d'inscription - `POST /subscribe` — Endpoint AJAX d'inscription (email + token reCAPTCHA v3, réponse JSON) - `GET /csv/{dateDebut}/{dateFin}` — Export CSV des abonnés (HTTP Basic Auth, max 31 jours) ## Entités Doctrine - `Consumer` — id, email (unique), source ("catimini"), subscriptionDate ## Services - `ConsumerService::create(email)` — Crée un consumer (vérifie unicité) - `ConsumerService::emailExists(email)` — Vérifie si l'email existe déjà - `CsvExportService::export(dateDebut, dateFin)` — Génère un StreamedResponse CSV - `ReCaptchaValidator::verify(token)` — Valide un token reCAPTCHA v3 via Google API ## Configuration - Variables requises dans `.env.local` : DATABASE_URL, RECAPTCHA_SECRET_KEY, RECAPTCHA_SITE_KEY, GTM_ID, CSV_EXPORT_PASSWORD