// the find
diego3g/umbriel
✉️ Umbriel is a simple mailing platform built with Node.js, TypeScript & Prisma.
Umbriel is a self-hosted email broadcasting platform with a Node.js/TypeScript backend. It handles contact lists with tags, message templating, delivery queuing via Bull/Redis, and bounce/unsubscribe event processing via AWS SNS webhooks. Built as a teaching example of DDD architecture more than a production tool.
The DDD layering is consistent — domain objects, use cases, repositories with interfaces, and in-memory fakes for testing are all properly separated. The Either monad for error handling avoids exception-based control flow, which makes use case results explicit at the type level. Kafka consumer integration for syncing contacts from an external user service is a real architectural decision, not a toy. AWS SES + SNS bounce webhook handling is there and validates SNS signatures.
The last migration is from 2021 and the repo looks effectively abandoned — dependency versions will be years behind Node LTS and the Prisma ecosystem has changed substantially since then. There is no multi-tenancy: a single user account owns everything, making it useless as a shared-team tool without rearchitecting. No scheduling or rate-limiting on send — it will hammer SES as fast as Bull workers dequeue, which will get you throttled or banned at volume. The README is a single sentence with no setup docs, deployment guide, or explanation of the Kafka event contract, so onboarding requires reading the code.