Commit Graph

5 Commits

Author SHA1 Message Date
Claude
9fe1f8bea2 fix: éliminer définitivement les bugs d'affichage des images privées
Cause racine : les Signed URLs Supabase étaient générées au moment du
rendu ISR et embarquées dans le HTML mis en cache. Si Vercel servait
le HTML avant régénération ou si la signed URL expirait, l'image
était cassée et necessitait plusieurs rechargements.

Solution — proxy /api/img/[key] :
- app/api/img/[key]/route.ts : nouvelle route publique force-dynamic
  qui génère une Signed URL fraîche à chaque requête image (TTL 1h),
  avec Cache-Control 55 min côté navigateur/CDN ; fallback sur l'image
  Unsplash par défaut si createSignedUrl échoue ; 302 direct pour les
  URLs externes
- lib/site-images.ts : getSiteImages() ne génère plus jamais de Signed
  URL — les chemins storage: retournent /api/img/<key> (URL permanente),
  les URLs externes sont retournées telles quelles

Résultat : le HTML statique/ISR ne contient plus jamais de signed URL
éphémère → zéro image cassée, zéro rechargement nécessaire.

https://claude.ai/code/session_01PzA98VhLMmsHpzs7gnLHGs
2026-02-20 07:16:20 +00:00
Claude
c18bc4f6fd feat: ajouter la photo de Cyprien dans l'admin et la page maçon
- lib/site-images.ts : nouvelle clé macon_photo_cyprien (url vide par
  défaut, l'admin upload la vraie photo)
- app/macon/page.tsx : remplace le placeholder SVG par un <img> conditionnel
  — affiche l'image quand la clé est renseignée, conserve le placeholder
  texte "Photo de Cyprien (sur le chantier)" tant qu'aucune photo n'est
  uploadée

https://claude.ai/code/session_01PzA98VhLMmsHpzs7gnLHGs
2026-02-19 11:34:42 +00:00
Claude
51bc7e1103 feat: répertorier toutes les images des démos dans l'admin
- lib/site-images.ts : ajout de 21 nouvelles clés d'images couvrant
  les démos Maçon et Paysagiste (héro, sliders avant/après nommés
  "photo gauche slider N" / "photo droite slider N", cards services,
  photo équipe, galerie 8 photos, CTA) ; renommage des labels accueil
  pour les distinguer clairement
- app/macon/page.tsx : composant rendu async, images.macon_hero et
  images.macon_slider{1,2,3}_{gauche,droite} remplacent les URLs Unsplash
- app/paysagiste/page.tsx : composant rendu async, tableau realisations
  déplacé à l'intérieur pour utiliser images.*, toutes les 6 balises
  <img> hardcodées (héro, services, savoir-faire, équipe, CTA, galerie)
  remplacées par les clés images.*

https://claude.ai/code/session_01PzA98VhLMmsHpzs7gnLHGs
2026-02-19 06:48:11 +00:00
Claude
7a46501ba3 feat: upload images vers bucket Supabase privé avec Signed URLs
- Nouvelle route POST /api/admin/upload : upload multipart vers le bucket
  private-gallery, validation MIME + taille (max 5 Mo), retourne storage:path
- lib/site-images.ts : détecte le préfixe "storage:" et génère une Signed
  URL temporaire (60 min) côté serveur avant chaque rendu de page
- GET /api/admin/site-images : résout aussi les signed URLs pour les previews
  admin (champ previewUrl distinct de url brute)
- PUT /api/admin/site-images : accepte désormais les chemins "storage:..."
  en plus des URLs externes
- Page admin images : drag & drop + input file avec upload automatique +
  sauvegarde en BDD, badge "bucket privé", instructions SQL pour créer
  la table et la policy du bucket private-gallery

https://claude.ai/code/session_01PzA98VhLMmsHpzs7gnLHGs
2026-02-19 06:16:15 +00:00
Claude
c62998d0c2 feat: redesign homepage with triptych process + admin image management
- Redesign Hero section with new copy focused on the triptych offering
- Add Process component (replaces System) with zigzag layout for 3 pillars:
  Google Maps reviews, managed Facebook, converting website
- Redesign AboutMe with orange background and stats row
- Add admin panel for managing site image URLs (replaces Sanity dependency)
- Create site_images API routes and Supabase-backed storage with defaults
- Update FAQ to reference built-in admin panel
- Add site_images table type to database types
- Pass images prop through homepage components

https://claude.ai/code/session_01V8YAjpqRQ3bfBYsABYsEgo
2026-02-17 18:40:30 +00:00