Files
photobooth-qr/docs/architecture.md
T

2.5 KiB

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/<slug>).
  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/<slug>?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

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é).
  • Bibliothèque de compression image côté client (ou implémentation maison via Canvas API pour rester sobre en dépendances).