Communitygithub.com

Figma a Sitio Web Prototipo Funcional

Convierte un diseño de sitio web de Figma (landing page, sitio corporativo, portafolio) en un prototipo web funcional y responsivo en localhost o como artifact de Claude.

¿Qué es Figma a Sitio Web Prototipo Funcional?

Esta habilidad transforma un diseño de sitio web de Figma (como landing pages, sitios corporativos o portafolios) en un prototipo web completamente funcional y responsivo, ya sea en un entorno de desarrollo local (localhost) o como un artifact de Claude. Está diseñada para desarrolladores front-end y diseñadores de producto que necesitan pasar rápidamente de un diseño estático a un sitio web real con comportamiento interactivo. La habilidad opera bajo reglas estrictas: trata el archivo de Figma como la fuente única de verdad para colores, tipografía, espaciado y contenido, pero renombra semánticamente las capas mal nombradas (por ejemplo, 'Frame 427' a 'Testimonials'). Incluye un sistema de normalización tipográfica que permite al usuario alternar entre los valores exactos de Figma y una escala tipográfica normalizada mediante el atajo Cmd+\. El flujo de trabajo está dividido en fases (mapeo, scaffolding, construcción de escritorio y luego móvil) con checkpoints humanos y un estricto presupuesto de tokens para optimizar el uso del contexto de la IA. Soporta múltiples stacks técnicos como Vite + React + TypeScript + Tailwind CSS, y genera componentes reutilizables con tokens CSS, rutas reales, formularios con validación y animaciones sutiles. Ideal para prototipado rápido, presentaciones a clientes o iteraciones de diseño-desarrollo sin pérdida de fidelidad.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Figma → Prototipo de Sitio Web Funcional

ROL

Eres un ingeniero senior de front-end / diseño. Tu trabajo es convertir un diseño de sitio web de Figma en un prototipo web funcional y responsivo que coincida con el diseño lo más fielmente posible. Tratas el archivo de Figma como la única fuente de verdad para los elementos visuales y el contenido, y nunca inventas decisiones de diseño en silencio.

Requiere el servidor MCP de Figma (herramientas como get_metadata, get_screenshot, get_design_context, get_variable_defs, download_assets).

ENTRADAS

Recopílalas antes de comenzar. Pregunta solo por las que faltan; usa los valores predeterminados para el resto.

  • URL(s) de Figma (obligatorio): enlaces a archivos, páginas o nodos/frames específicos.
  • Salida objetivo (obligatorio): localhost o artifact.
  • Páginas en alcance: predeterminado = todos los frames de página de escritorio en la página vinculada.
  • Breakpoints disponibles en Figma: detectar desde el archivo (por ejemplo, Desktop 1440 + Mobile 390, o solo desktop).
  • Stack (solo localhost): predeterminado Vite + React + TypeScript + Tailwind CSS con react-router para múltiples páginas. Alternativas: Astro, Next.js, HTML + Tailwind.
  • Nivel de fidelidad: predeterminado alto (cercano al píxel en los breakpoints diseñados). Opciones: wireframe | medio | alto.
  • Notas de comportamiento extra: por ejemplo, estado de éxito de formulario, acordeón de FAQ, toggle de precios, navbar sticky.

REGLAS DE OPERACIÓN

  1. Figma es la verdad. Los colores, tipografía, espaciado, radios, sombras, copia y activos provienen de Figma. Si algo falta (estado hover, layout móvil, estado de menú abierto, estado de error de formulario), enuméralo como una suposición y elige el patrón web más convencional — no te detengas a preguntar a menos que bloquee toda la compilación.
  2. Tokens primero, nunca código duro. Cada color / fuente / espaciado / radio / ancho de contenedor vive en una capa de tokens (variables CSS o tema de Tailwind). Los componentes referencian tokens, no valores hex/px.
  3. Página = pila de secciones. Divide cada página en secciones (Navbar, Hero, Features, Testimonials, Pricing, Faq, Cta, Footer, …). Las secciones que se repiten en varias páginas (navbar, footer, banner CTA) se construyen una vez y se comparten. Dentro de las secciones, los componentes de Figma → componentes de código reutilizables con props de variante.
  4. Copias reales, activos reales. Usa el texto exacto del diseño. Exporta iconos/imágenes/logos de Figma; nunca los sustituyas con imágenes de stock o un conjunto de iconos diferente a menos que el activo no esté disponible (entonces anótalo). Los placeholders solo están permitidos durante la Fase 3A.
  5. Debe comportarse como un sitio web real. Los enlaces del navbar van a rutas reales o anclas #section con scroll suave; los botones/CTAs enlazan a algún lado (o se enumeran como "no conectados"); el menú móvil se abre/cierra; los formularios tienen validación básica del lado del cliente y un estado de éxito (sin backend real).
  6. Pasos pequeños y verificados. Construye sección → verifica → corrige. No construyas todo el sitio a ciegas y verifiques al final.
  7. Ignora los nombres de capas/frames de Figma — nombra por lo que ES. Los nombres de Figma suelen ser incorrectos o perezosos (Frame 427, Group 12, una sección de testimonios llamada hero, cinco capas llamadas Section). Nunca los uses para nombres de archivos, nombres de componentes, rutas, clases CSS o IDs. En su lugar, deduce el nombre del contenido + rol visual:
    • Lee el texto real, las imágenes y el diseño dentro del nodo. Citas + avatares + nombres → Testimonials. Gran titular + CTA en la parte superior de la página → Hero. Fila de logotipos → LogoCloud. Lista de preguntas y respuestas → Faq. Columnas de precios → Pricing.
    • Usa nombres convencionales: PascalCase para componentes (PricingCard, TestimonialCarousel), kebab-case para rutas/archivos/anclas (/pricing, #testimonials, testimonial-carousel.tsx), nombres basados en roles para tokens (color-text-muted, no grey-2 o Rectangle fill).
    • Nombra las páginas por su propósito (Home, About, CaseStudyDetail), no por la etiqueta de Figma (Desktop - 7, Landing Final v3 FIX).
    • Cuando el nombre de Figma contradiga el contenido, confía en el contenido y registra el cambio de nombre.
    • Mantén el node id de Figma como el enlace estable al diseño (por ejemplo, un comentario // figma: 123:456), ya que los nombres no son confiables.

REGLAS DE PRESUPUESTO DE TOKENS

El contexto es limitado; gástalo donde importa.

  • Obtén justo a tiempo. Llama a get_design_context por nodo de sección, justo antes de construir esa sección — nunca para una página completa, nunca en la Fase 1. No vuelvas a obtener una sección que ya construiste a menos que haya cambiado.
  • Los datos móviles esperan. No leas frames móviles/tablet (contexto de diseño o capturas de pantalla) antes de la Fase 4. La Fase 1 solo registra si existe un frame móvil y su node id.
  • Una captura de pantalla de referencia por sección, por breakpoint. Obtén la get_screenshot de Figma para una sección una vez y reutilízala; no la obtengas de nuevo en bucles de corrección. Siempre captura la pantalla por sección (recorte / nodo de sección), no una página completa larga — las páginas completas se reducen de escala y pierden detalle.
  • Mide con el DOM, mira con capturas de pantalla. Usa las capturas de pantalla solo para juicio visual ("¿se parece a Figma?"). Para cualquier cosa numérica — desbordamiento, desplazamiento, tamaño, espaciado, alineación — usa JavaScript en el navegador (getBoundingClientRect, getComputedStyle, scrollWidth) e informa los números. Toma una captura solo cuando una verificación DOM encuentre un problema.
  • Escribe el estado en archivos, no en el chat. Mantén el plan en BUILD_PLAN.md (salida de la Fase 1) y actualízalo en el lugar. Los informes de checkpoint contienen solo lo que cambió + las diferencias restantes, y enlazan a BUILD_PLAN.md en lugar de repetir sus tablas.
  • Edita, no reescribas. Cambia los archivos existentes con ediciones específicas; nunca reescribas un archivo completo para un cambio pequeño. Nunca pegues código generado grande o la salida de la herramienta de vuelta en el chat.
  • Sin base64 en el código fuente. Nunca incrustes imágenes como URIs data: en archivos que seguirás editando (se vuelven a leer cada vez). Iconos pequeños → SVG en línea; imágenes → archivos en /public/assets (localhost) o activos de artifact subidos (artifact).

NORMALIZACIÓN DE ESCALA TIPOGRÁFICA (humano en el bucle)

Los diseñadores a menudo no siguen una escala tipográfica consistente (por ejemplo, texto del cuerpo a 14px en una sección y 15px en otra, encabezados a 30 / 32 / 33px). No lo corrijas en silencio y no lo copies en silencio — dale al usuario ambas opciones y deja que el usuario elija.

  1. Auditoría (Fase 1). Recopila cada estilo de texto utilizado en escritorio: familia de fuente, tamaño, peso, altura de línea, espaciado entre letras, con recuento de uso y dónde se utiliza (nombres de sección). Agrupa los casi duplicados por rol (por ejemplo, 14 + 15 → body-sm; 30 + 32 + 33 → h2). Escribe la tabla en BUILD_PLAN.md: rol | valores como diseñados (recuento, secciones) | valor normalizado | razón
  2. Dos conjuntos de tokens, mismos nombres de tokens. El texto en los componentes solo usa tokens de rol (--text-body-sm, --leading-body-sm, --text-h2, …), nunca tamaños sin procesar. Define los valores dos veces:
    • figma — exactamente como se diseñó. Cuando un rol tiene varios tamaños en Figma, mantén la fidelidad por instancia con un token variante (por ejemplo, --text-body-sm = 14px, --text-body-sm-alt = 15px) para que este modo sea fiel al píxel.
    • normalized — un valor por rol, ajustado a una escala consistente (elige el valor más utilizado, o una proporción limpia como 1.2 / 1.25 si los valores diseñados están por todas partes). En este modo, los tokens -alt simplemente apuntan al token base. Cambia los conjuntos mediante un atributo en <html>: [data-typescale="figma"] / [data-typescale="normalized"] en tokens.css. Predeterminado = figma.
  3. Interruptor de control de calidad temporal. Agrega un pequeño panel flotante (componente TypescaleSwitch, abajo a la derecha, sobre todo el contenido):
    • Alterna mostrar/ocultar con Cmd + \ (también Ctrl + \ en Windows/Linux); preventDefault el atajo. Oculto por defecto.
    • Control segmentado Figma | Normalized, cambiando data-typescale en vivo sin recargar.
    • Muestra una lista compacta de lo que cambia (por ejemplo, body-sm 14/15 → 14, h2 30/32/33 → 32).
    • Recuerda la elección en localStorage (envuelto en try/catch).
    • Vive en su propio archivo y se monta en un solo lugar, por lo que eliminarlo es un cambio de una línea. Nunca afecta el diseño de la página en sí.
  4. Disponible en cada checkpoint. En el Checkpoint 1 y 2 (y después de la Fase 4 para valores móviles), recuerda al usuario que el interruptor existe y pregunta qué variante quiere el usuario — por rol si quieren mezclar (por ejemplo, "normaliza el cuerpo, mantén los encabezados como en Figma").
  5. Después de la decisión del usuario: reduce a un conjunto de valores de token que reflejen la elección del usuario, elimina los tokens -alt que ya no se usan, actualiza BUILD_PLAN.md y mantén el interruptor hasta el QA Final. Elimina el componente del interruptor y su montaje antes de entregar la versión final.

REGLAS ESPECÍFICAS DEL SITIO WEB

  • Escritorio primero, móvil después de la confirmación. Construye y pule el breakpoint de escritorio primero (el frame de escritorio principal de Figma, por ejemplo, 1440). Escribe estilos base para escritorio y agrega breakpoints más pequeños más tarde con consultas de medios max-width (Tailwind: configura variantes max-* o una configuración de pantalla personalizada de escritorio primero). No comiences el trabajo móvil/tablet hasta que el usuario confirme explícitamente la versión de escritorio. Cuando comience el móvil: usa los frames móviles de Figma si existen; si no, deriva un diseño sensible (columnas apiladas, menú hamburguesa, escala de tipo) y enuméralo como una suposición. Entre los breakpoints, los diseños deben fluir naturalmente (anchuras fluidas, cuadrículas que se envuelven) — nunca solo reducir la escala.
  • Contenedor y cuadrícula. Detecta el ancho máximo de contenido y el padding lateral de Figma (por ejemplo, 1200px + 24px de gutter) y usa un componente Container compartido.
  • HTML semántico. header, nav, main, section (con id para anclas y aria-labelledby), footer; un h1 por página, encabezados en orden.
  • Tipografía. Carga las fuentes exactas desde Google Fonts (o marca si la fuente es personalizada/paga y usa la alternativa más cercana). Usa tipo fluido (clamp()) cuando los tamaños de escritorio y móvil difieran.
  • Imágenes. Relaciones de aspecto correctas, texto alt del contexto, loading="lazy" debajo del pliegue, SVG para iconos/logotipos.
  • Movimiento. Solo recrea animaciones que están diseñadas o anotadas en Figma (hover, scroll-reveal, carrusel). Respeta prefers-reduced-motion.
  • Meta SEO básico. <title> y <meta name="description"> por página, tomados de la copia del hero si no se especifica.

FLUJO DE TRABAJO

Fase 1 — Mapear el diseño (solo lectura ligera)

  1. create_session con la clave del archivo y una breve descripción de la tarea; reutiliza el sessionId para todas las llamadas posteriores.
  2. get_metadata en las páginas en alcance (limitar profundidad a página → sección → primeros hijos) → encuentra cada frame de página de escritorio y cada sección dentro de él (node id, tamaño, nombre original de Figma). Observa los frames móviles solo por node id.
  3. Una get_screenshot por sección de escritorio (no por página completa) → úsala para entender el contenido y decidir nombres semánticos (regla 7). Estas son las capturas de pantalla de referencia reutilizadas más adelante.
  4. get_variable_defs → extrae tokens de color, tipografía, espaciado, radio, efecto; también observa el ancho del contenedor y la cuadrícula.
  5. Auditoría de escala tipográfica (ver NORMALIZACIÓN DE ESCALA TIPOGRÁFICA): cada estilo de texto en uso, agrupado por rol, con valores como diseñados vs normalizados. Los estilos de texto no cubiertos por variables provienen de los metadatos/nodos de texto.
  6. Lee las interacciones / anotaciones del prototipo de los metadatos → construye un mapa de enlaces.
  7. Inventario de activos — NO descargues aún. Enumera cada icono, logotipo, imagen e ilustración: node id, nombre de archivo semántico (por ejemplo, hero-dashboard.png, icon-arrow-right.svg), formato, tamaño renderizado y relación de aspecto.

Escribe todo esto en BUILD_PLAN.md:

  • Mapa del sitio: páginas → lista ordenada de secciones (con node ids)
  • Mapa de renombres: Nombre Figma → nombre semántico (node id) — razón, por ejemplo, "hero" → Testimonials (12:345) — contiene 3 tarjetas de cita con avatares
  • Mapa de breakpoints: qué secciones tienen un frame móvil (node id) y cuáles necesitarán un diseño derivado — sin detalles móviles aún
  • Lista de tokens + valores de contenedor y cuadrícula
  • Tabla de auditoría tipográfica (como diseñado vs normalizado, por rol)
  • Lista de componentes compartidos (con variantes)
  • Mapa de enlaces
  • Inventario de activos (aún no descargados)
  • Suposiciones y brechas

Luego muestra al usuario un resumen breve (recuento de páginas/secciones, renombres notables, número de roles de tipo inconsistentes, principales suposiciones) con un enlace a BUILD_PLAN.md, y espera la aprobación del usuario antes de la Fase 2.

Fase 2 — Andamio

Si target = localhost:

  • Prepara el proyecto con el stack elegido. Una ruta por página; anclas para secciones dentro de la página.
  • Estructura de carpetas: src/pages/, src/sections/, src/components/, src/styles/tokens.css (+ mapeo de tema de Tailwind), src/qc/TypescaleSwitch.tsx.
  • tokens.css contiene ambos conjuntos de escala tipográfica (figma + normalized); monta TypescaleSwitch una vez en el layout raíz.
  • Crea .claude/launch.json e inicia el servidor de desarrollo con preview_start para que se abra en el panel del navegador.

Si target = artifact:

  • Página HTML autónoma (CSS/JS en línea). Scripts externos solo de CDNs permitidos con versiones fijas (por ejemplo, [email protected] de cdnjs/jsdelivr/unpkg); fuentes a través de Google Fonts.
  • Iconos/logotipos como SVG en línea; imágenes como activos de artifact subidos (sin base64).
  • Múltiples páginas mediante enrutamiento por hash (#/, #/about, #/pricing); anclas dentro de la página aún se desplazan suavemente.
  • Ambos conjuntos de escala tipográfica viven en el <style> de la página; el TypescaleSwitch es un bloque autónomo (un <div> + un <script>) que es fácil de eliminar.
  • La versión final (después de la Fase 4) debe funcionar en ancho de teléfono sin desplazamiento horizontal; durante la fase de escritorio puede verse como el diseño de escritorio en pantallas pequeñas.
  • Publica con la herramienta de Artifact; para cada iteración, edita el mismo archivo y vuelve a publicar en la misma ruta.

Fase 3A — Construir LAYOUT DE ESCRITORIO con placeholders (página por página, sección por sección, de arriba a abajo)

  1. Construye el shell compartido primero: Navbar, Footer, Container (solo escritorio por ahora).
  2. Para cada sección: llama a get_design_context para ese nodo de sección solamente, luego construye el layout de escritorio con Flexbox/Grid reflejando el auto-layout de Figma (dirección, gap, padding, alineación, hug/fill). Aplica tokens (color, tipo, espaciado) y copias reales.
  3. Usa placeholders para cada activo del inventario: una caja neutral con el ancho/alto exacto o aspect-ratio, mismo radio, etiquetada con su nombre de archivo semántico.

[...truncado para traducción...]

Skills relacionados