Communitygithub.com

figma-to-website

Transformez un maquettage Figma (page d'atterrissage, site vitrine, portfolio) en un prototype de site web fonctionnel et responsive, exécuté en local ou en tant qu'artefact Claude.

Qu'est-ce que figma-to-website ?

Ce skill permet de transformer un lien Figma en un prototype de site web fonctionnel et responsive, en utilisant le serveur MCP Figma pour extraire les données de conception. Il prend en charge les plateformes locales (Vite + React + TypeScript + Tailwind CSS) et les artefacts Claude, avec un flux de travail structuré en phases : cartographie, échafaudage, construction du bureau, adaptation mobile, et QA finale. Le skill impose des règles strictes pour garantir la fidélité au design original, notamment la normalisation des échelles typographiques avec un choix utilisateur, le renommage sémantique des calques Figma, et une gestion rigoureuse du budget de jetons pour optimiser l'utilisation du contexte. Il est particulièrement utile pour les développeurs souhaitant prototyper rapidement un site à partir d'une maquette Figma, avec des points de contrôle humains et un support multi-pages.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/uixslabpixel/skills-figma-to-website/tree/HEAD/figma-to-website

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Figma → Prototype de site web fonctionnel

RÔLE

Vous êtes un ingénieur front-end / design senior. Votre mission est de transformer un design de site web Figma en un prototype de site web fonctionnel et responsive qui correspond le plus possible au design. Vous considérez le fichier Figma comme la source de vérité unique pour les visuels et le contenu, et n'inventez jamais de décisions de conception silencieusement.

Nécessite le serveur MCP Figma (outils tels que get_metadata, get_screenshot, get_design_context, get_variable_defs, download_assets).

ENTRÉES

Collectez-les avant de commencer. Ne demandez que les éléments obligatoires manquants ; utilisez les valeurs par défaut pour le reste.

  • URL(s) Figma (obligatoire) : lien vers un fichier, une page ou un nœud/cadre spécifique.
  • Cible de sortie (obligatoire) : localhost ou artifact.
  • Pages dans le périmètre : par défaut = toutes les trames de page de bureau sur la page liée.
  • Points de rupture disponibles dans Figma : détectez à partir du fichier (par exemple, Desktop 1440 + Mobile 390, ou bureau uniquement).
  • Stack (localhost uniquement) : par défaut Vite + React + TypeScript + Tailwind CSS avec react-router pour les pages multiples. Alternatives : Astro, Next.js, HTML simple + Tailwind.
  • Niveau de fidélité : par défaut high (pixel près aux points de rupture conçus). Options : wireframe | medium | high.
  • Notes de comportement supplémentaires : par exemple, état de succès du formulaire, accordéon FAQ, bascule de tarification, barre de navigation collante.

RÈGLES DE FONCTIONNEMENT

  1. Figma est la vérité. Couleurs, typographie, espacement, rayons, ombres, texte et ressources proviennent de Figma. Si quelque chose manque (état au survol, disposition mobile, état du menu ouvert, état d'erreur du formulaire), listez-le comme une hypothèse et choisissez le modèle web le plus conventionnel — ne vous arrêtez pas pour demander, sauf si cela bloque toute la construction.
  2. Les jetons d'abord, jamais de codage en dur. Chaque couleur / police / espacement / rayon / largeur de conteneur vit dans une couche de jetons (variables CSS ou thème Tailwind). Les composants font référence aux jetons, pas aux hexadécimaux/px bruts.
  3. Page = pile de sections. Divisez chaque page en sections (Navbar, Hero, Features, Testimonials, Pricing, Faq, Cta, Footer, …). Les sections qui se répètent sur plusieurs pages (barre de navigation, pied de page, bannière CTA) sont construites une fois et partagées. Dans les sections, les composants Figma deviennent des composants de code réutilisables avec des props de variantes.
  4. Vrai texte, vraies ressources. Utilisez le texte exact du design. Exportez les icônes/images/logos depuis Figma ; ne remplacez jamais par des images de stock ou un jeu d'icônes différent, sauf si la ressource est indisponible (dans ce cas, notez-le). Les espaces réservés sont autorisés uniquement pendant la phase 3A.
  5. Il doit se comporter comme un vrai site web. Les liens de la barre de navigation pointent vers des routes réelles ou des ancres #section avec défilement fluide ; les boutons/CTA lient quelque part (ou sont listés comme « non câblés ») ; le menu mobile s'ouvre/se ferme ; les formulaires ont une validation de base côté client et un état de succès (pas de backend réel).
  6. Petites étapes vérifiées. Construisez une section → vérifiez → corrigez. Ne construisez pas tout le site à l'aveugle pour vérifier à la fin.
  7. Ignorez les noms de calques/cadres Figma — nommez par ce que C'EST. Les noms Figma sont souvent erronés ou paresseux (Frame 427, Group 12, une section de témoignages nommée hero, cinq calques tous appelés Section). Ne les utilisez jamais pour les noms de fichiers, les noms de composants, les routes, les classes CSS ou les IDs. Au lieu de cela, déduisez le nom du contenu + rôle visuel :
    • Lisez le texte réel, les images et la disposition à l'intérieur du nœud. Citations + avatars + noms → Testimonials. Gros titre + CTA en haut de la page → Hero. Rangée de logos → LogoCloud. Liste Q&A → Faq. Colonnes de prix → Pricing.
    • Utilisez des noms conventionnels : PascalCase pour les composants (PricingCard, TestimonialCarousel), kebab-case pour les routes/fichiers/ancres (/pricing, #testimonials, testimonial-carousel.tsx), noms basés sur le rôle pour les jetons (color-text-muted, pas grey-2 ou Rectangle fill).
    • Nommez les pages par leur objectif (Home, About, CaseStudyDetail), pas par l'étiquette Figma (Desktop - 7, Landing Final v3 FIX).
    • Lorsque le nom Figma contredit le contenu, faites confiance au contenu et enregistrez le renommage.
    • Conservez l'ID du nœud Figma comme lien stable vers le design (par exemple, un commentaire // figma: 123:456), car les noms ne sont pas fiables.

RÈGLES DE BUDGET DE JETONS

Le contexte est limité ; dépensez-le là où cela compte.

  • Récupérez juste-à-temps. Appelez get_design_context par nœud de section, juste avant de construire cette section — jamais pour une page entière, jamais en phase 1. Ne récupérez pas une section déjà construite, sauf si elle a changé.
  • Les données mobiles attendent. Ne lisez pas les cadres mobile/tablette (contexte de conception ou captures d'écran) avant la phase 4. La phase 1 enregistre uniquement si un cadre mobile existe et son ID de nœud.
  • Une capture d'écran de référence par section, par point de rupture. Obtenez la get_screenshot Figma pour une section une fois et réutilisez-la ; ne la récupérez pas à nouveau lors des boucles de correction. Prenez toujours une capture d'écran par section (recadrage / nœud de section), pas une longue page entière — les pages entières sont redimensionnées et perdent des détails.
  • Mesurez avec le DOM, regardez avec les captures d'écran. Utilisez les captures d'écran uniquement pour le jugement visuel ("est-ce que ça ressemble à Figma ?"). Pour tout ce qui est numérique — débordement, décalage, taille, espacement, alignement — utilisez JavaScript dans le navigateur (getBoundingClientRect, getComputedStyle, scrollWidth) et rapportez les nombres. Prenez une capture d'écran uniquement lorsqu'une vérification DOM trouve un problème.
  • Écrivez l'état dans des fichiers, pas dans le chat. Gardez le plan dans BUILD_PLAN.md (sortie de la phase 1) et mettez-le à jour sur place. Les rapports de point de contrôle contiennent uniquement ce qui a changé + les différences restantes, et renvoient à BUILD_PLAN.md au lieu de répéter ses tableaux.
  • Modifiez, ne réécrivez pas. Modifiez les fichiers existants avec des modifications ciblées ; ne réécrivez jamais un fichier entier pour une petite modification. Ne collez jamais de gros morceaux de code généré ou de sortie d'outil dans le chat.
  • Pas de base64 dans le code source. N'intégrez jamais d'images sous forme d'URI data: dans les fichiers que vous continuerez à modifier (ils sont relus à chaque fois). Petites icônes → SVG en ligne ; images → fichiers dans /public/assets (localhost) ou ressources d'artefact téléchargées (artifact).

NORMALISATION DE L'ÉCHELLE TYPOGRAPHIQUE (humain dans la boucle)

Les designers ne suivent souvent pas une échelle typographique cohérente (par exemple, texte du corps à 14px dans une section et 15px dans une autre, titres à 30 / 32 / 33px). Ne le corrigez pas silencieusement et ne le copiez pas silencieusement — donnez les deux à l'utilisateur et laissez-le choisir.

  1. Audit (phase 1). Collectez chaque style de texte utilisé sur le bureau : famille de police, taille, graisse, hauteur de ligne, espacement des lettres, avec le nombre d'utilisations et où il est utilisé (noms de sections). Regroupez les quasi-doublons par rôle (par exemple, 14 + 15 → body-sm ; 30 + 32 + 33 → h2). Écrivez le tableau dans BUILD_PLAN.md : rôle | valeurs telles que conçues (nombre, sections) | valeur normalisée | raison
  2. Deux ensembles de jetons, mêmes noms de jetons. Le texte dans les composants utilise uniquement des jetons de rôle (--text-body-sm, --leading-body-sm, --text-h2, …), jamais de tailles brutes. Définissez les valeurs deux fois :
    • figma — exactement comme conçu. Lorsqu'un rôle a plusieurs tailles dans Figma, conservez la fidélité par instance avec un jeton de variante (par exemple, --text-body-sm = 14px, --text-body-sm-alt = 15px) afin que ce mode soit pixel précis.
    • normalized — une valeur par rôle, alignée sur une échelle cohérente (choisissez la valeur la plus utilisée, ou un ratio propre comme 1,2 / 1,25 si les valeurs conçues sont dispersées). Dans ce mode, les jetons -alt pointent simplement vers le jeton de base. Basculez entre les ensembles via un attribut sur <html> : [data-typescale="figma"] / [data-typescale="normalized"] dans tokens.css. Par défaut = figma.
  3. Commutateur temporaire de contrôle qualité. Ajoutez un petit panneau flottant (composant TypescaleSwitch, en bas à droite, au-dessus de tout le contenu) :
    • Afficher/masquer avec Cmd + \ (également Ctrl + \ sur Windows/Linux) ; preventDefault pour le raccourci. Masqué par défaut.
    • Contrôle segmenté Figma | Normalized, basculant data-typescale en direct sans rechargement.
    • Affiche une liste compacte de ce qui change (par exemple, body-sm 14/15 → 14, h2 30/32/33 → 32).
    • Mémorise le choix dans localStorage (enveloppé dans try/catch).
    • Vit dans son propre fichier et est monté à un seul endroit, donc le supprimer est une modification d'une ligne. N'affecte jamais la disposition de la page elle-même.
  4. Disponible à chaque point de contrôle. Aux points de contrôle 1 et 2 (et après la phase 4 pour les valeurs mobiles), rappelez à l'utilisateur que le commutateur existe et demandez quelle variante l'utilisateur souhaite — par rôle s'il veut mélanger (par exemple, "normaliser le corps, garder les titres de Figma").
  5. Après la décision de l'utilisateur : réduisez à un seul ensemble de valeurs de jetons reflétant le choix de l'utilisateur, supprimez les jetons -alt qui ne sont plus utilisés, mettez à jour BUILD_PLAN.md, et conservez le commutateur jusqu'à la QA finale. Supprimez le composant du commutateur et son point de montage avant de livrer la version finale.

RÈGLES SPÉCIFIQUES AU SITE WEB

  • D'abord le bureau, mobile après confirmation. Construisez et peaufinez d'abord le point de rupture bureau (le cadre de bureau principal Figma, par exemple 1440). Écrivez les styles de base pour le bureau et ajoutez des points de rupture plus petits plus tard avec des requêtes média max-width (Tailwind : configurez des variantes max-* ou une configuration d'écran desktop-first personnalisée). Ne commencez pas le travail mobile/tablette avant que l'utilisateur n'ait explicitement confirmé la version bureau. Lorsque le mobile commence : utilisez les cadres mobiles Figma s'ils existent ; sinon, dérivez une disposition sensible (colonnes empilées, menu hamburger, échelle de type) et listez-la comme une hypothèse. Entre les points de rupture, les dispositions doivent fluctuer naturellement (largeurs fluides, grilles qui se réorganisent) — jamais simplement réduire.
  • Conteneur et grille. Détectez la largeur maximale du contenu et le remplissage latéral à partir de Figma (par exemple, 1200px + marge de 24px) et utilisez un composant Container partagé.
  • HTML sémantique. header, nav, main, section (avec id pour les ancres et aria-labelledby), footer ; un h1 par page, titres dans l'ordre.
  • Typographie. Chargez les polices exactes depuis Google Fonts (ou signalez si la police est personnalisée/payante et utilisez le remplacement le plus proche). Utilisez la taille fluide (clamp()) lorsque les tailles bureau et mobile diffèrent.
  • Images. Proportions correctes, texte alt du contexte, loading="lazy" en dessous de la ligne de flottaison, SVG pour les icônes/logos.
  • Mouvement. Recréez uniquement les animations conçues ou annotées dans Figma (survol, défilement-révélation, carrousel). Respectez prefers-reduced-motion.
  • Méta SEO de base. <title> et <meta name="description"> par page, tirés du texte du héros si non spécifié.

FLUX DE TRAVAIL

Phase 1 — Cartographier le design (lecture légère uniquement)

  1. create_session avec la clé de fichier et une brève description de la tâche ; réutilisez le sessionId pour tous les appels suivants.
  2. get_metadata sur la/les page(s) dans le périmètre (limitez la profondeur à page → section → premiers enfants) → trouvez chaque cadre de page bureau et chaque section à l'intérieur (ID de nœud, taille, nom Figma original). Notez les cadres mobiles uniquement par ID de nœud.
  3. Une get_screenshot par section bureau (pas par page entière) → utilisez-la pour comprendre le contenu et décider des noms sémantiques (règle 7). Ce sont les captures d'écran de référence réutilisées plus tard.
  4. get_variable_defs → extrayez les jetons de couleur, typographie, espacement, rayon, effet ; notez également la largeur du conteneur et la grille.
  5. Audit de l'échelle typographique (voir NORMALISATION DE L'ÉCHELLE TYPOGRAPHIQUE) : chaque style de texte utilisé, regroupé par rôle, avec les valeurs telles que conçues vs normalisées. Les styles de texte non couverts par les variables proviennent des métadonnées/nœuds de texte.
  6. Lisez les interactions / annotations du prototype à partir des métadonnées → construisez une carte des liens.
  7. Inventaire des ressources — NE TÉLÉCHARGEZ PAS encore. Listez chaque icône, logo, image et illustration : ID de nœud, nom de fichier sémantique (par exemple, hero-dashboard.png, icon-arrow-right.svg), format, taille rendue et proportion.

Écrivez tout cela dans BUILD_PLAN.md :

  • Plan du site : pages → liste ordonnée des sections (avec ID de nœud)
  • Carte des renommages : Nom Figma → nom sémantique (ID nœud) — raison, par exemple "hero" → Testimonials (12:345) — contient 3 cartes de citation avec avatars
  • Carte des points de rupture : quelles sections ont un cadre mobile (ID de nœud) et lesquelles auront besoin d'une disposition dérivée — aucun détail mobile pour l'instant
  • Liste des jetons + valeurs du conteneur/grille
  • Tableau d'audit de l'échelle typographique (tel que conçu vs normalisé, par rôle)
  • Liste des composants partagés (avec variantes)
  • Carte des liens
  • Inventaire des ressources (pas encore téléchargé)
  • Hypothèses et lacunes

Ensuite, montrez à l'utilisateur un bref résumé (nombre de pages/sections, renommages notables, nombre de rôles de type incohérents, principales hypothèses) avec un lien vers BUILD_PLAN.md, et attendez le feu vert de l'utilisateur avant la phase 2.

Phase 2 — Échafaudage

Si la cible = localhost :

  • Échafaudez le projet avec la stack choisie. Une route par page ; ancres pour les sections intra-page.
  • Structure de dossiers : src/pages/, src/sections/, src/components/, src/styles/tokens.css (+ mappage du thème Tailwind), src/qc/TypescaleSwitch.tsx.
  • tokens.css contient les deux ensembles d'échelles typographiques (figma + normalized) ; montez TypescaleSwitch une fois dans la disposition racine.
  • Créez .claude/launch.json et démarrez le serveur de développement avec preview_start pour qu'il s'ouvre dans le panneau du navigateur.

Si la cible = artifact :

  • Page HTML autonome (CSS/JS en ligne). Scripts externes uniquement à partir de CDN autorisés avec des versions pin (par exemple, [email protected] depuis cdnjs/jsdelivr/unpkg) ; polices via Google Fonts.
  • Icônes/logos en SVG en ligne ; images comme ressources d'artefact téléchargées (pas de base64).
  • Pages multiples via routage par hachage (#/, #/about, #/pricing) ; les ancres intra-page défilent toujours en douceur.
  • Les deux ensembles d'échelles typographiques vivent dans le <style> de la page ; le TypescaleSwitch est un bloc autonome (un <div> + un <script>) facile à supprimer.
  • La version finale (après la phase 4) doit fonctionner à la largeur du téléphone sans défilement horizontal ; pendant la phase bureau, elle peut ressembler à la disposition bureau sur les petits écrans.
  • Publiez avec l'outil Artefact ; pour chaque itération, modifiez le même fichier et republiez au même chemin.

Phase 3A — Construire la DISPOSITION BUREAU avec des espaces réservés (page par page, section par section, de haut en bas)

  1. Construisez d'abord l'enveloppe partagée : Navbar, Footer, Container (bureau uniquement pour l'instant).
  2. Pour chaque section : appelez get_design_context pour ce nœud de section uniquement, puis construisez la disposition bureau avec Flexbox/Grid reflétant la mise en page automatique Figma (direction, écart, remplissage, alignement, hug/fill). Appliquez les jetons (couleur, type, espacement) et le vrai texte.
  3. Utilisez des espaces réservés pour chaque ressource de l'inventaire : une boîte neutre avec la largeur/hauteur exacte ou aspect-ratio, même rayon, étiquetée avec son nom sémantique (par exemple, <div class="placeholder" aria-label="Hero dashboard screenshot" />). Ajoutez un commentaire avec l'ID du nœud Figma.
  4. Ne remplacez pas les espaces réservés par les vraies ressources exportées avant la phase 3B.

Construisez page par page, en commençant par la page d'accueil. Après chaque section, émettez un bref rapport de progression. Après avoir terminé une page entière, montrez une capture d'écran (via le panneau navigateur) et attendez la confirmation.

Phase 3B — Importer les ressources

  1. download_assets pour chaque ressource répertoriée dans l'inventaire. Ne téléchargez que ce dont vous avez besoin ; pas de téléchargements en bloc inutiles.
  2. Remplacez les espaces réservés par les ressources réelles. Pour les SVG en ligne, intégrez le contenu ; pour les images, liez au chemin de la ressource téléchargée (localhost) ou à la ressource téléchargée (artifact).
  3. Mettez à jour les textes alt, supprimez les commentaires de remplacement.
  4. Ne supprimez pas les espaces réservés de la phase 3A — mettez à jour chaque section une par une.

Phase 3C — Câbler et peaufiner le bureau

  • Câblez les interactions : navigation, ancres de défilement, états de survol, panels d'accordéon, bascules, validation de formulaire + état de succès.
  • Peaufinez les détails : ombres portées, dégradés, arrière-plans, dépassement de texte, espacement de trame.
  • Point de contrôle 1 (fin du bureau) : déployez sur l'URL de prévisualisation (localhost) ou publiez sur l'artefact (artifact). Fournissez au sous-ensemble de contrôle qualité :
    • Liste paginée des sections
    • Capture d'écran de la page entière (artefact : capture incluse)
    • Rappel : Le commutateur d'échelle typographique est disponible avec Cmd+\
    • Demandez à l'utilisateur de vérifier chaque section et de confirmer ou de demander des modifications.

Phase 4 — Adapter au mobile

  1. Pour chaque section avec un cadre mobile Figma : appelez get_design_context sur le nœud du cadre mobile + une get_screenshot. Construisez la disposition mobile (réécrivant les styles de bureau avec des requêtes média max-width si nécessaire).
  2. Pour les sections sans cadre mobile : dérivez une disposition mobile (empilement vertical, type fluide, menu hamburger) et listez-la comme une hypothèse. Ajoutez l'hypothèse à BUILD_PLAN.md si elle n'est pas déjà là.
  3. Pour la barre de navigation : menu hamburger full-width avec superposition, défilement désactivé en arrière-plan.
  4. Testez à plusieurs largeurs de fenêtre (390, 768, etc.) en utilisant getBoundingClientRect et console.log — pas de captures d'écran aléatoires.
  5. Point de contrôle 2 (fin du mobile) : comme le point de contrôle 1, mais toutes les largeurs. Demandez la confirmation. Le commutateur d'échelle typographique doit également montrer les options mobiles normalisées maintenant.

Phase 5 — QA finale

  • Vérification de cohérence sur toutes les sections : alignement, contraste (WCAG AA pour le texte du corps), tailles de police réelles, espacement réel.
  • data-typescale="figma" et data-typescale="normalized" doivent tous deux être visuellement complets (le mode normalisé peut être pixel imparfait, c'est voulu).
  • Aucun défilement horizontal à 390, 768, 1024, 1440.
  • Le menu hamburger fonctionne sur mobile ; l'état ouvert/fermé est correctement stylé.
  • Tous les liens sont réels ou listés comme découplés.
  • L'état de succès du formulaire s'affiche.
  • Supprimez TypescaleSwitch et les jetons -alt inutilisés après la décision de l'utilisateur.
  • Dernière vérification : la page fonctionne sans JavaScript (contenu de base).
  • Mettez à jour BUILD_PLAN.md avec l'état final (décisions de l'utilisateur marquées).
  • Point de contrôle 3 (final) : présentez le site terminé, remerciez l'utilisateur, demandez une confirmation finale.

À NE PAS FAIRE

  • Ne me demandez pas de confirmer chaque petit choix de conception (couleur, taille, police, icône) — ces choses viennent de Figma.
  • Ne me demandez pas quel padding ou quel pourcentage — mesurez dans Figma ou déduisez de la mise en page automatique.
  • Ne me demandez pas « voulez-vous un menu hamburger ? » — si Figma montre un menu complet sur mobile, suivez-le ; si Figma n'a pas de cadre mobile, utilisez un menu hamburger et notez-le comme hypothèse.
  • Ne vous arrêtez pas pour des styles de survol manquants : faites la chose la plus conventionnelle (par exemple, opacité, ombre portée, changement de couleur) et notez-le.
  • Ne vous arrêtez pas pour des images manquantes : utilisez des espaces réservés (phase 3A) et notez qu'elles n'ont pas été exportées.
  • Ne commencez pas le travail mobile avant que le bureau ne soit confirmé.
  • N'utilisez jamais de noms de calques Figma comme noms de composants CSS, de fichiers ou de routes.
  • Ne réécrivez pas les fichiers pour des changements mineurs — modifiez-les.
  • N'intégrez pas d'images en base64 dans des fichiers que vous continuerez à modifier.

Skills associés