7.6 KiB
Arquitectura de ecosistema para Nexo
Idea
Nexo debe ser una app de referencia que use el ecosistema como plataforma. La ruta src/web/routes/dating contiene pantallas y composicion de demo. La logica reusable debe moverse a modulos publicos.
Capas
Rutas
Responsabilidad:
- cargar datos de pagina;
- conectar acciones de usuario;
- renderizar layouts;
- componer componentes especificos de dating.
No deben:
- implementar motores;
- duplicar validacion;
- saltarse
active-app; - importar detalles internos de
svrs.
uix
Responsabilidad:
- componentes genericos;
- formularios conectados a
sium; - componentes de auth/session/perm/cache/logger/devtools;
- accesibilidad y comportamiento visual.
arts
Responsabilidad:
- motores cliente/runtime;
- servicios activos;
- estado reactivo;
- integracion con
active-app.
libs
Responsabilidad:
- tipos compartidos;
- contratos;
- schemas;
- errores;
- helpers puros.
svrs
Responsabilidad:
- handlers server-side;
- adapters;
- permisos server-side;
- auth/session;
- endpoints de demo.
ActiveApp de la demo
La demo debe tener un preset canonico:
createDatingApp({
services: {
logger,
timers,
bus,
orca,
lang,
prefs,
frontend,
storage,
cache,
http,
session,
auth,
perm,
connection,
sium
}
});
El tipo resultante debe permitir que los componentes reciban una app tipada, no un ActiveApp generico con servicios unknown.
Modulos y responsabilidades
active-app
- crear
DatingApp; - resolver dependencias;
- exponer servicios tipados;
- reportar lifecycle al devtools.
sium
- schemas de onboarding;
- schemas de perfil;
- schemas de filtros;
- schemas de reporte;
- schemas de decision de moderacion;
- introspeccion para
AutoFields.
uix
- renderizar formularios;
- renderizar gates de permisos;
- mostrar inspectores;
- sostener primitives accesibles.
http
- cliente API demo;
- interceptores de session/auth;
- trace id por request;
- errores normalizados;
- soporte para mock/fixtures.
cache
- cache de feed;
- cache de perfiles;
- cache de matches;
- invalidacion tras like/pass/report/block;
- exposicion a inspector.
storage
- draft de onboarding;
- draft de profile editor;
- cola offline de mensajes;
- preferencias locales;
- metadata local de fotos pendientes;
- cache persistente si se habilita.
prefs
- tema;
- densidad;
- idioma;
- notificaciones;
- preferencias de discover.
frontend
- tema aplicado;
- density;
- viewport;
- reduced motion;
- direccion LTR/RTL si aplica.
adom
- focus trap;
- scroll lock;
- portal/layer manager;
- keyboard navigation;
- observers de viewport.
lang
- mensajes MF2;
- namespaces por pantalla;
- fallback de idioma;
- pseudo-locale para pruebas.
format
- fechas de mensajes;
- distancia aproximada;
- listas de intereses;
- estado relativo de ultima conexion;
- formatos localizados en admin.
auth
- registro;
- login;
- MFA simulado;
- recuperacion;
- logout;
- device/session management.
session
- estado de usuario actual;
- refresh;
- expiracion;
- cross-tab si se habilita;
- session inspector.
perm
- permisos por rol;
- permisos por estado de usuario;
- bloqueo entre usuarios;
- gates de UI;
- checks server-side.
connection
- chat realtime simulado;
- presence;
- typing;
- reconnect;
- offline queue.
bus
- eventos internos:
dating.profile.completed;dating.discover.loaded;dating.like.sent;dating.match.created;dating.message.queued;dating.message.sent;dating.report.submitted;dating.moderation.resolved.
logger
- trazas por flujo;
- errores normalizados;
- redaction de datos sensibles;
- audit trail de moderacion.
timer
- debounce de filtros;
- expiracion de matches;
- retry de mensajes;
- timeout de requests;
- timers visibles en devtools.
orca
- orquestacion de onboarding finalizado;
- flujo like -> match -> notificacion -> invalidacion cache;
- flujo report -> hide local -> notify moderation -> audit;
- flujo reconnect -> flush offline queue.
svrs/auth
- endpoints de login/logout/session;
- handlers para register, reset y MFA simulado.
svrs/perm
- decisiones server-side;
- explicacion de permisos;
- checks para admin/moderacion.
svrs/cache
- cache server-side si se prueba;
- invalidacion coordinada.
Servidor demo independiente
Las APIs de Nexo viven fuera de SvelteKit, en servers/dating. El cliente Svelte debe consumir este servidor por HTTP, usando cookies con credentials: "include".
Base local por defecto:
http://127.0.0.1:8787
Endpoints:
POST /api/auth/registerPOST /api/auth/loginPOST /api/auth/logoutPOST /api/auth/resetPOST /api/auth/mfa/verifyGET /api/sessionGET /api/profile/mePUT /api/profile/mePOST /api/profile/photosDELETE /api/profile/photos/:filenamePATCH /api/profile/photos/orderPATCH /api/profile/photos/mainGET /api/discoverPOST /api/likesGET /api/matchesGET /api/matches/:id/messagesPOST /api/matches/:id/messagesPOST /api/safety/blockPOST /api/safety/reportGET /api/admin/reportsPOST /api/admin/reports/:id/resolveGET /api/devtools/snapshot
Flujos principales
Onboarding
siumvalida cada paso.storageguarda draft.httpguarda perfil final.cacheinvalidaprofile.me.busemitedating.profile.completed.orcacoordina notificacion y siguiente ruta.loggerregistra trace.
Login/registro
siumvalida credenciales y confirmaciones.httpllama a auth.authautentica contra PocketBase o adapter local.sessionguarda estado.permcarga rol/estado.busemitedating.auth.loginodating.auth.registered.orcadecide redireccion a onboarding, discover o MFA.loggertraza sin password ni token.
Fotos de perfil
siumvalida metadata y limites de foto.permvalidaprofile:photo:add/delete/reorder.httpsube archivo con multipart.- PocketBase guarda archivos en
dating_profiles.photos. cacheinvalidaprofile.me, perfil publico y discover.busemite evento de foto.orcarefresca perfil y feed si procede.loggerregistra tamano/tipo/resultado sin guardar binario.
Like/match
- Usuario pulsa like.
permvalidamatch:like.httpenvia request.cachemarca perfil como visto.busemitedating.like.sent.- Si hay match,
orcadispara flujo de match. connectionnotifica si esta conectado.
Chat offline
- Usuario envia mensaje sin conexion.
connectionmarca offline.storageguarda mensaje conclientNonce.- UI muestra pending.
- Al reconectar,
orcadispara flush. httpconfirma envio.cacheactualiza thread.loggercorrelaciona intentos.
Reporte
- Usuario abre safety menu.
siumvalida report form.permvalidasafety:report.httpenvia reporte.cacheoculta target localmente.busemitedating.report.submitted.loggeraudita sin exponer detalles sensibles.
Datos de prueba
La demo debe usar seeds:
- usuarios normales;
- usuario limitado;
- moderador;
- admin;
- perfiles con intereses variados;
- matches activos;
- chat con mensajes;
- reportes abiertos y resueltos;
- estados offline/cacheados.
Contratos publicos a extraer
DatingUserDatingProfileDatingPreferenceDatingLikeDatingMatchDatingMessageDatingReportDatingModerationDecisionDatingPermissionDatingEvent
Estos contratos deben vivir fuera de la ruta si pasan a ser reutilizables.