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 (SQLILIKE), 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_submissionsavec colonnereadAtnullable ; action serveurmarkContactAsRead - 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 avecusePathname,loading.tsxpar 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
rAFpour é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
ctaLabelremplacé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 —
/loginest désormais réservé aux comptes administrateurs
[0.4.0-beta] — 2026-05-26
Ajouté
- Schéma média normalisé : tables dédiées
mediaetmedia_usageremplacent 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.tset appliqués globalement via injection de variables CSS côté serveur via un composantThemeStyle; 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
NavModalpour 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_cachesupprimées, ISR avec appelsrevalidatePathexplicites à chaque mutation est désormais le seul patron utilisé dans toute la base de code MediaPickerrefactorisé pour opérer sur des entiersmediaIdet des objetsMediatypés plutôt que sur des URLs brutes ; détecte automatiquement image ou vidéo depuis le type MIME
Corrigé
- Périmètre de
revalidatePathcorrigé 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
useActionStatecorrigé de[state.success]à[state]pour gérer les sauvegardes répétées oùsuccessrestetrue
[0.3.0-beta] — 2026-04-29
Ajouté
- Schéma de base de données PostgreSQL (Drizzle ORM) : tables
products_categoriesetproductsavec 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 parSETUP_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
CategorySorteravec glisser-déposer pour sélectionner et ordonner les catégories de produits mis en avant sur la page d'accueil- Composant
DeleteSectionButtonpour 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
BackgroundMediasupportant fond image ou vidéo - Composant hero
ViewportHeroWithTexten pleine hauteur de viewport ProductCardet grille de produits responsiveNavModalpour 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