Saltar al contenido principal

Arquitectura del sistema

Zenovay está construido como un sistema distribuido de cuatro servicios interconectados, cada uno optimizado para su función específica. Entender cómo trabajan juntos es esencial para el desarrollo y la depuración efectivos.

Visión general de los servicios

Nuestra plataforma consta de cuatro servicios principales, cada uno desplegado de forma independiente en la red de borde de Cloudflare:

  • Landing (zenovay.com) — Sitio de marketing y páginas públicas. Exportación estática de Next.js optimizada para SEO y carga rápida.
  • Auth (auth.zenovay.com) — Servicio de autenticación centralizado. Maneja inicio de sesión, registro, OAuth, SSO y flujos de MFA.
  • App (app.zenovay.com) — Tablero principal de analíticas. Visualización de datos en tiempo real, reproducción de sesiones y gestión de equipos.
  • API (api.zenovay.com) — Servicios de backend. Seguimiento de eventos, procesamiento de datos, facturación e integraciones de terceros.

Comunicación entre servicios

Los servicios se comunican a través de patrones bien definidos que mantienen la seguridad mientras permiten experiencias de usuario fluidas:

  • Auth → App: Después de una autenticación exitosa, los usuarios son redirigidos a la aplicación con tokens seguros. El estado de la sesión se sincroniza entre pestañas usando la API BroadcastChannel.
  • App → API: El tablero realiza solicitudes autenticadas a la API usando tokens bearer. Todas las consultas de analíticas, operaciones de facturación y mutaciones de datos fluyen por aquí.
  • Seguimiento → API: El script de seguimiento ligero (<5KB) envía eventos directamente a la API mediante solicitudes POST a endpoints amigables con los bloqueadores de anuncios.

Flujo de tokens

La autenticación sigue un flujo seguro entre servicios:

  • El usuario inicia sesión en auth.zenovay.com
  • Supabase emite tokens de acceso y de actualización
  • Los tokens se almacenan en cookies httpOnly para protección contra XSS
  • La aplicación valida los tokens en cada solicitud a través del middleware
  • Los endpoints de la API verifican los tokens bearer para la autorización
  • Los tokens de actualización rotan automáticamente para evitar su reutilización

Despliegue en Cloudflare

Aprovechamos ampliamente el ecosistema de Cloudflare para el rendimiento y la fiabilidad:

  • Pages: Alojamiento de sitios estáticos para los frontends de landing y la aplicación
  • Workers: Funciones de API sin servidor ejecutándose en el borde
  • KV: Almacenamiento clave-valor para limitación de velocidad, bloqueos de sesión y mapeo de endpoints personalizados
  • R2: Almacenamiento de objetos para avatares de equipo y grabaciones de sesiones
  • Turnstile: Protección contra bots sin fricción para el usuario

Arquitectura de base de datos

Supabase (PostgreSQL) sirve como nuestra base de datos principal con varias decisiones de diseño clave:

  • Multi-tenencia basada en equipos: Todos los datos están limitados a los equipos, no a los usuarios individuales. Esto habilita la colaboración por defecto.
  • Row Level Security (RLS): Las políticas a nivel de base de datos garantizan que los usuarios solo puedan acceder a los datos que están autorizados a ver.
  • Suscripciones en tiempo real: Los datos de visitantes en vivo se transmiten a los tableros a través de los canales en tiempo real de Supabase.
  • Disparadores para aplicación de reglas: Los límites del plan y el seguimiento del uso se aplican a nivel de base de datos, no solo en el código de la aplicación.