Dittofeed is an open-source customer engagement platform that enables businesses to automate and deliver personalized messages across email, SMS, WhatsApp, Slack, and mobile push notifications. It solves vendor lock-in by offering full control over data and infrastructure through self-hosting, while providing a dev-friendly interface for building user journeys and campaigns. Built with TypeScript, Node.js, and React, it integrates with Segment, SendGrid, Amazon SES, and supports Docker and Render deployments for flexible hosting.
The platform combines a visual journey builder, segment editor, and template designer with Git-based version control for messaging assets, enabling teams to test campaigns in CI/CD pipelines and embed tools directly into their own applications via iframes or headless React components. Its architecture supports multi-tenant and white-label use cases, making it ideal for SaaS platforms, agencies, and enterprises seeking control over their messaging stack.
What You Get
- Omni-channel messaging - Send automated and transactional messages via email, SMS, WhatsApp, Slack, and mobile push notifications from a single platform.
- Journey Builder - Create event-driven user journeys with multi-trigger conditions using a drag-and-drop GUI that supports branching logic and delays.
- Advanced Segmentation - Build user segments using unlimited AND/OR conditions based on events, subscription status, user properties, and identify events.
- Low-code Template Editor - Design email templates with a Notion-like interface, HTML/MJML support, and Liquid syntax for dynamic personalization.
- Embedded Components - Embed Journey Builder, Segment Builder, and Template Editor directly into your SaaS product via iframes or headless React components.
- Self-hosted Deployment - Deploy on Docker Compose or Render with full control over data, avoiding vendor pricing tiers and ensuring PII stays in your VPC.
- Git-based Version Control - Store and version email templates and campaigns in Git, enabling code reviews, CI/CD testing, and rollback capabilities.
- Testing SDK - Automate campaign testing in CI pipelines with a dedicated testing SDK to validate message delivery and logic before production rollout.
- White-labeling & Multi-tenancy - Customize dashboards with your branding and isolate data between workspaces for SaaS providers and agencies.
Common Use Cases
- Running a SaaS onboarding flow - A B2B SaaS company uses Dittofeed to automate welcome emails, in-app prompts, and SMS reminders based on user actions, all embedded within their product UI.
- Managing transactional alerts for a payroll platform - A payroll company sends SMS and email notifications for pay stubs and tax filings using Dittofeed’s self-hosted infrastructure to comply with data residency laws.
- Building a white-labeled marketing tool for agencies - A digital agency embeds Dittofeed’s journey and template builders into their client portal to offer branded email and SMS campaigns without building from scratch.
- Replacing Customer.io for a devtools startup - A startup migrates from Customer.io to Dittofeed to avoid pricing cliffs and gain full control over user data and campaign versioning via Git.
Under The Hood
Architecture
- Monorepo structure with clear separation between frontend and backend services, enabling independent development and deployment
- Layered backend architecture using Prisma for data access, Temporal for workflow orchestration, and ClickHouse for analytical storage, with dependency injection via configuration
- React context providers enforce single-source-of-truth state management across the UI, reducing prop drilling and improving maintainability
- API contracts and data flows are versioned and strongly typed, reflecting domain-driven design principles
- Infrastructure-as-code with Docker Compose and dynamic configuration files ensures environment-aware deployment consistency
- Observability is deeply integrated with OpenTelemetry and Prometheus for distributed tracing and metrics
Tech Stack
- Full-stack TypeScript monorepo with Next.js and React for the dashboard, Fastify for the API layer, and a dedicated email service
- Multi-tenant architecture powered by Temporal for complex stateful workflows and dynamic YAML-based configuration
- PostgreSQL for transactional data and ClickHouse for high-performance analytics
- Comprehensive testing infrastructure with Jest across multiple packages, supporting both browser and node environments
- Observability stack includes OpenTelemetry, Prometheus, and Grafana with OTLP exporters for end-to-end visibility
- Docker-based deployment with orchestrated services including MinIO, Temporal UI, and PostgreSQL, optimized for enterprise and lite configurations
Code Quality
- Extensive test coverage spanning unit, integration, and end-to-end scenarios with robust mocking of Temporal activities and external services
- Strong type safety enforced through comprehensive TypeScript interfaces and result-based error handling using Neverthrow
- Clear separation of concerns with modular service layers and well-defined boundaries between domains like segmentation and journey orchestration
- Defensive validation and consistent naming conventions enhance maintainability and reduce runtime failures
- Configuration-driven behavior (e.g., blob storage toggles) improves testability and environment adaptability
What Makes It Unique
- Native event property autocompletion powered by dynamic schema inference from real user behavior, eliminating manual schema configuration
- Unified journey editor with type-safe node definitions that enforce data flow integrity between triggers and email actions
- Isomorphic email rendering system that generates HTML and plain-text versions from a single template with built-in personalization
- Shared type definitions across API, dashboard, and email modules ensure consistency without duplication
- Supabase-integrated analytics pipeline that auto-captures user interactions without requiring SDK instrumentation
- Zero-config Docker build system that intelligently packages only necessary artifacts, minimizing image bloat and build times