Targ Apps Docs

Autenticación local

Registro e inicio de sesión con perfil local en Targ-Apps-Finance — sin servidor.

Targ-Apps-Finance usa un perfil local (no hay API ni contraseña). El usuario se identifica con nombre y correo; los datos financieros siguen en el snapshot de Chroma-Fs / IndexedDB.

Pantalla #/auth

pages/Auth.js es una pantalla completa (sin Layout). Tipografía Grift Variable (display 750 + cuerpo 400) y paleta --cs-*. El candado emoji se sustituyó por la marca Targ (assets/logo.svg).

PiezaDetalle
MarcaTargMark (monograma Targ) + eyebrow «Targ Apps» + titular «Finance»
CopiaPerfil local, sin servidor ni contraseña; solo nombre y correo
PestañasRegistrarse / Iniciar sesión (role="tablist"), indicador cobre en la activa
RegistroNombre + correo → Crear perfil
LoginCorreo del perfil local → Entrar
Firma visualRail vertical --cs-primary a la izquierda de .taf-auth-card
A11yfocus-visible en pestañas y envío; prefers-reduced-motion en animateAuthEnter()

Estilos en src/styles/finance.css (.taf-auth-*). Fuente autoalojada: fonts/Grift Variable-VF.ttf vía @font-face en src/styles/theme.css.

Flujo

  1. Arranque — Si no hay sesión (session.loggedIn), el guard redirige a #/auth.
  2. Registro — Nombre + correo validados → se guarda profile en el snapshot → session activa.
  3. Login — El correo debe coincidir con el perfil local guardado.
  4. Onboarding — Tras autenticarse, si no hay cuentas financieras, #/onboarding (pantalla completa, sin Layout, misma estética que auth). El formulario no pide nombre: la primera cuenta financiera toma el profile.name del registro (resolveOnboardingAccountName() en logic/onboarding.js). Si el perfil no tiene nombre (migración legacy), se usa «Mi cuenta». CTA: «Crear cuenta».
  5. Logout — En Ajustes, «Cerrar sesión» borra la sesión y vuelve a #/auth. El perfil y los datos financieros permanecen en disco.

Modelo en el snapshot

CampoFormaDescripción
profile{ id, name, email, createdAt }Perfil único en este dispositivo
session{ userId, loggedIn: true }Sesión actual (también espejada en sessionStorage como taf:session)

Exportación/importación JSON incluye profile y session cuando existen (logic/persistence/storage.js).

Instalaciones existentes

Si ya había cuentas u onboarding completo pero no profile, hydratePersist() crea un perfil legacy (Usuario / usuario@local) y marca la sesión como activa para no bloquear datos previos.

Archivos

ArchivoRol
pages/Auth.jsUI con TargMark, Grift y pestañas Registrarse / Iniciar sesión
pages/Onboarding.jsPrimera cuenta — TargMark, ledger 01, AccountForm onboarding
src/components/TargMark.jsMonograma compartido auth + onboarding
logic/auth.jsValidación, registro, login, logout, syncAppRoute()
logic/routes.jsAUTH_HASH, applyAppHash() (auth → onboarding → app)
logic/persist.jsgetProfile, setProfile, getSession, setSession, clearSession
logic/onboarding.jsOnboarding solo si isAuthenticated()
logic/router.jsRuta #/auth
src/App.jsAuth sin Layout (pantalla completa)
src/animations.jsanimateAuthEnter() en la tarjeta
src/styles/finance.cssEstilos .taf-auth-* (rail cobre, pestañas, tipografía)
src/styles/theme.css@font-face Grift Variable + --font-sans
fonts/Grift Variable-VF.ttfFuente de marca autoalojada
assets/logo.svgMarca Targ en la cabecera de auth
test/logic/auth.test.jsSuite de registro, login, guards y migración

Tests

npm test
# incluye test/logic/auth.test.js

On this page