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.