Role-based access control
Native RBAC: Roles, RolePermissions, User-Role joins. Roles are global (admin-wide) or scoped per Customer (department, business unit, regional team). Permission sets are granular — campaign create, list export, sending-server config, plan management. New roles are admin-defined; no need to rebuild the model when your org chart changes.
Activity-log audit trail
Every customer-facing and admin-facing action writes an entry to activity_logs: who did what, when, against which resource. Subscription changes, customer actions, plan-change events, campaign sends, manual subscriber edits. Per-customer audit view for the customer’s own log; admin-wide audit view for the security team’s log. Retention is your call — rows live in your database, your archival policy applies.
Plan-based quotas & entitlements
Each Plan carries four sets of limits: credits, quotas, entitlements, rate-limits. Quotas gate static resource counts (lists, subscribers, automations). Entitlements gate features (allow custom sending server, allow programmatic API access). Rate limits gate per-window send volume. Departmental gating in a multi-tenant install: Engineering on a high-quota plan, Marketing on the bulk-promotional plan, Customer Support on a transactional-only plan.
GDPR right-to-delete cascade
When a subscriber exercises the right to delete, the cascade runs: the subscriber row is purged, send-history rows are anonymised, the unsubscribe is propagated to any connected ad-platform audiences (Facebook, Google) so the email isn’t recreated downstream. Audit-log entry preserves the action (subject ID hashed) so the deletion itself is documented for the compliance trail.
Custom sending servers (private SES, Postal, Exim)
Run sends through a private Amazon SES identity, an on-prem Postal MTA, an internal Exim relay, or any combination. New sending vendors ship as a one-class sending-driver plugin. Useful when corporate policy requires all outbound mail to traverse an internal SMTP relay, or when DLP scanning happens on the egress path.
Standard stack — Laravel, MySQL, Redis
PHP 8.2+, MySQL 5.7+ / MariaDB 10.3+, Redis (optional, for cache and queues). Standard Linux server. Your platform team already runs this stack — no new database engine, no new runtime, no new container orchestration to introduce. Same backup, monitoring, scaling, and patching playbooks apply. Eleven developer docs walk every extension surface.