Aurora LLM Optimization
Procedimiento para optimizar un design system CSS (específicamente Ntizar Aurora) para que sea infalible con LLMs.
Cuándo usar
- Un design system CSS necesita ser consumido por agentes IA
- Quieres que un LLM use tu sistema sin inventar clases, hardcodear valores o gastar tokens
- Estás creando un nuevo design system y quieres que sea LLM-ready desde el inicio
Estructura de archivos (4 piezas)
1. LLM.md — Guía de decisión (~2-3 KB, ~500 tokens)
El archivo más importante. Debe cubrir el 95% de casos con "necesito X → packs Y → clases Z".
Estructura obligatoria:
# [Nombre] — LLM Decision Guide
## Paso 1: Carga CDN mínimo
[snippet HTML mínimo con CDN + class="nz"]
## Paso 2: Elige packs según lo que necesitas
[tabla: "¿Qué construyes?" → Packs → Clases clave]
## Paso 3: Heurística rápida "Necesito X → clases Y"
[por categoría: layout, componentes, data, charts, maps, UI, forms, patterns, motion]
## Paso 4: Personalizar marca (solo estos tokens)
[snippet CSS con tokens sobrescritos]
## Paso 5: Dark mode
[snippet con data-nz-theme="dark"]
## Anti-patrones LLM (NUNCA hagas esto)
[5-10 errores típicos con ❌/✅]
## Tokens de color clave
[tabla: token → valor → uso]
## Quick reference: ¿qué pack necesito?
[lista rápida de decisión]
Reglas de LLM.md:
- Máximo 2-3 KB (~500 tokens de contexto)
- Tablas en formato
| ¿Qué construyes? | Packs | Clases |
- Anti-patrones con ❌ y ✅ visuales
- Siempre termina con "docs hermanas" (referencia a AGENTS.md, INDEX.md, examples/)
2. components.json — Spec machine-readable
JSON con todos los componentes, modificadores, parts, categorías y packs.
Estructura mínima:
{
"name": "Nombre Design System",
"version": "x.y.z",
"type": "css-only design system",
"scope": ".nz (opt-in)",
"cdn": "https://cdn.jsdelivr.net/gh/...",
"architecture": {
"layers": ["tokens", "base", "objects", "components", "utilities"],
"naming": {
"component": ".nz-thing",
"modifier": ".nz-thing--mod",
"part": ".nz-thing__part",
"state": ".is-state",
"utility": ".u-nz-*",
"token": "--nz-*"
}
},
"packs": {
"core": {"file": "ntizar.css", "description": "...", "mandatory": true},
"themes": {"file": "ntizar.themes.css", "description": "...", "mandatory": false}
},
"components": {
"btn": {
"base": ".nz-btn",
"modifiers": ["primary", "accent", "ghost", "danger", "glass"],
"parts": [],
"selector_count": 41,
"packs": ["core"],
"category": "button"
}
},
"by_category": {
"button": [{"name": "btn", "base": ".nz-btn", "modifiers": [...]}],
"input": [...],
"layout": [...]
}
}
Generación automática:
# Script en scripts/parse-components.js
# Parsea todos los .css, extrae selectores .nz-*
# Agrupa por base name (antes de __ o --)
# Asigna categoría y pack
# Escribe components.json
3. examples/ — Snippets HTML completos
Mínimo 5 ejemplos que cubran los casos de uso más comunes:
| Archivo |
Qué muestra |
Packs usados |
login.html |
Formulario login (field, input, button) |
core + forms + patterns |
dashboard.html |
App-shell, KPIs, chart, tabla |
core + data + charts + ui + patterns |
landing.html |
Hero, features, pricing, footer |
core + patterns + viz + motion |
ui-components.html |
Tabs, dropdown, modal, toast |
core + ui |
forms.html |
Switch, segmented, OTP, file drop, stepper |
core + forms |
Reglas de los ejemplos:
- Cada uno es HTML completo y funcional (DOCTYPE, head, body)
- CDN público en
<head>
- Solo los packs necesarios
- Sin JS innecesario (solo lo mínimo para interactividad)
- Nombre descriptivo:
login.html, no ejemplo1.html
4. scripts/ — Validación y estadísticas
scripts/validate-llm.js — Valida consistencia:
- LLM.md existe y tiene contenido (>1KB)
- components.json es JSON válido con todos los packs
- Los ejemplos existen
- INDEX.md referencia a LLM.md
- AGENTS.md referencia a LLM.md
- package.json incluye nuevos archivos en
files
scripts/component-stats.js — Estadísticas:
- Total de componentes
- Por categoría con barra visual
- Top 10 por selector count
- Resumen de packs
- Tamaño de archivos LLM
Pasos de implementación
- Crear
LLM.md con la estructura de 5 pasos + anti-patrones
- Generar
components.json parseando todos los CSS (script en scripts/parse-components.js)
- Crear
examples/ con mínimo 5 HTML completos
- Crear
scripts/validate-llm.js y scripts/component-stats.js
- Actualizar
AGENTS.md con decision tree: LLM.md → INDEX.md → DESIGN.md → examples/
- Actualizar
INDEX.md con referencia a LLM.md y components.json
- Actualizar
README.md con documentación de nuevos archivos
- Actualizar
package.json con nuevos archivos en files y scripts
- Ejecutar
node scripts/validate-llm.js para verificar consistencia
- Ejecutar
npm run stats para ver estadísticas
Cómo se usa en la práctica
Para un LLM que genera HTML:
- Lee
LLM.md (~500 tokens) → sabe qué packs y clases usar
- Si necesita detalles → lee
components.json o INDEX.md
- Genera HTML con clases correctas
- NUNCA lee los CSS (~170 KB = ~50k tokens)
Para un humano que integra Aurora:
- Lee
LLM.md → decision rápida
- Abre
examples/login.html → copia y modifica
- Consulta
components.json → API completa
Pitfalls
- LLM.md > 5 KB → gasta demasiados tokens de contexto. Recortar anti-patrones y tokens si es necesario.
- components.json desactualizado → si añades un componente CSS, regenera el JSON. El script de parsing automatiza esto.
- Ejemplos que no funcionan → cada ejemplo debe ser HTML funcional, no pseudocódigo.
- No actualizar AGENTS.md → si existe LLM.md pero AGENTS.md no lo referencia, los agentes seguirán cargando INDEX.md primero (16 KB vs 2 KB).
- Olvidar package.json → si los nuevos archivos no están en
files, no se publican en npm/jsDelivr.
Relación con otras skills
liquid-glass-css → cubre el estilo visual de Aurora, pero NO la optimización LLM
frontend-dashboard-patterns → cubre patrones de dashboards, pero NO la infraestructura de documentación LLM
chromadb-skills-vector-search → usa components.json para búsqueda semántica de skills
Versionado
- Cambios en LLM.md, components.json, examples → PATCH (no rompen nada)
- Cambios en estructura de componentes.json → MINOR (parsers externos pueden necesitar actualización)
- Cambios en naming de componentes CSS → MAJOR (rompe compatibilidad)
1---2name: aurora-llm-optimization3description: Procedimiento para optimizar cualquier design system CSS para que sea infalible con LLMs: LLM.md decision guide, components.json machine-readable, examples/, validation scripts, updated AGENTS.md/INDEX.md/README.4---56# Aurora LLM Optimization78Procedimiento para optimizar un design system CSS (específicamente Ntizar Aurora) para que sea **infalible con LLMs**.910## Cuándo usar1112- Un design system CSS necesita ser consumido por agentes IA13- Quieres que un LLM use tu sistema sin inventar clases, hardcodear valores o gastar tokens14- Estás creando un nuevo design system y quieres que sea LLM-ready desde el inicio1516## Estructura de archivos (4 piezas)1718### 1. `LLM.md` — Guía de decisión (~2-3 KB, ~500 tokens)1920El archivo más importante. Debe cubrir el 95% de casos con "necesito X → packs Y → clases Z".2122**Estructura obligatoria:**23```24# [Nombre] — LLM Decision Guide2526## Paso 1: Carga CDN mínimo27[snippet HTML mínimo con CDN + class="nz"]2829## Paso 2: Elige packs según lo que necesitas30[tabla: "¿Qué construyes?" → Packs → Clases clave]3132## Paso 3: Heurística rápida "Necesito X → clases Y"33[por categoría: layout, componentes, data, charts, maps, UI, forms, patterns, motion]3435## Paso 4: Personalizar marca (solo estos tokens)36[snippet CSS con tokens sobrescritos]3738## Paso 5: Dark mode39[snippet con data-nz-theme="dark"]4041## Anti-patrones LLM (NUNCA hagas esto)42[5-10 errores típicos con ❌/✅]4344## Tokens de color clave45[tabla: token → valor → uso]4647## Quick reference: ¿qué pack necesito?48[lista rápida de decisión]49```5051**Reglas de LLM.md:**52- Máximo 2-3 KB (~500 tokens de contexto)53- Tablas en formato `| ¿Qué construyes? | Packs | Clases |`54- Anti-patrones con ❌ y ✅ visuales55- Siempre termina con "docs hermanas" (referencia a AGENTS.md, INDEX.md, examples/)5657### 2. `components.json` — Spec machine-readable5859JSON con todos los componentes, modificadores, parts, categorías y packs.6061**Estructura mínima:**62```json63{64 "name": "Nombre Design System",65 "version": "x.y.z",66 "type": "css-only design system",67 "scope": ".nz (opt-in)",68 "cdn": "https://cdn.jsdelivr.net/gh/...",69 "architecture": {70 "layers": ["tokens", "base", "objects", "components", "utilities"],71 "naming": {72 "component": ".nz-thing",73 "modifier": ".nz-thing--mod",74 "part": ".nz-thing__part",75 "state": ".is-state",76 "utility": ".u-nz-*",77 "token": "--nz-*"78 }79 },80 "packs": {81 "core": {"file": "ntizar.css", "description": "...", "mandatory": true},82 "themes": {"file": "ntizar.themes.css", "description": "...", "mandatory": false}83 },84 "components": {85 "btn": {86 "base": ".nz-btn",87 "modifiers": ["primary", "accent", "ghost", "danger", "glass"],88 "parts": [],89 "selector_count": 41,90 "packs": ["core"],91 "category": "button"92 }93 },94 "by_category": {95 "button": [{"name": "btn", "base": ".nz-btn", "modifiers": [...]}],96 "input": [...],97 "layout": [...]98 }99}100```101102**Generación automática:**103```bash104# Script en scripts/parse-components.js105# Parsea todos los .css, extrae selectores .nz-*106# Agrupa por base name (antes de __ o --)107# Asigna categoría y pack108# Escribe components.json109```110111### 3. `examples/` — Snippets HTML completos112113Mínimo 5 ejemplos que cubran los casos de uso más comunes:114115| Archivo | Qué muestra | Packs usados |116|---|---|---|117| `login.html` | Formulario login (field, input, button) | core + forms + patterns |118| `dashboard.html` | App-shell, KPIs, chart, tabla | core + data + charts + ui + patterns |119| `landing.html` | Hero, features, pricing, footer | core + patterns + viz + motion |120| `ui-components.html` | Tabs, dropdown, modal, toast | core + ui |121| `forms.html` | Switch, segmented, OTP, file drop, stepper | core + forms |122123**Reglas de los ejemplos:**124- Cada uno es HTML completo y funcional (DOCTYPE, head, body)125- CDN público en `<head>`126- Solo los packs necesarios127- Sin JS innecesario (solo lo mínimo para interactividad)128- Nombre descriptivo: `login.html`, no `ejemplo1.html`129130### 4. `scripts/` — Validación y estadísticas131132**`scripts/validate-llm.js`** — Valida consistencia:133- LLM.md existe y tiene contenido (>1KB)134- components.json es JSON válido con todos los packs135- Los ejemplos existen136- INDEX.md referencia a LLM.md137- AGENTS.md referencia a LLM.md138- package.json incluye nuevos archivos en `files`139140**`scripts/component-stats.js`** — Estadísticas:141- Total de componentes142- Por categoría con barra visual143- Top 10 por selector count144- Resumen de packs145- Tamaño de archivos LLM146147## Pasos de implementación1481491. **Crear `LLM.md`** con la estructura de 5 pasos + anti-patrones1502. **Generar `components.json`** parseando todos los CSS (script en `scripts/parse-components.js`)1513. **Crear `examples/`** con mínimo 5 HTML completos1524. **Crear `scripts/validate-llm.js`** y `scripts/component-stats.js`1535. **Actualizar `AGENTS.md`** con decision tree: LLM.md → INDEX.md → DESIGN.md → examples/1546. **Actualizar `INDEX.md`** con referencia a LLM.md y components.json1557. **Actualizar `README.md`** con documentación de nuevos archivos1568. **Actualizar `package.json`** con nuevos archivos en `files` y scripts1579. **Ejecutar `node scripts/validate-llm.js`** para verificar consistencia15810. **Ejecutar `npm run stats`** para ver estadísticas159160## Cómo se usa en la práctica161162**Para un LLM que genera HTML:**1631. Lee `LLM.md` (~500 tokens) → sabe qué packs y clases usar1642. Si necesita detalles → lee `components.json` o `INDEX.md`1653. Genera HTML con clases correctas1664. NUNCA lee los CSS (~170 KB = ~50k tokens)167168**Para un humano que integra Aurora:**1691. Lee `LLM.md` → decision rápida1702. Abre `examples/login.html` → copia y modifica1713. Consulta `components.json` → API completa172173## Pitfalls174175- **LLM.md > 5 KB** → gasta demasiados tokens de contexto. Recortar anti-patrones y tokens si es necesario.176- **components.json desactualizado** → si añades un componente CSS, regenera el JSON. El script de parsing automatiza esto.177- **Ejemplos que no funcionan** → cada ejemplo debe ser HTML funcional, no pseudocódigo.178- **No actualizar AGENTS.md** → si existe LLM.md pero AGENTS.md no lo referencia, los agentes seguirán cargando INDEX.md primero (16 KB vs 2 KB).179- **Olvidar package.json** → si los nuevos archivos no están en `files`, no se publican en npm/jsDelivr.180181## Relación con otras skills182183- **`liquid-glass-css`** → cubre el estilo visual de Aurora, pero NO la optimización LLM184- **`frontend-dashboard-patterns`** → cubre patrones de dashboards, pero NO la infraestructura de documentación LLM185- **`chromadb-skills-vector-search`** → usa components.json para búsqueda semántica de skills186187## Versionado188189- Cambios en LLM.md, components.json, examples → **PATCH** (no rompen nada)190- Cambios en estructura de componentes.json → **MINOR** (parsers externos pueden necesitar actualización)191- Cambios en naming de componentes CSS → **MAJOR** (rompe compatibilidad)