story-theme-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,252 @@
1
+ // Guides read by the model (read_guide). Written for building stores with Story Theme 4.0:
2
+ // accurate to the theme, opinionated about what looks professional.
3
+
4
+ export const GUIDES = {
5
+ demarrage: {
6
+ title: 'Méthode : créer une boutique propre avec le Story Thème',
7
+ body: `**Agir d'abord, demander ensuite.** Dès la première demande, si vous savez de quelle boutique il s'agit (un nom ou ce qu'elle vend), appelez build_store tout de suite : une V1 complète en un appel (identité, pages, traduction, zip). Rédigez les textes clés de la marque dans copy à partir de ce que vous savez. La seule question préalable permise : « Pour quelle boutique ? », si rien ne l'indique.
8
+
9
+ Après la V1 :
10
+ 1. Résumez en quelques lignes ce qui a été fait, les choix supposés et le chemin du zip.
11
+ 2. Posez 3 à 5 questions pour affiner (collection principale, avis réels, conditions de livraison et de retour, couleur et logo, photos).
12
+ 3. Appliquez les réponses sur le projet en cours (inutile de préciser project) : update_theme_settings (couleurs, polices), edit_template (textes, sections), apply_recipe (changer une page), list_texts pour voir les textes d'exemple restants.
13
+ 4. review_project, puis export_theme pour un nouveau zip.
14
+
15
+ Règles d'or :
16
+ - N'inventez jamais un type de section, de bloc ou un identifiant de réglage : get_section / get_block donnent les vrais. Le validateur refuse le reste.
17
+ - Partez d'un preset (sections et blocs) ou d'une recette : ils sont réglés par le designer du thème.
18
+ - Les images ne peuvent pas être envoyées par le MCP : laissez les champs image vides, la check-list les liste. Si le marchand a déjà déposé ses images dans Contenu > Fichiers, utilisez shopify://shop_images/<nom-exact>.
19
+ - Les produits, collections, menus et pages se créent dans l'administration Shopify ; le thème ne fait que les afficher. Utilisez les handles donnés par le marchand (ou lus avec un connecteur Shopify).
20
+ - Honnêteté commerciale : pas de faux avis, faux chiffres, faux stock, compte à rebours qui redémarre, logos presse inventés.`,
21
+ },
22
+
23
+ architecture: {
24
+ title: 'Architecture du thème (4.0)',
25
+ body: `- **Modèles** (templates/*.json) : une page = { sections, order }. 25 sections maximum. Modèles alternatifs : templates/product.<nom>.json, templates/page.<nom>.json (attribués produit par produit ou page par page dans l'administration).
26
+ - **Groupes de sections** : sections/header-group.json (barre d'annonce + en-tête) et sections/footer-group.json (réassurance, pied de page, pop-up). Même format + "type" et "name".
27
+ - **Sections** : presque toutes sont des cadres composés (largeur, direction, alignements, espacements, palette de couleurs, séparateurs de forme, animations) remplis de blocs. Leur valeur est dans leurs **presets**.
28
+ - **Blocs** : publics (heading, text, button, image, group…) utilisables partout où une section ou un groupe accepte « @theme » ; privés (préfixe _, ex. _slide, _offer, _card-title) seulement chez le parent qui les déclare. group, tabs, carousel et content-over-image se nichent (8 niveaux maximum).
29
+ - **Blocs statiques** ("static": true) : posés par le code du thème (lignes et zones de l'en-tête, carte produit des listes, zones du panier). Leur type et leur identifiant sont imposés, ils ne se suppriment pas, ils ne vont pas dans block_order. On modifie leurs réglages et leurs enfants.
30
+ - **Format** : dans un fichier, "blocks" est un objet { id: bloc } et "block_order" liste les blocs non statiques dans l'ordre. (Les presets du schéma utilisent des tableaux : ne les recopiez pas tels quels, utilisez add_section / add_block qui convertissent.)
31
+ - **Taille des blocs dans un groupe** : réglages width (fill, fit, custom en douzièmes, fixed pour l'image), width_mobile, align_self. Un groupe horizontal passe en colonne sur mobile avec stack_on_mobile.
32
+ - **Palettes de couleurs** : chaque section a color_palette (background-1, background-2, inverse, scheme par défaut). Les couleurs se règlent une fois dans config/settings_data.json.
33
+ - **Styles de boutons** : button_style 1 (principal), 2 (secondaire), 3 (discret), custom. Gardez la même logique partout : un seul bouton de style 1 par section.
34
+ - **Sources dynamiques** : "{{ closest.product }}" dans les blocs de fiche produit, "{{ product.metafields… }}" dans les textes.
35
+ - **Panier** : cart_type (drawer, page, notification) dans les réglages du thème ; les blocs du tiroir panier vivent dans config/settings_data.json > current > sections > cart-drawer.`,
36
+ },
37
+
38
+ 'design-pro': {
39
+ title: 'Ce qui fait une boutique professionnelle',
40
+ body: `- **Un message par section.** Titre court (2 à 8 mots), une phrase de soutien, un bouton au plus. Si une section a besoin de trois paragraphes, c'est une page.
41
+ - **Hiérarchie.** Un seul <h1> par page (titre du héro sur l'accueil ; le titre produit sur la fiche). Les titres de sections sont des <p> ou <h2> stylés, pas des <h1>.
42
+ - **Rythme.** Alternez les formats (image/texte, grille, texte seul, preuve sociale) et les fonds : background-1 pour la majorité, background-2 pour une section sur trois environ, inverse pour 1 ou 2 moments forts. Jamais trois sections identiques d'affilée.
43
+ - **Espace.** Les presets ont des espacements réglés : ne les réduisez pas pour « faire tenir ». Une page qui respire fait haut de gamme.
44
+ - **Cohérence.** Mêmes ratios d'images dans une liste (portrait 4:5 pour la mode, carré pour les objets), mêmes styles de boutons, même alignement de texte par page (centré pour les sections courtes, aligné à gauche pour la lecture).
45
+ - **Longueur de l'accueil.** 7 à 10 sections. Chaque section doit servir la vente : promesse, produits, preuve, réassurance, marque.
46
+ - **Photos.** Une photo de qualité vaut mieux que trois moyennes. Les visuels d'exemple du thème ne doivent jamais partir en ligne.
47
+ - **Animations.** Celles des presets suffisent. Un seul effet fort par page (zoom au défilement, cartes empilées, scrollytelling).
48
+ - **Mobile d'abord.** Tailles mobiles des titres (size_mobile), stack_on_mobile, bannière avec image mobile dédiée si le visuel est large.
49
+ - **Sobriété commerciale.** Pas de pop-up à l'arrivée, une seule pop-up au total, pas d'urgence inventée, pas de superlatifs sans preuve.`,
50
+ },
51
+
52
+ couleurs: {
53
+ title: 'Couleurs et palettes',
54
+ body: `Le thème a deux niveaux :
55
+ - **La palette globale** (réglage palette) : background, surface, text, text_muted, accent_1, accent_2, border, shadow, stars.
56
+ - **Les palettes de couleurs** (color_schemes) appliquées aux sections : background-1 (fond principal), background-2 (fond alterné), inverse (fond sombre), scheme (couleur de marque en fond). Rôles : text = titres, text_secondary = texte courant, background, background_secondary (surfaces, cartes), accent-1 et accent-2 (boutons, liens, badges), dégradés optionnels.
57
+
58
+ Les boutons prennent leurs couleurs selon button_1_palette, button_2_palette, button_3_palette (accent-1, accent-2, text, bg_fade, *-outline) : un bouton accent-1 a le fond accent-1 et le texte de la couleur du fond de la section. Il faut donc un contraste accent-1 / background d'au moins 4,5:1 dans chaque palette.
59
+
60
+ Méthode :
61
+ 1. generate_color_schemes avec la couleur de marque (et une secondaire si elle existe). Le générateur ajuste la luminosité si nécessaire et le signale.
62
+ 2. update_theme_settings avec color_schemes, palette et les button_*_palette proposés.
63
+ 3. Contrôle : aucun contraste 🔴 dans review_project. Titres et texte ≥ 4,5:1, boutons ≥ 4,5:1.
64
+ 4. Usage : 60 % background-1, 30 % background-2, 10 % inverse ou scheme.
65
+
66
+ Couleurs de marque trop claires (jaune, pastel) : elles restent superbes en fond (palette scheme, bandeaux), mais les boutons utilisent une version foncée.`,
67
+ },
68
+
69
+ typographie: {
70
+ title: 'Typographie',
71
+ body: `- Deux polices au plus : headings_font (titres) et body_font (texte). Elles doivent exister dans la bibliothèque de polices Shopify : find_fonts vérifie, et les identifiants inconnus sont refusés à l'import.
72
+ - Certaines polices historiques sont **dépréciées** par Shopify (Futura, Avenir Next, Helvetica, Gill Sans…) : utilisez leur remplaçante (Jost, Figtree…).
73
+ - Paires éprouvées : find_fonts sans argument les liste par style (éditorial, minimal, tech, naturel…).
74
+ - Réglages utiles : headings_uppercase (à réserver aux polices condensées ou aux titres très courts), headings_letter_spacing, heading_1_font_size / heading_2_font_size et leurs tailles mobiles, body_size (16 px minimum).
75
+ - Dans les blocs heading, custom_size + size_desktop / size_mobile ajustent un titre précis ; préférez les tailles du thème pour garder la cohérence.`,
76
+ },
77
+
78
+ accueil: {
79
+ title: "Page d'accueil",
80
+ body: `Structure qui fonctionne (adapter, pas copier) :
81
+ 1. **Héro** (banner ou slideshow) : promesse + bouton vers la collection principale. Titre en <h1>.
82
+ 2. **Réassurance express** (marquee Scrolling text ou multicolumn Icons with text) : livraison, retours, paiement, avis.
83
+ 3. **Produits** (product-list Featured collection ou Collection tabs) : ce qui se vend le mieux.
84
+ 4. **Univers / collections** (collection-list) si plusieurs familles.
85
+ 5. **Marque** (image-with-text Brand story) : pourquoi vous.
86
+ 6. **Preuve sociale** (testimonials, reviews, ugc, logo-list).
87
+ 7. **Objections** (faq) ou comparaison (comparison).
88
+ 8. **Newsletter**.
89
+
90
+ Recettes prêtes : accueil-essentiel, accueil-marque-premium, accueil-produit-phare, accueil-catalogue, accueil-beaute, accueil-artisan (outil recipes).`,
91
+ },
92
+
93
+ 'fiche-produit': {
94
+ title: 'Fiche produit',
95
+ body: `Le modèle templates/product.json repose sur la section main-product-composed : galerie (product-media) à gauche, colonne de blocs à droite, barre d'achat collante (product-sticky-bar).
96
+
97
+ Ordre conseillé dans la colonne : note (product-rating) → titre (product-title, niveau h1) → prix (product-price) → variantes (product-variants) → stock réel (product-stock, source shopify) → offres éventuelles (product-offers) → quantité → bouton (product-buy) → réassurance (checklist ou trust-badges) → date de livraison (product-delivery) → description → accordéons (composition, entretien, livraison et retours).
98
+
99
+ Sous la fiche : bénéfices (image-with-text), avis (testimonials / reviews), FAQ produit, produits associés (product-list Related products).
100
+
101
+ Extras disponibles : guide des tailles (product-size-guide), personnalisation (product-custom-field), barre livraison offerte (product-shipping-bar), messages tournants (product-spin-message), compléments (product-addons), abonnement (product-subscription).
102
+
103
+ Pour un produit particulier, créez un modèle alternatif (templates/product.<nom>.json) plutôt que de surcharger le modèle principal.`,
104
+ },
105
+
106
+ offres: {
107
+ title: 'Offres, lots et remises',
108
+ body: `**Le thème ne fixe jamais un prix.** Les blocs d'offre affichent ce que le marchand a configuré ; c'est Shopify qui facture, via une réduction automatique (une par palier), un plan d'abonnement ou le code de l'offre, appliqué après l'ajout au panier.
109
+
110
+ - product-offers : paliers de quantité, X achetés Y offert, lots de produits, cadeaux, packs vendus comme variante. Chaque _offer = un choix.
111
+ - product-subscription : lit les plans de vente d'une application d'abonnement.
112
+ - product-addons : compléments ajoutés avec le produit, cadeau à choisir, souvent achetés ensemble.
113
+ - bundle-builder : lot à composer (les paliers sont des estimations : créez les réductions automatiques correspondantes).
114
+ - Panier : _cart-rewards (paliers de récompense), _cart-upsells.
115
+
116
+ Pièges : Shopify applique la meilleure réduction, pas forcément celle de la carte ; deux réductions « X achetés Y offert » sur le même produit ne se cumulent pas. Toujours passer une commande test.
117
+
118
+ Modèles d'exemple dans le thème : product.offers-quantity, -bogo, -bundle, -packs, -subscription, -minimal.`,
119
+ },
120
+
121
+ 'entete-pied': {
122
+ title: 'En-tête, barre d’annonce et pied de page',
123
+ body: `**En-tête** (sections/header-group.json, section header) : trois rangées statiques (header-top, header-main, header-bottom), chacune avec trois zones statiques (left, center, right), plus le tiroir mobile (header-drawer). Les blocs se placent dans les zones : _header-logo, _header-menu (menu vide = menu principal), _header-search, _header-account, _header-cart, _header-wishlist, _header-localization, _header-link, _header-socials, _header-drawer-toggle. Chaque bloc a show_on (all, desktop, mobile) : pour une mise en page mobile, placez des blocs dédiés au mobile. Méga menu : blocs _header-mega dans _header-menu.
124
+ Réglages de la section : sticky (none, always, scroll_up), transparent (off, home, all, auto : transparent sur un héro plein écran), overlay derrière les menus.
125
+
126
+ **Barre d'annonce** (section announcement-bar, dans le même groupe) : zones left/center/right, messages (_announcement) dans _header-announcements (rotation, défilement, machine à écrire). 1 à 3 messages courts, chacun vrai.
127
+
128
+ **Pied de page** (sections/footer-group.json) : section footer faite de groupes (colonnes) contenant logo, text, social-links, menu, newsletter, contact-info, copyright, policy-links, payment-icons, localization. Le groupe du thème contient aussi une section de réassurance (4 colonnes) et une pop-up newsletter : adaptez ou supprimez.`,
129
+ },
130
+
131
+ pages: {
132
+ title: 'Pages de contenu',
133
+ body: `Modèles fournis : page (contenu saisi dans l'administration), page.story (à propos), page.contact, page.faq, page.help, page.tracking (suivi de commande), page.wishlist (favoris), 404.
134
+ Une page Shopify n'utilise un modèle alternatif que si on le lui attribue (Pages > la page > Modèle de thème).
135
+ - À propos : recette page-a-propos.
136
+ - Contact : section contact (coordonnées + formulaire) + FAQ au-dessus ou en dessous.
137
+ - FAQ : une seule section faq avec structured_data par page.
138
+ - Suivi : section order-tracking.
139
+ - Mentions légales, CGV, confidentialité : Paramètres > Politiques (liens automatiques via le bloc policy-links).`,
140
+ },
141
+
142
+ redaction: {
143
+ title: 'Rédaction des textes',
144
+ body: `- Vouvoiement en français, sauf marque qui tutoie déjà partout.
145
+ - Concret plutôt qu'emphatique : « Livrée en 48 h » plutôt que « Une livraison ultra rapide ». Aucun superlatif sans preuve.
146
+ - Titres : 2 à 8 mots, un bénéfice. Boutons : un verbe + un objet (« Voir la collection », « Découvrir le coffret »).
147
+ - Réassurance : faits vérifiables (délais, conditions de retour, moyens de paiement).
148
+ - Avis, chiffres, presse : uniquement réels. Si le marchand n'en a pas encore, retirez la section plutôt que d'inventer.
149
+ - Une langue par boutique : aucun texte d'exemple anglais ne doit rester sur une boutique française (review_project le signale).
150
+ - Texte riche : <p>…</p> par paragraphe, <strong> pour mettre un mot en valeur (le style de titre du thème colore le gras), <h1> uniquement pour le titre principal de la page.`,
151
+ },
152
+
153
+ images: {
154
+ title: 'Images et médias',
155
+ body: `Les photos font la différence entre une boutique « propre » et une boutique qui claque. Le MCP ne télécharge rien lui-même : il place des fichiers déjà présents dans Contenu > Fichiers (shopify://shop_images/<nom-exact>).
156
+
157
+ **Avec un connecteur Shopify (recommandé, avant build_store)**
158
+ 1. Lire les photos disponibles : collections { title handle image { url width height } } et products { title handle featuredImage { url width height } images(first: 5) { nodes { url width height } } }.
159
+ 2. Choisir : pour le héro, une photo large (plus large que haute), lumineuse, en situation ; pour l'histoire et l'ambiance, 2 à 4 photos variées. Éviter les packshots sur fond blanc en héro. Noter la largeur de chaque photo : en dessous de 1600 px, elle est floue en plein écran.
160
+ 3. Les copier dans Fichiers :
161
+ mutation { fileCreate(files: [{ originalSource: "<url>", contentType: IMAGE, filename: "<marque>-hero.jpg", alt: "<description>", duplicateResolutionMode: REPLACE }]) { files { id fileStatus } userErrors { field message } } }
162
+ 4. Attendre que fileStatus soit READY (query files(first: 10, query: "filename:<marque>-*") { nodes { ... on MediaImage { image { url } } fileStatus } }). Le nom du fichier est la fin de l'URL, sans le « ?v= ».
163
+ 5. build_store avec images: { hero: "<marque>-hero.jpg", story: [...], lifestyle: [...], large: [les photos de 1600 px ou plus] }. Seules les photos de large vont en plein écran (zoom au défilement, héro des pages de marque) ; les autres restent dans des blocs plus petits. Pour changer une image ensuite : edit_template → update_settings { image: "shopify://shop_images/<nom>" }.
164
+
165
+ **Sans photo** : build_store fait un héro typographique sur la couleur de marque et remplace les sections qui en ont besoin (aucun carré « image manquante »). Les listes de produits et de collections montrent déjà les photos du catalogue.
166
+
167
+ Formats conseillés :
168
+ - Héro : 2400 × 1350 px (paysage) + une version portrait 1080 × 1350 pour le mobile si le visuel est large.
169
+ - Plein écran (héro, zoom au défilement, héro des pages de marque) : 1600 px de large au minimum, sinon l'image est floue.
170
+ - Image avec texte : 1600 px de large, 4:5 ou 1:1.
171
+ - Cartes produit : un seul ratio pour tout le catalogue (4:5 mode, 1:1 objets), fond homogène.
172
+ - Logo : SVG ou PNG transparent, deux fois la taille affichée.
173
+ - Vidéo de fond : MP4 H.264, 10 à 20 s, sans son, moins de 10 Mo, avec une image de couverture.
174
+ - Texte alternatif : sur chaque image (accessibilité et référencement).`,
175
+ },
176
+
177
+ 'seo-performance': {
178
+ title: 'Référencement et performance',
179
+ body: `- Un <h1> par page. Les titres de section en <h2>/<p>.
180
+ - FAQ : structured_data sur une seule section faq par page (données FAQPage). Fil d'Ariane (breadcrumb) : données BreadcrumbList.
181
+ - Titres et descriptions de pages : dans l'administration (Préférences, et « Référencement » sur chaque produit, collection, page).
182
+ - Première section : ses images chargent en priorité, les suivantes en différé : gardez le héro léger (une image optimisée plutôt qu'une vidéo lourde si la vidéo n'apporte rien).
183
+ - Chaque vidéo, carrousel automatique et application tierce ajoute du poids : gardez ceux qui vendent.
184
+ - minify_scripts doit rester activé.`,
185
+ },
186
+
187
+ accessibilite: {
188
+ title: 'Accessibilité',
189
+ body: `- Contraste texte / fond ≥ 4,5:1, boutons compris (review_project le vérifie pour chaque palette).
190
+ - Textes alternatifs sur les images.
191
+ - Pas d'information portée par la couleur seule.
192
+ - Carrousels : le thème gère le clavier et la pause ; évitez l'autoplay rapide.
193
+ - Animations : le thème respecte « réduire les animations » du système.
194
+ - Libellés de boutons explicites (« Voir la collection Été », pas « Cliquez ici »).`,
195
+ },
196
+
197
+ lancement: {
198
+ title: 'Mise en ligne',
199
+ body: `1. review_project sans aucun 🔴.
200
+ 2. export_theme, puis dans Shopify : Boutique en ligne > Thèmes > Ajouter un thème > Importer un fichier zip. Le thème arrive non publié : l'ouvrir dans l'éditeur, ajouter logo et images, vérifier chaque page sur ordinateur et sur mobile.
201
+ 3. Créer ce que la check-list demande (collections, pages avec leur modèle, menus, réductions des offres, applications d'avis ou d'abonnement).
202
+ 4. Paramètres : politiques, paiements, expédition, taxes, domaine, notifications. En France : mentions légales, CGV avec rétractation 14 jours, médiateur de la consommation, bannière cookies.
203
+ 5. Commande test complète.
204
+ 6. Publier le thème, puis retirer le mot de passe de la boutique.`,
205
+ },
206
+
207
+ limites: {
208
+ title: 'Ce que le MCP (V1) ne fait pas',
209
+ body: `- Il ne se connecte à aucune boutique : il fabrique un thème (zip) à importer, il ne publie rien.
210
+ - Il ne crée ni produits, ni collections, ni menus, ni pages, ni réductions, ni images : il les liste dans la check-list.
211
+ - Il ne modifie jamais le code du thème (Liquid, CSS, JS) : seulement les modèles, les groupes de sections et les réglages, comme l'éditeur de thème.
212
+ - Il ne garantit pas le rendu visuel : prévisualisez toujours dans l'éditeur Shopify avant de publier.`,
213
+ },
214
+ };
215
+
216
+ GUIDES.signatures = {
217
+ title: 'Faire une boutique brandée : directions, effets signature, pages originales',
218
+ body: `Une boutique qui claque = une direction artistique tenue + 2 ou 3 moments signature par page + des pages de marque propres au produit. Tout se fait avec build_store (direction, copy) puis compose_page.
219
+
220
+ **Directions artistiques** (build_store direction) : editorial (angles vifs, sous-titres en capitales, transition rideau), minimal, organique (formes organiques animées entre sections), artisan (bords déchirés), douceur (courbes, cartes arrondies), pop (festons, survol en inclinaison, transition en cercle), energie (capitales, pentes, reflet sur les boutons), tech (projecteur au survol). Elles règlent arrondis, boutons, survols, transitions de page, séparateurs.
221
+
222
+ **Effets signature et contenu à donner à compose_page**
223
+ - Manifeste qui s'illumine mot à mot : rich-text preset « Big statement », content.manifesto. Idéal après le héro ou les collections.
224
+ - Mots qui tournent dans un titre : content.rotating_words (3 à 5 mots, le titre se termine avant eux).
225
+ - Mot fort en couleur : **mot** dans un titre (le style de titre colore le gras).
226
+ - Cartes empilées au défilement : scroll-cards, items { title, text, button, palette (scheme / background-2 / inverse), image }. Superbe même sans photo, avec des palettes alternées.
227
+ - Frise : timeline « Our story » (items { label: année, title, text }) ou « How it works » (items { title, text, icon }).
228
+ - Scrollytelling (média collant qui change à chaque étape) : scroll-story, items { title, text, image } : uniquement avec photos.
229
+ - Zoom au défilement : scroll-zoom, image + content.title.
230
+ - Défilement horizontal : scroll-horizontal, images + items { title, text } (légende de chaque photo, titre en gras).
231
+ - Image interactive : hotspots, image + items { title, text, product }.
232
+ - Avant / après : before-after, deux vraies photos.
233
+ - Comparatif : comparison, items { label, values: [true, false, "texte"] } (colonnes : nous, eux).
234
+ - Caractéristiques : specifications, items { label, value, icon }.
235
+ - Chiffres (réels uniquement) : stats « Key figures » items { value: "{120}K+", label } ; « Results » items { value: 0-100, label }.
236
+ - Bandeau défilant : marquee, content.lines.
237
+ - Formes entre sections : separator { top, bottom, animation } : curve, wave, waves, organic, tilt, peak, zigzag, scallop, clouds, mountains, torn, drip, fade, line ; animation flow, swell, grow, parallax. À poser sur les sections colorées (palette background-2, inverse, scheme).
238
+ - Icônes : apple, banana, bottle, box, carrot, chat_bubble, check_mark, clipboard, dairy, eye, fire, heart, leaf, leather, lightning_bolt, lipstick, lock, map_pin, paw_print, perfume, plane, plant, price_tag, recycle, return, ruler, shirt, shoe, snowflake… (get_block icon pour la liste complète).
239
+
240
+ **Pages de marque à proposer selon le produit** (compose_page, fichier templates/page.<nom>.json)
241
+ - Notre histoire (créée par build_store) : manifeste, frise, valeurs, chiffres réels.
242
+ - Comment utiliser / porter / entretenir (créée par build_store) : étapes à icônes, astuces en cartes, FAQ d'usage, produits.
243
+ - Ingrédients / matières : specifications, hotspots sur une photo, multicolumn « Features with images ».
244
+ - Lookbook / inspirations : gallery « Lookbook », scroll-horizontal, hotspots « Shop the look ».
245
+ - Guide cadeaux : collection-list, product-list par budget, rich-text.
246
+ - Comparatif / pourquoi nous : comparison, calculator (coût par usage), stats réels.
247
+ - Landing de campagne : banner, countdown (vraie date), featured-product, comparison, FAQ.
248
+
249
+ **Règles** : 7 à 10 sections par page, alterner visuel et texte, une section colorée sur trois, un seul effet fort par écran, jamais de faux chiffres ni de faux avis.`,
250
+ };
251
+
252
+ export const GUIDE_TOPICS = Object.keys(GUIDES);
@@ -0,0 +1,253 @@
1
+ // Page compositions built only from the theme's own presets, so every recipe renders the way the
2
+ // theme was designed and validates by construction (tests apply each one). Preset names are the
3
+ // English ones (stable); texts come out in the project's language.
4
+ //
5
+ // A step can add blocks inside the section: `into` is the type of the container block (first one
6
+ // found), `after` the type of the sibling to insert after.
7
+
8
+ export const RECIPES = [
9
+ {
10
+ id: 'accueil-essentiel',
11
+ template: 'templates/index.json',
12
+ title: 'Accueil essentiel',
13
+ for: 'Toute boutique qui démarre : un parcours clair de la promesse à l’inscription.',
14
+ why: 'Promesse, réassurance, produits, marque, bénéfices, preuve sociale, objections, fidélisation : l’ordre dans lequel un visiteur se convainc.',
15
+ steps: [
16
+ { type: 'banner', preset: 'Image banner', role: 'Héro : promesse en 4 à 8 mots en <h1>, une phrase, bouton vers la collection principale' },
17
+ { type: 'marquee', preset: 'Scrolling text', role: 'Réassurance express : livraison, retours, paiement, avis (4 messages courts)', settings: { color_palette: 'inverse' } },
18
+ { type: 'product-list', preset: 'Featured collection', role: 'Meilleures ventes : choisir la collection la plus vendue (source collection)' },
19
+ { type: 'image-with-text', preset: 'Brand story', role: 'Pourquoi la marque existe : 3 phrases vraies, une photo de l’équipe ou de l’atelier', settings: { color_palette: 'background-2' } },
20
+ { type: 'multicolumn', preset: 'Icons with text', role: '3 ou 4 bénéfices concrets, une icône chacun' },
21
+ { type: 'testimonials', preset: 'Testimonials carousel', role: 'Vrais avis clients avec prénom', settings: { color_palette: 'background-2' } },
22
+ { type: 'faq', preset: 'FAQ', role: '4 à 6 questions qui bloquent l’achat (délais, retours, tailles, composition)' },
23
+ { type: 'newsletter', preset: 'Newsletter', role: 'Une vraie raison de s’inscrire (nouveautés, conseils, avant-premières)' },
24
+ ],
25
+ },
26
+ {
27
+ id: 'accueil-marque-premium',
28
+ template: 'templates/index.json',
29
+ title: 'Accueil marque premium',
30
+ for: 'Mode, bijoux, maroquinerie, cosmétique haut de gamme : l’image de marque d’abord.',
31
+ why: 'Grands visuels, peu de texte, rythme lent. La vidéo et le zoom au défilement installent l’univers ; la presse et un témoignage incarné rassurent sans crier.',
32
+ steps: [
33
+ { type: 'banner', preset: 'Video banner', role: 'Film de marque court (10 à 20 s, sans son), promesse courte en <h1>' },
34
+ { type: 'collection-list', preset: 'Collection banners', role: '2 ou 3 univers en grand format' },
35
+ { type: 'product-list', preset: 'Immersive products', role: 'Pièces signatures, 4 à 8 produits' },
36
+ { type: 'scroll-zoom', preset: 'Expanding image', role: 'Une image forte de l’univers, une phrase manifeste' },
37
+ { type: 'image-with-text', preset: 'Details that matter', role: 'Savoir-faire : matière, geste, origine', settings: { color_palette: 'background-2' } },
38
+ { type: 'logo-list', preset: 'Press logos', role: 'Uniquement de vrais passages presse' },
39
+ { type: 'testimonials', preset: 'Testimonial with image', role: 'Un témoignage incarné, avec photo' },
40
+ { type: 'newsletter', preset: 'Newsletter with image', role: 'Accès en avant-première aux collections' },
41
+ ],
42
+ },
43
+ {
44
+ id: 'accueil-produit-phare',
45
+ template: 'templates/index.json',
46
+ title: 'Accueil produit phare (DTC)',
47
+ for: 'Marque d’un ou deux produits (complément, accessoire, soin, objet malin) : l’accueil vend le produit.',
48
+ why: 'Le visiteur doit comprendre le produit, le comparer, voir les preuves et acheter sans quitter la page.',
49
+ steps: [
50
+ { type: 'banner', preset: 'Split banner', role: 'Produit en situation + promesse chiffrée si elle est prouvée' },
51
+ { type: 'logo-list', preset: 'Logo row', role: 'Labels, certifications ou presse' },
52
+ { type: 'multicolumn', preset: 'Benefits', role: 'Les 3 bénéfices qui font acheter', settings: { color_palette: 'background-2' } },
53
+ { type: 'featured-product', preset: 'Product showcase', role: 'Le produit phare, achetable ici (choisir le produit)', settings: { color_palette: 'background-1' } },
54
+ { type: 'comparison', preset: 'Us vs them', role: 'Nous contre l’alternative habituelle : critères honnêtes et vérifiables' },
55
+ { type: 'reviews', preset: 'Rating banner', role: 'Note moyenne réelle et nombre d’avis', settings: { color_palette: 'background-2' } },
56
+ { type: 'testimonials', preset: 'Testimonials wall', role: 'Avis détaillés', settings: { color_palette: 'background-1' } },
57
+ { type: 'faq', preset: 'FAQ', role: 'Objections produit : utilisation, résultats, composition, garantie' },
58
+ { type: 'newsletter', preset: 'Newsletter with discount', role: 'Offre de bienvenue (créer le code dans Réductions)' },
59
+ ],
60
+ },
61
+ {
62
+ id: 'accueil-catalogue',
63
+ template: 'templates/index.json',
64
+ title: 'Accueil grand catalogue',
65
+ for: 'Maison, déco, épicerie, concept store : beaucoup de produits et plusieurs univers.',
66
+ why: 'Faire entrer vite dans le bon rayon : catégories visuelles, onglets de collections, nouveautés.',
67
+ steps: [
68
+ { type: 'slideshow', preset: 'Slideshow', role: '2 ou 3 campagnes de même importance (sinon une bannière)' },
69
+ { type: 'collection-list', preset: 'Shop by category', role: 'Les rayons principaux, 4 à 8' },
70
+ { type: 'product-list', preset: 'Collection tabs', role: 'Nouveautés / Meilleures ventes / Petits prix' },
71
+ { type: 'image-with-text', preset: 'Brand story', role: 'Ce qui rend la sélection unique', settings: { color_palette: 'background-2' } },
72
+ { type: 'product-list', preset: 'Product carousel', role: 'Une sélection thématique (saison, idées cadeaux)' },
73
+ { type: 'multicolumn', preset: 'Icons with text', role: 'Livraison, retours, paiement, service client' },
74
+ { type: 'testimonials', preset: 'Testimonials grid', role: 'Vrais avis clients', settings: { color_palette: 'background-2' } },
75
+ { type: 'blog-posts', preset: 'Blog posts', role: 'Conseils et inspirations (SEO)' },
76
+ { type: 'newsletter', preset: 'Newsletter', role: 'Nouveautés et offres' },
77
+ ],
78
+ },
79
+ {
80
+ id: 'accueil-beaute',
81
+ template: 'templates/index.json',
82
+ title: 'Accueil beauté et bien-être',
83
+ for: 'Cosmétique, soin, bien-être : résultats, ingrédients et confiance.',
84
+ why: 'Le client achète un résultat : il faut le montrer (avant/après, chiffres mesurés), l’expliquer et le faire confirmer par d’autres clients.',
85
+ steps: [
86
+ { type: 'banner', preset: 'Image banner', role: 'Promesse de résultat, visuel texture ou peau' },
87
+ { type: 'product-list', preset: 'Featured collection', role: 'Routine ou best-sellers' },
88
+ { type: 'image-with-text', preset: 'Product benefits', role: 'Actifs clés et ce qu’ils font', settings: { color_palette: 'background-2' } },
89
+ { type: 'before-after', preset: 'Transformation', role: 'Uniquement de vraies photos, même lumière' },
90
+ { type: 'stats', preset: 'Results', role: 'Résultats de tests mesurés (source citée)' },
91
+ { type: 'ugc', preset: 'Shop our Instagram', role: 'Photos clientes' },
92
+ { type: 'testimonials', preset: 'Testimonials grid', role: 'Avis détaillés par type de peau', settings: { color_palette: 'background-2' } },
93
+ { type: 'faq', preset: 'FAQ', role: 'Peaux sensibles, grossesse, conservation, composition' },
94
+ { type: 'newsletter', preset: 'Newsletter with discount', role: 'Offre de bienvenue' },
95
+ ],
96
+ },
97
+ {
98
+ id: 'accueil-artisan',
99
+ template: 'templates/index.json',
100
+ title: 'Accueil artisan et producteur',
101
+ for: 'Épicerie fine, artisanat, producteur local, fait main.',
102
+ why: 'L’humain et l’origine vendent : manifeste, histoire, étapes de fabrication, avis.',
103
+ steps: [
104
+ { type: 'banner', preset: 'Split banner', role: 'Le produit et la main qui le fait' },
105
+ { type: 'rich-text', preset: 'Big statement', role: 'Manifeste en une phrase' },
106
+ { type: 'collection-list', preset: 'Collection grid', role: 'Gammes' },
107
+ { type: 'product-list', preset: 'Featured collection', role: 'Produits de saison ou incontournables' },
108
+ { type: 'timeline', preset: 'How it works', role: 'De la matière première au colis', settings: { color_palette: 'background-2' } },
109
+ { type: 'image-with-text', preset: 'Brand story', role: 'Qui est derrière' },
110
+ { type: 'reviews', preset: 'Reviews', role: 'Avis clients', settings: { color_palette: 'background-2' } },
111
+ { type: 'newsletter', preset: 'Newsletter', role: 'Arrivages et recettes', settings: { color_palette: 'background-1' } },
112
+ ],
113
+ },
114
+ {
115
+ id: 'produit-complet',
116
+ template: 'templates/product.json',
117
+ title: 'Fiche produit complète',
118
+ for: 'La fiche produit par défaut de toute boutique.',
119
+ why: 'Tout ce qui décide l’achat près du bouton (prix, variantes, stock réel, réassurance, délai), puis les preuves et les objections sous la ligne de flottaison.',
120
+ steps: [
121
+ {
122
+ type: 'main-product-composed',
123
+ preset: 'Product page',
124
+ role: 'Galerie, titre, note, prix, variantes, stock, quantité, achat, réassurance, livraison, description, détails',
125
+ blocks: [
126
+ { type: 'product-stock', preset: 'Stock', into: 'group', after: 'product-variants' },
127
+ { type: 'checklist', preset: 'Checklist', into: 'group', after: 'product-buy' },
128
+ { type: 'product-delivery', preset: 'Delivery date', into: 'group', after: 'checklist' },
129
+ { type: 'accordion', preset: 'Accordion / FAQ', into: 'group', after: 'product-description' },
130
+ ],
131
+ },
132
+ { type: 'image-with-text', preset: 'Product benefits', role: 'Ce que le produit change pour le client' },
133
+ { type: 'testimonials', preset: 'Testimonials carousel', role: 'Avis clients', settings: { color_palette: 'background-2' } },
134
+ { type: 'faq', preset: 'FAQ', role: 'Questions sur ce type de produit' },
135
+ { type: 'product-list', preset: 'Related products', role: 'Produits associés (recommandations Shopify)' },
136
+ ],
137
+ },
138
+ {
139
+ id: 'produit-offres',
140
+ template: 'templates/product.offres.json',
141
+ title: 'Fiche produit avec offres',
142
+ for: 'Produit consommable ou à racheter : paliers de quantité, lots, cadeau.',
143
+ why: 'Les paliers augmentent le panier moyen quand la remise est réelle et appliquée par Shopify (réduction automatique par palier).',
144
+ steps: [
145
+ {
146
+ type: 'main-product-composed',
147
+ preset: 'Product with offers',
148
+ role: 'Offres par paliers, compléments, achat',
149
+ blocks: [
150
+ { type: 'checklist', preset: 'Checklist', into: 'group', after: 'product-buy' },
151
+ { type: 'product-delivery', preset: 'Delivery date', into: 'group', after: 'checklist' },
152
+ ],
153
+ },
154
+ { type: 'multicolumn', preset: 'Benefits', role: 'Bénéfices', settings: { color_palette: 'background-2' } },
155
+ { type: 'comparison', preset: 'Us vs them', role: 'Pourquoi ce produit plutôt qu’un autre' },
156
+ { type: 'reviews', preset: 'Reviews', role: 'Note et avis', settings: { color_palette: 'background-2' } },
157
+ { type: 'faq', preset: 'FAQ', role: 'Utilisation, fréquence de rachat, conservation' },
158
+ { type: 'product-list', preset: 'Related products', role: 'Compléments' },
159
+ ],
160
+ },
161
+ {
162
+ id: 'produit-storytelling',
163
+ template: 'templates/product.json',
164
+ title: 'Fiche produit storytelling (premium)',
165
+ for: 'Produit cher ou technique qu’il faut raconter : mobilier, montre, électronique, soin haut de gamme.',
166
+ why: 'Une vidéo collante qui raconte le produit, des caractéristiques précises, un témoignage incarné.',
167
+ steps: [
168
+ { type: 'main-product-composed', preset: 'Product page', role: 'Achat', blocks: [{ type: 'checklist', preset: 'Checklist', into: 'group', after: 'product-buy' }] },
169
+ { type: 'video', preset: 'Sticky video', role: 'Le produit en usage, avec bénéfices et accordéons à côté' },
170
+ { type: 'image-with-text', preset: 'Details that matter', role: 'Matières et finitions', settings: { color_palette: 'background-2' } },
171
+ { type: 'specifications', preset: 'Specifications', role: 'Dimensions, poids, matière, entretien, garantie' },
172
+ { type: 'testimonials', preset: 'Testimonial with image', role: 'Un client, une photo, une phrase' },
173
+ { type: 'product-list', preset: 'Related products', role: 'À associer' },
174
+ ],
175
+ },
176
+ {
177
+ id: 'collection-complete',
178
+ template: 'templates/collection.json',
179
+ base: 'templates/collection.json',
180
+ title: 'Page collection complète',
181
+ for: 'Toutes les collections : la page collection du thème (filtres, tri, grille) enrichie.',
182
+ why: 'La grille et les filtres du thème, puis un texte de collection pour le référencement et les produits vus récemment pour reprendre là où le client s’est arrêté.',
183
+ steps: [
184
+ { type: 'rich-text', preset: 'Rich text', role: 'Texte de collection utile (conseils de choix, matières) : 80 à 150 mots, pas de bourrage de mots-clés' },
185
+ { type: 'product-list', preset: 'Recently viewed products', role: 'Reprise de navigation, rien à régler' },
186
+ ],
187
+ },
188
+ {
189
+ id: 'page-a-propos',
190
+ template: 'templates/page.story.json',
191
+ title: 'Page À propos',
192
+ for: 'Raconter la marque (modèle page.story).',
193
+ why: 'Manifeste, histoire, étapes, chiffres, valeurs : de quoi donner confiance à un client qui hésite.',
194
+ steps: [
195
+ { type: 'banner', preset: 'Image banner', role: 'Titre de page en <h1> (ex. « Notre histoire »), photo des fondateurs ou de l’atelier' },
196
+ { type: 'rich-text', preset: 'Big statement', role: 'La conviction de la marque en une phrase' },
197
+ { type: 'image-with-text', preset: 'Brand story', role: 'Le déclic, le début' },
198
+ { type: 'timeline', preset: 'Our story', role: 'Dates réelles' },
199
+ { type: 'stats', preset: 'Key figures', role: 'Chiffres vrais uniquement', settings: { color_palette: 'background-2' } },
200
+ { type: 'multicolumn', preset: 'Icons with text', role: 'Valeurs, chacune prouvée par un fait' },
201
+ { type: 'newsletter', preset: 'Newsletter', role: 'Rester en contact' },
202
+ ],
203
+ },
204
+ {
205
+ id: 'page-contact',
206
+ template: 'templates/page.contact.json',
207
+ title: 'Page Contact',
208
+ for: 'Contact et service client (modèle page.contact).',
209
+ why: 'Répondre avant qu’on écrive : la FAQ au-dessus du formulaire réduit les messages.',
210
+ steps: [
211
+ { type: 'contact', preset: 'Contact', role: 'Coordonnées, horaires, formulaire' },
212
+ { type: 'faq', preset: 'FAQ with contact', role: 'Questions les plus fréquentes au service client', settings: { color_palette: 'background-2' } },
213
+ ],
214
+ },
215
+ {
216
+ id: 'page-faq',
217
+ template: 'templates/page.faq.json',
218
+ title: 'Page FAQ',
219
+ for: 'FAQ complète par thèmes (modèle page.faq).',
220
+ why: 'Une seule FAQ structurée par page : rangée par thèmes, elle se lit vite et nourrit le référencement.',
221
+ steps: [{ type: 'faq', preset: 'FAQ by topic', role: 'Commande, livraison, retours, produits, paiement' }],
222
+ },
223
+ {
224
+ id: 'page-suivi-commande',
225
+ template: 'templates/page.tracking.json',
226
+ title: 'Page Suivi de commande',
227
+ for: 'Suivi de colis (modèle page.tracking).',
228
+ why: 'Moins de « où est ma commande ? » au service client.',
229
+ steps: [
230
+ { type: 'order-tracking', preset: 'Order tracking', role: 'Recherche par numéro de suivi' },
231
+ { type: 'faq', preset: 'FAQ', role: 'Délais, transporteurs, colis en retard', settings: { color_palette: 'background-2' } },
232
+ ],
233
+ },
234
+ {
235
+ id: 'landing-offre',
236
+ template: 'templates/page.offre.json',
237
+ title: 'Landing page d’offre',
238
+ for: 'Campagne publicitaire, lancement, soldes (modèle page.offre à attribuer à une page).',
239
+ why: 'Une page, un message, un produit : pas de distraction entre la publicité et l’achat.',
240
+ steps: [
241
+ { type: 'banner', preset: 'Image banner', role: 'Reprendre mot pour mot la promesse de la publicité' },
242
+ { type: 'countdown', preset: 'Limited offer banner', role: 'Uniquement avec une vraie date de fin' },
243
+ { type: 'featured-product', preset: 'Featured product', role: 'Le produit de la campagne' },
244
+ { type: 'comparison', preset: 'Us vs them', role: 'Pourquoi maintenant, pourquoi nous', settings: { color_palette: 'background-2' } },
245
+ { type: 'testimonials', preset: 'Testimonials grid', role: 'Preuves' },
246
+ { type: 'faq', preset: 'FAQ', role: 'Conditions de l’offre, livraison, retours' },
247
+ ],
248
+ },
249
+ ];
250
+
251
+ export function findRecipe(id) {
252
+ return RECIPES.find((recipe) => recipe.id === id) || null;
253
+ }