Skip to main content

GUIA_DISENO.md — Template reutilizable

Este template define la estructura recomendada para la guía de diseño de un proyecto construido con AI coding agents. Está extraído de la GUIA_DISENO.md de Virso (1134 líneas co-creadas con Claude Code durante 5 fases de implementación). Principio: Este documento es EVOLUTIVO. No se escribe completo al inicio. Se empieza con las secciones obligatorias y crece conforme se implementa. Cada sesión de implementación puede agregar gotchas, componentes, o patrones nuevos. Relación con otros documentos:
  • UX_PATTERNS_PROTOCOL.md = principios agnósticos (Capa 1, no cambia entre proyectos)
  • GUIA_DISENO.md = especificaciones de proyecto (Capa 2, este documento, único por proyecto)

Cómo usar este template

  1. Copiar como docs/GUIA_DISENO.md en tu proyecto
  2. Llenar las secciones marcadas como [OBLIGATORIO] antes de la primera sesión de implementación de UI
  3. Las secciones [CRECE CON EL PROYECTO] se van llenando conforme se implementa
  4. Las secciones [OPCIONAL] se agregan si el proyecto las necesita
  5. Eliminar toda la guía de uso y los comentarios <!-- --> cuando el documento esté en uso

Índice

  1. Paleta de colores — OBLIGATORIO
  2. Tipografía — OBLIGATORIO
  3. Espaciado y bordes — OBLIGATORIO
  4. Sistema de temas — OBLIGATORIO si hay dark mode
  5. Layout principal — OBLIGATORIO
  6. Componentes UI — CRECE CON EL PROYECTO
  7. Patrones de página — CRECE CON EL PROYECTO
  8. Animaciones y motion — OPCIONAL
  9. Iconografía — OBLIGATORIO
  10. Accesibilidad — OBLIGATORIO
  11. Internacionalización — OPCIONAL
  12. Gotchas del framework CSS — CRECE CON EL PROYECTO
  13. Responsive design — OBLIGATORIO
  14. Estructura de archivos UI — OBLIGATORIO
  15. Efectos visuales especiales — OPCIONAL
  16. Checklist para nuevas funcionalidades — OBLIGATORIO

Principio fundamental

{Tu principio fundamental de diseño aquí.}

1. Paleta de colores [OBLIGATORIO]

1.1 Colores principales

RolValorUso
Primary{valor}CTAs, active states, highlights
Primary Foreground{valor}Texto sobre fondo primary
Destructive{valor}Acciones destructivas
Destructive Foreground{valor}Texto sobre fondo destructive

1.2 Reglas de contraste

  • {Color problemático}: ratio {X:1} contra {fondo}. Solución: {token alternativo}
  • Regla: {clase para texto de marca} para texto legible, NUNCA {clase primary} sobre fondos claros

1.3 Tokens del tema

/* Copiar los tokens CSS de tu proyecto aquí.
   Esto es la referencia definitiva para la AI. */

/* Light theme */
--color-primary: {valor};
--color-background: {valor};
--color-foreground: {valor};
--color-card: {valor};
--color-card-foreground: {valor};
--color-muted: {valor};
--color-muted-foreground: {valor};
--color-border: {valor};
/* ... */

/* Dark theme (si aplica) */
/* ... */

1.4 Tokens semánticos de estado [CRECE CON EL PROYECTO]

TokenUsoLightDark
{--color-status-x}{descripción}{valor}{valor}

1.5 Fondos semánticos (transparencias) [CRECE CON EL PROYECTO]

ContextoBackgroundBorderHover
Badgesbg-{color}/8border-{color}/15
Botonesbg-{color}/10border-{color}/20hover:bg-{color}/15
Containersbg-{color}/8border-{color}/15

2. Tipografía [OBLIGATORIO]

2.1 Font stacks

--font-sans: {fuente body}, ui-sans-serif, system-ui, sans-serif;
--font-heading: {fuente headings}, {fallback};
/* --font-mono: {fuente mono}; /* si aplica */

2.2 Escala tipográfica

NivelClasesUso
H1{clases}{dónde se usa}
H2{clases}{dónde se usa}
H3{clases}{dónde se usa}
Body{clases}Texto general
Caption{clases}Fechas, hints, metadatos
Label{clases}Labels de formularios

2.3 Reglas

  • {Fuente} en todos los headings y títulos
  • Nunca {peso prohibido} (ej: font-thin, font-light)
  • {Otras reglas tipográficas del proyecto}

3. Espaciado y bordes [OBLIGATORIO]

3.1 Border radius

TokenValorUso
{sm}{valor}Badges, chips
{md}{valor}Buttons, inputs
{lg}{valor}Cards, dialogs
{xl}{valor}Containers grandes
Patrón: {radio grande} para containers, {radio pequeño} para controles internos.

3.2 Sombras

--shadow-card: {valor light};  /* light */
--shadow-card: {valor dark};   /* dark (si aplica) */

3.3 Espaciado común

ContextoValor
Padding de página{valor}
Gap entre cards{valor}
Padding interno de card{valor}
Margin entre secciones{valor}

4. Sistema de temas [OBLIGATORIO si hay dark mode]

4.1 Arquitectura

{Librería de temas} con {estrategia (class/attribute)}, defaultTheme="{default}"

4.2 Reglas de adaptación entre modos

AspectoLight modeDark mode
Fondo del botón{descripción}{descripción}
Saturación{descripción}{descripción}
Texto del botón{descripción}{descripción}
Sombras{descripción}{descripción}
Fórmula para nuevos colores: {ej: subir lightness +0.07, bajar chroma -0.03, invertir foreground}

4.3 Qué NO hacer

  • NO dejar el mismo color idéntico en ambos modos
  • NO invertir el color simplemente
  • {Otras reglas específicas del proyecto}

5. Layout principal [OBLIGATORIO]

5.1 Estructura

{Diagrama ASCII del layout principal}

Ejemplo:
SidebarProvider
├── Sidebar (collapsible)
└── ContentArea
    ├── TopBar (sticky, header)
    └── main (contenido scrolleable)

5.2 Sidebar

  • Modo: {collapsible, fixed, drawer, etc.}
  • Ancho expandido: {valor}
  • Ancho colapsado: {valor}
  • Mobile: {Sheet, drawer, overlay, etc.}
  • Persistencia: {cookie, localStorage, etc.}
  • Keyboard shortcut: {atajo}

5.3 TopBar / Header

{Diagrama ASCII del header}

5.4 Focus layout (segundo nivel) [si aplica]

LayoutRoute groupCasos de uso
Con sidebar{grupo}{ejemplos}
Sin sidebar{grupo}{ejemplos}

Header del focus layout

{variante 1} → {descripción}
{variante 2} → {descripción}

6. Componentes UI [CRECE CON EL PROYECTO]

6.1 Biblioteca base

{Cantidad} componentes en {ruta}: {Lista de componentes}

6.2 Componentes con reglas especiales

{Nombre del componente}

  • Variantes: {listar}
  • Regla especial: {lo que la AI debe saber}
  • Gotcha: {error común al usarlo}

7. Patrones de página [CRECE CON EL PROYECTO]

7.1 {Nombre del patrón} (ej: Auth Pages)

{Descripción breve del layout y comportamiento}

7.2 {Nombre del patrón} (ej: Listado con filtros)

{Descripción breve del layout y comportamiento}

7.3 Empty state

{Icono} + heading + subtítulo + CTA

8. Animaciones y motion [OPCIONAL]

8.1 Keyframes

NombreEfectoDuración
{nombre}{descripción}{duración}

8.2 Reglas

  • Solo animar transform y opacity para 60fps
  • Duraciones: {micro}ms (micro), {standard}ms (transiciones), {entrance}ms (entradas)
  • NO animar height, width, top, left
  • will-change: transform solo donde sea estrictamente necesario

8.3 Reduced motion

@media (prefers-reduced-motion: reduce) {
  /* Desactivar todas las animaciones */
}

9. Iconografía [OBLIGATORIO]

Librería: {nombre} — única librería de iconos.
ContextoTamaño
Nav items{clases}
Card metadata{clases}
Headings{clases}
Empty state{clases}
  • Iconos decorativos: aria-hidden="true"
  • NO mezclar librerías de iconos

10. Accesibilidad [OBLIGATORIO]

10.1 Contraste WCAG AA

  • Texto normal: 4.5:1 mínimo
  • Texto grande: 3:1 mínimo
  • {Notas específicas del proyecto sobre contraste}

10.2 Focus visible

Todos los interactivos: {clases de focus}

10.3 ARIA patterns

PatternUso
aria-labelBotones de solo ícono
aria-current="page"Nav link activo
aria-hidden="true"Iconos decorativos
aria-describedbyInputs vinculados a error
aria-invalidInputs con error de validación
role="alert"Mensajes de error dinámicos
role="status"Indicadores de carga

10.4 Formularios accesibles

<!-- Ejemplo de implementación con aria-describedby + aria-invalid -->
{código de ejemplo de tu stack}

10.5 Landmarks

LandmarkUbicación
<main>{dónde}
<header>{dónde}
<nav>{dónde}

10.6 Heading hierarchy

<h1> — {uso}
<h2> — {uso}
<h3> — {uso}

11. Internacionalización [OPCIONAL]

  • Librería: {nombre y versión}
  • Idiomas: {idiomas soportados}
  • Mensajes: {ruta a archivos de mensajes}
Reglas:
  • NUNCA hardcodear strings de UI
  • {Reglas de formato, variables, pluralización}

12. Gotchas del framework CSS [CRECE CON EL PROYECTO]

12.1 {Gotcha 1}

Problema: {qué sale mal} Solución: {cómo resolverlo} Ejemplo:
/* MAL */  {código incorrecto}
/* BIEN */ {código correcto}

12.2 {Gotcha 2}


13. Responsive design [OBLIGATORIO]

13.1 Breakpoints

NombreAnchoComportamiento
mobile< {valor}{descripción}
tablet{rango}{descripción}
desktop> {valor}{descripción}

13.2 Patrones responsive por componente

ComponenteMobileDesktop
Sidebar{comportamiento}{comportamiento}
{Componente 2}{comportamiento}{comportamiento}
{Componente 3}{comportamiento}{comportamiento}

14. Estructura de archivos UI [OBLIGATORIO]

{Árbol de archivos de UI del proyecto}

Ejemplo:
packages/ui/src/
├── components/
│   ├── ui/              ← componentes base
│   └── {custom}.tsx     ← componentes custom
├── lib/utils.ts         ← utilidades (cn, etc.)
└── index.ts             ← barrel exports

15. Efectos visuales especiales [OPCIONAL]

15.1 {Nombre del efecto}

  • Cómo funciona: {descripción técnica breve}
  • Dónde se usa: {componentes que lo usan}
  • Reglas:
    • {Regla 1 — qué respetar para que el efecto funcione}
    • {Regla 2 — qué NO hacer}

16. Checklist para nuevas funcionalidades [OBLIGATORIO]

Colores y tokens

  • Cero colores hardcodeados — solo tokens semánticos
  • {Regla de contraste específica del proyecto}

Componentes

  • Reutilizar componentes existentes de {librería}
  • {Librería de iconos} para todos los iconos
  • {Patrón de border-radius} respetado

Tema (si aplica dark mode)

  • Funcional en light y dark sin glitches
  • Contraste WCAG AA verificado

Accesibilidad

  • Focus visible en todos los interactivos
  • aria-label en botones de solo ícono
  • aria-hidden="true" en iconos decorativos
  • role="alert" en errores dinámicos
  • Heading hierarchy correcta
  • {Otras reglas de a11y del proyecto}

i18n (si aplica)

  • Textos via sistema de i18n — no hardcodeados

Responsive

  • Funciona en mobile ({ancho mínimo}) y desktop

Framework CSS

  • {Gotcha 1 verificado}
  • {Gotcha 2 verificado}

Notas sobre este template

Secciones obligatorias (llenar antes de implementar UI)

  1. Paleta de colores (tokens mínimos)
  2. Tipografía (font stacks + escala)
  3. Espaciado y bordes (radios + espaciado común)
  4. Layout principal (estructura + sidebar)
  5. Iconografía (librería + tamaños)
  6. Accesibilidad (contraste + ARIA + landmarks)
  7. Responsive (breakpoints)
  8. Estructura de archivos UI
  9. Checklist

Secciones que crecen con el proyecto

  • Componentes UI → agregar cada componente nuevo con sus reglas
  • Patrones de página → agregar cada tipo de página implementado
  • Gotchas → agregar cada bug/gotcha descubierto
  • Tokens de estado → agregar conforme se definen estados del dominio
  • Fondos semánticos → agregar conforme se establecen patrones de color

Secciones opcionales (agregar si el proyecto las necesita)

  • Sistema de temas (solo si hay dark mode)
  • Animaciones (solo si hay un sistema definido)
  • i18n (solo si hay multi-idioma)
  • Efectos visuales especiales (glassmorphism, gradientes, etc.)

Señales de que tu guía necesita actualización

  • La AI genera un componente con estilos que no siguen la guía → agregar la regla
  • Descubres un bug de CSS que la AI repite → agregar a gotchas
  • Implementas un patrón de página nuevo → documentar en sección 7
  • Cambias tokens de color → actualizar sección 1
  • Agregas un componente a la librería → documentar en sección 6 si tiene reglas especiales

Tamaño esperado

  • Al inicio: ~100-150 líneas (secciones obligatorias con valores mínimos)
  • Proyecto maduro: ~500-1000+ líneas (como la guía de Virso con 1134 líneas)
  • Esto es normal y esperado — la guía DEBE crecer con el proyecto