Stentor
Plataforma de envío de email
Stentor es una plataforma de envío de email multi-tenant y autoalojable. Expone una API REST —incluido un endpoint /v3/mail/send compatible con SendGrid, para que migrar no obligue a reescribir el cliente—, un gateway SMTP autenticado y un worker asíncrono que reparte el correo entre varios proveedores con failover y cortacircuitos. Encima hay un dashboard para campañas, contactos y analítica, y un servicio de scoring que decide a qué hora conviene enviar y cómo puntúa un asunto. El aislamiento entre inquilinos no se programa en la aplicación: se impone en PostgreSQL con row-level security, y cada servicio se conecta con un rol de mínimo privilegio.
Qué hace
Cubre el camino completo del correo transaccional y de campañas, desde que entra por la API o por SMTP hasta que el proveedor confirma la entrega.
- Acepta envíos por API REST con un endpoint compatible con SendGrid y por SMTP autenticado en el 587 con STARTTLS y el 465 con TLS implícito.
- Reparte cada envío entre varios proveedores, con reintentos, failover y cortacircuitos cuando uno se degrada.
- Consume los trabajos de envío desde una cola durable y emite webhooks salientes con el resultado.
- Recibe los webhooks entrantes de los proveedores para cerrar el ciclo de estado de cada mensaje.
- Gestiona campañas, contactos y analítica desde un dashboard propio.
- Puntúa la hora de envío y la línea de asunto con un servicio de aprendizaje automático separado.
Arquitectura
Tres cadenas de herramientas conviven en un mismo repositorio, cada una donde aporta, y la frontera entre inquilinos vive en la base de datos en lugar de en el código.
- Workspace de Go con cuatro módulos: API, worker, gateway SMTP y un paquete compartido con la lógica de entrega, proveedores, cola, DNS y cortacircuitos.
- Aislamiento multi-tenant por row-level security en PostgreSQL: la garantía no depende de que ninguna consulta se olvide del filtro.
- Cada servicio se conecta a la base de datos con un rol de mínimo privilegio distinto.
- NATS JetStream como cola durable entre la API y el worker.
- Dashboard Next.js 16 con React 19 y TanStack Query en un workspace npm orquestado por turbo.
- Servicio de scoring en Python sobre FastAPI, aislado del camino crítico de entrega.
- Despliegue con manifiestos de Kubernetes, charts de Helm y monitorización versionados en el repositorio.
Stack
Los servicios de envío están escritos en Go, la cola es NATS JetStream y la persistencia PostgreSQL con row-level security. El dashboard es Next.js 16 con React 19 y TypeScript, y el servicio de scoring es Python sobre FastAPI. Todo se empaqueta en Docker y se despliega en Kubernetes con Helm.