home / skills / avvale / aurora-front / aurora-ux

aurora-ux skill

/.claude/skills/aurora-ux

This skill evaluates and enhances Aurora form UX by reordering fields, refining flow, and applying usability best practices.

npx playbooks add skill avvale/aurora-front --skill aurora-ux

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
11.0 KB
---
name: aurora-ux
description: >
    Evalúa y mejora la experiencia de usuario de formularios Aurora. Trigger:
    Cuando necesites evaluar UX, reordenar campos, o revisar el flujo de un
    formulario.
license: MIT
metadata:
    author: aurora
    version: '1.0'
    auto_invoke: 'UX review, field ordering, form flow, user experience'
allowed-tools: Read, Edit, Glob, Grep
---

# Aurora UX Skill

Reglas de experiencia de usuario para formularios Aurora. Este skill complementa
`aurora-layout` (estructura visual) con el enfoque en el FLUJO COGNITIVO del
usuario.

## Cuándo Usar

- Evaluar la experiencia de usuario de un formulario existente
- Mejorar el flujo de completado de un formulario
- Reordenar campos para optimizar la UX
- Revisar si un formulario sigue buenas prácticas de usabilidad

---

## Principios de Ordenación de Campos

### 1. Campos Requeridos Primero

Dentro de cada sección semántica, los campos `required` van ANTES que los
opcionales.

```
✅ CORRECTO                    ❌ INCORRECTO
┌─────────────────────┐        ┌─────────────────────┐
│ Name* (required)    │        │ Description         │
│ Code* (required)    │        │ Notes               │
│ Description         │        │ Name* (required)    │
│ Notes               │        │ Code* (required)    │
└─────────────────────┘        └─────────────────────┘
```

### 2. Flujo Natural de Información

Orden lógico para el usuario - lo que "ya sabe" antes de lo que "debe decidir":

```
1. Identificadores     → Código, ID externo (lo trae de otro sistema)
2. Datos básicos       → Nombre, descripción (lo sabe de antemano)
3. Clasificación       → Tipo, categoría (debe elegir)
4. Detalles            → Campos específicos del dominio
5. Contacto            → Email, teléfono (si aplica)
6. Configuración       → Flags, opciones (decisiones finales)
7. Estado              → isActive (usualmente al final)
```

### 3. Progressive Disclosure

Campos avanzados u opcionales en expansion panels:

```html
<!-- Campos principales visibles -->
<mat-form-field class="col-8">Nombre</mat-form-field>
<mat-form-field class="col-4">Código</mat-form-field>

<!-- Configuración avanzada colapsada -->
<mat-expansion-panel>
    <mat-expansion-panel-header>
        <mat-panel-title>Configuración avanzada</mat-panel-title>
    </mat-expansion-panel-header>
    <!-- Campos opcionales aquí -->
</mat-expansion-panel>
```

### 4. Dependencias de Campos

Campos dependientes DEBAJO o AL LADO de su "padre":

```html
<!-- País primero (padre) -->
<mat-form-field class="col-4">
    <mat-select formControlName="countryId">...</mat-select>
</mat-form-field>

<!-- Estado/Provincia después (dependiente) -->
<mat-form-field class="col-4">
    <mat-select
        [disabled]="!fg.get('countryId').value"
        formControlName="stateId"
    >
        ...
    </mat-select>
</mat-form-field>
```

---

## Matriz de Decisión: Orden de Campos

| Criterio                 | Peso | Ejemplo                                    |
| ------------------------ | ---- | ------------------------------------------ |
| Es requerido             | +3   | `name` (required) antes de `description`   |
| Es identificador         | +2   | `code` antes de `email`                    |
| Usuario ya lo sabe       | +2   | `type` (elige) antes de `calculatedField`  |
| Afecta otros campos      | +1   | `country` antes de `state` (dependencia)   |
| Es configuración/setting | -1   | `isActive` al final de su sección          |
| Es campo de auditoría    | -2   | `createdAt`, `updatedAt` readonly o hidden |

### Aplicando la Matriz

```
Campo: name        → required (+3) + identificador (+2) = 5  → PRIMERO
Campo: code        → required (+3) + identificador (+2) = 5  → PRIMERO
Campo: type        → required (+3) = 3                       → SEGUNDO
Campo: description → opcional = 0                            → TERCERO
Campo: isActive    → config (-1) = -1                        → CUARTO
Campo: createdAt   → auditoría (-2) = -2                     → ÚLTIMO/HIDDEN
```

---

## Reglas por Tipo de Formulario

### Formulario de Alta (Create)

- **Autofocus** en primer campo editable
- **Pre-llenar defaults** sensatos (isActive = true)
- **Campos calculados** ocultos o readonly
- **Validación en blur** para campos críticos

```typescript
// En ngOnInit o después de crear el form
this.fg.get('name')?.markAsTouched(); // O usar cdkFocusInitial en el input
```

### Formulario de Edición (Edit)

- Mostrar claramente qué campos son **editables vs readonly**
- **Preservar valores** originales hasta guardar
- Indicar **cambios no guardados** si hay modificaciones

### Formulario de Filtros

- Campos **más usados primero**
- Permitir **limpiar todos** los filtros con un botón
- Aplicar en **tiempo real** o con botón según cantidad de campos

---

## Feedback de Validación

### Cuándo Mostrar Errores

| Momento        | Usar para                               |
| -------------- | --------------------------------------- |
| On blur        | Campos críticos (email, código único)   |
| On submit      | Validaciones complejas, campos cruzados |
| En tiempo real | Contadores de caracteres, formatos      |

### Patrón de Error

```html
<mat-form-field class="col-6">
    <mat-label>Email</mat-label>
    <input
        type="email"
        matInput
        formControlName="email"
    />
    <mat-error>
        @if (fg.get('email')?.hasError('required')) { {{
        t('validation.Required') }} } @if (fg.get('email')?.hasError('email')) {
        {{ t('validation.InvalidEmail') }} }
    </mat-error>
</mat-form-field>
```

---

## Checklist de Revisión UX

Antes de aprobar un formulario, verificar:

### Estructura y Orden

- [ ] ¿Los campos requeridos están primero en cada sección?
- [ ] ¿El flujo sigue un orden lógico para el usuario?
- [ ] ¿Los campos relacionados están agrupados?
- [ ] ¿Las dependencias están claras (padre → hijo)?

### Interacción

- [ ] ¿Hay feedback claro de errores de validación?
- [ ] ¿Los campos con dependencias se habilitan/deshabilitan correctamente?
- [ ] ¿El formulario es navegable con Tab?
- [ ] ¿El primer campo tiene autofocus en modo Create?

### Claridad

- [ ] ¿Los labels son claros y concisos?
- [ ] ¿Hay hints/placeholders donde ayudan?
- [ ] ¿Los campos required están marcados visualmente?
- [ ] ¿Los campos readonly se distinguen de los editables?

### Opcionales

- [ ] ¿Los campos avanzados están en expansion panel?
- [ ] ¿Hay defaults sensatos pre-llenados?

---

## Anti-patrones a Evitar

| Anti-patrón                 | Por qué es malo                            | Solución                               |
| --------------------------- | ------------------------------------------ | -------------------------------------- |
| Campos required al final    | Usuario completa todo y luego vuelve atrás | Requeridos primero en cada sección     |
| Todo en una sola columna    | Desperdicia espacio, scroll excesivo       | Usar grid de 12 columnas               |
| Campos sin relación juntos  | Confunde al usuario                        | Agrupar por dominio semántico          |
| Labels ambiguos             | El usuario no sabe qué poner               | Labels descriptivos + hints            |
| Validación solo al submit   | Frustración al final                       | Validar en blur para campos críticos   |
| Campos ocultos sin contexto | Usuario no sabe que existen                | Mostrar disabled o en panel colapsable |
| Dependencias sin feedback   | Usuario no entiende por qué está disabled  | Tooltip o texto explicativo            |
| Tabs order incorrecto       | Navegación por teclado confusa             | Revisar orden natural de campos        |

---

## Gestión de Foco

### Autofocus en Create

```html
<input
    matInput
    formControlName="name"
    cdkFocusInitial
/>
```

### Tab Order

El orden de Tab debe seguir el orden visual. Si usas CSS para reordenar
visualmente, asegúrate de que el HTML mantenga el orden lógico.

```html
<!-- ✅ CORRECTO: orden HTML = orden visual = orden Tab -->
<input formControlName="name" />
<!-- Tab 1 -->
<input formControlName="code" />
<!-- Tab 2 -->
<input formControlName="email" />
<!-- Tab 3 -->
```

---

## Estados de Campos

### Campo Deshabilitado por Dependencia

```html
<mat-form-field class="col-4">
    <mat-label>Estado/Provincia</mat-label>
    <mat-select formControlName="stateId">
        @for (state of filteredStates; track state.id) {
        <mat-option [value]="state.id">{{ state.name }}</mat-option>
        }
    </mat-select>
    @if (!fg.get('countryId')?.value) {
    <mat-hint>Seleccione un país primero</mat-hint>
    }
</mat-form-field>
```

### Campo Calculado

```html
<mat-form-field class="col-4">
    <mat-label>Total</mat-label>
    <input
        [value]="calculatedTotal"
        matInput
        readonly
    />
    <mat-hint>Calculado automáticamente</mat-hint>
</mat-form-field>
```

---

## Relación con Otros Skills

| Skill                | Qué cubre               | Cuándo usarlo con aurora-ux                         |
| -------------------- | ----------------------- | --------------------------------------------------- |
| `aurora-layout`      | Grid, anchos, secciones | SIEMPRE - UX define orden, layout define estructura |
| `aurora-components`  | Componentes específicos | Cuando elijas qué componente usar                   |
| `aurora-development` | Lógica de formularios   | Para implementar las reglas de UX                   |

---

## Ejemplo de Evaluación UX

### Formulario Original (problemas)

```
┌─────────────────────────────────────────────────────────┐
│ [Description: col-12]              ← Opcional primero   │
│ [isActive: col-4] [Notes: col-8]   ← Config mezclada    │
│ [Name*: col-8] [Code*: col-4]      ← Required al final  │
└─────────────────────────────────────────────────────────┘
```

### Formulario Corregido

```
┌─────────────────────────────────────────────────────────┐
│ [Code*: col-4] [Name*: col-8]      ← Required primero   │
│ [Description: col-12]              ← Opcional después   │
│ [Notes: col-12]                    ← Opcional después   │
│ [isActive: col-4]                  ← Config al final    │
└─────────────────────────────────────────────────────────┘
```

---

## Recursos

- **Layout**: Consultar `aurora-layout` para reglas de grid y secciones
- **Componentes**: Consultar `aurora-components` para inputs específicos

Overview

This skill evaluates and improves the user experience of Aurora forms, focusing on cognitive flow rather than visual layout. It helps reorder fields, validate field dependencies, and apply progressive disclosure and validation rules to reduce user friction. Use it to audit forms and produce concrete, actionable ordering and interaction changes.

How this skill works

The skill inspects form field metadata (required flag, identifiers, dependencies, readonly/calculated status) and scores each field using a decision matrix to recommend order and visibility. It flags anti-patterns, suggests grouping and expansion panels for advanced options, and outputs a checklist for UX review and implementation tips for Create/Edit/Filter modes.

When to use it

  • Audit an existing Aurora form for usability problems
  • Reorder fields to match user cognition and reduce backtracking
  • Design Create, Edit, or Filter forms with sensible defaults and focus behavior
  • Introduce progressive disclosure for advanced or optional settings
  • Validate field dependencies and tab/focus order before release

Best practices

  • Place required fields first within each semantic section
  • Order fields from what the user already knows to what they must decide (identifiers → basics → classification → details → settings → state)
  • Group related fields and place dependents next to or below their parent fields
  • Use expansion panels for advanced/rare options and keep calculated fields readonly or hidden
  • Apply validation on blur for critical fields and on submit for cross-field checks; show real-time feedback only where helpful

Example use cases

  • Create form: set autofocus on first editable field, preload sensible defaults, hide calculated fields
  • Edit form: clearly mark readonly fields, preserve original values until save, indicate unsaved changes
  • Filter UI: surface most-used filters first and provide a clear reset/clear-all action
  • Country/state dependency: disable state selector until country is chosen and show a hint
  • Complex entity form: move identifiers and required fields to top, push audit fields and isActive to the end or hide them

FAQ

How does the decision matrix rank fields?

It assigns weights for being required, an identifier, known by the user, affecting others, being a config, or an audit field, and sums them to determine ordering priority.

When should I use progressive disclosure?

Use it for advanced, rarely used, or optional fields to keep the primary flow simple and reduce cognitive load.