Skip to content

Fix: ajustes de accesibilidad, seguridad y UX en auth, dashboard y navegación

Agustín Cantero requested to merge fix/ajustes-varios into dev

Resumen

Ajustes sobre autenticación, dashboard y navegación (sidebar, TopBar, Footer), a partir de una revisión de accesibilidad, seguridad, UI y UX.

Qué incluye

Estructura

  • El dashboard pasa de /inicio a /. Antes / redirigía a /inicio o a /login según hubiera sesión, y ambos pasos consultaban GET /auth/me; ahora la consulta es una sola. /login redirige a / si ya hay sesión válida.

Diseño

  • Sidebar rediseñado (paleta zinc, "Inicio" como un ítem más, drawer mobile con foco y logo). TopBar y Footer en zinc-700.
  • Tarjetas del dashboard con el mismo lenguaje visual que el resto de la app, y espaciado uniforme.
  • SetPasswordScreen y SessionUnavailable reusan AuthLayout, como el 404, y el texto queda unificado ("inicio de sesión").

Accesibilidad

  • "Cerrar sesión" ahora se alcanza con teclado. Menú de usuario con Escape, aria-expanded y nombre accesible.
  • Sidebar dentro de un <nav>, con aria-current y sin h6 sueltos. Títulos de tarjetas con la jerarquía correcta.
  • Contrastes por debajo de 4.5:1, <main> faltante, <title> del 404, autofill cortado por el botón del ojito.
  • El foco ya no se pierde al pasar del login al formulario de contraseña nueva.

Seguridad

  • Headers en next.config.ts: CSP (solo el propio origen y Google Identity Services), anti-framing, nosniff, Referrer-Policy y Permissions-Policy. /reset-password sale con no-referrer porque su URL lleva el token. El CSP no se aplica a /api, para no romper la vista de los informes en PDF.
  • Se quitan los redirects viejos /olvide-contrasenia y /restablecer-contrasenia.

UX

  • Modal bloqueante cuando la sesión expira con la página abierta, que antes redirigía sin explicación.
  • Los errores del backend sin message (HTML de la plataforma, cuerpo vacío, 400 del firewall) muestran un texto en español según el estado en vez de "Error 500".
  • "Nueva contraseña" muestra el mínimo de 8 caracteres desde el principio.
  • Solo la primera foto de fondo del login se precarga; las otras dos, de forma diferida.

Merge request reports

Loading