skill-design-elite
Installation
SKILL.md
Design Elite
Para LLMs pequeños: Lee
QUICKSTART.mdprimero para referencia rápida.
Cuándo Usar
- Auditar/refactorizar componentes UI (React/Qwik)
- Crear componentes enterprise desde cero
- Verificar accesibilidad, Tailwind, Atomic Design
Protocolo (4 Pasos Obligatorios)
1. ESCANEAR
Lista TODOS los archivos del componente/vista (padre + hijos + átomos).
2. AUDITAR
Revisa cada archivo contra las Reglas Críticas de abajo.
3. CORREGIR
Aplica cambios en este orden:
- Fix Qwik serialization (si aplica)
- Fix Tailwind tokens
- Fix átomos vs nativos
- Fix accesibilidad
4. VALIDAR
Marca cada item del Checklist de Cierre. Si falla algo, vuelve al paso 3.
Reglas Críticas (NUNCA IGNORAR)
Qwik Serialización
✅ PERMITIDO: Pasar strings por props
<Input prefixIcon="search" />
❌ PROHIBIDO: Pasar JSX/funciones por props
<Input prefixIcon={<LuSearch />} />
✅ PERMITIDO: Closure sin captura
onKeyDown$={$((e) => {
if (e.key === 'Enter') (e.target as HTMLElement).click();
})}
❌ PROHIBIDO: Closure capturando objetos con funciones
onKeyDown$={$((e) => {
item.action(); // item tiene funciones
})}
❌ PROHIBIDO: t() inline en props o closures
<div aria-label={t('menu.label')} />
const handler = $(() => notify(t('error')))
✅ OBLIGATORIO: Extraer t() antes
const label = t('menu.label');
<div aria-label={label} />
Tailwind Tokens Obligatorios
| Propiedad | Tokens Permitidos | PROHIBIDO |
|---|---|---|
| gap | gap-1, gap-2, gap-3, gap-4, gap-6, gap-8 |
gap-2.5, gap-3.5, gap-5, gap-7 |
| altura controles | h-8, h-9, h-10 |
py-* solo (sin h-*) |
| bordes light | border-gray-200 |
border-gray-100, border-gray-300 |
| bordes dark | dark:border-githubDark-border |
dark:border-gray-600, dark:border-gray-700 |
| valores | Tokens del DS | Cualquier [...] arbitrario |
Átomos vs Nativos
✅ OBLIGATORIO: Usar átomos de ~/atoms
import { Button, Input, Badge } from '~/atoms'
<Button onClick$={handler}>Guardar</Button>
<Input bind:value={signal} />
❌ PROHIBIDO: HTML nativo con clases Tailwind
<button class="bg-blue-600 text-white px-4 py-2">Guardar</button>
<input class="border border-gray-300 px-3 py-2" />
Input bind:value (Spread Condicional)
// ✅ OBLIGATORIO: Spread condicional
{...(props['bind:value'] != null && { 'bind:value': props['bind:value'] })}
// ❌ PROHIBIDO: Pasar undefined
bind:value={props['bind:value']}
Accesibilidad
✅ OBLIGATORIO: focus-visible en todo interactivo
<button class="focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:outline-none">
✅ OBLIGATORIO: aria-label en icon-only
<button aria-label="Cerrar menú">
<LuX class="h-4 w-4" />
</button>
❌ PROHIBIDO: outline-none sin alternativa
<button class="outline-none">
Checklist de Cierre (Marcar Todos)
- Sin valores arbitrarios
[...]en Tailwind - Todos los
gap-*usan tokens DS (gap-1/2/3/4/6/8) - Controles inline usan
h-*explícito, nunca solopy-* - Bordes usan
border-gray-200odark:border-githubDark-border - Sin
t(...)inline en props o closures$() - Iconos pasados como string, nunca JSX/funciones
-
focus-visibleen todo elemento interactivo -
aria-labelen botones de solo icono - Usando átomos de
~/atoms, no HTML nativo -
bind:valuecon spread condicional (si aplica) - Skeleton usa mismo
gap-*que contenido real - Modales: título
text-left, footerjustify-end, secundario outline
Referencias (Para Detalles)
Agents (Subagentes Detallados)
references/agents/anti-pattern.md— Tailwind anti-patternsreferences/agents/dry-atoms.md— DRY + Qwik serializationreferences/agents/layout-enforcer.md— Layout macroreferences/agents/organism.md— Organismos (cards, modales, tablas)references/agents/atom-enforcer.md— Átomos detalladosreferences/agents/motion-feedback.md— Transiciones y estadosreferences/agents/a11y-enterprise.md— Accesibilidad WCAG
Rules (Leyes Específicas)
references/rules/qwik-serialization.mdreferences/rules/tailwind-tokens.mdreferences/rules/border-consistency.mdreferences/rules/height-consistency.mdreferences/rules/spacing-grid.mdreferences/rules/seamless-design.md
Patterns (Ejemplos)
references/patterns/button-atom.md— Patrón Buttonreferences/patterns/input-atom.md— Patrón Inputreferences/patterns/modal-organism.md— Patrón Modal Vercel-stylereferences/patterns/card-organism.md— Patrón Card Seamlessreferences/patterns/typography-docs.md— Tipografía en documentaciónreferences/patterns/toc-sidebar.md— TOC/Sidebar navigationreferences/patterns/color-semantic.md— Color semántico en banners
Ejemplo de Salida Esperada
## Resumen de Cambios
### Archivo: src/components/user-card.tsx
- [ALTO] Reemplazado <button> nativo por <Button>
- [MEDIO] Cambiado gap-2.5 → gap-4
- [ALTO] Añadido aria-label en icon-only button
### Archivo: src/components/user-list.tsx
- [CRÍTICO] Fix: bind:value usa spread condicional
- [ALTO] Añadido h-9 a Input en toolbar
## Checklist de Cierre
✅ Todos los items marcados