diff --git a/docs/cahier-des-charges.md b/docs/cahier-des-charges.md index 5995faf..87105c5 100644 --- a/docs/cahier-des-charges.md +++ b/docs/cahier-des-charges.md @@ -181,16 +181,18 @@ Comme les invités uploadent des photos pouvant contenir des visages d'autres pe ## 📦 7. Livrables attendus du développeur -État au 2026-09-15 (fin de journée) — voir `docs/decisions.md` pour les décisions actées et le SQL complet dans `supabase/migrations/`. +État au 2026-09-16 (fin de journée) — voir `docs/decisions.md` pour les décisions actées et le SQL complet dans `supabase/migrations/`. -- [x] Page publique d'upload (`/e/{slug}`) — code écrit (`src/e/`), compression + HEIC + gestion d'erreurs. **Non testée en navigateur réel** (pas de projet Supabase live pour l'instant). -- [x] Page admin galerie + export ZIP (`/admin/{slug}?token=...`) — code écrit (`src/admin/gallery/`), consomme l'Edge Function `admin-gallery`. **Non testée en réel**, dépend de l'Edge Function ci-dessous. -- [x] Génération du QR code (export PNG/SVG imprimable) — code écrit (`src/admin/qrcode/`), page démo utilisable dès maintenant. -- [ ] Schéma Supabase (tables `pq_events`/`pq_photos` + RLS + policies Storage) — **SQL écrit et relu (sécurité OK après corrections), PAS ENCORE APPLIQUÉ**. En attente de validation finale de Kévin avant `apply_migration`. -- [x] Compression image côté client avant upload — `browser-image-compression`, intégrée dans `src/e/upload.js`. -- [x] Gestion de l'expiration (statut événement, blocage upload, suppression J+7) — blocage upload prêt côté schéma (`event_accepts_uploads`) ; job SQL `pq_expire_events` (pg_cron) écrit. **Reste ouvert** : mécanisme de déclenchement de la suppression des fichiers Storage (pg_net vs n8n, cf. `docs/decisions.md`) — à trancher avant implémentation. -- [x] Mention RGPD intégrée sur la page upload — texte de `docs/rgpd.md` repris verbatim. -- [x] Edge Function admin (liste photos + ZIP) — code écrit (`supabase/functions/admin-gallery/`), ZIP en streaming. **Non déployée, dépendance `zip.js` non testée en environnement réel** — à vérifier via `supabase functions serve` avant tout déploiement. +- [x] Page publique d'upload (`/e/{slug}`) — **déployée et testée en réel** sur `https://photobooth.assistantaikev.eu/e/{slug}`, upload confirmé depuis un vrai téléphone. +- [x] Page admin galerie + export ZIP (`/admin/{slug}?token=...`) — **déployée et testée en réel**, ZIP en streaming fonctionnel. +- [x] Génération du QR code (export PNG/SVG imprimable) — déployée (`/admin/qrcode/`), + carton imprimable A5 bonus (`/admin/print-template/`). +- [x] Schéma Supabase (schéma dédié `photobooth`, jamais exposé via PostgREST, accès via fonctions `SECURITY DEFINER`) — **appliqué et vérifié** sur le projet définitif `kevin-lecou-hub`. +- [x] Compression image côté client avant upload — `browser-image-compression`, testée en conditions réelles. +- [x] Gestion de l'expiration — blocage upload actif, job SQL `pq_expire_events`→`expire_events` (pg_cron) actif et vérifié planifié. Purge des fichiers Storage : Edge Function `expire-events` déployée et testée manuellement ; **déclenchement automatique (workflow n8n) créé mais pas encore activé** (credentials à finaliser côté Kévin). +- [x] Mention RGPD — déplacée d'un bloc permanent vers une modale de bienvenue au 1er passage par événement (demande Kévin), texte légal inchangé, toujours consultable via un lien dédié. +- [x] Edge Functions admin (`admin-gallery`, `expire-events`) — déployées et testées en réel sur `kevin-lecou-hub`. +- [x] **Nouveau** : limite de photos par invité, réglable par événement (`max_photos_per_guest`), appliquée côté serveur. +- [x] **Nouveau** : 3 passes de direction artistique (palette punchy corail/prune/doré, mode sombre automatique, finition animations/micro-interactions) — DA jugée "pas mal" par Kévin mais **pas encore validée définitivement** (retour direct : "pas encore vraiment fan des couleurs"), itération à poursuivre. - [ ] Documentation courte : comment créer un nouvel événement manuellement (en attendant l'automatisation n8n en V2) — pas encore rédigée. - [ ] Code source versionné (repo Git — **à préciser : GitHub perso de Kévin, ou autre ?** ⚠️ point ouvert) — dépôt local Git existant, pas de remote configuré à ce stade. diff --git a/docs/decisions.md b/docs/decisions.md index 4ce9040..7c4ac26 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -5,6 +5,43 @@ la date à laquelle elles ont été prises. Toute nouvelle décision structurant (schéma DB, auth, hébergement, etc.) doit être ajoutée ici après validation par Kévin. +## 2026-09-16 (récap fin de journée) + +Produit passé de "code écrit, rien de déployé" à **réellement en ligne et +testé** : `https://photobooth.assistantaikev.eu` (VPS Hostinger, nginx + +Traefik), backend sur le projet Supabase définitif `kevin-lecou-hub`. + +- **Bugs réels trouvés et corrigés en cours de route** (tous via tests en + conditions réelles, pas en théorie) : + - MIME type `.mjs` mal servi par nginx (bloquait tout le JS qui importe + un module vendorisé — upload invité ET générateur QR étaient cassés). + - Chemins relatifs (`style.css`, `config.js`, `gallery.js`) cassés sur les + URLs réécrites `/e/` et `/admin/` — passage en chemins + absolus partout. + - Bug de cascade CSS présent **depuis le tout premier commit** : + `display: flex` déclaré en dur sur `.upload-form`/`.welcome-modal` + empêchait `hidden` (JS) de masquer quoi que ce soit visuellement — le + formulaire est resté affiché en permanence, superposé aux autres états, + sans que personne ne s'en rende compte avant un test réel. + - Faille d'abus sur `insert_public_photo` (spam de lignes sans upload + réel) — corrigée, vérification d'existence du fichier Storage ajoutée. +- **Nouvelle fonctionnalité** : limite de photos par invité par événement + (`max_photos_per_guest`), appliquée côté serveur via un `guest_id` + anonyme (localStorage) — pas une identité vérifiée, contournable, mais + fait respecter la vraie limite côté base. +- **RGPD** : mention légale déplacée d'un bloc permanent vers une modale de + bienvenue personnalisée (nom de l'événement) au premier passage par + événement — texte légal inchangé, juste la présentation. +- **Direction artistique** : 3 passes (palette sobre → palette punchy + corail/prune/doré/Fraunces → mode sombre + finition animations). Statut + au 2026-09-16 soir : jugée "pas mal, vraiment fonctionnel" par Kévin, + mais **couleurs/DA pas encore validées définitivement** — Kévin prévoit + un retour détaillé à l'agent direction-artistique lors d'une prochaine + session. +- **Reste ouvert** : activation du workflow n8n de purge Storage + (credentials à créer côté Kévin), documentation de création d'un + événement (encore manuel en SQL), remote Git à définir. + ## 2026-09-15 - **Expiration des données** : suppression à **J+7 à partir de la date de