Stentor

Plataforma de envío de email

GoNATS JetStreamPostgreSQLNext.js 16PythonKubernetes

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.

Volver a proyectos