Todos los casos de estudio

Nubix

De decisiones sueltas a un sistema de diseño

Audité el panel, medí sus inconsistencias en el código y las contrasté con un benchmark y criterios WCAG para proponer un sistema de tokens y componentes.

  • Sistema de diseño
  • Auditoría de código
  • Benchmark
  • WCAG AA
Paleta de colores del sistema Nubix: las familias primary, secondary, brand, info, success, warning y danger, con sus códigos hexadecimales
Empresa
Hosting (confidencial)
Rol
Product Designer (UX/UI)
Duración
Más de 3 años
Equipo
9 a 12 personas

Por un acuerdo de confidencialidad no menciono el nombre real de la empresa ni del producto. Las capturas son adaptaciones de lo que existe en producción.

En pocas palabras

El panel de clientes gestiona hosting, dominios, pagos y facturación para miles de usuarios, y su interfaz se fue armando proyecto por proyecto, sin un sistema de diseño detrás. Cuando lo audité encontré el problema real: no había una sola fuente de verdad. Convivían headers distintos en la misma app, el logo sacaba al usuario del producto y una misma tarjeta mezclaba datos que no se leen igual.

El pedido tenía dos partes: modernizar la estética, que vivía en un radio de borde plano de 4px sin jerarquía visual, y acercar el producto a la identidad de marketing, con el azul como color principal. Una parte ya está en producción: cambiaron los radios de borde. El resto, con la paleta de color y la nomenclatura incluidas, quedó resuelto en esta propuesta.

Este caso muestra sobre todo la corrección de inconsistencias y problemas de la interfaz. El sistema de diseño es más amplio y está completo: se pensó para Bootstrap 5.2 y reúne muchas más piezas, que están en el catálogo y en el handoff.

Qué hice yo

Auditar el producto real, contar los patrones en el código, contrastarlos con heurísticas, WCAG y un benchmark, y proponer el sistema. Lo hice por iniciativa propia: el UI-Kit nunca tuvo fecha de inicio ni de cierre, y Nubix es el trabajo de sistematizar decisiones que se habían tomado una por una.

Con inteligencia artificial

Usé inteligencia artificial en el relevamiento del código, el armado de componentes, la tokenización, el prototipado en código y los arreglos de usabilidad, entre otras tareas. Todo fue validado por mí.

Con quién trabajé

  • 1 diseñador (yo)
  • 4 desarrolladores
  • Líder de desarrollo
  • Product Owner
  • QA

La auditoría en cuatro cifras

  • 0,6%

    Color de marca en los botones

    Aparece seis veces entre más de 1000 botones relevados.

    Identidad visual
  • 47,7%

    Verde y rojo como acción

    Casi la mitad de los botones usa un color pensado para éxito o error como llamado a la acción.

    Identidad visual
  • 7

    Piezas distintas hacen de header

    Barra mobile, barra oscura, breadcrumb, header de lista, header de Cloud, título de sección y menú contextual, cada una con su color y su comportamiento.

    Headers
  • 3

    Lugares con el logo

    El logo está en tres lugares de la app y te lleva al sitio de marketing, en vez de volver al inicio del panel.

    Headers

Cifras de un relevamiento propio del código y de la interfaz en producción.

Hallazgo 1 de 5

Identidad visual, un sistema a medias

Color, tipografía, sombras e íconos se definieron a mano, sin tokens que los conecten. Se ve más claro en los botones: el color de marca aparece en menos del 1 % de los botones, mientras que un color pensado para éxito o error concentra casi la mitad de los llamados a la acción. Además, el naranja de marca con texto blanco no llega al contraste mínimo de lectura. Un benchmark de cuatro productos del sector (Cloudflare, DigitalOcean, Hostinger y GoDaddy) mostró que ninguno usa un color de estado ni un naranja como acción primaria.

Para qué se usan los botones

  • Semánticos como CTA success / danger 47,7%
  • Bajo énfasis link / close 34,8%
  • Neutros y secundarios gris 15,8%
  • Terceros y contextuales Facebook / Google 1,2%
  • Marca y primario naranja #ff8431 0,6%

Relevamiento de más de 1000 botones del producto. El color de acción por defecto terminó siendo el verde de estado.

Links que hacen de botón

Cifras aproximadas: la clasificación se apoya en el nombre de la función asociada al clic.

  • 376

    Elementos clicables que no son botón

    270 son enlaces, 42 son bloques genéricos, 31 íconos y 15 filas de tabla.

  • ~230

    Links que ejecutan una acción

    De 273 enlaces con click, la mayoría no navega: 80 abren o cierran un modal. Es un enlace vacío al que se le cancela la navegación.

  • 21

    Cierres hechos con link e ícono

    19 quedan fuera del orden del teclado y 20 se anuncian como «Close», en inglés. En otros 58 lugares el cierre sí es un botón.

Benchmark

Cuatro productos de gestión e infraestructura, mirando color de acción, color de marca, radio y lenguaje visual.

  • Cloudflare

    Marca y acción distintas

    Acción
    Azul
    Marca
    Naranja (acento puntual, no es color de acción)
    Radio
    Moderado, consistente en todos los componentes
  • DigitalOcean

    Marca y acción coinciden

    Acción
    Azul
    Marca
    Azul (marca y acción coinciden)
    Radio
    Moderado, consistente
  • Hostinger

    Coinciden en las pantallas de producto

    Acción
    Violeta en pantallas de producto
    Negro en pantallas de venta
    Marca
    Violeta
    Radio
    Moderado a alto
  • GoDaddy

    Marca y acción distintas

    Acción
    Negro
    Marca
    Teal (acento puntual)
    Radio
    Chico y conservador (más cerca del 4px legado del producto que de un radio “generoso”)

La propuesta

Una paleta azul calibrada. Es el mismo azul que ya pedían para acercarse a la marca, ajustado para operar como color de acción y menos vívido que el de marketing, y ahí converge todo lo que hoy resuelve el color semántico por defecto.

Los mismos botones, antes y después

«Del total» es el porcentaje de los más de 1000 botones relevados. La columna «Con el sistema» es una propuesta, no una medición.

  • Hoy

    Semánticos como CTA

    Verde de éxito (unos 450) y rojo de error (unos 35). El verde terminó haciendo de primario.

    Con el sistema

    Solid primary La acción principal pasa a ser del color primario, en lugar del verde.

    Colores semánticos Éxito, advertencia, error e información quedan para comunicar estado y para acciones destructivas.

  • Hoy

    Bajo énfasis (links y cierres)

    355 elementos: botones con forma de link, en azul #007bff (3,98:1 sobre blanco), y cierres con ícono. Muchos eran enlaces con función de botón.

    Con el sistema

    Botones ghost Sin borde, como un link, pero con tamaño de objetivo accesible y con énfasis al interactuar. Sirven para texto, ícono o ambos.

  • Hoy

    Neutros y secundarios

    Gris.

    Con el sistema

    Outline secondary

  • Hoy

    Terceros y contextuales

    Facebook y Google. El botón de Facebook usa colores propios del botón de Google.

    Con el sistema

    Sin cambio Quedan como están.

  • Hoy

    Marca y primario

    El naranja #ff8431, que debía ser el primario. Con el texto blanco que le forzaron a los botones da 2,4:1.

    Con el sistema

    Solid brand Con el naranja calibrado (#AC3E00, contraste 6,1:1).

Roles semánticos

Seis de los doce roles: cada uno apunta a un paso de la escala y su contraste se calcula sobre blanco. Los demás (hover, active, éxito, advertencia, información y texto secundario) están en el catálogo.

  • Acción principal

    action-primary-default · #0961C2

    6,0:1AA
  • Acción de marca

    action-brand-default · #AC3E00

    6,1:1AA
  • Enlace

    link-color · #2B4C9E

    8,0:1AAA
  • Texto

    body-color · #161719

    17,9:1AAA
  • Peligro

    text-danger · #8A0010

    10,1:1AAA
  • Naranja de marketing

    brand-vivid · #FF6600

    2,9:1no cumple

    Solo identidad. Nunca botón ni texto.

Escalas primitivas 50 a 950

Siete familias con once pasos. El 500 es el valor base y lleva doble marco. Primary y Brand muestran su contraste; las otras cinco, solo los colores. El naranja de marketing quedó fuera de la escala.

Primary

  • 50#E6EFF91,2:1no cumple
  • 100#CEDFF31,4:1no cumple
  • 200#9DC0E71,9:1no cumple
  • 300#6BA0DA2,7:1no cumple
  • 400#3A81CE4,0:1AA 18+
  • 500#0961C26,0:1AA
  • 600#074E9B8,2:1AAA
  • 700#053A7411,3:1AAA
  • 800#04274E14,9:1AAA
  • 900#02132718,7:1AAA
  • 950#010C1719,7:1AAA

Brand

  • 50#F7ECE61,2:1no cumple
  • 100#EED8CC1,4:1no cumple
  • 200#DEB2991,9:1no cumple
  • 300#CD8B662,8:1no cumple
  • 400#BD65334,1:1AA 18+
  • 500#AC3E006,1:1AA
  • 600#8A32008,3:1AAA
  • 700#67250011,4:1AAA
  • 800#45190015,1:1AAA
  • 900#220C0018,7:1AAA
  • 950#15070019,8:1AAA

Info

  • 50
  • 100
  • 200
  • 300
  • 400
  • 500
  • 600
  • 700
  • 800
  • 900
  • 950

Success

  • 50
  • 100
  • 200
  • 300
  • 400
  • 500
  • 600
  • 700
  • 800
  • 900
  • 950

Warning

  • 50
  • 100
  • 200
  • 300
  • 400
  • 500
  • 600
  • 700
  • 800
  • 900
  • 950

Danger

  • 50
  • 100
  • 200
  • 300
  • 400
  • 500
  • 600
  • 700
  • 800
  • 900
  • 950

Secondary

  • 50
  • 100
  • 200
  • 300
  • 400
  • 500
  • 600
  • 700
  • 800
  • 900
  • 950

Del radio único a una escala por rol

Hoy botón, card, alerta e input comparten 4 px, así que nada distingue una superficie de un control. Solo los badges llevaban 8 px y, por su poca altura, se veían casi como píldoras. La propuesta asigna un paso de la escala a cada rol. Cambiá la vista para ver los mismos componentes del catálogo con cada criterio.

Vista de los radios
  • Detalles

    4 px · radius-44 px; el badge, 8 px

    Badges, tooltips, checkboxes e ítems de menú.

  • Controles

    8 px · radius-84 px · radius-4

    Botones, alertas y menús desplegables.

  • Contenedores y campos

    12 px · radius-124 px · radius-4

    Cards, inputs, selects, modales y tablas.

  • Tarjetas de servicio

    16 px · radius-164 px · radius-4

    Tarjetas de servicio del listado.

  • Píldora promocional

    24 px · radius-24Píldora, radio completo

    Aviso de referidos en el header.

Avatares, radios y switches siguen siendo circulares. Los badges pasan de 8 a 4 px. Los pasos de 16 y 24 px los usan hoy solo la tarjeta de servicio y la píldora del header.

El componente completo

Tres estilos, cuatro colores, tres tamaños y cinco estados. Armá una combinación y mirá sus valores exactos: medidas, colores del catálogo y contraste calculado sobre lo que se está viendo.

Estilo
Color
Tamaño
Contenido
Estado

La familia, con sus estados reales

Pasá el mouse o hacé clic: las muestras responden como los botones del catálogo. En secondary, el solid es gris claro con texto oscuro. El catálogo suma un quinto color, light, para fondos oscuros.

Badges: de 9,7 px sin contraste a colores verificados

El badge viejo tenía 9,7 px de texto, radio de 8 px y colores heredados de Bootstrap. En el catálogo pasa a 4 px de radio, nunca baja de 12 px de texto y cada color tiene su par solid y light con el contraste verificado.

  • 328

    Badges en unos 131 templates

    Sin tokens por estado: el color sale de las utilidades de Bootstrap, y el celeste de “info” sirve para casi todo.

  • 6

    Tamaños de texto distintos

    De 9,7 px en el global a 14 px. El tamaño base, con mayúsculas, comunica estados importantes.

  • 2

    Sistemas visuales a la vez

    Sólido para estados y suave para etiquetas. En un mismo componente, «vencido» es sólido y los días restantes, suaves.

Antes y ahora, color por color

Contraste del texto sobre su fondo. En el sólido viejo el texto era blanco sobre colores claros. En el suave, el texto de color caía sobre un gris casi blanco, que casi no se distingue del fondo de la app (1,05:1 con el blanco).

Sólido, texto blanco
  • AntesSuspendido1,6:1 ✕ · 44 usos
    AhoraSuspendidoWarning solid · 11,0:1 AAA
  • AntesNuevo2,6:1 ✕ · 48 usos
    AhoraNuevoInfo solid · 5,4:1 AA
  • AntesOperador2,4:1 ✕ · 5 usos
    AhoraOperadorBrand solid · 6,1:1 AA
Suave, texto de color sobre un gris casi blanco
  • AntesPor vencer1,5:1 ✕ · 7 usos
    AhoraPor vencerWarning light · 6,1:1 AA
  • AntesInformativo2,4:1 ✕ · 5 usos
    AhoraInformativoInfo light · 4,7:1 AA

Hallazgo 2 de 5

Tablas que se cortan en mobile y acciones difíciles de tocar

El producto tiene 74 tablas en 57 pantallas y casi ninguna se pensó para mobile: 67 se resuelven con scroll horizontal y 7 pueden desbordar la página entera. A 360 px, la tabla de la zona DNS mide 527 px en un contenedor de 288 y las acciones de cada fila quedan fuera de la vista. Cuando se ven, son íconos de 18 px con un área de toque de 20 × 23 px, resueltos de tres maneras distintas en las 30 tablas que tienen acciones.

Las tablas, en cifras

Análisis del HTML de la rama development. Los anchos y tamaños salen del render de una réplica a 360 px. Para las columnas se cuenta la primera fila de datos de cada tabla (73 de las 74).

  • 74

    Tablas en 57 pantallas

    67 resuelven mobile con scroll horizontal dentro de un contenedor. Las otras 7 no tienen ninguno y pueden desbordar la página.

  • 24

    Celdas que cambian según el ancho

    Son todas las que ocultan una columna por breakpoint en esas 57 pantallas. Reordenar la información casi no se usa: se deja que scrollee.

  • 6

    Columnas como máximo

    El 74 % de las tablas tiene entre 2 y 4. Todos sus datos caben en una tarjeta como pares etiqueta-valor.

  • 30

    Tablas con acciones en la última celda

    Es la columna que primero sale de pantalla. Se arma con botón (12 tablas), ancla y botón (7), ancla con ícono (6) o solo ancla (5).

  • 2

    Tamaños de ícono en las acciones

    18 px en el 83 % y 24 px en el 17 % (los que no declaran tamaño).

  • 3

    Encabezados que ordenan por columna

    En todas las tablas del producto. Cada lista define sus opciones de orden por su cuenta.

La misma tabla en un celular de 360 px

A la izquierda, una réplica del marcado y los estilos del producto con datos de ejemplo; deslizala para ver lo que queda afuera. A la derecha, la tabla del sistema: en un contenedor de menos de 700 px cada fila pasa a ser una tarjeta. Las dos se pueden usar.

Hoy · scroll horizontal

Zona DNS

TipoNombreContenidoTTLPrioridadAcciones
Aexample.com203.0.113.103600-
CNAMEwww.example.comexample.com3600-
MXexample.commail.example.com360010
TXT SPFexample.comv=spf1 include:_spf.example.com ~all3600-
NSexample.comns1.example.net86400-
La tabla mide 527 px en un contenedor de 288. TTL, prioridad y las acciones quedan afuera y nada avisa que hay más. Los encabezados siguen en 14 px y mayúsculas mientras las celdas bajan a 12 px, y el texto chico a 10,5 px.

Con el sistema · tarjetas

Zona DNS

0 seleccionados
Registros DNS de ejemplo, ordenables por tipo, nombre y TTL
ContenidoPrioridadAcciones
Aexample.com203.0.113.103600—
CNAMEwww.example.comexample.com3600—
MXexample.commail.example.com360010
TXTexample.comv=spf1 include:_spf.example.com ~all3600—
NSexample.comns1.example.net86400—

Los cinco datos entran sin scroll lateral. Arriba el tipo y el nombre, al lado las acciones y abajo el resto como pares etiqueta-valor. El valor vacío no ocupa una línea y el orden pasa a un selector.

Las acciones de cada fila

Medidas en el render de la réplica. El área de toque es la del link, no la del ícono.

Hoy · ícono dentro de un link

  • 20 × 23 px de área de toque, con un ícono de 18 px.
  • Editar y eliminar comparten el azul de los links: no se distingue la acción destructiva.
  • Tres maneras de armar lo mismo: botón, ancla con clase de botón y ancla sola.

Con el sistema · botón ghost de ícono

Default
Hover
Presionado
Foco
  • 32 × 32 px de área de toque (tamaño sm), con un ícono de 16 px. En filas más altas, md de 40 px.
  • Eliminar va en rojo: se distingue de editar antes de leer el ícono.
  • Sin borde como un link, pero con fondo al pasar el mouse y un anillo de foco de 3 px.

Área de toque a escala (×3)

La misma tabla en desktop

Es el mismo componente de la tarjeta de arriba: con más de 700 px de ancho vuelve a ser una tabla. Ordená por tipo, nombre o TTL desde el encabezado y marcá filas para ver el estado seleccionado.

0 seleccionados
Registros DNS de ejemplo, ordenables por tipo, nombre y TTL
ContenidoPrioridadAcciones
Aexample.com203.0.113.103600—
CNAMEwww.example.comexample.com3600—
MXexample.commail.example.com360010
TXTexample.comv=spf1 include:_spf.example.com ~all3600—
NSexample.comns1.example.net86400—

La propuesta

Una tabla del sistema que cambia según el ancho. En desktop conserva las columnas, con encabezados que ordenan y filas que se pueden seleccionar. En mobile cada fila pasa a ser una tarjeta con sus datos como pares etiqueta-valor y sin scroll lateral: como ninguna tabla relevada pasa de 6 columnas, todos los datos entran. Las acciones dejan de ser íconos sueltos y pasan a ser botones ghost de ícono de 32 px, con estados y foco.

Hallazgo 3 de 5

Siete piezas distintas hacen de header

El producto no tiene un componente “header”. Tiene siete piezas que cumplen ese rol, cada una con su color y su comportamiento, y ninguna se pensó junto con las otras. El resultado son tres colores de barra superior para el mismo rol y, en mobile, íconos blancos sobre el naranja de marca con 2,44:1 de contraste, por debajo del 3:1 que se pide para elementos de interfaz. El logo, además, saca al usuario del producto: lo lleva al sitio de marketing en vez de volver al inicio del panel.

El header, en cifras

Relevamiento del código de producción: 210 componentes con ruta, 34 usos de breadcrumb, 16 templates de lista, 77 títulos de sección y 20 pantallas con menú contextual.

  • 7

    Piezas distintas hacen de header

    Barra mobile, barra oscura, breadcrumb, header de lista, header de Cloud, título de sección y menú contextual. A eso se suman 134 headers de modal y 64 de card.

  • 3

    Colores de barra superior

    Naranja en mobile, oscura en 3 pantallas de escritorio (pagar, chat-bot y cuentas vinculadas) y blanca para el breadcrumb.

  • 2,44:1

    Contraste de la barra naranja mobile

    Texto e íconos blancos sobre #ff8431. WCAG 1.4.11 pide 3:1 para elementos de interfaz. El contador de notificaciones es un badge del mismo naranja.

  • 3,98:1

    Contraste de los links del breadcrumb

    #007bff sobre blanco; el mínimo de WCAG 1.4.3 para texto es 4,5:1. Es el mismo azul de las acciones de las tablas.

Tres barras superiores para el mismo rol

Réplicas del marcado y los estilos del producto a 360 px, con los mismos datos de ejemplo del prototipo.

Toda pantalla con sidebar · menos de 768 px

Blanco sobre naranja: 2,44:1. La barra es fija, de 50 px. El contador de notificaciones es un badge del mismo naranja, así que el número queda sin fondo.

Pagar, chat-bot y cuentas vinculadas

Oscura, con la marca naranja de 50 px. En desktop la marca mide 220 px. En mobile queda distinta de la barra naranja del resto de la app.

Breadcrumb · 34 usos

Links a 3,98:1. Es una barra blanca fija de 50 px que en mobile baja para quedar debajo de la naranja. La tipografía se achica a 12, 11 y 9 px en pantallas de hasta 365, 318 y 299 px.

Crear algo nuevo: dos headers y dos botones

Réplicas en desktop, sin el sidebar.

Header de lista · 16 templates

Card blanca con borde inferior y botón gris con contorno. El 63 % de los 16 muestra un botón principal y solo 7 definen su texto, cada uno redactado distinto: «Nuevo SSL», «Nuevo Host», «Nuevo Dominio», «Crear sitio», «Crear Sitio», «Crear Nuevo Sitio» y «Contratar nuevo». Los demás dicen «Nuevo». En mobile se ocultan la imagen y «Tutoriales».

Header de Cloud · lo hereda todo Cloud

Sin superficie propia y con un botón verde. Es la única lista que no es una card blanca, y su acción principal es un botón verde «Agregar» con menú desplegable, donde en las demás es un botón gris con contorno. La misma función, crear algo nuevo, tiene dos colores de botón. En mobile se oculta el menú «Más recursos».

Una pantalla de servicio, antes y después

A la izquierda, la réplica de una pantalla de detalle de hoy a 360 px. A la derecha, la pantalla de servicio del prototipo del sistema: también a 360 px y abajo en desktop.

Hoy · cuatro capas antes del contenido

Dos barras fijas (100 px), una card y el título. El nombre y el ID del servicio desaparecen del breadcrumb en mobile y, en las pantallas con menú contextual, reaparecen en una card aparte con el ⋮ que lo abre.

Con el sistema · un header, el contexto en el contenido

Un solo header de 50 px. El breadcrumb deja de ser una barra fija: acompaña al título, con el ID del servicio debajo, también en mobile. El ⋮ abre el menú contextual, como hoy. Es el prototipo en código y se puede usar.

Con el sistema · desktop

En desktop el header mide 64 px y queda fijo al hacer scroll. El sidebar solo navega; el menú contextual del servicio está a la izquierda del contenido; y el breadcrumb, el título y el ID van arriba. Es el prototipo en código, no una captura.

De siete piezas a un header

Qué pasa con cada pieza en el prototipo del sistema.

Barra naranja mobile
Un único header blanco en toda la plataforma, con el menú, el logo, regalos, carrito, notificaciones y la cuenta. Mide 64 px en desktop y 50 en mobile, y queda fijo. Los contadores son badges rojos sobre fondo blanco.
Barra oscura de pagar, chat-bot y cuentas vinculadas
Desaparece: el pago pasa a usar el mismo header que el resto. El prototipo no incluye la pantalla de pago.
Breadcrumb fijo, 34 usos
Pasa al contenido, sobre el título, y deja de ser fijo. Los links dan 7,06:1 sobre el fondo de la página.
Nombre e ID armados como string, 18 archivos
Van debajo del título, como parte de la pantalla, y se ven también en mobile.
Header de lista y header de Cloud
Un solo patrón: el título de la página con sus acciones a la derecha, sin una superficie propia, y un único color para el botón principal. En el prototipo, «Agregar hosting».
Menú contextual, 20 pantallas
Se mantiene: columna a la izquierda del contenido en desktop y un ⋮ que abre un panel en mobile.
Sidebar
Solo navega. La cuenta, las notificaciones, el carrito y las promociones viven en el header.
Headers de modal y de card
Se resuelven con el criterio de color del hallazgo 4.

La propuesta

Un único header para toda la plataforma, el mismo también en el pago, con la cuenta, las notificaciones, el carrito y las promociones; el sidebar queda solo para navegar. El breadcrumb deja de ser una barra fija y pasa al contenido, con el título y el ID del servicio debajo, también en mobile. Las listas comparten un título de página con sus acciones, en lugar de dos headers con botones de colores distintos. Y el contraste deja de depender del naranja de marca: íconos oscuros sobre blanco y links del breadcrumb a más de 7:1. Es lo que ya hacen Cloudflare y DigitalOcean en el benchmark, que no cambian de estructura entre secciones.

Hallazgo 4 de 5

Un sidebar que se cierra solo y no declara dónde estás

El sidebar es la navegación principal del panel y está en casi todas las pantallas. Lo que más se nota es cómo se comporta: arranca colapsado y se cierra solo, con cada clic afuera y con cada cambio de pantalla, así que quien elige un ítem tiene que volver a abrirlo para el siguiente. Lo que menos se ve es lo que no dice: con el teclado o con un lector de pantalla, el menú no avisa qué es, qué está abierto ni en qué página estás.

El sidebar de hoy, en cifras

Relevamiento del código del producto, probado sobre una réplica con datos de ejemplo.

  • 90 %

    De las pantallas llevan este sidebar

    Es la navegación principal del panel. Las que no lo llevan son sobre todo pantallas de ingreso, verificación y soporte.

  • 85 %

    De lo que alcanza el teclado, fuera de pantalla

    En mobile, con el menú cerrado, el teclado sigue pasando por links que están más allá del borde. Con datos reales la cifra cambia.

  • 12 %

    De las combinaciones de color no pasan

    Sobre 133 combinaciones de texto y fondo del sidebar. La más visible es el naranja del ítem activo: 2,44:1, cuando el mínimo es 4,5:1.

Expandido y colapsado, hoy y con el sistema

A la izquierda, una réplica del producto actual con los mismos datos de ejemplo del prototipo. A la derecha, el prototipo del sistema, que es código y no una captura. Las dos se pueden tocar.

Hoy · expandido

Un solo bloque para todo. Arriba la navegación; abajo, notificaciones, promociones, la cuenta y cerrar sesión. El ítem activo y el hover se pintan del mismo naranja.

Con el sistema · expandido

El sidebar solo navega. Las notificaciones, la cuenta y las promociones pasan al header y quedan siete ítems. El actual lleva fondo azul claro y texto oscuro, con un contraste de 9,7:1.

Hoy · colapsado

Solo íconos. No se ven ni los nombres ni los subítems.

Con el sistema · colapsado

Un clic en una sección abre sus subítems. Se cierra con Esc y, con el teclado, la flecha hacia abajo lo abre.

Pasar de una sección a otra

“Hoy” sale del código del producto; “Con el sistema”, del prototipo.

Hoy

  1. Estás en Web Hosting y el menú está colapsado: solo se ven los íconos.
  2. Abrís el menú con la flecha.
  3. Elegís la otra sección.
  4. La pantalla cambia y el menú se cierra solo.

2 clics por cada cambio de sección, y el panel vuelve a cerrarse en cada uno.

Con el sistema

  1. Estás en Web Hosting y el menú sigue como lo dejaste, por ejemplo expandido.
  2. Elegís la otra sección.
  3. La pantalla cambia y el menú queda como estaba, también si recargás.

1 clic por cada cambio de sección, si el menú quedó expandido.

Mobile, hoy y con el sistema

A 360 px. En la réplica, el botón de la barra naranja abre y cierra el panel; en el prototipo, la hamburguesa del header.

Hoy · mobile abierto

El panel entra por la derecha, bajo la barra naranja. Cerrado, queda fuera del borde pero el teclado sigue pasando por él. Abierto, no se cierra con Esc y el foco puede salirse del panel.

Con el sistema · mobile abierto

Un panel que mantiene el foco adentro. Cerrado, el teclado no pasa por él. Abierto, Tab da la vuelta dentro del panel, Esc lo cierra y el foco vuelve al botón del menú.

La propuesta

Un sidebar que solo navega y se queda como el usuario lo dejó. Hoy el panel se pliega cada vez que se elige un ítem; en el prototipo el estado se guarda en la pestaña y un clic afuera no lo cierra. En mobile es un panel que mantiene el foco adentro y se cierra con Esc. Los ítems avisan si están abiertos y cuál es la página actual, y el actual se marca con un azul de contraste 9,7:1 en lugar del naranja de 2,44:1, en línea con el principio de visibilidad del estado del sistema de Nielsen.

Hallazgo 5 de 5

Cards, modales y listas sin un criterio común

Cada pieza se resolvió por su cuenta, y se nota en lo que más se toca. La card de servicio existe como tres componentes distintos y el 38 % de sus combinaciones de color no llega al contraste mínimo de lectura. En los modales, el 46 % no tiene botón de cierre, y hay 14 formas distintas de mostrar que algo está elegido, ninguna pensada para quien navega con el teclado.

Cards, “elegido” y listas, en cifras

Relevamiento sobre una réplica del producto en Chromium y un análisis del código de producción (684 templates). Mediciones de contraste con la fórmula de WCAG 2.x.

  • 3

    Componentes para la misma card de servicio

    Dos se reparten casi todas las pantallas y un tercero se usa una vez, en Cloud. Ninguno extiende a otro: el estado “Activo” es un badge sólido en uno y texto verde sobre gris claro en los otros.

  • 38 %

    Combinaciones de texto y fondo que no pasan

    En las cards de servicio, sobre 90 combinaciones. “Suspendido” da 1,63:1 y “Pendiente” 2,56:1; el mínimo para texto es 4,5:1 (WCAG 1.4.3).

  • 14

    Formas distintas de decir “elegido”

    Con tres colores de indicador. Ninguna está pensada para el teclado y tres directamente no lo reciben.

  • 2,24:1

    Contraste del borde naranja de “elegido”

    Contra el gris de fondo; el mínimo para elementos de interfaz es 3:1 (WCAG 1.4.11). El anillo de foco del radio da 1,25:1.

  • 65 %

    Listas con la paginación repetida

    Sobre 20 listas. Una arriba, junto al filtro, y otra abajo, junto al selector de cantidad. Es el mismo componente, sin etiqueta de navegación para lectores de pantalla.

  • 46 %

    Headers de modal sin botón de cierre

    Sobre 134 headers. En el 83 % de los que sí lo tienen, el teclado no llega al botón.

La card de servicio, hoy y con el sistema

A la izquierda, réplicas del producto actual con su CSS compilado y los mismos datos de ejemplo del prototipo. A la derecha, la pantalla de lista del prototipo del sistema.

Hoy · 360 px

La segunda columna y el atajo desaparecen. A 360 px se oculta el bloque de complementos y los botones “Correos” y “Panel hosting”. Quedan el plan, el estado, el vencimiento y un botón de 97 × 33 px. El ID mide 16 px de alto y “Renovar”, 15.

Con el sistema · 360 px

El estado va arriba y el vencimiento se lee primero. Los complementos se quedan en mobile y el botón ocupa el ancho de la card, a costa de altura. Es el prototipo en código, no una captura.

Hoy · 1280 px

Tres columnas iguales. En la card de hosting la tercera columna está vacía, y el estado del plan, el vencimiento y los complementos se leen con el mismo peso que el plan. Los badges miden 9,7 px.

Con el sistema · 1280 px

Una sola jerarquía. El nombre va a 18 px con el lápiz para editarlo, el estado se separa en una etiqueta arriba a la derecha, el vencimiento va en rojo solo si venció o está por vencer y los complementos tienen su propia franja. Los badges miden 12 px.

Un estado, varios colores

Colores medidos sobre la réplica (texto del badge contra su fondo, WCAG 1.4.3: 4,5:1) y sobre el catálogo de badges del prototipo.

Contraste de los badges de estado, hoy y con el sistema
EstadoHoyCon el sistema
Activo
Activo 4,64:1 pasa
Activo 4,41:1 no llega
Activo 4,70:1 pasa
Activo 5,89:1 pasa
Suspendido
1,63:1 no llega
1,55:1 no llega
11,0:1 pasa
6,06:1 pasa
Pendiente
Pendiente 2,56:1 no llega
Pendiente 5,36:1 pasa
Migración en curso
Migración en curso 2,43:1 no llega
Migración en curso 4,67:1 pasa
Por vencer
Vence en 5 días 4,30:1 no llega
1,63:1 no llega
Vence en 5 días 6,26:1 pasa
Vencido
Vencido 4,53:1 pasa
Vencido 7,54:1 pasa
Cancelado
Cancelado 4,69:1 pasa
Cancelado 4,69:1 pasa

Un mismo estado tiene dos o tres colores según la card. En una card “Por vencer” es texto rojo sobre gris claro y en la de Cloud, un badge amarillo con texto blanco; “Activo” es sólido en una y texto verde en las otras. En el prototipo, el amarillo lleva texto oscuro y los claros usan el paso de la familia que supera 4,5:1.

“Elegido” hoy: 14 formas distintas

Nueve de las 14, en una réplica del producto con los estados forzados: reposo, elegido y foco de teclado. En cuatro de las nueve (44 %), el indicador de “elegido” no llega al contraste de 3:1 que pide WCAG 1.4.11.

“Elegido” con el sistema: dos familias

Tarjetas del catálogo del prototipo con sus estados. Son radios nativos: se mueven con las flechas y se eligen con la barra espaciadora.

Un criterio por familia. Las que redirigen cambian el borde y suman una sombra suave al pasar el mouse. Las que se eligen pasan a fondo y borde del color primario, con el radio relleno: el borde da 6,0:1 contra el blanco, frente a 2,44:1 del naranja de hoy.

Búsqueda, orden y paginación, hoy y con el sistema

Réplicas del producto actual (20 templates de lista) y la pantalla de lista del prototipo. El “después” es el prototipo en código, no una captura.

Hoy · 360 px

213 px antes de la primera card. Son el 28,8 % de una pantalla de 740 px, y el 46,9 % si aparece la alerta de SSL. La barra tiene una lupa, “Ordenar por” y una paginación compacta en una sola fila.

Con el sistema · 360 px

El buscador y los selectores siempre visibles. Cuesta espacio: la primera card empieza a 287 px, contra 213 px hoy. La paginación queda abajo.

Hoy · página 2 a 360 px

“Ordenar por” se pisa con “Anterior”. El borde derecho del filtro (x = 191 px) pasa al izquierdo de la paginación (x = 151 px), unos 40 px de solape. A 320 px pasa también en la primera página.

Hoy · lupa cerrada y abierta

Al abrir la lupa desaparece el orden. Una acción reemplaza dos controles, y ni la lupa ni la X tienen un nombre ni avisan si están abiertas para un lector de pantalla. Hay tres lupas distintas en el producto; la de Cloud no reemplaza nada.

Hoy · 1280 px

La misma paginación, dos veces. Arriba, junto al filtro, y abajo, junto a “Listar 10”, en el 65 % de las listas. La página actual es un botón deshabilitado, sin marca que la identifique para un lector de pantalla. El orden por defecto no se ve: ninguna opción aparece marcada, y en el 60 % de las listas el menú tiene una sola.

Con el sistema · 1280 px

Un solo bloque de paginación, al pie. Está identificada como navegación de páginas para un lector de pantalla, con la página “1 de 3” y el rango “Mostrando 1 a 5 de 12”. Arriba quedan el buscador, el orden y la cantidad por página.

Modales: el color no sigue al tipo, sigue al cierre

134 headers de modal analizados con un parser de etiquetas sobre los templates. El tipo es una clasificación mía por heurística: formulario si tiene un formulario adentro, confirmación si el nombre o el pie lo sugieren, wizard si el archivo dice wizard o step.

Color del header, por tipo de modal

  • Header blanco
  • Header azul del sitio web
  • Formulario72 headers · 29 % azules
  • Confirmación41 headers · 17 % azules
  • Informativo18 headers · 17 % azules
  • Wizard o paso3 headers · 33 % azules

Cierre del header, por color

  • Botón de cierre
  • Enlace con ícono
  • Sin cierre en el header
  • Header blanco102 headers
  • Header azul32 headers

El azul aparece en el 17 al 29 % de cada tipo, pero va con el cierre: todos los enlaces con ícono son azules y solo el 4 % de los botones de cierre lo es. En el prototipo hay un solo modal: caja blanca y un botón de cierre que sí recibe foco.

Modales, hoy y con el sistema

A la izquierda, cuatro headers de modal tomados del producto actual con su CSS compilado y los mismos datos de ejemplo del prototipo: se replica el header y el cuerpo, no el pie. A la derecha, los modales del prototipo del sistema.

Hoy

Dos colores y tres formas de cerrar. Blanco o azul, con un botón, con un enlace con ícono o sin nada. En el 83 % de los que tienen cierre, el teclado no llega a él.

Con el sistema

Un solo header y un solo botón de cierre. Es un botón nativo y recibe foco. El informativo no lleva cierre arriba y se cierra con el botón del pie. Es el prototipo en código, no una captura.

La propuesta

Una sola card de servicio, con jerarquía real: el estado y el vencimiento se distinguen del resto en lugar de competir con él, siguiendo el principio de similitud de la Gestalt, y todos los estados superan 4,5:1 (el amarillo lleva texto oscuro). Para elegir, un criterio por familia: las tarjetas que redirigen cambian el borde y suman una sombra suave al pasar el mouse, y las que se eligen pasan a fondo y borde del color primario, con el radio relleno y radios nativos que se operan con el teclado. Los modales comparten un solo estilo, con un botón de cierre que recibe foco. Y las listas muestran el buscador, el orden y la cantidad siempre a la vista, con un único bloque de paginación al pie.

Proceso y resultado real

Alcance

El contenido del panel prácticamente no cambia: el rediseño apunta a la estructura fija y deja lo que ya funcionaba. El sistema completo, pensado para Bootstrap 5.2, vive en el catálogo y en el handoff; acá se muestran los arreglos.

Evidencia

Construí la evidencia yo mismo: una auditoría del código real, con cada patrón contado y medido contra heurísticas y estándares, y un benchmark competitivo. Con eso fundamenté cada decisión. Varias venían definidas desde la dirección: ahí mi trabajo fue ejecutarlas lo mejor posible y encontrar los espacios con margen para un criterio propio.

Estado real

Parte de lo propuesto ya está en producción: nuevos radios de borde, cambio de tipografía, ajustes de espaciado y menos ilustraciones, y la librería de componentes y la presencia del color de marca avanzaron en esa misma línea. La propuesta más grande, con la separación de sidebar, header y cuenta, el rediseño de las tablas mobile y las cards rediseñadas, quedó diseñada, prototipada en código y documentada de punta a punta. Este caso es esa propuesta completa.

Cómo avanzó

El proyecto convivió con otros dos y yo era el único diseñador del equipo, junto a cuatro desarrolladores. Los pedidos solían ser puntuales, del tipo “cambien los inputs”, y la plataforma funciona casi como un organismo vivo: cualquier cambio estructural se replica en todas las pantallas. Por eso el avance fue por etapas, empezando por lo que ya está en producción, y el resto quedó planteado de punta a punta en esta propuesta, listo para retomarse.

Lo que aprendí

“Auditar, contar y comparar alcanza para decidir sin que sea solo gusto personal.”

De Nubix me llevo, sobre todo, la forma de construirlo: auditar el producto real, contar patrones en el código, apoyarse en heurísticas y estándares y mirar qué hace el resto del sector.

La otra lección está en el origen del proyecto: cuando las decisiones se toman una por una, la interfaz termina contando varias historias a la vez. Unificarlas bajo un mismo criterio es lo que hace que el producto se sienta coherente para quien lo usa todos los días.