aurora auth · v1.0 · ago 2026
Propuesta de producto · client + admin

La puerta también es la marca

Las dos puertas de Mogos son hoy la misma pantalla sin marca: un formulario centrado sobre fondo blanco, sin tarjeta, con el isotipo flotando arriba a la derecha. Lo único que cambia entre el cliente y el admin es el título. La primera pantalla que ve un cliente de Mogos no dice nada de Mogos. Acá entra la aurora — el par celeste y lima sobre marino — y con ella el momento que ya existe en el link-in-bio: la placa «Importamos futuro», disparada al iniciar sesión.

client · split claro + panel aurora admin · noche completa placa optimista · piso 1.4 s Google · la placa vive en el regreso demo viva
Hoy 01 · el punto de partida

No hay una decisión de diseño que revertir: hay una ausencia. Las dos apps renderizan un max-w-md centrado sobre bg-background, el isotipo de 36×32 absolutamente posicionado arriba a la derecha, y nada más. Sin tarjeta, sin degradado, sin ilustración, sin el wordmark. El admin ni siquiera declara type="email" en su campo de correo, y muestra el mensaje crudo de Supabase sin traducir.

El momento del login tampoco existe: el botón se deshabilita, su texto se reemplaza por un spinner y la pantalla salta. La marca ya tiene una coreografía que la gente reconoce —la del link-in-bio, con la marca completa, el punto rojo que cae y la regla degradada— y no se usa justamente donde se abre la relación.

hoy · las dos puertas idénticas salvo el título · sin marca · sin momento
Inicia sesión
¡Bienvenido de nuevo! Por favor, introduce tus datos para seguir adelante.
Ingresa tu correo electrónico
Ingresa tu contraseña
Iniciar sesión
o
Inicia sesión con Google
client · /login
Panel de Administración
Por favor, introduce tus credenciales de administrador para continuar.
Ingrese su correo electrónico
Ingresa tu contraseña
Iniciar sesión
Sin OAuth, sin registro, sin enlace de vuelta.
admin · /login
Detalle que delata la duplicación

El cliente dice «Ingresa tu correo» (tú) y el admin dice «Ingrese su correo» (usted). No es una decisión: es que login/page.tsx, (auth)/layout.tsx, lib/auth/actions.ts y los esquemas están duplicados en las dos apps y derivaron por separado. El shell aurora es la excusa para consolidarlos.

La aurora 02 · el par de Mogos

La escena viene de las puertas de Amedi y se traduce a los cuatro colores del manual. Es una sola receta: fondo --grad-hero en marino, dos halos radiales a la deriva — celeste arriba a la derecha, lima abajo a la izquierda — con recorridos de 12 s y 16 s desfasados para que nunca coincidan, y el barco del manual como isotipo gigante al 7 % de opacidad. Nada de esto es color nuevo: el degradado y el movimiento son la marca según el propio manual.

El par · celeste + lima
Celeste al 34 % arriba, lima al 16 % abajo. El lima va más bajo porque es el color más claro de la paleta y a igual opacidad se comería el marino.
La regla · firma de la casa
La misma regla degradada de los correos y de la placa. Marca dónde empieza el formulario y cose la puerta con el resto del sistema.
El barco · isotipo del manual
El mismo vector del manual, gigante y casi invisible en la esquina. Da profundidad sin ilustración de stock y recuerda de qué va el negocio.
Por qué una aurora por puerta y no una sola

Con la misma escena en las dos apps, un administrador que abre las dos pestañas no distingue cuál es cuál hasta leer el título. El cliente entra por el día y mira la noche (formulario claro + panel aurora); el admin es la única puerta full-noche. La diferencia se lee de reojo, y las dos siguen siendo obviamente Mogos.

Client · split 03 · la puerta del cliente

Formulario claro a la izquierda —donde ya viven el registro de dos pasos y el OAuth— y panel aurora a la derecha cargando el eslogan. El wordmark real reemplaza al isotipo suelto de la esquina, la regla degradada firma el arranque, y el botón primario es marino: el color ancla sobre superficie clara.

client · propuesto demo viva pulsa «Iniciar sesión» o el botón de Google dentro de la escena
mogosgroup.com/login
Inicia sesión
Bienvenido de nuevo. Entra y sigue tus envíos.
tucorreo@ejemplo.com
••••••••
El correo o la contraseña no coinciden. Revísalos e intenta de nuevo.
¿Olvidaste tu contraseña?
o
¿Aún no importas con nosotros? Crea tu cuenta
Al entrar aceptas los términos y el aviso de privacidad de Mogos Group.
Importamos futuro
De la fábrica en Cantón a tu puerta en Caracas, en una sola pantalla: cotización, pago, almacén y despacho. Mogos Group · China → Venezuela
Mi cuenta
En tránsito
7
En almacén
3
Por pagar
1
Los tres caminos, con los tiempos reales de la propuesta.

En móvil

El panel colapsa y la aurora se queda como acento del header: una banda de ~180 px con los halos, el wordmark en blanco y el eslogan; el formulario, debajo, en claro. Es el mismo comportamiento que hoy tiene la foto en el split de Amedi — el panel no se apila entero, se reduce. La placa sí ocupa la pantalla completa, igual que en escritorio.

Admin · noche 04 · la puerta interna

La única puerta full-noche: la aurora ocupa toda la ventana y el formulario vive en una tarjeta de vidrio (backdrop-filter sobre marino al 55 %). Sin OAuth, sin registro y sin enlace de vuelta — porque el admin no los tiene. El botón primario cambia a celeste: sobre marino, es el color que el manual asigna a los highlights, y es el que aguanta el contraste.

admin · propuesto demo viva tarjeta de vidrio · sin OAuth · botón celeste
admin.mogosgroup.com/login
Panel interno
Inicia sesión
Acceso del equipo de Mogos Group.
Correo electrónico
tucorreo@mogosgroup.com
Contraseña
••••••••
El correo o la contraseña no coinciden. Revísalos e intenta de nuevo.
¿Olvidaste tu contraseña?
Mogos Group · Caracas · Cantón
Operaciones
Órdenes hoy
24
Por cotizar
9
En almacén CN
112
El admin no tiene Google: solo correo y contraseña.

La placa 05 · el momento

Es exactamente la coreografía que ya corre al cargar el link-in-bio, movida de la carga a la acción. Cuatro tiempos en 1.1 s: la marca completa entra con spring, el punto rojo cae desde arriba, la regla degradada se dibuja de izquierda a derecha y el eslogan aparece en Oswald. Todos los easings y duraciones salen de los tokens del sistema.

Importamos futuro
0.05 s
La marca completa —no el monograma— entra con --ease-spring desde el 72 %.
Importamos futuro
0.34 s
El punto rojo cae 64 px y aterriza. Es el único color fijo de la marca.
Importamos futuro
0.52 s
La regla --grad-marca se dibuja con scaleX desde la izquierda.
Importamos futuro
0.68 s → 1.4 s
El eslogan sube 8 px y se queda. A los 1.4 s la placa se va y detrás está la app.

La decisión que importa no es la coreografía, es cuándo se dispara. La placa entra con el clic, en paralelo con la petición, y tiene un piso de 1.4 s. Así la latencia de la red se esconde detrás de la marca en vez de sumarse a ella: el tiempo percibido es 1.4 s, no 300 ms + 1.4 s.

Éxito
placa «Importamos futuro» · piso 1.4 s navega a /account
La red, debajo
POST 300 ms sesión lista · espera al piso
Si falla
placa se retira error bajo el campo · foco al correo
0 s0.5 s1.0 s1.4 s2.2 s
Dónde sí aparece

Solo donde se abre una sesión: el login de las dos puertas, el regreso de Google, el último paso del registro y activate.

Dónde no

Ni en olvidé-contraseña, ni al pedir un OTP, ni en el logout. Ahí el botón conserva su spinner: la placa no es un indicador de carga de uso general.

Se gasta si se repite

Un usuario que entra tres veces al día ve la placa tres veces. Por eso el piso son 1.4 s y no los 2.2 s del splash del link-in-bio, que solo se ve una vez.

Google 06 · la placa vive en el regreso

Con OAuth el navegador se va: signInWithOAuth redirige a Google y cualquier animación lanzada en el clic la corta la navegación. Así que la placa no va en la salida, va en el regreso — en /auth/callback, mientras se intercambia el código por la sesión. Que es justo donde hoy hay una pantalla en blanco de la que nadie se ocupó.

Clic en Google
se atenúa accounts.google.com placa en /auth/callback
clicGooglevuelve1.4 s/account
En la salida, solo lo honesto

El formulario se atenúa al 42 % y el botón de Google queda aria-busy con su spinner. Nada de celebrar todavía: el usuario aún no se ha autenticado y puede cancelar en la pantalla de Google.

Hoy los botones de OAuth no tienen ningún estado y les falta type="button", así que un Enter en el formulario los puede disparar.

En el regreso, la placa completa

/auth/callback pinta la placa mientras corre el intercambio de código. Si el intercambio falla, la placa se retira y se vuelve a /login con el error — mismo contrato que el camino de contraseña.

Efecto colateral: se acaba el flash blanco del regreso de Google, que hoy es la parte más rota del flujo.

Estados y accesibilidad 07 · el piso, sin anunciarlo
La placa es decorativa

Lleva aria-hidden. El estado real viaja por un aria-live="polite": «Iniciando sesión…» y luego el destino o el error. Un lector de pantalla nunca oye hablar de una placa.

Movimiento reducido

Con prefers-reduced-motion no hay placa y la aurora no deriva: se navega directo y el botón conserva el spinner que ya existe. La puerta sigue completa sin una sola animación.

El error dice qué hacer

«El correo o la contraseña no coinciden. Revísalos e intenta de nuevo.» — bajo el campo, con el borde en rojo y el foco devuelto al correo. Reemplaza el mensaje crudo de Supabase que el admin muestra hoy sin traducir.

Contraste sobre lo real

Verificado sobre las superficies reales, no token contra token: texto sobre el panel aurora y sobre la tarjeta de vidrio. El botón celeste del admin lleva tinta marino, no blanca — sobre #AAE4F3 el blanco no llega a AA.

Detalle de implementación que se paga solo

La placa se retira en pageshow, como ya hace el transit del link-in-bio. Sin eso, volver con el botón de atrás desde /account revive la página desde el bfcache con la placa puesta y la puerta queda tapada.

La familia 08 · reglas de retinte

Las otras nueve rutas no se redibujan: heredan el shell de su puerta. Esto es lo que cambia en cada una, y se puede implementar de a una.

RutaAppQué hereda · qué cambiaPlaca
/loginclientEl split completo: formulario claro + panel aurora. Es la pieza de esta propuesta.
/loginadminNoche completa con tarjeta de vidrio. Botón celeste. Se traduce el error de Supabase y se arregla el type="email".
/registerclientEl mismo split. Los dos pasos viven en el lado claro con un indicador de progreso sobre la regla degradada.Al cerrar el paso 2
/forgot-passwordambasSolo retinte del shell. Un campo, un botón, y la confirmación en el mismo lugar en vez de otra pantalla.No
/reset-passwordambasRetinte + los requisitos de contraseña como lista que se va marcando, no como bloque de texto.No
/verify-otpclientRetinte + el código en cajitas (una por dígito) con avance y pegado automáticos.No
/verify-whatsapp-otpclientIgual que el anterior; cambia el texto de ayuda y el plate del icono a WhatsApp.No
/activateclientRetinte. Es la puerta de los usuarios migrados de v1: el copy explica por qué se les pide activar.
/complete-profileclientRetinte. Ya hay sesión, así que no lleva placa: es un formulario, no una puerta.No
/auth/callbackambasDeja de ser una pantalla en blanco: es donde vive la placa del regreso de Google.
La deuda que esto destapa

Las dos apps duplican (auth)/layout.tsx, login/page.tsx, lib/auth/actions.ts, password-fields.tsx y los esquemas de Zod. Implementar el shell dos veces sería repetir el error. La propuesta asume un solo AuroraShell en packages/ui, parametrizado por puerta (split o noche) — que es también lo que hace barato retintar las nueve rutas restantes.

Lo que no se hace 09 · los límites

Una puerta bonita puede convertirse en una puerta lenta. Estos son los límites que la propuesta se pone a sí misma.

No se toca la mecánica de auth

Ni Supabase, ni las server actions, ni el guardia de returnTo, ni el window.location.assign del admin. Es una capa de presentación: si se quita, el login sigue funcionando igual.

No se resucita el botón de Apple

Hoy existe con className="hidden". O se implementa o se borra — no se dibuja un botón apagado en la puerta principal.

No entra el captcha por acá

Turnstile es el ship de Confianza y llega por su propia ruta. Meterlo en esta pieza mezcla dos decisiones que se validan distinto.

No se anima la salida

El logout es instantáneo. La placa dice «entraste», no «te fuiste»: usarla en los dos sentidos la vacía de significado.