Volver a alekssanchez.comBack to alekssanchez.com

Componentes · IA aplicada a la interfaz

Cómo estructuro los componentes de un producto con IA

Un caso real: 260 piezas atómicas anidadas, pantallas que solo componen y unas reglas que comprueba la máquina, no la buena voluntad del modelo.

  • ≈ 8 min en visual
  • 6 partes
  • 260 piezas
  • ≈ 20 min el texto completo
  1. Variables4 capas
  2. Átomospintan
  3. Moléculascomponen
  4. Organismossecciones
  5. Plantillashuecos
  6. Pantallassolo componen
cada nivel solo usa los de abajo, y lo comprueba la máquina

Components · AI applied to the interface

How I structure a product's components with AI

A real case: 260 nested atomic pieces, screens that only compose, and rules that a machine checks instead of relying on the model's goodwill.

  • ≈ 8 min visual read
  • 6 parts
  • 260 pieces
  • ≈ 15 min full text
  1. Tokens4 layers
  2. Atomsrender
  3. Moleculescompose
  4. Organismssections
  5. Templatesslots
  6. Screensonly compose
each level only uses the ones below, and a machine checks it

Aleks SánchezDiseñador de producto · Desarrollador web · Product Owner (PSPO I)Product Designer · Web Developer · Product Owner (PSPO I)

ÍndiceContents
  1. Antes de empezar
    1. Propósito
    2. Cómo leer este documento
  2. ILa idea
    1. 1La tesis en una página
    2. 2Por qué atómico y por qué con IA
  3. IILa estructura
    1. 3Las variables
    2. 4Los niveles de piezas
    3. 5Las fronteras
  4. IIIEl anidado
    1. 6Cómo se anidan las piezas
    2. 7Cuatro cadenas reales
  5. IVCon IA
    1. 8Del inventario al plan
    2. 9La construcción
  6. VLas reglas
    1. 10Lo que comprueba la máquina
  7. VIEl resultado
    1. 11En cifras
    2. 12Lo que queda y lo que aprendí
    3. 13Glosario
  1. Before you start
    1. Purpose
    2. How to read this document
  2. IThe idea
    1. 1The thesis on one page
    2. 2Why atomic and why with AI
  3. IIThe structure
    1. 3The tokens
    2. 4The levels of pieces
    3. 5The boundaries
  4. IIINesting
    1. 6How pieces nest
    2. 7Four real chains
  5. IVWith AI
    1. 8From inventory to plan
    2. 9The build
  6. VThe rules
    1. 10What the machine checks
  7. VIThe result
    1. 11In numbers
    2. 12What's left and what I learned
    3. 13Glossary

Antes de empezar

Cómo defino con IA una estructura de componentes que crece sin degradarse y que se entiende sin preguntar.

PlantillasOrganismosMoléculasÁtomos

Quién hace qué

Yo decidoLos niveles, las fronteras, qué es pieza y el orden de construcción.
La IA construyeAudita, propone el plan, escribe las piezas y migra las pantallas.
La máquina vigilaUn script falla si alguien se salta la estructura.

Los códigos del informe

D-47una decisiónI5vuna iteraciónB3un paquete de trabajoR10una reglaCOL-108 · OPS-07historia · requisito

Como en mi método: ningún código va sin su significado al lado.

Leer en detalle2 secciones: Propósito · Cómo leer este documento

Propósito#

Este documento cuenta cómo he definido y hecho cumplir la estructura de componentes de un producto real: una plataforma de gestión de comunidades de coworking. Tiene más de 200 pantallas, un configurador en 3D, un editor de planos y tres marcas, y su interfaz está hecha con React y TypeScript.

Conviene decirlo claro desde el principio: yo no escribo los componentes a mano. Lo que hago es decidir la estructura, sus niveles y sus fronteras, convertirla en reglas que se pueden comprobar y dirigir a las sesiones de IA que la construyen. El resultado que me importa es una base de componentes escalable (crece sin degradarse) y comprensible (cualquiera, persona o modelo, sabe dónde va cada cosa sin preguntar).

Es la aplicación a la interfaz de mi método de trabajo con IA: el contexto antes que el código, las decisiones con su porqué y los límites escritos en la configuración.

Cómo leer este documento#

ParteSeccionesPara quién
I. La idea§1 La tesis · §2 Por qué atómico y por qué con IACualquiera que quiera el enfoque en cinco minutos
II. La estructura§3 Las variables · §4 Los niveles · §5 Las fronterasDiseño y desarrollo
III. El anidado§6 Cómo se anidan · §7 Cuatro cadenas realesQuien vaya a construir con la base
IV. Con IA§8 Del inventario al plan · §9 La construcciónQuien dirija trabajo con IA
V. Las reglas§10 Lo que comprueba la máquinaDesarrollo, calidad
VI. El resultado§11 En cifras · §12 Lo que queda · §13 GlosarioTodos

Uso algunos códigos del proyecto. Cada uno va con su significado al lado: D-47 es una decisión registrada (con su fecha y su porqué), I5v una iteración del prototipo, B2 un paquete de trabajo y R1 una regla de la comprobación automática. Están todos en el glosario (§13).

Parte ILa idea

Las pantallas solo componen. Solo los átomos pintan. Y lo comprueba la máquina, no la memoria del modelo.

Átomos · 115pintanMoléculas · 109componen átomosOrganismos · 28secciones completasPlantillas · 8la disposición, con huecosPantallassolo componen cada nivel usa los de abajo

La tesis en seis ideas

Las pantallas solo componenSin HTML, sin className, sin un solo valor visual.
Solo los átomos pintanLos demás niveles componen piezas de abajo.
La base no sabe del negocioRecibe datos y avisa con funciones (D-47).
Valores en capasPrimitivas, semánticas, de componente y marcas.
Reglas en la máquinaUn script falla; nadie tiene que acordarse.
Comprensible = sin preguntarCada cosa tiene un único sitio.

El problema, medido

≈ 6.000usos de átomos genéricos en las pantallas
frente a
≈ 50usos de moléculas

Auditoría de I5v: cada tarjeta, cada estado vacío y cada cabecera se montaba a mano, y salía distinta.

Leer en detalle2 secciones: La tesis en una página · Por qué atómico y por qué con IA

1La tesis en una página#

La estructura de componentes del producto cabe en cinco ideas.

  1. Las pantallas solo componen. Una pantalla no pinta ningún elemento HTML, no pone className ni style y no escribe ningún valor visual. Elige piezas de la base común y les pasa datos. Todo el aspecto vive en la base.
  2. Solo los átomos pintan Hay cuatro niveles de piezas (átomos, moléculas, organismos y plantillas). Solo el nivel más bajo crea elementos del DOM, del SVG o del 3D; los demás se limitan a componer piezas de niveles inferiores. Así todo queda anidado y cada cosa tiene un único sitio.

  3. La base no sabe nada del negocio. Las piezas no leen el estado, los permisos ni el dominio: reciben datos y avisan con funciones. Eso las hace probables por separado y reutilizables en las tres secciones del producto (decisión D-47, 30-09-2026).
  4. Los valores visuales viven en capas de variables. Primitivas, semánticas, de componente y de marca. Las piezas aceptan propiedades de estilo con valores cerrados, nunca números sueltos.
  5. Las reglas las comprueba la máquina. Un script recorre el código y falla si alguien (una persona o una sesión de IA) se salta un nivel, pinta donde no debe o escribe un valor a mano. Las reglas no dependen de que el modelo se acuerde de ellas: están en la configuración.

2Por qué atómico y por qué con IA#

2.1 El problema: cada pantalla compone a mano#

Cuando la IA construye deprisa, cada pantalla tiende a resolver su caso con los átomos que tiene a mano: un texto, una fila, un botón. El resultado funciona, pero cada tarjeta, cada estado vacío y cada cabecera sale ligeramente distinta. En este producto lo medimos: en la auditoría de la iteración I5v (rediseño visual integral), las pantallas usaban unas 6.000 veces los átomos genéricos y solo unas 50 las moléculas. Patrones que se repetían en decenas de pantallas (la tarjeta de trabajo de una cola, la frase de estado con su porqué, el filtro, el estado vacío, la cabecera de página) se montaban a mano cada vez.

2.2 La respuesta: niveles con una sola regla#

El diseño atómico da un vocabulario conocido (átomos, moléculas, organismos, plantillas, pantallas). Lo que yo añado es una regla única y comprobable: cada nivel solo usa los de abajo, y solo los átomos pintan. Con esa regla, la pregunta «¿dónde va esto?» siempre tiene respuesta, y una composición que se repite tiene un camino claro: convertirse en pieza.

2.3 Mi papel y el de la IA#

  • Yo decido: los niveles, las fronteras, qué es pieza y qué no, el orden de construcción y los criterios de aceptación. Decido sobre opciones, con una recomendada.
  • La IA propone y ejecuta: una sesión con el papel de director de diseño hace la auditoría, el brief, los fundamentos y el plan; las sesiones constructoras escriben las piezas y migran las pantallas.
  • La máquina vigila: la comprobación de estructura corre antes de cada publicación. Si falla, no entra.

Parte IILa estructura

Variables en cuatro capas y piezas en cuatro niveles. Cada cosa tiene un único sitio.

Primitivasvalores459Semánticassignificado276De componentecada pieza695Piezaslas pintan260 3 marcas

Los niveles de piezas

Átomos115pintan
Moléculas109componen átomos
Organismos28secciones completas
Plantillas8la disposición, con huecos
Pantallas240 de 247 archivos importan de la base; ninguno pinta

Las capas de variables

459PrimitivasRampas de color, tamaños, espacios, radios, sombras, curvas
276SemánticasQué significa cada valor, con el tema oscuro
695De componenteLo de cada pieza: el radio del botón, el ancho de la barra
5 × 3MarcasÁmbar, Índigo y Jade: solo cambian semánticas de marca

Ninguna pieza lee una primitiva de color; las pantallas no escriben valores. Lo comprueba la máquina.

Las fronteras

La base no lee el estadoLas pantallas le pasan lo que pinta (D-47).
Los textos se inyectanLa base no importa idiomas: la app le da un traductor.
Envoltorios finosLa app calcula; la molécula, con el mismo nombre, pinta.
Un archivo, un componenteCon su mismo nombre, en español, y un solo índice.
Leer en detalle3 secciones: Las variables · Los niveles de piezas · Las fronteras

3Las variables#

3.1 Cuatro capas, cada una lee la de abajo#

primitivas ──► semánticas ──► de componente ──► piezas (paquete ui) ──► pantallas (solo componen)
 (valores)      (significado)   (cada pieza)
                    ▲
       marcas, tema y densidad solo redefinen semánticas
  • Primitivas (459 variables): los valores en bruto, como rampas de color, tamaños, espacios, radios, sombras, duraciones y curvas.
  • Semánticas (276): qué significa cada valor, como el texto suave, la superficie elevada, el borde o el estado correcto. Incluyen el tema oscuro.
  • De componente (695): lo de cada pieza, como el radio del botón o el ancho de la barra lateral.
  • Marcas: las tres marcas de comunidad (Ámbar, Índigo y Jade) solo cambian cinco semánticas de marca.

Ninguna pieza lee una primitiva de color, y una marca no puede cambiar nada que no sea semántico. Lo comprueba la máquina (§10).

3.2 Propiedades de estilo con valores cerrados#

Las piezas aceptan propiedades como hueco, relleno o justificar, pero solo con los valores de una tabla. Cada valor apunta a una variable. Un script genera de esa tabla la hoja de modificadores. Para admitir un valor nuevo se añade a la tabla; nunca se escribe en una pantalla. Un hueco={12} escrito a mano falla.

3.3 Lo que no puede leer una variable CSS#

El 3D, los lienzos de los rótulos y los documentos que se imprimen no entienden var(). Leen el valor resuelto de la misma variable a través de un gancho común. Así ningún color vive en el código, tampoco en three.js.

4Los niveles de piezas#

4.1 Átomos: los únicos que pintan#

115 átomos. Son la única capa que crea elementos: HTML (Boton, Texto, Campo, Chip, Tarjeta), SVG (Lienzo, Poligono) o 3D (Prisma3D, Superficie3D). Todos pasan por una única función, pintar(), que junta la etiqueta, la clase de la pieza y las clases de estilo.

Un átomo no tiene lógica: sin ganchos de React y como mucho 40 líneas. Su propiedad como elige la etiqueta (section, strong) o el enlace del enrutador, sin duplicar la pieza.

4.2 Moléculas: átomos juntos con un sentido#

109 moléculas. Por ejemplo, BotonIcono (un botón con su icono y un contador encima), ChipEstado (el estado con su color y su icono), CabeceraPagina (título, ámbito y acción principal) o TarjetaTrabajo. Una molécula puede usar otras moléculas del mismo nivel, pero nunca pinta un elemento.

4.3 Organismos: secciones completas#

28 organismos: BarraLateral, Kanban, Dialogo, TablaDatos, PlanoEdificio3D… Pueden tener estado de interfaz local (plegar una columna, atrapar el foco de un diálogo), pero no saben nada del negocio.

4.4 Plantillas: la disposición, con huecos#

8 plantillas: MarcoConBarra, PaginaLista, PaginaDetalle, MarcoInmersivo… Una plantilla no tiene contenido propio: define huecos (la barra, la cabecera, los filtros, el contenido, el pie) y los coloca con átomos de maquetación. Cada pantalla responde a una pregunta y se apoya en una de tres formas de página: lista, detalle o inmersiva (D-68, 08-10-2026).

4.5 Pantallas: solo componen#

Las pantallas viven en la aplicación, organizadas por sección (Gestión, Plano, Tienda), no por nivel atómico. Leen el estado, pasan por la puerta de permisos y escriben hechos. Para pintar, solo componen piezas de la base: 240 de los 247 archivos de pantalla importan de ella.

5Las fronteras#

5.1 La base no lee el estado#

Es la decisión D-47 (30-09-2026): una base común de la interfaz con variables y piezas, y las piezas no leen el estado del producto. Su porqué, tal como quedó registrado: un solo aspecto y piezas que se pueden probar por separado. Las pantallas les pasan lo que pintan, con las formas de datos de la base, y las piezas avisan con funciones (alPulsar, alCerrar).

5.2 Los textos se inyectan#

La base no importa el sistema de traducción. La aplicación le inyecta un traductor al arrancar. Así la base sigue siendo independiente y ningún texto se escribe a mano en el código: todo sale del paquete de idiomas, en español y en inglés.

5.3 Envoltorios finos para el dominio#

Cuando una molécula necesita lógica de negocio (por ejemplo, la tarjeta de residencia, que depende de permisos y estados), la aplicación tiene un envoltorio fino con el mismo nombre. El envoltorio calcula y la molécula pinta. La frontera no se negocia.

5.4 Un archivo, un componente, un nombre#

Cada pieza es un archivo con su mismo nombre y exporta un solo componente. Sin carpetas por componente ni índices intermedios: un único índice de la base, y una entrada aparte para las escenas 3D, para que three.js no entre en el paquete principal. Los nombres están en español, como el resto del producto (Pila, Hilera, TarjetaTarea), y lo mismo las propiedades (variante, tono, medida).

Parte IIIEl anidado

Las piezas se anidan por huecos, no por herencia. Cada nivel solo usa los de abajo.

PlantillasOrganismosMoléculasÁtomos pintar()

Cuatro cadenas reales

  1. pantallaMarcoComunidadlee la comunidad, el rol y los permisos
  2. plantillaMarcoConBarrahuecos: barra · superior · contenido · pie
  3. organismoBarraLateralentradas según el rol
  4. moléculaEntradaNavegacion
  5. átomosEntrada · Icono · Texto · Contador→ pintar()
El marco de una comunidad
  1. pantallaColasfiltra, cuenta y registra hechos
  2. plantillaPaginaListahuecos: cabecera · filtros · contenido
  3. organismoKanbancarriles, plegado y «ver más»
  4. moléculaTarjetaTrabajo · BotonIcono
  5. átomosBoton · Icono · Contador→ pintar()
Una cola de trabajo en Kanban
  1. pantallaQueMeFalta
  2. moléculaTarjetaTarea
  3. moléculaChipEstado · BotonAccionmolécula dentro de molécula
  4. átomosChip · Icono · Texto→ pintar()
Una molécula dentro de otra
  1. pantallaConfiguradorcargado aparte
  2. organismoEscenaEspacio3Dlienzo, cámara y luces
  3. moléculaSuelo3D
  4. átomosExtrusion3D · Prisma3D→ mallas de three.js
El espacio en 3D

Cómo se anidan

Huecos, no herenciaEl mismo Kanban sirve para seis colas: la pantalla pone las tarjetas.
Variantes cerradasEl botón tiene 13 con nombre. Lo que falta se pide, no se inventa.
Una etiqueta o un enlaceCon «como», el mismo átomo es un section, un strong o un enlace.
Leer en detalle2 secciones: Cómo se anidan las piezas · Cuatro cadenas reales

6Cómo se anidan las piezas#

6.1 Huecos en lugar de herencia#

Las piezas se anidan por composición: un organismo o una plantilla reciben otras piezas en sus huecos (propiedades que aceptan cualquier contenido) y las colocan. Nadie hereda de nadie. Esto permite que el mismo Kanban sirva para seis colas distintas: el organismo pone los carriles y la pantalla decide qué tarjeta va en cada uno.

6.2 Variantes cerradas#

Las variantes son listas cerradas de valores con nombre, no estilos libres. El botón, por ejemplo, tiene 13 variantes (principal, secundario, discreto, peligro, seleccion, pestana…) y dos medidas. Cada variante corresponde a una clase de la pieza. Si una pantalla necesita algo que no existe, se pide una variante; no se inventa un estilo.

6.3 Una etiqueta o un enlace, sin duplicar la pieza#

Con como, el mismo átomo pinta un section, un strong o el enlace del enrutador. En las pantallas solo se admiten etiquetas con significado (section, nav, h2…). Para lo demás hay un átomo.

7Cuatro cadenas reales#

7.1 El marco de una comunidad#

ruta /:comunidad
 └─ MarcoComunidad            pantalla: lee la comunidad, el rol y los permisos
     └─ MarcoConBarra         plantilla: huecos barra · superior · contenido · pie
         ├─ BarraLateral      organismo: secciones y entradas según el rol
         │   └─ EntradaNavegacion   molécula
         │       └─ Entrada · Icono · Texto · Contador   átomos → pintar()
         └─ Outlet            la pantalla de cada sección, dentro del contenido

La pantalla construye la barra y la pasa al hueco barra de la plantilla. En el móvil, la misma barra va dentro del cajón del menú. La plantilla no sabe qué hay dentro.

7.2 Una cola de trabajo en Kanban#

Colas                          pantalla: filtra, cuenta y registra hechos
 └─ PaginaLista                plantilla: huecos cabecera · filtros · contenido
     ├─ CabeceraPagina         molécula: título, ámbito y acciones
     └─ Kanban                 organismo: carriles, plegado y «ver más»
         ├─ BotonIcono         molécula
         │   └─ Boton · Icono · Contador   átomos
         └─ TarjetaTrabajo     molécula, una por elemento de la cola

La lógica (qué hay en cada carril, quién lo lleva, qué pasa al mover una tarjeta) se queda en la pantalla. El organismo solo pinta y avisa.

7.3 Una molécula dentro de otra#

QueMeFalta                     pantalla
 └─ TarjetaTarea               molécula
     ├─ Tarjeta · Pila · Titulo · Texto   átomos
     ├─ ChipEstado             molécula
     │   └─ Chip · Icono · Texto           átomos
     └─ BotonAccion            molécula

Las moléculas pueden componerse entre sí porque están en el mismo nivel. Lo que no pueden es subir de nivel ni pintar.

7.4 El espacio en 3D#

Configurador (Tienda)          pantalla, cargada aparte
 └─ EscenaEspacio3D            organismo: lienzo, cámara y luces
     └─ Suelo3D                molécula
         └─ Extrusion3D · Prisma3D · Grupo3D   átomos 3D → mallas de three.js

La regla es la misma en 3D: solo los átomos crean mallas. Los colores salen de las mismas variables que el 2D, leídas ya resueltas.

Parte IVCon IA

La IA audita, planifica y construye. Yo decido sobre opciones, y lo común va primero.

Yo Coordinadora Constructora 1Constructora 2Constructora 3 Base común primero · después, las pantallas

Del inventario al plan

  1. 1Auditoría
  2. 2Brief
  3. 3Fundamentos
  4. B1Variables
  5. B2Átomos
  6. B3Moléculas
  7. B4Organismos
  8. B5Plantillas

Primero se construye la base sin tocar ninguna pantalla: hasta el cableado no cambia ningún píxel.

Quién hace qué

Director de diseño (IA)Auditoría, brief, fundamentos y plan.
Constructoras (IA)Una sección cada una, con su encargo y sus capturas.
Revisores (IA)Cada sección contra su lista de comprobación.
YoDecido sobre opciones y apruebo por grupos de capturas.

Las decisiones, con su porqué

  1. D-47 · 30-09-2026Base común; las piezas no leen el estado · un solo aspecto, piezas probables
  2. D-49 · 01-10-2026Sesiones en paralelo, lo común primero · ganar tiempo sin pisarse
  3. D-68 · 08-10-2026Plantillas de lista, detalle e inmersiva · cada pantalla, una pregunta
  4. D-70 · 08-10-2026Cada pieza con su código · enseñar de dónde sale
  5. D-90 · 11-10-2026Los fundamentos son la referencia · una sola fuente
  6. D-99 · 12-10-2026La base se adelanta a las pantallas · lo común, primero
  7. D-102 · 12-10-2026La base se amplía · lo que pedían las pantallas

Ninguna se borra: lo descartado se queda con su motivo.

Leer en detalle2 secciones: Del inventario al plan · La construcción

8Del inventario al plan#

8.1 La auditoría#

Antes de rediseñar nada, una sesión de IA con el papel de director de diseño inventarió la base tal como estaba. Tenía 123 piezas (69 átomos, 29 moléculas, 20 organismos y 5 plantillas), y pasó una evaluación heurística por las más de 200 pantallas. Los hallazgos llevan su código y su gravedad. Lo más importante fue la cifra de §2.1: las pantallas componían casi todo con átomos.

La auditoría también dijo qué se conservaba: la estructura de D-47 en sí, es decir, un componente por archivo, los niveles, las propiedades de estilo con valores cerrados y la comprobación de estructura.

8.2 El brief y los fundamentos#

  • El brief fija para quién es cada pantalla, diez objetivos visuales con su forma de comprobarlos y una condición: el rediseño se construye solo con la estructura de D-47 y no cambia ninguna funcionalidad, dato, permiso ni ruta.
  • Los fundamentos fijan las capas de variables, el color, la tipografía, el espaciado, la elevación, el movimiento, los iconos, la rejilla, la densidad y los estados de interfaz, además de la lista de piezas por nivel. Son la referencia única de la interfaz (D-90, 11-10-2026).

8.3 El plan por paquetes#

El plan de I5v divide la base común en paquetes que se construyen en orden:

  • B1 · Variables: las tres capas rehechas, con una tabla de equivalencias de lo viejo a lo nuevo para que nadie invente nada.
  • B2 · Átomos: los revisados (botón con variantes, campos, chips, títulos con escala) y los nuevos, como Icono y Esqueleto.
  • B3 · Moléculas: una por cada patrón que la auditoría encontró montado a mano, como FraseEstado, TarjetaTrabajo, EstadoVacio, CabeceraPagina o Pestanas.
  • B4 · Organismos: BarraLateral, BarraSuperior, MenuMovil, Kanban, TablaDatos…
  • B5 · Plantillas: MarcoConBarra, MarcoInmersivo, PaginaLista y PaginaDetalle.

9La construcción#

9.1 Lo común, primero#

Dos decisiones ordenan el trabajo: D-49 (01-10-2026, trabajo en paralelo con varias sesiones, con lo común primero, para ganar tiempo sin pisarse) y D-99 (12-10-2026, la base común se adelanta a las pantallas). Primero se construyen las piezas, sin tocar ninguna pantalla y de forma aditiva, de modo que no cambia ningún píxel hasta el cableado. Después, las sesiones constructoras migran las pantallas por secciones, en paralelo, cada una con su encargo.

9.2 Migrar sin cambiar un píxel#

La primera extracción de átomos (iteración I3a) se hizo con un script de transformación del código que cambió el HTML de las pantallas por átomos. Cada átomo pinta exactamente el mismo elemento y las mismas clases que pintaba la pantalla, y unas capturas comparadas píxel a píxel garantizan que el resultado es idéntico. Primero se cambia la estructura sin cambiar el aspecto; después se rediseña.

9.3 Quién hace qué#

Es el reparto de mi método. Una sesión coordinadora conoce el contexto entero y me prepara las decisiones. Las sesiones constructoras solo ejecutan su encargo, que lleva su lista de pantallas, piezas, equivalencias y capturas. Unos revisores, también sesiones de IA, comprueban cada sección con su propia lista. Yo decido sobre opciones y apruebo por grupos de capturas.

9.4 Las decisiones, con su porqué#

Cada decisión de la estructura está registrada con su fecha y su motivo, y no se borra ninguna:

CódigoFechaQué decidePor qué
D-4730-09-2026Una base común con variables y piezas; las piezas no leen el estadoUn solo aspecto y piezas probables por separado
D-4901-10-2026Varias sesiones en paralelo, con lo común primeroGanar tiempo sin pisarse
D-6808-10-2026La piel nueva por plantillas de página: lista, detalle e inmersivaCada pantalla responde a una pregunta
D-7008-10-2026Cada pieza funcional lleva su código de necesidadPP2, un principio del prototipo: enseñar de dónde sale cada pieza
D-9011-10-2026Los fundamentos y la arquitectura de la interfaz son la referenciaUna sola fuente para la piel
D-9912-10-2026La base común se adelanta a las pantallasLo común, primero
D-10212-10-2026La base se amplía con formularios, lo que se pliega, datos y documentosLo que pedían las pantallas

Parte VLas reglas

Las reglas no dependen de que alguien se acuerde: están en un script que falla.

$ npm run check:estructura R10 ✓R20 ✓R30 ✓R40 ✓R80 ✓R90 ✓R100 ✓R110 ✓R120 ✓R130 ✓R150 ✓R160 ✓ Estructura de diseño (D-47): OK

Las doce reglas

R1pintar() solo en átomos0
R2átomo sin ganchos, ≤ 40 líneas0
R3«como» solo con etiquetas con sentido0
R4ningún número a mano0
R8marca y tema bien declarados0
R9CSS limpio, cada clase en su pieza0
R10lo repetido se vuelve pieza0
R11sin variables CSS en pantallas0
R12sin posiciones a mano0
R13banderas de aspecto en su átomo0
R15títulos con Titulo, no con negrita0
R16variables resueltas, por el gancho0

Medido el 18-10-2026: las doce reglas, a cero.

Presupuestos que solo bajan

R1013→ 0
R48→ 0
R37→ 0
R132→ 0

Un presupuesto es el máximo de incumplimientos: si sube, falla; cada arreglo lo baja. Ronda 1 de I5v → limpieza final.

El cierre, antes de cada publicación

  1. Tipos
  2. Estructura
  3. Sin uso
  4. Contraste
  5. Textos
  6. Piezas trazadas
  7. 157 unitarias
  8. 152 de extremo a extremo
  9. Accesibilidad (axe)
  10. Capturas píxel a píxel
publicarsolo con todo en verde
Leer en detalleLo que comprueba la máquina

10Lo que comprueba la máquina#

10.1 La comprobación de estructura#

check:estructura es un script que lee el árbol sintáctico de cada archivo. Falla si:

  • una pantalla pinta un elemento o pone className o style (solo admite un style que lleve variables con datos que se conocen al pintar);
  • aparece un color o una medida literal fuera de las primitivas;
  • una pieza no está en su nivel, importa uno superior, lee el dominio o, sin ser un átomo, pinta un elemento;
  • un archivo no exporta exactamente un componente con su mismo nombre;
  • se salta una capa de variables, o se usa una variable que no existe en ninguna.

Va dentro del cierre, la batería que corre antes de cada publicación.

10.2 Las reglas finas#

Además, doce reglas con nombre:

  • R1: pintar() solo en los átomos.
  • R2: un átomo sin ganchos de React y de 40 líneas como mucho.
  • R3: como solo con etiquetas con significado.
  • R4: ninguna propiedad de estilo con un número a mano.
  • R8: las variables de marca y de tema, bien declaradas.
  • R9: en CSS, sin !important, sin selectores de pruebas, sin selectores entre componentes y cada clase en el archivo de su pieza.
  • R10: una composición que se repite (8 usos o más en 5 archivos o más) tiene que ser una pieza.
  • R11: ninguna cadena con una variable CSS en una pantalla.
  • R12: ninguna posición a mano en una pantalla.
  • R13: las banderas de aspecto, solo en su átomo.
  • R15: ningún título hecho con texto en negrita.
  • R16: la lectura de variables resueltas, solo a través del gancho común.

10.3 Presupuestos que solo bajan#

Algunas reglas no podían cumplirse de golpe. Para ellas, en lugar de prohibir, hay un presupuesto: el número de incumplimientos medido en una fecha. La comprobación falla si el número sube, y cada arreglo lo baja en el propio script. En la limpieza final del rediseño todos llegaron a cero. Desde entonces, un sitio nuevo falla. Hoy (18-10-2026) las doce reglas están a 0.

10.4 Lo que no se usa, falla#

check:sin-uso falla con una pieza que nadie usa o una variable que nadie lee. Así la base no acumula restos y su tamaño refleja lo que el producto necesita de verdad.

10.5 Contraste, textos y piezas trazadas#

  • check:contraste comprueba el contraste AA en los dos temas y las tres marcas.
  • check:textos comprueba que ningún texto que lee una persona está escrito a mano en el código: todos salen de los diccionarios de idiomas.
  • check:piezas comprueba que cada pieza funcional lleva su código de trazabilidad (D-70). Por ejemplo, COL-108 · OPS-07 dice a qué historia de usuario y a qué requisito sirve la pieza, y el modo demo lo enseña.

10.6 Las pruebas#

157 archivos de pruebas unitarias (incluidas las de las propias reglas, con fragmentos de código en memoria) y 152 pruebas de extremo a extremo con Playwright, que pasan también la auditoría de accesibilidad con axe. Las capturas de referencia se comparan píxel a píxel.

Parte VIEl resultado

De 123 a 260 piezas, y de componer con átomos sueltos a componer con piezas con sentido.

123auditoría 260hoy

Piezas por nivel

Auditoría de I5v · 123 piezasHoy (18-10-2026) · 260 piezas

04080120Átomos · auditoría: 6969Átomos · hoy: 115115ÁtomosMoléculas · auditoría: 2929Moléculas · hoy: 109109MoléculasOrganismos · auditoría: 2020Organismos · hoy: 2828OrganismosPlantillas · auditoría: 55Plantillas · hoy: 88Plantillas

Qué componen las pantallas

Átomos genéricosMoléculas

Auditoría≈ 6.000 · ≈ 50 (1 %)
Hoy≈ 2.650 · ≈ 1.940 (42 %)

Antes, menos del 1 % de lo que componían las pantallas eran moléculas; hoy, el 42 %.

Leer en detalle3 secciones: En cifras · Lo que queda y lo que aprendí · Glosario

11En cifras#

Antes (auditoría de I5v)Hoy (18-10-2026)
Piezas en la base123260
Átomos69115
Moléculas29109
Organismos2028
Plantillas58
Usos de los átomos genéricos en pantallasunos 6.000unos 2.650
Usos de moléculas 2D en pantallasunos 50unos 1.940
Reglas medidas con incumplimientosvarias, con presupuesto0 de 12

La cifra que mejor resume el cambio es la proporción: antes las pantallas componían con átomos sueltos; hoy casi la mitad de lo que componen son moléculas con sentido. Eso es lo que hace que la interfaz sea coherente y que una pantalla nueva se monte con piezas conocidas.

12Lo que queda y lo que aprendí#

12.1 Lo que queda#

  • La documentación va por detrás del código. La guía de la base y una parte de los fundamentos todavía nombran piezas que han cambiado de nombre o de nivel. Las cifras de este informe salen del código, no de esa documentación. Toca ponerla al día.
  • Una regla de importación apunta a un nombre de paquete antiguo. Hoy ninguna pieza importa el dominio, pero esa regla concreta no lo detectaría. Hay que corregirla.
  • No hay un catálogo aparte de piezas. El catálogo es el propio producto, con el modo demo que explica cada pieza. Para un equipo más grande, un catálogo navegable sería el siguiente paso.

12.2 Lo que aprendí#

  1. Una regla que no comprueba la máquina se acaba incumpliendo. Con IA, más rápido: el modelo construye deprisa y, sin una comprobación que falle, la estructura se erosiona en silencio.
  2. Primero la estructura, después el aspecto. Migrar sin cambiar un píxel y rediseñar después fue mucho más seguro que hacer las dos cosas a la vez.
  3. La auditoría con números decide mejor que la intuición. «6.000 frente a 50» convenció de crear moléculas más que cualquier argumento de estilo.
  4. Los presupuestos que solo bajan permiten mejorar sin parar el trabajo. Prohibir de golpe habría bloqueado todas las secciones a la vez.
  5. Comprensible significa que no hace falta preguntar. Si una sesión nueva sabe dónde va cada cosa leyendo las reglas, la estructura funciona.

13Glosario#

TérminoQué significa
Base comúnEl paquete de la interfaz con las variables y las piezas (el paquete ui)
PiezaUn componente de la base, en uno de sus cuatro niveles
ÁtomoLa pieza mínima y la única que pinta un elemento (HTML, SVG o 3D)
MoléculaÁtomos, y otras moléculas, juntos con un sentido
OrganismoUna sección completa de la interfaz
PlantillaLa disposición de una página, con huecos
PantallaLo que ve el usuario; solo compone piezas y lleva la lógica
HuecoUna propiedad de una pieza que acepta otras piezas
pintar()La única función que crea elementos, y solo la llaman los átomos
Variables en capasPrimitivas, semánticas, de componente y marcas
D-xxUna decisión registrada, con su fecha y su porqué
I3a, I5vIteraciones del prototipo: la extracción de átomos y el rediseño visual integral
B1 a B5Los paquetes de la base en el plan de I5v: variables, átomos, moléculas, organismos y plantillas
R1 a R16Las reglas finas de la comprobación de estructura
PresupuestoEl número máximo de incumplimientos de una regla, que solo puede bajar
CierreLa batería de comprobaciones y pruebas que corre antes de cada publicación
Coordinadora y constructorasLas sesiones de IA de mi método: una prepara las decisiones, las otras ejecutan

Before you start

How I use AI to define a component structure that grows without degrading and can be understood without asking.

TemplatesOrganismsMoleculesAtoms

Who does what

I decideThe levels, the boundaries, what a piece is and the build order.
AI buildsIt audits, proposes the plan, writes the pieces and migrates the screens.
The machine watchesA script fails if anyone breaks the structure.

The report's codes

D-47a decisionI5van iterationB3a work packageR10a ruleCOL-108 · OPS-07story · requirement

As in my method: no code goes without its meaning next to it.

Read in detail2 sections: Purpose · How to read this document

Purpose#

This document explains how I defined and enforced the component structure of a real product: a management platform for coworking communities. It has more than 200 screens, a 3D configurator, a floor-plan editor and three brands, and its interface is built with React and TypeScript.

It's worth saying up front: I don't write the components by hand. What I do is decide the structure, its levels and its boundaries, turn it into rules that can be checked, and direct the AI sessions that build it. The outcome I care about is a component base that is scalable (it grows without degrading) and understandable (anyone, person or model, knows where each thing goes without asking).

It's my AI work method applied to the interface: context before code, decisions with their why, and limits written into the configuration.

How to read this document#

PartSectionsFor whom
I. The idea§1 The thesis · §2 Why atomic and why with AIAnyone who wants the approach in five minutes
II. The structure§3 The tokens · §4 The levels · §5 The boundariesDesign and development
III. Nesting§6 How pieces nest · §7 Four real chainsWhoever builds with the base
IV. With AI§8 From inventory to plan · §9 The buildWhoever leads work with AI
V. The rules§10 What the machine checksDevelopment, quality
VI. The result§11 In numbers · §12 What's left · §13 GlossaryEveryone

I use a few project codes. Each one comes with its meaning next to it: D-47 is a recorded decision (with its date and its why), I5v a prototype iteration, B2 a work package and R1 a rule of the automated check. They're all in the glossary (§13).

Part IThe idea

Screens only compose. Only atoms render. And a machine checks it, not the model's memory.

Atoms · 115renderMolecules · 109compose atomsOrganisms · 28complete sectionsTemplates · 8the layout, with slotsScreensonly compose each level uses the ones below

The thesis in six ideas

Screens only composeNo HTML, no className, not a single visual value.
Only atoms renderThe other levels compose pieces from below.
The base knows no businessIt gets data and reports through functions (D-47).
Values in layersPrimitive, semantic, component and brand.
Rules in the machineA script fails; nobody has to remember.
Understandable = no questionsEach thing has exactly one place.

The problem, measured

≈ 6,000uses of generic atoms in screens
against
≈ 50uses of molecules

I5v audit: every card, empty state and header was assembled by hand, and came out different.

Read in detail2 sections: The thesis on one page · Why atomic and why with AI

1The thesis on one page#

The product's component structure fits in five ideas.

  1. Screens only compose A screen renders no HTML element, sets no className or style and writes no visual value. It picks pieces from the shared base and passes them data. All the look lives in the base.

  2. Only atoms render There are four levels of pieces (atoms, molecules, organisms and templates). Only the lowest level creates DOM, SVG or 3D elements; the others just compose pieces from lower levels. So everything is nested and each thing has exactly one place.

  3. The base knows nothing about the business. Pieces don't read state, permissions or the domain: they receive data and report back through functions. That makes them testable in isolation and reusable across the product's three sections (decision D-47, 30-09-2026).
  4. Visual values live in layers of tokens. Primitive, semantic, component and brand. Pieces accept style props with closed values, never loose numbers.
  5. A machine checks the rules A script walks the code and fails if anyone (a person or an AI session) skips a level, renders where it shouldn't or hard-codes a value. The rules don't depend on the model remembering them: they're in the configuration.

2Why atomic and why with AI#

2.1 The problem: every screen composes by hand#

When AI builds fast, each screen tends to solve its case with whatever atoms are at hand: a text, a row, a button. It works, but every card, every empty state and every header comes out slightly different. In this product we measured it: in the audit for iteration I5v (full visual redesign), screens used generic atoms about 6,000 times and molecules only about 50. Patterns repeated across dozens of screens (a queue's work card, the status sentence with its why, the filter, the empty state, the page header) were assembled by hand every time.

2.2 The answer: levels with a single rule#

Atomic design gives a well-known vocabulary (atoms, molecules, organisms, templates, screens). What I add is one checkable rule: each level only uses the ones below, and only atoms render. With that rule, "where does this go?" always has an answer, and a repeated composition has a clear path: becoming a piece.

2.3 My role and the AI's#

  • I decide: the levels, the boundaries, what is a piece and what isn't, the build order and the acceptance criteria. I decide on options, with a recommended one.
  • AI proposes and executes: a session acting as design director does the audit, the brief, the foundations and the plan; builder sessions write the pieces and migrate the screens.
  • The machine watches: the structure check runs before every release. If it fails, nothing goes in.

Part IIThe structure

Tokens in four layers and pieces in four levels. Each thing has exactly one place.

Primitivevalues459Semanticmeaning276Componentper piece695Piecesrender them260 3 brands

The levels of pieces

Atoms115render
Molecules109compose atoms
Organisms28complete sections
Templates8the layout, with slots
Screens240 of 247 files import from the base; none renders

The token layers

459PrimitiveColour ramps, sizes, spacing, radii, shadows, easings
276SemanticWhat each value means, with the dark theme
695ComponentWhat belongs to each piece: button radius, bar width
5 × 3BrandsAmber, Indigo and Jade: they only change brand semantics

No piece reads a primitive colour; screens write no values. A machine checks it.

The boundaries

The base reads no stateScreens pass it what it renders (D-47).
Texts are injectedThe base imports no languages: the app gives it a translator.
Thin wrappersThe app computes; the same-named molecule renders.
One file, one componentWith its own name, in Spanish, and a single index.
Read in detail3 sections: The tokens · The levels of pieces · The boundaries

3The tokens#

3.1 Four layers, each reads the one below#

primitive ──► semantic ──► component ──► pieces (ui package) ──► screens (only compose)
 (values)     (meaning)    (per piece)
                  ▲
       brands, theme and density only redefine semantics
  • Primitive (459 tokens): raw values, such as colour ramps, sizes, spacing, radii, shadows, durations and easings.
  • Semantic (276): what each value means, such as soft text, raised surface, border or success state. They include the dark theme.
  • Component (695): what belongs to each piece, such as the button radius or the sidebar width.
  • Brands: the three community brands (Amber, Indigo and Jade) only change five brand semantics.

No piece reads a primitive colour, and a brand can't change anything that isn't semantic. The machine checks it (§10).

3.2 Style props with closed values#

Pieces accept props such as hueco (gap), relleno (padding) or justificar (justify), but only with values from a table. Each value points to a token. A script generates the modifier stylesheet from that table. To allow a new value, you add it to the table; you never write it in a screen. A hand-written hueco={12} fails.

3.3 What a CSS variable can't reach#

3D, label canvases and printed documents don't understand var(). They read the resolved value of the same token through a shared hook. So no colour lives in the code, not even in three.js.

4The levels of pieces#

4.1 Atoms: the only ones that render#

115 atoms. They're the only layer that creates elements: HTML (Boton, Texto, Campo, Chip, Tarjeta), SVG (Lienzo, Poligono) or 3D (Prisma3D, Superficie3D). They all go through a single function, pintar() (render), which joins the tag, the piece's class and the style classes.

An atom has no logic: no React hooks and 40 lines at most. Its como (as) prop picks the tag (section, strong) or the router link, without duplicating the piece.

4.2 Molecules: atoms together with a purpose#

109 molecules. For example BotonIcono (a button with its icon and a counter on top), ChipEstado (a status with its colour and icon), CabeceraPagina (title, scope and main action) or TarjetaTrabajo (work card). A molecule may use other molecules at the same level, but it never renders an element.

4.3 Organisms: complete sections#

28 organisms: BarraLateral (sidebar), Kanban, Dialogo, TablaDatos, PlanoEdificio3D… They may hold local interface state (folding a column, trapping a dialog's focus), but they know nothing about the business.

4.4 Templates: the layout, with slots#

8 templates: MarcoConBarra, PaginaLista, PaginaDetalle, MarcoInmersivo… A template has no content of its own: it defines slots (the bar, the header, the filters, the content, the footer) and places them with layout atoms. Every screen answers one question and rests on one of three page shapes: list, detail or immersive (D-68, 08-10-2026).

4.5 Screens: they only compose#

Screens live in the app, organised by section (Management, Plan, Shop), not by atomic level. They read state, go through the permissions gate and write events. To render, they only compose pieces from the base: 240 of the 247 screen files import from it.

5The boundaries#

5.1 The base doesn't read state#

That's decision D-47 (30-09-2026): a shared interface base with tokens and pieces, and pieces don't read the product's state. Its why, as recorded: a single look and pieces that can be tested in isolation. Screens pass them what they render, using the base's data shapes, and pieces report back through functions (alPulsar for on press, alCerrar for on close).

5.2 Texts are injected#

The base doesn't import the translation system. The app injects a translator at start-up. So the base stays independent and no text is hand-written in the code: everything comes from the language package, in Spanish and English.

5.3 Thin wrappers for the domain#

When a molecule needs business logic (for example the residency card, which depends on permissions and states), the app has a thin wrapper with the same name. The wrapper computes and the molecule renders. The boundary isn't negotiable.

5.4 One file, one component, one name#

Each piece is a file with its own name and exports a single component. No folder per component and no intermediate indexes: one index for the base, plus a separate entry for 3D scenes so three.js stays out of the main bundle. Names are in Spanish, like the rest of the product (Pila for stack, Hilera for row, TarjetaTarea for task card), and so are props (variante, tono, medida: variant, tone, size).

Part IIINesting

Pieces nest through slots, not inheritance. Each level only uses the ones below.

TemplatesOrganismsMoleculesAtoms pintar()

Four real chains

  1. screenMarcoComunidadreads the community, role and permissions
  2. templateMarcoConBarraslots: bar · top · content · footer
  3. organismBarraLateralentries by role
  4. moleculeEntradaNavegacion
  5. atomsEntrada · Icono · Texto · Contador→ pintar()
A community's frame
  1. screenColasfilters, counts and records events
  2. templatePaginaListaslots: header · filters · content
  3. organismKanbanlanes, folding and "see more"
  4. moleculeTarjetaTrabajo · BotonIcono
  5. atomsBoton · Icono · Contador→ pintar()
A work queue as a Kanban
  1. screenQueMeFalta
  2. moleculeTarjetaTarea
  3. moleculeChipEstado · BotonAccionmolecule inside a molecule
  4. atomsChip · Icono · Texto→ pintar()
A molecule inside another
  1. screenConfiguratorloaded separately
  2. organismEscenaEspacio3Dcanvas, camera and lights
  3. moleculeSuelo3D
  4. atomsExtrusion3D · Prisma3D→ three.js meshes
The space in 3D

How they nest

Slots, not inheritanceThe same Kanban serves six queues: the screen supplies the cards.
Closed variantsThe button has 13 named ones. What's missing is requested, not invented.
A tag or a linkWith "como", the same atom is a section, a strong or a link.
Read in detail2 sections: How pieces nest · Four real chains

6How pieces nest#

6.1 Slots instead of inheritance#

Pieces nest by composition: an organism or a template receives other pieces in its slots (props that accept any content) and places them. Nobody inherits from anybody. That's how the same Kanban serves six different queues: the organism lays out the lanes and the screen decides which card goes in each.

6.2 Closed variants#

Variants are closed lists of named values, not free styles. The button, for example, has 13 variants (principal, secundario, discreto, peligro, seleccion, pestana…: primary, secondary, subtle, danger, selection, tab) and two sizes. Each variant maps to a class of the piece. If a screen needs something that doesn't exist, it asks for a variant; it doesn't invent a style.

6.3 A tag or a link, without duplicating the piece#

With como, the same atom renders a section, a strong or the router link. In screens only meaningful tags are allowed (section, nav, h2…). For anything else there's an atom.

7Four real chains#

7.1 A community's frame#

route /:comunidad
 └─ MarcoComunidad            screen: reads the community, the role and permissions
     └─ MarcoConBarra         template: slots bar · top · content · footer
         ├─ BarraLateral      organism: sections and entries by role
         │   └─ EntradaNavegacion   molecule
         │       └─ Entrada · Icono · Texto · Contador   atoms → pintar()
         └─ Outlet            each section's screen, inside the content

The screen builds the bar and passes it to the template's barra slot. On mobile, the same bar goes inside the menu drawer. The template doesn't know what's inside.

7.2 A work queue as a Kanban#

Colas                          screen: filters, counts and records events
 └─ PaginaLista                template: slots header · filters · content
     ├─ CabeceraPagina         molecule: title, scope and actions
     └─ Kanban                 organism: lanes, folding and "see more"
         ├─ BotonIcono         molecule
         │   └─ Boton · Icono · Contador   atoms
         └─ TarjetaTrabajo     molecule, one per queue item

The logic (what's in each lane, who owns it, what happens when a card moves) stays in the screen. The organism only renders and reports.

7.3 A molecule inside another#

QueMeFalta                     screen
 └─ TarjetaTarea               molecule
     ├─ Tarjeta · Pila · Titulo · Texto   atoms
     ├─ ChipEstado             molecule
     │   └─ Chip · Icono · Texto           atoms
     └─ BotonAccion            molecule

Molecules can compose each other because they're at the same level. What they can't do is go up a level or render.

7.4 The space in 3D#

Configurator (Shop)            screen, loaded separately
 └─ EscenaEspacio3D            organism: canvas, camera and lights
     └─ Suelo3D                molecule
         └─ Extrusion3D · Prisma3D · Grupo3D   3D atoms → three.js meshes

The rule is the same in 3D: only atoms create meshes. Colours come from the same tokens as 2D, read already resolved.

Part IVWith AI

AI audits, plans and builds. I decide on options, and shared parts go first.

Me Coordinator Builder 1Builder 2Builder 3 Shared base first · then the screens

From inventory to plan

  1. 1Audit
  2. 2Brief
  3. 3Foundations
  4. B1Tokens
  5. B2Atoms
  6. B3Molecules
  7. B4Organisms
  8. B5Templates

The base is built first without touching any screen: not a pixel changes until the wiring.

Who does what

Design director (AI)Audit, brief, foundations and plan.
Builders (AI)One section each, with its brief and screenshots.
Reviewers (AI)Each section against its checklist.
MeI decide on options and approve by groups of screenshots.

Decisions, with their why

  1. D-47 · 30-09-2026Shared base; pieces read no state · one look, testable pieces
  2. D-49 · 01-10-2026Parallel sessions, shared first · save time without clashing
  3. D-68 · 08-10-2026List, detail and immersive templates · one question per screen
  4. D-70 · 08-10-2026Every piece with its code · show where it comes from
  5. D-90 · 11-10-2026Foundations are the reference · a single source
  6. D-99 · 12-10-2026The base goes ahead of screens · shared first
  7. D-102 · 12-10-2026The base grows · what the screens asked for

None is deleted: what's discarded keeps its reason.

Read in detail2 sections: From inventory to plan · The build

8From inventory to plan#

8.1 The audit#

Before redesigning anything, an AI session acting as design director took stock of the base as it was. It had 123 pieces (69 atoms, 29 molecules, 20 organisms and 5 templates), and it ran a heuristic evaluation across more than 200 screens. Findings carry their code and severity. The most important result was the figure in §2.1: screens composed almost everything from atoms.

The audit also said what to keep: the D-47 structure itself, that is, one component per file, the levels, style props with closed values and the structure check.

8.2 The brief and the foundations#

  • The brief sets who each screen is for, ten visual goals with how to check each one, and one condition: the redesign is built only with the D-47 structure and changes no feature, data, permission or route.
  • The foundations set the token layers, colour, typography, spacing, elevation, motion, icons, grid, density and interface states, plus the list of pieces per level. They're the single reference for the interface (D-90, 11-10-2026).

8.3 The plan in packages#

The I5v plan splits the shared base into packages built in order:

  • B1 · Tokens: the three layers rebuilt, with a mapping table from old to new so nobody invents anything.
  • B2 · Atoms: the revised ones (a button with variants, fields, chips, titles with a scale) and new ones, such as Icono and Esqueleto (skeleton).
  • B3 · Molecules: one for each pattern the audit found assembled by hand, such as FraseEstado (status sentence), TarjetaTrabajo, EstadoVacio (empty state), CabeceraPagina or Pestanas (tabs).
  • B4 · Organisms: BarraLateral, BarraSuperior, MenuMovil, Kanban, TablaDatos…
  • B5 · Templates: MarcoConBarra, MarcoInmersivo, PaginaLista and PaginaDetalle.

9The build#

9.1 Shared first#

Two decisions set the order: D-49 (01-10-2026, parallel work with several sessions, shared parts first, to save time without stepping on each other) and D-99 (12-10-2026, the shared base goes ahead of the screens). Pieces are built first, without touching any screen and additively, so not a single pixel changes until the wiring. Then builder sessions migrate the screens section by section, in parallel, each with its own brief.

9.2 Migrating without changing a pixel#

The first extraction of atoms (iteration I3a) was done with a code transformation script that replaced the screens' HTML with atoms. Each atom renders exactly the same element and classes the screen used to render, and screenshots compared pixel by pixel guarantee the result is identical. First you change the structure without changing the look; then you redesign.

9.3 Who does what#

It's the split from my method. A coordinator session knows the whole context and prepares my decisions. Builder sessions only execute their brief, which carries its list of screens, pieces, mappings and screenshots. Reviewers, also AI sessions, check each section against their own checklist. I decide on options and approve by groups of screenshots.

9.4 Decisions, with their why#

Every structural decision is recorded with its date and reason, and none is deleted:

CodeDateWhat it decidesWhy
D-4730-09-2026A shared base with tokens and pieces; pieces don't read stateA single look and pieces testable in isolation
D-4901-10-2026Several sessions in parallel, shared parts firstSave time without stepping on each other
D-6808-10-2026The new skin through page templates: list, detail and immersiveEvery screen answers one question
D-7008-10-2026Every functional piece carries its need codePP2, a prototype principle: show where each piece comes from
D-9011-10-2026The interface foundations and architecture are the referenceA single source for the skin
D-9912-10-2026The shared base goes ahead of the screensShared first
D-10212-10-2026The base grows with forms, collapsibles, data and documentsWhat the screens were asking for

Part VThe rules

The rules don't depend on anyone remembering them: they live in a script that fails.

$ npm run check:estructura R10 ✓R20 ✓R30 ✓R40 ✓R80 ✓R90 ✓R100 ✓R110 ✓R120 ✓R130 ✓R150 ✓R160 ✓ Design structure (D-47): OK

The twelve rules

R1pintar() only in atoms0
R2atom with no hooks, ≤ 40 lines0
R3"como" only with meaningful tags0
R4no hand-written numbers0
R8brand and theme well declared0
R9clean CSS, each class in its piece0
R10what repeats becomes a piece0
R11no CSS variables in screens0
R12no hand positioning0
R13look flags on their atom0
R15titles with Titulo, not bold0
R16resolved tokens via the hook0

Measured on 18-10-2026: all twelve rules at zero.

Budgets that only go down

R1013→ 0
R48→ 0
R37→ 0
R132→ 0

A budget is the maximum number of violations: if it goes up, it fails; each fix lowers it. I5v round 1 → final clean-up.

The closing run, before every release

  1. Types
  2. Structure
  3. Unused
  4. Contrast
  5. Copy
  6. Traced pieces
  7. 157 unit
  8. 152 end to end
  9. Accessibility (axe)
  10. Pixel screenshots
releaseonly when everything is green
Read in detailWhat the machine checks

10What the machine checks#

10.1 The structure check#

check:estructura is a script that reads each file's syntax tree. It fails if:

  • a screen renders an element or sets className or style (it only allows a style carrying variables with data known at render time);
  • a colour or size literal appears outside the primitives;
  • a piece isn't at its level, imports a higher one, reads the domain or, without being an atom, renders an element;
  • a file doesn't export exactly one component with its own name;
  • a token layer is skipped, or a token is used that exists in no layer.

It's part of the closing run, the battery that runs before every release.

10.2 The fine-grained rules#

On top of that, twelve named rules:

  • R1: pintar() only in atoms.
  • R2: an atom has no React hooks and 40 lines at most.
  • R3: como only with meaningful tags.
  • R4: no style prop with a hand-written number.
  • R8: brand and theme tokens, properly declared.
  • R9: in CSS, no !important, no test selectors, no cross-component selectors, and each class in its piece's file.
  • R10: a repeated composition (8 uses or more across 5 files or more) has to become a piece.
  • R11: no string with a CSS variable in a screen.
  • R12: no hand positioning in a screen.
  • R13: look flags only on their own atom.
  • R15: no title made of bold text.
  • R16: resolved tokens are read only through the shared hook.

10.3 Budgets that only go down#

Some rules couldn't be met in one go. For them, instead of a ban, there's a budget: the number of violations measured on a given date. The check fails if the number goes up, and each fix lowers it in the script itself. In the redesign's final clean-up they all reached zero. Since then, any new violation fails. Today (18-10-2026) all twelve rules are at 0.

10.4 What isn't used, fails#

check:sin-uso fails on a piece nobody uses or a token nobody reads. So the base doesn't pile up leftovers, and its size reflects what the product really needs.

10.5 Contrast, texts and traced pieces#

  • check:contraste checks AA contrast in both themes and all three brands.
  • check:textos checks that no text a person reads is hand-written in the code: all of it comes from the language dictionaries.
  • check:piezas checks that every functional piece carries its traceability code (D-70). For example, COL-108 · OPS-07 says which user story and which requirement the piece serves, and the demo mode shows it.

10.6 The tests#

157 unit test files (including tests for the rules themselves, with code fragments in memory) and 152 end-to-end tests with Playwright, which also pass the axe accessibility audit. Reference screenshots are compared pixel by pixel.

Part VIThe result

From 123 to 260 pieces, and from composing with loose atoms to composing with meaningful pieces.

123audit 260today

Pieces per level

I5v audit · 123 piecesToday (18-10-2026) · 260 pieces

04080120Atoms · audit: 6969Atoms · today: 115115AtomsMolecules · audit: 2929Molecules · today: 109109MoleculesOrganisms · audit: 2020Organisms · today: 2828OrganismsTemplates · audit: 55Templates · today: 88Templates

What screens compose

Generic atomsMolecules

Audit≈ 6,000 · ≈ 50 (1 %)
Today≈ 2,650 · ≈ 1,940 (42 %)

Before, under 1% of what screens composed were molecules; today, 42%.

Read in detail3 sections: In numbers · What's left and what I learned · Glossary

11In numbers#

Before (I5v audit)Today (18-10-2026)
Pieces in the base123260
Atoms69115
Molecules29109
Organisms2028
Templates58
Uses of generic atoms in screensabout 6,000about 2,650
Uses of 2D molecules in screensabout 50about 1,940
Measured rules with violationsseveral, on a budget0 of 12

The figure that best sums up the change is the ratio: screens used to compose with loose atoms; today almost half of what they compose are molecules with a purpose. That's what makes the interface consistent and lets a new screen be assembled from known pieces.

12What's left and what I learned#

12.1 What's left#

  • The documentation lags behind the code. The base's guide and part of the foundations still name pieces that have changed name or level. The figures in this report come from the code, not from that documentation. It needs updating.
  • One import rule points to an old package name. Today no piece imports the domain, but that specific rule wouldn't catch it. It needs fixing.
  • There's no separate piece catalogue. The catalogue is the product itself, with the demo mode explaining each piece. For a larger team, a browsable catalogue would be the next step.

12.2 What I learned#

  1. A rule the machine doesn't check ends up broken. With AI, faster: the model builds fast and, without a check that fails, the structure erodes silently.
  2. Structure first, look second. Migrating without changing a pixel and redesigning afterwards was far safer than doing both at once.
  3. An audit with numbers decides better than intuition. "6,000 against 50" made the case for molecules better than any style argument.
  4. Budgets that only go down let you improve without stopping work. Banning everything at once would have blocked every section at the same time.
  5. Understandable means you don't need to ask. If a new session knows where each thing goes by reading the rules, the structure works.

13Glossary#

TermWhat it means
Shared baseThe interface package with the tokens and the pieces (the ui package)
PieceA component of the base, at one of its four levels
AtomThe smallest piece and the only one that renders an element (HTML, SVG or 3D)
MoleculeAtoms, and other molecules, together with a purpose
OrganismA complete section of the interface
TemplateA page's layout, with slots
ScreenWhat the user sees; it only composes pieces and holds the logic
SlotA piece's prop that accepts other pieces
pintar()The only function that creates elements, called only by atoms
Layered tokensPrimitive, semantic, component and brand
D-xxA recorded decision, with its date and its why
I3a, I5vPrototype iterations: the extraction of atoms and the full visual redesign
B1 to B5The base's packages in the I5v plan: tokens, atoms, molecules, organisms and templates
R1 to R16The fine-grained rules of the structure check
BudgetThe maximum number of violations of a rule, which can only go down
Closing runThe battery of checks and tests that runs before every release
Coordinator and buildersThe AI sessions of my method: one prepares decisions, the others execute

Volver arribaBack to top ↑