# Architecture ## Vue d'ensemble Le système repose sur un flux simple, sans compte invité, avec Supabase comme unique backend (base de données + stockage de fichiers). 1. Un événement est créé dans la table `events` avec un `slug` unique (utilisé dans l'URL publique) et un `admin_token` (utilisé pour l'accès admin). 2. Un QR code pointe vers l'URL publique d'upload de l'événement (`/e/`). 3. Un invité scanne le QR code, arrive sur la page d'upload, compresse ses photos côté client, puis les envoie vers Supabase Storage. Une ligne est créée dans la table `photos` pour chaque fichier. 4. L'organisateur (admin) accède à la galerie via une URL contenant son `admin_token` (`/admin/?token=...`), consulte les photos, et peut déclencher un export ZIP de l'ensemble des photos de l'événement. 5. À J+7 après la **date de l'événement** (pas la date de création), les photos et les métadonnées associées sont automatiquement supprimées, que le ZIP ait été téléchargé ou non (voir `rgpd.md` et `decisions.md`). ## Schéma de flux ```mermaid flowchart TD A[Invité scanne le QR code] --> B[Page d'upload publique /e/slug] B --> C[Compression image côté client] C --> D[(Supabase Storage\nbucket photos)] C --> E[(Table photos\nSupabase DB)] D --> F[Galerie admin /admin/slug?token=...] E --> F F --> G[Export ZIP de toutes les photos] H[Date événement + 7 jours] --> I[Suppression automatique\nphotos + storage] E -.expire_at atteint.-> I D -.expire_at atteint.-> I ``` ## Composants | Composant | Rôle | Techno | |---|---|---| | Page upload (publique) | Formulaire de dépôt photo, sans auth | HTML/CSS/JS léger | | Compression image | Réduction de poids avant envoi | Canvas API / lib légère côté client | | Supabase Storage | Stockage des fichiers photo | Supabase Storage (bucket `photos`) | | Supabase DB | Métadonnées événements et photos | Supabase Postgres | | Page galerie admin | Consultation + export ZIP | HTML/CSS/JS léger | | Job d'expiration | Suppression auto à J+7 | Fonction planifiée (Supabase Edge Function / cron), à définir | ## Points à trancher avec Kévin avant implémentation - Mécanisme exact du job d'expiration (cron Supabase, Edge Function planifiée, ou script sur le VPS existant). - Génération et hébergement du QR code (généré à la volée ou stocké).