Changelog
Historique des versions de Réveillon Photographie
Statistiques globales, lightbox enrichie & mode exposition
Nouveautés
- Statistiques globales — Supabase — vues et likes agrégés de tous les visiteurs, stockés en base de données PostgreSQL. Compteurs visibles directement dans la lightbox.
- Bouton Like global — ♡ / ♥ dans la lightbox, partagé entre tous les visiteurs (1 like max par photo par navigateur). Décrémentable.
- Classement global dans Paramètres → Statistiques — top 10 des photos les plus vues et les plus likées par l'ensemble des visiteurs, avec médailles 🥇🥈🥉.
- Mode Exposition — fond noir total, navigation et footer masqués, pour consulter la galerie sans distraction. Toggle dans Paramètres → Apparence. Bouton flottant "Quitter l'exposition".
- Zoom dans la lightbox — molette desktop (×1 à ×4), centré sur le curseur. Pinch à deux doigts sur mobile. Drag quand zoomé. Double-clic pour reset.
- Téléchargement watermarqué — bouton ↓ dans la lightbox (raccourci D), génère un JPEG avec watermark © Réveillon Photographie via Canvas API.
- EXIF détaillé — ouverture, vitesse, ISO affichés en 3 cartes visuelles dans la lightbox, parsés depuis
data-settings. - Anti double-like par appareil — système
device_idUUID unique persisté en localStorage, vérifié côté base de données via la tablelikes_log. Vider le cache ne permet plus de reliker. - Fusion Favoris → Likes — le bouton ♡ sur les vignettes et dans la lightbox est désormais unifié. Les likes locaux sont synchronisés avec Supabase. L'onglet "Favoris" dans les Paramètres devient "Likes" et affiche les photos likées.
- Commentaires — section dans la lightbox pour lire et poster un commentaire (prénom + message), stockés dans Supabase. Modération par champ
approved. - Visiteurs en ligne — compteur en temps réel dans Paramètres → Statistiques, basé sur un heartbeat Supabase toutes les 60 secondes. Nettoyage automatique des sessions inactives.
- Photo du jour — badge ★ Photo du jour affiché automatiquement sur la photo la plus likée du portfolio.
- Filtres avancés — ligne de tri dans la galerie (Récentes / Plus vues / Plus likées via Supabase) + filtre par appareil photo extrait automatiquement des métadonnées.
- Partage amélioré — modal dédié avec options Copier le lien, X/Twitter et Instagram (copie le lien + instruction story).
Améliorations
- OpenDyslexic en chargement paresseux — la CSS (~200 KB) n'est plus chargée à chaque page, uniquement injectée si le setting est activé.
- Bouton hamburger —
<div>remplacé par un vrai<button>sur toutes les pages (accessibilité clavier native). - Twitter Cards — balises
twitter:cardajoutées sur toutes les pages (index, portfolio, à propos, contact). - Preload LCP —
<link rel="preload">sur l'image above-the-fold de portfolio.html et a_propos.html. - i18n persisté dans l'URL — changement de langue écrit
?lang=endans l'URL viahistory.replaceState, lisible à l'ouverture d'un lien partagé. - Changelog dans le footer — lien direct vers changelog.html dans la navigation du bas de page.
- robots.txt — référence au sitemap.xml ajoutée (
Sitemap:directive). - Formulaire contact — soumission interceptée en
fetch(), toast de succès/erreur sans redirection Formspree. :focus-visible— styles de focus clavier ajoutés sur.social-link,.filter-btn,.btn-cta,.previous-card-btn.- Select contact — option placeholder avec
disabled selectedpour forcer un choix réel.
Corrections
.btn-primary— règle de base manquante (background, color, border), uniquement le:hoverexistait.- Zoom reset automatiquement à la fermeture de la lightbox.
- Race condition sur les incréments de vues/likes — opérations atomiques côté PostgreSQL via fonctions RPC.
- Bug vues ×2 — l'affichage ajoutait +1 manuellement en JS alors que la BDD avait déjà incrémenté, résultat : compteur affiché en double.
- Bug navigation rapide — les callbacks async d'une ancienne photo pouvaient écraser les compteurs de la photo courante (guard
__currentPhotoSlugajouté). - Compteurs figés — les stats de la photo précédente restaient affichées pendant le chargement de la suivante ; reset immédiat à
…à chaque ouverture. - Double-like après vidage du cache — l'état liké était lu depuis le localStorage uniquement ; désormais vérifié en priorité depuis Supabase (
has_liked). - Like décrémentait les vues — le bouton like déclenchait un fetchStats qui écrasait le compteur de vues avec une valeur stale.
Lightbox, i18n & corrections
Nouveautés
- Slideshow — défilement automatique dans la lightbox (bouton play/pause + raccourci Espace)
- Copier le lien d'une photo — bouton dans la lightbox, raccourci C
- Mode anglais — traduction complète de l'interface via Paramètres → Langue
- Animation d'ouverture des paramètres (pop-in élastique + fermeture)
- Tri de la galerie dans Paramètres → Galerie (par défaut, plus récent, A→Z)
- Historique terminal persistant — sauvegardé en localStorage, commande
history - Commande
photo randomdans le terminal
Corrections
- Bouton plein écran de la lightbox non fonctionnel (aucun listener click)
- Slideshow bloqué à une photo (navigateLightbox appelait stopSlideshow)
- Barre de recherche repositionnée sous les filtres
- Descriptions de catégorie masquées pendant la recherche
Terminal, paramètres & favoris
Nouveautés
- Terminal secret — débloqué par le mot-clé « reveillon » ou 7 taps sur le logo, persistant entre sessions
- Panneau Favoris — sauvegarde de photos localement
- Panneau Partage — partage natif, copie lien, réseaux sociaux
- Barre de recherche dans la galerie (titre, lieu, tags, description)
- Fullscreen lightbox — bouton et raccourci F
- Icônes SVG sur tous les liens sociaux du footer
- Refonte de l'organisation du portfolio (descriptions par catégorie)
- Amélioration de la barre de recherche du portfolio
Corrections
- Accessibilité des liens imbriqués dans « Mes Sites Précédents »
- Débordement email dans le footer sur mobile
- Suppression du délai de transition de page
Paramètres & accessibilité
Nouveautés
- Modale Paramètres — 12 panneaux (Apparence, Accessibilité, Galerie, Interactions, Langue, Notifications, Raccourcis, Statistiques, Impression, Confidentialité, À propos, Terminal)
- Thème clair/sombre avec toggle animé
- Options d'accessibilité — police dyslexique, texte agrandi, contraste renforcé, réduction animations
- Parallaxe sur les cartes de la galerie
- Statistiques locales de visite
- Mode impression configurable
SEO & performances
Optimisations
- Chargement non-bloquant des polices Google Fonts
- Préchargement LCP avec
fetchpriority="high" - Intégration Umami Analytics (vie privée)
- Schéma LocalBusiness JSON-LD avec coordonnées GPS
- Twitter Card, Open Graph complets
- Obfuscation de l'adresse email
- Fichier
llms.txtet.htaccessIONOS optimisé - GZIP, cache HTTP, headers de sécurité
- Lazy loading avec IntersectionObserver
- Système de préchargement images en trois niveaux
Fondations du site
Mise en place initiale
- Structure multi-pages — Accueil, Portfolio, À propos, Contact
- Lightbox avec navigation clavier, swipe mobile, métadonnées EXIF
- Filtres de galerie par catégorie avec animations
- Header avec animation shrink au scroll
- Menu hamburger mobile
- Preloader animé R·P
- Animations scroll reveal (IntersectionObserver)
- Transitions de page (voile bordeaux)
- Page 404 personnalisée
- Identité visuelle — Cormorant Garamond + Montserrat, palette bordeaux