Aller au contenu
themeforge
FR
Commencer gratuitement
Menu

Génération IA

Ce guide explique comment placer les attributs ThemeForge sur les éléments HTML pour que le générateur crée un thème WordPress avec un panneau d'administration entièrement fonctionnel.

Vous pouvez partager cette page avec n'importe quel assistant IA (ChatGPT, Claude, Gemini, etc.) pour qu'il lise les règles et place correctement les attributs.

Partagez ce lien avec votre IA : https://themeforge.pro/ai

Envoyez votre assistant IA à cette adresse : il lira les règles de placement à la source, celles-là mêmes selon lesquelles le générateur juge votre balisage. Il répond d’abord par un sommaire court, puis sert chaque module de règles à la demande.

Flux de travail

Il existe plusieurs façons d'utiliser les attributs ThemeForge selon votre point de départ et vos outils.

1. L'IA génère un site avec les attributs

Pour : utilisateurs avec un design (Figma, maquette, référence)

Partagez le lien de cette page avec votre assistant IA avec votre design. L'IA génère du HTML avec les attributs déjà en place. Vous vérifiez le rapport, demandez des corrections et générez le thème.

  1. Donnez à votre IA le lien vers ce guide + votre design (URL Figma, captures, référence)
  2. L'IA génère du HTML avec tous les attributs selon les règles
  3. Vérifiez le rapport d'attributs — ajustez si nécessaire
  4. Générez le thème WordPress via ThemeForge

2. L'IA ajoute des attributs au HTML existant

Pour : développeurs avec un HTML prêt (export Webflow, template, codé à la main)

Vous avez déjà du HTML sans attributs ThemeForge. Partagez ce guide avec votre IA et demandez-lui d'analyser le HTML et de placer les attributs.

  1. Donnez à votre IA le lien vers ce guide + vos fichiers HTML
  2. L'IA analyse la structure et ajoute des attributs aux textes, images, liens
  3. Vérifiez le rapport — l'IA ne sait pas toujours quels éléments sont décoratifs
  4. Lancez la validation, corrigez les problèmes, générez le thème

3. Placement manuel dans Webflow Designer

Pour : utilisateurs Webflow expérimentés préférant un contrôle total

Ajoutez des attributs personnalisés directement dans Webflow Designer (Paramètres de l'élément → Custom Attributes). Exportez le site et validez avant de générer le thème.

  1. Sélectionnez un élément dans Webflow → Settings → Custom Attributes
  2. Ajoutez le nom de l'attribut (ex. fld-text) et la valeur (ex. Heading)
  3. Exportez le site (Code Export ou .webflow.io)
  4. Lancez la validation et générez le thème

Cycle complet

Quelle que soit la méthode, le cycle de vérification est rapide — pas besoin d'importer dans Webflow ou d'installer sur WordPress juste pour vérifier les attributs :

  1. Placez les attributs (IA ou manuellement)
  2. Lancez le rapport — examinez l'arbre en secondes
  3. Pas satisfait ? → dites à l'IA quoi corriger → relancez le rapport
  4. Lancez la validation — vérifiez les erreurs
  5. Générez le thème WordPress

Ready-Made AI Prompts

Copy a prompt below and paste it into your AI assistant (ChatGPT, Claude, Gemini) along with the link to this guide. The AI will follow the attribute rules automatically.

Prompt A: Add attributes to existing HTML

Use this when you already have an HTML site and need to add ThemeForge attributes.

I have a finished HTML website that I want to convert into a WordPress theme with an editable admin panel, using ThemeForge.

Read the placement rules and follow them exactly. Start here — it names the rule modules and tells you what to do first:
https://themeforge.pro/ai
Always pull the `core` module; if you are generating the site from scratch, pull `build` too. Then add what this site needs (pages, blog, cpt, woocommerce, deploy).

Then add ThemeForge attributes to every piece of editable content in my HTML:
- Each visual section = a tab + group pair; short headings/labels = text, paragraphs and long wrapping headings = textarea, images on  tags, links as a URL + text pair.
- Repeating cards (features, team, FAQ) = a repeater with 2+ rows.
- Header, footer, navigation, logo and contacts = site-wide options.
- If my site is multilingual, mark the language switcher with wp-menu="Language" and do NOT hardcode any visible text — every label must be a field (each language has its own value).
- Keep image/file paths as they are; do not skip any visible text.

[Add your specific requirements here: which pages, WooCommerce / blog support, languages, etc.]

When done, follow the Final Delivery steps: create the theme-options page with ALL option fields, serve the files locally, and give me the complete list of page URLs to paste into ThemeForge.

Prompt B: Generate HTML with attributes from scratch

Use this when you want the AI to create an HTML site from a design (Figma, screenshot, description) with ThemeForge attributes already included.

I need you to generate an HTML website with ThemeForge attributes already in place, ready for WordPress theme generation.

Read the placement rules and follow them exactly. Start here — it names the rule modules and tells you what to do first:
https://themeforge.pro/ai
Always pull the `core` module; if you are generating the site from scratch, pull `build` too. Then add what this site needs (pages, blog, cpt, woocommerce, deploy).

Here is my design: [ATTACH YOUR FIGMA LINK / SCREENSHOTS / DESCRIPTION]

Generate clean, semantic HTML + CSS and place ThemeForge attributes on all editable content as you build each section (not as a separate pass):
- Each section = a tab + group pair; text vs textarea by line count; images on ; links as a URL + text pair; repeating cards as a repeater with 2+ rows.
- Header/footer/navigation/contacts = site-wide options.
- For a multilingual site, mark the language switcher with wp-menu="Language" and keep every visible string as a field (no hardcoded text).
Use real placeholder content (not lorem ipsum) so data import populates real fields.

[Add your specific requirements here: colors, fonts, number of pages, WooCommerce / blog, languages, etc.]

When done, follow the Final Delivery steps: create the theme-options page with ALL option fields, serve the files locally, and give me the complete list of page URLs to paste into ThemeForge.

Tips for Better Results

  • Pour le Prompt B : joignez autant de contexte visuel que possible — captures d'écran, liens Figma, sites de référence. Plus il y a de contexte, meilleur sera le résultat.
  • Vous pouvez compléter les prompts avec vos propres exigences : palette de couleurs, polices, sections spécifiques, nombre de pages, support WooCommerce, etc.
  • Une fois terminé, demandez à l'IA de déployer le site dans un dossier local et de le servir — puis collez l'URL locale dans ThemeForge pour générer le thème WordPress.
  • Le lien du guide est déjà inclus dans le prompt. L'IA lira les règles complètes des attributs directement depuis la page.
  • Site multilingue ? Marquez le contenu normalement — un nom de champ stocke toutes les langues ; câblez le sélecteur avec wp-menu=« Language ». Voir la section Multilingue.
  • Donnez à chaque champ un nom UNIQUE dans son périmètre — ne réutilisez jamais le nom d’une section pour un répéteur à l’intérieur, sinon le lien et son image ne survivront pas tous les deux.

Préfixes d'attributs

PrefixScopeDescription
fld-*Per-pageChamps par page — contenu unique pour UNE page (texte du hero, images de page)
opt-*Site-wideOptions du site — contenu partagé sur TOUTES les pages (téléphone, email, logo)
tax-*TaxonomyChamps de taxonomie — contenu sur les pages d'archives de catégories/tags
wp="..."WP CoreWordPress core — données dynamiques WP (titre de l'article, date, image mise en avant)
wp-fields-group="..."SectionsGroupement de sections — regroupe les champs en sections du panneau admin (metaboxes)

Types de champs

AttributeFieldHTML ElementExample
fld-textText<h1>-<h6>, <p>, <div><h2 fld-text="Heading">
fld-areaTextarea<p>, <div><p fld-area="Description">
fld-imageImage<img> only<img fld-image="Photo">
fld-bg-imageBG ImageAny element<div fld-bg-image="BG">
fld-linkLink<a> only<a fld-link="Button">
fld-editorRich editor<div><div fld-editor="Content">
fld-loopRepeaterWrapper <div><div fld-loop="Items">
fld-groupGroupContainer<div fld-group="Hero">
fld-layoutsSection builderWrapper <div><div fld-layouts="Page Sections">
fld-layoutSection typeDirect child<section fld-layout="Hero">
layout-previewPreview controlOn fld-layoutlayout-preview="off"
fld-tabTabEmpty <div><div fld-tab="Hero" wp="delete-element">
fld-showToggle (show)Wrapper <div><div fld-show="Show CTA">
fld-hideToggle (hide)Wrapper <div><div fld-hide="Hide CTA">
fld-galleryGalleryWrapper <div><div fld-gallery="Photos">

Replace fld- with opt- for site-wide options. Full reference: Référence des attributs

Règles de placement

Sections et onglets

fld-tab doit être sur un <div> vide séparé, PAS sur le même élément que fld-group. Placez-le en tant que frère AVANT le groupe.

<!-- ONE wp-fields-group per page on <body> -->
<body wp-fields-group="Home Page">

  <!-- Tab = empty sibling BEFORE the group -->
  <div fld-tab="Hero" wp="delete-element" class="tab-div"></div>
  <section fld-group="Hero" class="hero">
    <h1 fld-text="Heading">Welcome</h1>
    <p fld-area="Description">...</p>
  </section>

  <div fld-tab="Features" wp="delete-element" class="tab-div"></div>
  <section fld-group="Features" class="features">
    ...
  </section>

</body>

Liens — toujours une paire

Chaque lien DOIT avoir à la fois un attribut lien et un attribut texte, sous DEUX noms — fld-link="X" sur <a>, fld-text="X text" sur un <div> enfant. Un seul nom pour les deux fait qu'un champ alimente l'URL et le libellé. Téléphone/email : opt-phone-link / opt-email-link seuls — un attribut remplit le href et le texte visible. Exception : liens icônes sans texte visible.

<!-- CORRECT: fld-link on <a>, fld-text on child, two names -->
<a fld-link="CTA" href="/shop" class="btn w-inline-block">
  <div fld-text="CTA text">Shop Now</div>
</a>

<!-- Phone/email: one attribute fills both href and text -->
<a opt-phone-link="Phone" href="tel:...">+1 234 567</a>

Images

fld-image va UNIQUEMENT sur les balises <img>. fld-bg-image sur tout élément avec image de fond.

<img fld-image="Hero Image" src="images/hero.jpg" alt="Hero" />
<div fld-bg-image="Background" style="background-image:url('img/bg.jpg')"></div>

Répéteurs

TOUS les enfants dans fld-loop DOIVENT avoir les MÊMES attributs ThemeForge. Utilisez des textes et images différents dans chaque ligne.

<div fld-loop="Team" class="team-grid">
  <div class="card">
    <img fld-image="Photo" src="images/avatar-1.jpg" />
    <h3 fld-text="Name">John Doe</h3>
  </div>
  <!-- Row 2: SAME attributes, DIFFERENT content -->
  <div class="card">
    <img fld-image="Photo" src="images/avatar-2.jpg" />
    <h3 fld-text="Name">Jane Smith</h3>
  </div>
</div>

Options du site

Les éléments sur chaque page (téléphone, email, logo, adresse) doivent utiliser opt-* au lieu de fld-*.

<!-- Header: site-wide, use opt-* -->
<img opt-image="Logo" src="images/logo.png" />

<!-- Navigation: a repeater of link + caption rows (NOT wp-menu) -->
<nav opt-loop="Nav links" class="nav">
  <div class="nav-item">
    <a opt-link="Link" href="/about" class="nav-link w-inline-block">
      <div opt-text="Link text">About</div>
    </a>
  </div>
  …
</nav>

<!-- Footer: contacts — one attribute each -->
<a opt-phone-link="Phone" href="tel:...">+1 234 567</a>
<a opt-email-link="Email" href="mailto:...">info@site.com</a>
<p opt-text="Address">123 Main St</p>

Menus

<!-- Navigation: an opt-loop of link + caption rows (preferred) -->
<nav opt-loop="Nav links" class="nav">
  <div class="nav-item">
    <a opt-link="Link" href="/" class="nav-link w-inline-block">
      <div opt-text="Link text">Home</div>
    </a>
  </div>
  <div class="nav-item">
    <a opt-link="Link" href="/about" class="nav-link w-inline-block">
      <div opt-text="Link text">About</div>
    </a>
  </div>
</nav>

<!-- Language switcher (Polylang): use wp-menu -->
<div wp-menu="Language" class="lang-switcher">
  <a href="/en" class="lang-link">EN</a>
  <a href="/ua" class="lang-link">UA</a>
</div>

Nommage — chaque nom unique

Dans un même périmètre, chaque nom de champ doit être unique. ThemeForge indexe les champs par nom, donc deux champs différents partageant un nom entrent en collision et l’un est perdu silencieusement.

  • Ne donnez JAMAIS à un répéteur (fld-loop) le même nom que la section ou le groupe qui le contient — nommez le répéteur d’après ses lignes (p. ex. « Cartes de compteur »), pas comme la section (« Compteurs »).
  • Un lien et son image ou texte au même endroit ont besoin de noms DISTINCTS — p. ex. opt-link=« Lien du logo » + opt-image=« Logo », pas les deux « Logo ».
  • Réutilisez le MÊME nom seulement volontairement (lignes de répéteur, interrupteurs show/hide). Le convertisseur signale les collisions de noms accidentelles dans les Journaux du projet.
<!-- WRONG: repeater reuses its section/group name -->
<section fld-group="Counters">
  <div fld-loop="Counters"> ... </div>
</section>

<!-- RIGHT: distinct names -->
<section fld-group="Counters">
  <div fld-loop="Counter cards"> ... </div>
</section>

Sites multilingues (Polylang / WPML)

Si la source a deux langues ou plus (un sélecteur, des codes de langue comme ua/ru/en ou des pages dupliquées par langue), elle est multilingue. ThemeForge détecte Polylang ou WPML automatiquement — le balisage est identique. Seules deux choses diffèrent d’un site monolingue :

  1. Le sélecteur de langue utilise wp-menu=« Language » — le plugin de langue injecte les liens de langue.
  2. Chaque champ de contenu stocke une valeur PAR langue. Utilisez UN seul nom de champ (p. ex. fld-text=« Titre ») — ne créez PAS « Titre EN » / « Titre RU ». Le propriétaire édite chaque langue dans l’admin et l’importateur remplit chaque langue.

Sélecteur de langue — la recette

<!-- Dropdown: toggle shows the CURRENT language (an options field),
     the list is a connected wp-menu="Language" (locales injected) -->
<div opt-hide="Hide language switcher" class="lang-drop w-dropdown">
  <div class="lang-dt w-dropdown-toggle">
    <div opt-text="Current language">UA</div>
  </div>
  <nav class="lang-drop-list w-dropdown-list">
    <div wp-menu="Language" class="lang-switcher">
      <a href="/en"><div>ENG</div></a>
      <a href="/ru"><div>РУС</div></a>
    </div>
  </nav>
</div>

<!-- Simple variant: a flat list of language links -->
<ul wp-menu="Language" class="header__languages">
  <li><a href="/">UA</a></li>
  <li><a href="/ru/">RU</a></li>
  <li><a href="/en/">EN</a></li>
</ul>

Les champs globaux opt-* (téléphone, adresse, libellés de navigation) sont aussi par langue, donc l’en-tête/pied de chaque langue peuvent différer. Marquez-les avec opt-* comme d’habitude — aucun travail supplémentaire.

Sur un site multilingue, ne PAS :

  • coder en dur un texte visible — il devient intraduisible ; tout devient un champ ;
  • créer un champ par langue — un seul nom, le CMS le stocke par langue ;
  • baliser les liens à l’intérieur de wp-menu=« Language » — le plugin les remplace par ses propres liens de langue.

Astuce de détection : un sélecteur de langue dans l’en-tête/pied (drapeaux ou codes ua/ru/en), ou des préfixes d’URL /ru/… et /en/…, signifient que le site est multilingue — câblez le sélecteur avec wp-menu=« Language » et attendez-vous à du contenu par langue. Un site monolingue n’en a pas besoin.

Ce qu'il ne faut PAS marquer

  • Éléments décoratifs : séparateurs, espaceurs, overlays de fond, icônes SVG
  • Wrappers structurels : conteneurs grid, wrappers flex, structure de mise en page
  • Liens de navigation dans wp-menu (WordPress les gère)
  • Labels UI statiques : « Prix : », « Quantité : », en-têtes de tableau
  • Icônes UI : recherche, panier, chevrons, flèches
  • Texte standard du footer : « Tous droits réservés », année de copyright

Règle : si le propriétaire du site voudrait changer ce texte/image depuis le panneau admin — mettez un attribut. Si c'est de la décoration UI — passez.

Checklist

  1. Chaque section wp-fields-group a un nom clair et unique
  2. Tous les enfants du répéteur ont des attributs identiques avec un contenu différent
  3. Les images utilisent des balises <img> si possible
  4. Chaque lien a LES DEUX attributs : lien + texte (fld-link + fld-text, opt-phone-link + opt-text, etc.)
  5. Les contacts du footer utilisent opt-* (options), pas fld-*
  6. Les divs d'onglets sont des frères vides avec wp="delete-element"
  7. Pas d'attributs sur les éléments décoratifs/structurels
  8. Les labels sont lisibles, en anglais

Required Pages & Slugs

The file name (slug) determines which WordPress template is generated. Some pages are required, others depend on the site type (blog, shop).

theme-options.html — REQUIRED

You MUST create this page. It contains ALL opt-* fields used across the site (logo, navigation, phone, email, address, social links, copyright). Add wp-fields-group="Theme Options" on <body> and organize fields with opt-tab. Without this page, option fields will NOT appear in the WordPress admin panel.

<!-- theme-options.html -->
<body wp-fields-group="Theme Options">
  <div opt-tab="Header" wp="delete-element" class="tab-div"></div>
  <img opt-image="Logo" src="images/logo.png" />
  <nav opt-loop="Nav links" class="nav">
    <div class="nav-item">
      <a opt-link="Link" href="/about" class="nav-link w-inline-block">
        <div opt-text="Link text">About</div>
      </a>
    </div>
    <div class="nav-item">
      <a opt-link="Link" href="/contacts" class="nav-link w-inline-block">
        <div opt-text="Link text">Contacts</div>
      </a>
    </div>
  </nav>

  <div opt-tab="Footer" wp="delete-element" class="tab-div"></div>
  <a opt-phone-link="Phone" href="tel:...">+1 234 567</a>
  <a opt-email-link="Email" href="mailto:...">info@site.com</a>
  <p opt-text="Address">123 Main St</p>
  <div opt-text="Copyright">&copy; Company</div>
</body>

Slug → Template Mapping

Use these exact file names. Custom pages (about, services, contacts, etc.) can use any slug that doesn't conflict with the reserved names below.

File nameWP templateWhen to use
index.htmlindex.phpHome page (required)
about.htmlabout.phpCustom page — any slug
single.htmlsingle.phpSingle blog post (blog sites)
archive.htmlarchive.phpBlog posts list (blog sites)
404.html404.phpNot found page
search-page.htmlsearch.phpSearch results
single-product.htmlsingle-product.phpSingle product (WooCommerce)
archive-product.htmlarchive-product.phpProduct catalog (WooCommerce)
taxonomy-product-cat.htmltaxonomy-product-cat.phpProduct category archive (WooCommerce)
page-cart.htmlpage-cart.phpCart (WooCommerce)
page-checkout.htmlpage-checkout.phpCheckout (WooCommerce)
page-wishlist.htmlpage-wishlist.phpWishlist (WooCommerce)
page-my-account.htmlpage-my-account.phpMy account (WooCommerce)
single-{type}.htmlsingle-{type}.phpCustom post type — single / archive
theme-options.html—Site-wide options (admin panel only, no template)

Final Delivery — Do NOT Skip

After generating all pages with attributes, you MUST complete these steps:

  1. Create theme-options.html with ALL opt-* fields (see above)
  2. Save all HTML files to a single folder. Tell the user the folder name
  3. Give the user the complete list of ALL page slugs (filenames without .html), ready to paste into the ThemeForge generator page list:
  4. Dans ThemeForge, créez un projet, cochez « La source sera téléversée sur le site », collez la liste des pages et téléchargez le thème vierge. Installez-le dans WordPress, téléversez le ZIP de votre site dans « ThemeForge → Source » (un élément à part du menu d'administration) puis cliquez sur « Mettre à jour le thème depuis le projet ».
index, about, services, contacts, theme-options

tf-cors.php

Facultatif : si votre site est déjà servi depuis une adresse localhost, vous pouvez indiquer cette adresse dans le projet au lieu de téléverser l'archive sur le site (voir « La source sur votre site »). Créez ce fichier à la racine du site et lancez le serveur avec : php -S localhost:8080 tf-cors.php. Seul themeforge.pro est autorisé — aucun autre site ne peut accéder à vos fichiers.

<?php
// ThemeForge CORS Router — place in site root, run: php -S localhost:8080 tf-cors.php
$allowed = ['https://themeforge.pro', 'https://www.themeforge.pro', 'http://localhost:8081'];
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
if (in_array($origin, $allowed, true)) header('Access-Control-Allow-Origin: ' . $origin);
elseif (empty($origin)) header('Access-Control-Allow-Origin: https://themeforge.pro');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$file = __DIR__ . $path;
if (is_dir($file)) $file = rtrim($file, '/') . '/index.html';
if (!is_file($file) && is_file($file . '.html')) $file .= '.html';
if (is_file($file)) {
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    $types = ['html'=>'text/html','css'=>'text/css','js'=>'application/javascript','json'=>'application/json',
        'png'=>'image/png','jpg'=>'image/jpeg','jpeg'=>'image/jpeg','gif'=>'image/gif','svg'=>'image/svg+xml',
        'webp'=>'image/webp','ico'=>'image/x-icon','woff'=>'font/woff','woff2'=>'font/woff2','ttf'=>'font/ttf'];
    if (isset($types[$ext])) header('Content-Type: ' . $types[$ext]);
    readfile($file); return true;
}
http_response_code(404); echo '404 Not Found';

Référence rapide

PAGE:        <body wp-fields-group="Page Name">  (ONE per page)
TAB:         <div fld-tab="Section" wp="delete-element" class="tab-div"></div>
GROUP:       <section fld-group="Section">  (ALWAYS after each tab)

TEXT:        <h2 fld-text="Heading">...</h2>
TEXTAREA:    <p fld-area="Description">...</p>
IMAGE:       <img fld-image="Photo" src="..." />
BG IMAGE:    <div fld-bg-image="BG" style="background-image:url(...)">
LINK+TEXT:   <a fld-link="Btn"><div fld-text="Btn text">Click</div></a>
REPEATER:    <div fld-loop="Items">  (all children = same attrs)
BUILDER:     <div fld-layouts="Page Sections"><section fld-layout="Hero">
             (client picks section types; previews are automatic)
             optional: layout-preview="off" | layout-preview="images/x.jpg"
TOGGLE:      <div fld-show="Show X">  or  <div fld-hide="Hide X">

NAV LINKS:   <nav opt-loop="Nav links"><div><a opt-link="Link"><div opt-text="Link text">...</div></a></div>…</nav>
OPTIONS:     opt-text, opt-image, opt-link, opt-phone-link, opt-email-link
LANG SWITCH: <div wp-menu="Language">  (Polylang only)
POST LOOP:   <div wp-query="'post_type'=>'post','posts_per_page'=>3">
PRODUCTS:    <div wp-product-query="'post_type'=>'product','posts_per_page'=>4">
CONDITION:   <div wp-if="on_sale">

Vérifier le balisage

Avant de livrer le site, envoyez toutes ses pages au vérificateur gratuit. Il exécute le vrai analyseur du générateur — sans compte, rien n'est conservé — et liste ce que le générateur contesterait : error casse le thème, warning signifie que quelque chose est abandonné sans bruit, hint est bon à savoir. Recommencez jusqu'à ce que la réponse indique "ok": true.

POST /api/validate-markup

Envoyez l'ensemble complet en une seule requête : certaines vérifications portent sur l'ensemble et non sur un fichier — présence de theme-options.html, présence de la page d'accueil.

POST https://themeforge.pro/api/validate-markup
Content-Type: application/json

{"pages":[
  {"name":"index.html","html":"<!doctype html>…"},
  {"name":"about.html","html":"…"},
  {"name":"theme-options.html","html":"…"}
]}

Avancé — Agent IA + Webflow MCP

Les deux prompts ci-dessus fonctionnent avec n’importe quelle IA sur une page HTML finie. Si vous construisez dans Webflow, vous pouvez placer les mêmes attributs directement dans le Designer avec un agent IA (p. ex. Claude Code) connecté au Webflow MCP — les mêmes règles, sans copier-coller.

  • Le même canon : les règles de placement de cette page sont la source de vérité unique pour les deux parcours.
  • Dans les deux cas, le résultat est un ensemble de pages balisées que vous remettez au générateur ThemeForge (une URL *.webflow.io publiée ou un dossier HTML local).