Changelog

Toutes les modifications notables apportées à ce projet sont documentées dans ce fichier.

Le format s'appuie sur Keep a Changelog.


[0.5.0] — 2026-05-31

Première version commerciale.

Ajouté

  • Boîte de réception des contacts (/admin/contacts) : recherche plein texte avec debounce de 350 ms (SQL ILIKE), filtre non-lus/tous via les paramètres d'URL, pagination (20 par page), panneau latéral avec le message complet et un lien de réponse mailto, marquage automatique comme lu à l'ouverture ; trois mises en page responsives — côte à côte sur bureau (≥ 1200 px), superposé sur tablette, plein écran sur mobile
  • Table contact_submissions avec colonne readAt nullable ; action serveur markContactAsRead
  • Tableau de bord : KPI contacts non lus (mis en avant en rouge s'il y en a), widget des dernières soumissions (5 les plus récentes), barre de progression de complétion de la page d'accueil
  • Patron de navigation par onglets dans les sous-sections admin : layout synchrone avec un composant client <XxxNav>, état actif via correspondance exacte avec usePathname, loading.tsx par sous-route pour un retour squelette en streaming
  • En-tête collant sur la page des contacts (position: sticky)

Modifié

  • Barre latérale admin repensée selon deux modes d'affichage : barre verticale rétractable sur bureau (mode icône seule réduit / icône + libellé développé, bascule au survol ou au clic), barre fixe en bas sur mobile avec un overlay hamburger ; transitions de redimensionnement supprimées via double rAF pour éviter les artefacts d'animation aux changements de breakpoint
  • Pages de détail produit : pagination de la galerie (6 éléments par page, ChevronLeft / ChevronRight) ; produit sélectionné et numéro de page restaurés depuis le hash d'URL (#slug) au chargement
  • NavModal : liste de liens paginée (4 liens par page) ; la page se réinitialise à 0 à chaque ouverture
  • Section CTA : la prop ctaLabel remplacée par un composant dédié CtaContactButton

Supprimé

  • Page d'inscription utilisateur (/register) — hors périmètre pré-MVP
  • Tableau de bord client (/dashboard) — hors périmètre pré-MVP
  • Chemin de connexion client — /login est désormais réservé aux comptes administrateurs

[0.4.0-beta] — 2026-05-26

Ajouté

  • Schéma média normalisé : tables dédiées media et media_usage remplacent le stockage direct d'URLs ; toutes les entités référencent les médias via clés étrangères ; le suivi des usages bloque la suppression accidentelle de fichiers référencés
  • Page galerie (/admin/gallery) : bibliothèque de médias centralisée avec indicateur d'utilisation par fichier, remplacement de médias et garde de suppression
  • Miniatures vidéo : génération côté serveur à l'upload ; diaporama de miniatures dans le sélecteur de médias ; badge vidéo discret sur les éléments de la grille galerie
  • Modal média plein écran dans la galerie avec navigation et actions rapides
  • Quatre thèmes de couleur — Navy, Deep Forest, Obsidian, Bordeaux — définis dans src/lib/themes.ts et appliqués globalement via injection de variables CSS côté serveur via un composant ThemeStyle ; aucun JavaScript côté client impliqué
  • Interface de sélection de thème dans l'onglet Brand de l'admin
  • Section Témoignages : CRUD avec validation et réorganisation par glisser-déposer
  • Section FAQ : CRUD avec validation et réorganisation par glisser-déposer
  • Gestion SEO : meta description et image Open Graph (onglet admin)
  • Pages légales (/legal) avec éditeur admin pour la raison sociale, l'adresse et l'email légal
  • Gestion des liens réseaux sociaux dans les paramètres du footer
  • Personnalisation admin restructurée en 5 sous-sections avec navigation par onglets (Accueil, Brand, SEO, Footer & Réseaux, Légal)
  • Contexte NavModal pour gérer l'état ouvert/fermé de la modale à travers les composants
  • Tagline du footer et email de contact rendus modifiables via l'admin
  • Gestion du favicon fusionnée dans la section Brand ; le logo sert automatiquement de favicon si aucun favicon explicite n'est défini

Modifié

  • Stratégie de cache remplacée : directives unstable_cache supprimées, ISR avec appels revalidatePath explicites à chaque mutation est désormais le seul patron utilisé dans toute la base de code
  • MediaPicker refactorisé pour opérer sur des entiers mediaId et des objets Media typés plutôt que sur des URLs brutes ; détecte automatiquement image ou vidéo depuis le type MIME

Corrigé

  • Périmètre de revalidatePath corrigé dans toutes les actions de mutation : branding, SEO, footer et liens sociaux invalident désormais au niveau du layout (scope 'layout') pour mettre à jour toutes les pages
  • Paramètres de connexion à la base de données ajustés pour les démarrages à froid serverless : session pooler (port 5432), max: 1, prepare: false
  • Tableau de dépendances de useActionState corrigé de [state.success] à [state] pour gérer les sauvegardes répétées où success reste true

[0.3.0-beta] — 2026-04-29

Ajouté

  • Schéma de base de données PostgreSQL (Drizzle ORM) : tables products_categories et products avec slug, clé étrangère de catégorie et colonne de position
  • Layout du panneau d'administration avec navigation latérale
  • Gestion des catégories : créer, modifier, supprimer (protégé par une modale de confirmation)
  • Gestion des produits : créer, modifier, supprimer par catégorie
  • Intégration Supabase Auth : page de connexion avec cookies de session ; page d'inscription (supprimée ultérieurement en v0.5)
  • Garde d'authentification admin sur toutes les actions serveur via requireAdmin() ; politiques Row-Level Security activées sur toutes les tables
  • Page /setup : création unique du compte admin protégée par SETUP_TOKEN
  • Formulaire de contact : validation Zod, soumission persistée en base de données, notification email envoyée via Resend
  • Intégration Supabase Storage : gestion de l'upload d'images et de vidéos
  • Composant MediaPicker : navigateur de bibliothèque de fichiers, upload et prévisualisation
  • Section identité de marque : upload du logo avec affichage dans l'en-tête, le footer et la barre latérale admin
  • Gestion des sections de la page d'accueil dans l'admin : Hero, À propos, Mise en avant produits, CTA
  • CategorySorter avec glisser-déposer pour sélectionner et ordonner les catégories de produits mis en avant sur la page d'accueil
  • Composant DeleteSectionButton pour supprimer les sections optionnelles
  • Prévisualisations améliorées des sections de la page d'accueil dans l'admin (badges de catégorie de produits, miniatures d'images)
  • Page d'administration générale avec récupération de données dynamique
  • Support vidéo dans MediaPicker : prévisualisation au survol, détection automatique du type de fichier
  • Pattern useActionState établi dans tous les formulaires admin (React 19)
  • Éditeur de texte enrichi (MDXEditor) pour les champs de contenu long

[0.2.0-beta] — 2026-04-20

Réécriture complète du projet en Next.js 16 (App Router, React 19, TypeScript strict).

Ajouté

  • Catalogue produits statique : pages d'index par catégorie et pages de détail par produit à /products/[slug]
  • Sections de la page d'accueil : hero avec média de fond (image ou vidéo), section à propos, grille de produits, CTA avec bouton de scroll vers le footer
  • Composant BackgroundMedia supportant fond image ou vidéo
  • Composant hero ViewportHeroWithText en pleine hauteur de viewport
  • ProductCard et grille de produits responsive
  • NavModal pour la navigation mobile avec liens dynamiques vers les catégories de produits
  • En-tête et footer responsifs
  • Pages de connexion et d'inscription (interface seule à ce stade)
  • Intégration Google Fonts

Modifié

  • Architecture migrée de HTML statique + JavaScript vanilla vers un modèle de composants React avec routage basé sur les fichiers

[0.1.0-alpha] — 2024-10-23

Site web original construit pour une vraie activité de location de batteries (drums-please.fr). Cette version a servi de cas d'usage fondateur et de base de connaissance produit pour ce qui est devenu le template Stonecast.

Ajouté

  • Site HTML/CSS statique avec catalogue produits : batteries acoustiques, batteries électroniques, percussions classiques, percussions traditionnelles
  • Page de détail par produit avec sélecteur interactif (inputs radio, affichage piloté par JavaScript)
  • Section contact dans le footer
  • Navigation responsive avec en-tête animé et menu mobile
  • Vidéo de fond sur la page d'accueil
  • Formulaires de connexion et d'inscription avec validation JavaScript côté client
  • Optimisation des images : versions miniatures générées pour toutes les photos de produits