Stentor
Plataforma d'enviament d'email
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.