CONSTRUIR paneles densos en información, escaneables y eficientes en tareas. Priorizar la visibilidad de datos y la eficiencia de tareas sobre la estética. Hacer cumplir la paginación de tablas, uso significativo del color y ubicación consistente de acciones. Prevenir baja densidad de datos, desplazamiento sin límites y navegación oculta. Activadores: "build (a|a) dashboard", "create (an|a) admin panel", "design (a|a) user portal".
Instrucciones de origen · Vista previa de solo lectura
name
Dashboard IA
description
CONSTRUIR paneles densos en información, escaneables y eficientes en tareas. Priorizar la visibilidad de datos y la eficiencia de tareas sobre la estética. Hacer cumplir la paginación de tablas, uso significativo del color y ubicación consistente de acciones. Prevenir baja densidad de datos, desplazamiento sin límites y navegación oculta. Activadores: "build (a|a) dashboard", "create (an|a) admin panel", "design (a|a) user portal".
category
ui-ux
version
3.0.0
last_updated
2026-06-28T00:00:00.000Z
stacks
["React 19.2","Vue 3","Next.js 16","Nuxt"]
triggers
[{"pattern":"(build|create|design) (a|an) dashboard","action":"USAR diseño de shell de panel"},{"pattern":"(build|create|design) (an|a) admin panel","action":"USAR diseño de shell de panel"},{"pattern":"data display|metrics|kpi","action":"USAR reglas de visualización de datos"}]
Activar al construir cualquier interfaz donde los usuarios:
Gestionan datos (CRUD a escala)
Ven analíticas o métricas
Configuran ajustes
Monitorean el estado del sistema
Administran otros usuarios
PRINCIPIO FUNDAMENTAL
Los paneles son herramientas de trabajo, no galerías de arte. Prioriza la visibilidad de datos y la eficiencia de tareas. Los usuarios vienen a hacer cosas.
DECIDIR: Selección de Diseño
SI el usuario necesita comparación de datos en múltiples columnas →
USAR tabla (Paso 3)
SI el usuario necesita visión general de métricas de alto nivel →
USAR fila de tarjetas KPI (Paso 4)
SI el usuario necesita análisis de tendencias →
USAR gráfico simple (Paso 5)
SI el usuario gestiona registros (CRUD) →
USAR tabla + botones de acción (Pasos 3 + 6)
EJECUTAR: Instrucciones
Paso 1: Shell del Panel
┌─────────────────────────────────────────────┐
│ ENCABEZADO: [Logo] Ruta > [Búsqueda] │
├──────────┬──────────────────────────────────┤
│ NAV │ ÁREA DE CONTENIDO │
│ (max │ ┌───────────────────────────┐ │
│ 280px) │ │ Título Pág + Acciones │ │
│ │ ├───────────────────────────┤ │
│ Link 1 │ │ Área de Datos │ │
│ Link 2 │ │ (tabla, tarjetas, gráfico) │ │
│ Link 3 │ │ │ │
├──────────┴──────────────────────────────────┤
└─────────────────────────────────────────────┘
REGLAS:
Nav: 20% del viewport, max 280px
Contenido: 80% restante
Encabezado: fijo, ruta de navegación + búsqueda + menú de usuario
Móvil (<768px): nav colapsa a hamburguesa o pestañas inferiores
Paso 2: Diseño de Navegación
NAV PRINCIPAL:
5-8 elementos de nivel superior máximo. >8 = necesidad de grupos.
Paso 7: Sistema de Color: 90% Neutro, 10% Semántico
Color
Significado
Uso
Gris / Neutro
UI estructural
Fondos, bordes, deshabilitado
Verde
Éxito / Positivo
"Activo", "Completado", deltas positivos
Rojo
Error / Negativo
"Fallido", "Vencido", deltas negativos
Amarillo / Ámbar
Advertencia / Pendiente
"Pendiente", "En revisión"
Azul
Informativo / Principal
Enlaces, estados seleccionados, botones primarios
REGLA: 90% de la UI del panel = grises neutros. Color reservado solo para estado y acciones.
Paso 8: Manejo de Todos los Estados
Cargando → Esqueleto que coincida con la geometría del diseño final (NUNCA spinners para listas de contenido)
// ✅ El esqueleto refleja la forma de la cuadrículafunctionDashboardSkeleton() {
return (
<divclassName="grid gap-4 md:grid-cols-3">
{Array.from({ length: 6 }).map((_, i) => (
<divkey={i}className="h-32 rounded-lg bg-muted animate-pulse" />
))}
</div>
);
}
Vacío → Mensaje descriptivo + CTA (NUNCA tabla en blanco)
✅ "Aún no hay usuarios. [Añade tu primer usuario →]"
❌ "Sin datos."
❌ [tabla en blanco]
Error → Mensaje + botón de reintentar (NUNCA hacer fallar todo el panel)
El error reemplaza solo el área de datos, no el encabezado/filtros/shell
Paso 9: Apilamiento de Z-Index
Capa
z-index
Uso
Contenido
0-10
Contenido de página por defecto
Encabezado fijo
20
Encabezado de página
Desplegables / Popovers
30
Menús de selección, selectores de fecha
Modales / Diálogos
40
Confirmaciones, formularios
Notificaciones toast
50
Toasts de éxito/error
Paso 10: RBAC: Compartir Shell, Variar Contenido
Shell (compartido): encabezado, barra lateral, búsqueda, menú de usuario
├── Admin: Página de Usuarios (CRUD), Configuración, Analíticas
├── Manager: Página de Equipo (ver/editar), Informes
└── Miembro: Mi perfil, Mis tareas
Implementación: Grupos de rutas, NO renderizado condicional:
/app/(admin)/dashboard/
/app/(member)/dashboard/
Seguridad: El backend aplica los permisos. Ocultar en el cliente NO es seguridad.
Paso 11: Estrategia de Actualización de Datos
Estrategia
Caso de Uso
Implementación
Actualización manual
Datos estáticos, baja urgencia
"Actualizar" + "Última actualización: hace 2m"
Sondeo (30-60s)
Moderadamente dinámico
setInterval + fetch, o TanStack Query refetchInterval
Server-Sent Events
Tiempo real unidireccional (notificaciones)
API EventSource
WebSockets
Tiempo real bidireccional (chat, colaboración)
Socket.io, API WebSocket
SIEMPRE mostrar marca de tiempo "Última actualización".
VALIDAR: Puertas de Calidad
Shell del panel consistente: encabezado, nav lateral, área de contenido
Columnas de texto alineadas a la izquierda, columnas numéricas alineadas a la derecha
Estados de carga usan esqueletos que coinciden con el diseño final (nunca spinners/texto)
Estados de error incluyen botón de reintentar, error localizado al área de datos
Estados vacíos incluyen mensaje + CTA (nunca tabla en blanco/palabra "Vacío")
Acciones en ubicaciones consistentes (página: superior derecha, fila: columna más a la derecha)
Color usado significativamente: 90% neutro, 10% semántico
Navegación ≤ 8 elementos de nivel superior
Tablas paginadas (20 filas por defecto)
Móvil colapsa nav apropiadamente
Valores de z-index consistentes
ANTIPATRONES: SIEMPRE Evitar
Antipatrón
Por qué está mal
Solución
Cuadrícula de tarjetas para 50+ elementos
Imposible de escanear/comparar
Usar tabla
Desplazamiento infinito en tablas de administración
No se puede saltar a la página N, pierde el desplazamiento