Stentor

Plataforma d'enviament d'email

GoNATS JetStreamPostgreSQLNext.js 16PythonKubernetes

Stentor és una plataforma d’enviament d’email multi-tenant i autoallotjable. Exposa una API REST —inclòs un endpoint /v3/mail/send compatible amb SendGrid, perquè migrar no obligui a reescriure el client—, un gateway SMTP autenticat i un worker asíncron que reparteix el correu entre diversos proveïdors amb failover i tallacircuits. A sobre hi ha un dashboard per a campanyes, contactes i analítica, i un servei de scoring que decideix a quina hora convé enviar i com puntua un assumpte. L’aïllament entre inquilins no es programa a l’aplicació: s’imposa a PostgreSQL amb row-level security, i cada servei s’hi connecta amb un rol de mínim privilegi.

Què fa

Cobreix el camí complet del correu transaccional i de campanyes, des que entra per l’API o per SMTP fins que el proveïdor confirma el lliurament.

  • Accepta enviaments per API REST amb un endpoint compatible amb SendGrid i per SMTP autenticat al 587 amb STARTTLS i al 465 amb TLS implícit.
  • Reparteix cada enviament entre diversos proveïdors, amb reintents, failover i tallacircuits quan un es degrada.
  • Consumeix les feines d’enviament des d’una cua durable i emet webhooks sortints amb el resultat.
  • Rep els webhooks entrants dels proveïdors per tancar el cicle d’estat de cada missatge.
  • Gestiona campanyes, contactes i analítica des d’un dashboard propi.
  • Puntua l’hora d’enviament i la línia d’assumpte amb un servei d’aprenentatge automàtic separat.

Arquitectura

Tres cadenes d’eines conviuen en un mateix repositori, cadascuna on aporta, i la frontera entre inquilins viu a la base de dades en lloc del codi.

  • Workspace de Go amb quatre mòduls: API, worker, gateway SMTP i un paquet compartit amb la lògica de lliurament, proveïdors, cua, DNS i tallacircuits.
  • Aïllament multi-tenant per row-level security a PostgreSQL: la garantia no depèn que cap consulta s’oblidi del filtre.
  • Cada servei es connecta a la base de dades amb un rol de mínim privilegi diferent.
  • NATS JetStream com a cua durable entre l’API i el worker.
  • Dashboard Next.js 16 amb React 19 i TanStack Query en un workspace npm orquestrat per turbo.
  • Servei de scoring en Python sobre FastAPI, aïllat del camí crític de lliurament.
  • Desplegament amb manifests de Kubernetes, charts de Helm i monitoratge versionats al repositori.

Stack

Els serveis d’enviament estan escrits en Go, la cua és NATS JetStream i la persistència PostgreSQL amb row-level security. El dashboard és Next.js 16 amb React 19 i TypeScript, i el servei de scoring és Python sobre FastAPI. Tot s’empaqueta en Docker i es desplega a Kubernetes amb Helm.

Tornar als projectes