Campaign Data, Improved WYSIWYG editor π½
- Campaign data feature
- Automatic recognition of Markdown in WYSIWYG editor
- New Code button in WYSIWYG editor with Liquid template examples
- Highlighting of Liquid tags in WYSIWYG editor
- Pretty-printing of embedded form HTML
- Support for Dev Containers
- Updated JS dependencies
- Added size constraint to contact data field (8 KB per contact)
- Simplified UI for campaign editor with settings moved to modal
- Link click statistics are now displayed live while campaign is sending
- Use full URL for embedded form action attribute
API for Contacts & Campaigns, Better Imports, UX Improvements π§βπ»
- API for managing Contacts, Campaigns, Segments
- Swagger UI for API at
/api
- Improved contact import with support for custom data and upserts
- Notifications when leaving pages with unsaved data
- Added
DB_ENABLE_SSL
configuration option
- Updated Oban and Jason dependencies
- Segments with custom data fields can now be edited after saving
- Error display in campaigns without sender no longer keeps reloading page
- Fixed error when creating new segments
- Contact segmentation
- Support for custom contact data
- Allow deletion of sent campaigns
- Improved UI design
- Moved all templates from leex/eex to heex
- Improved Core querying API
- Fixed exception when processing unhandled SES webhooks
- Configuration option to run Keila in a subdirectory
- Login-as feature for admins
- Gzip compression of assets
- Upgraded to Phoenix 1.6
- Upgraded various dependencies, including Ecto
- Replaced Webpack with esbuild
- Default contact status is now subscribed
Contact Activity Log & Bounce Handling ποΈ
- Upon unsubscribing, contacts are no longer deleted from the database
- Contact activity log
- Contact dashboard with subscriber numbers
- Support for Configuration Sets for AWS SES
- Automatic handling of bounces and complaints for AWS SES
- Removed password placeholder texts
- Dockerfile and sample docker-compose configuration are now compatible
- Template now fully compatible with Outlook and Windows Mail
- Fixed broken CSV template downloads
- Improved template display in WYSIWG editor
- Fixed broken styling on non-authenticated routes
- Improved onboarding experience with empty states for all views
- Improved dark app design
- Stricter code-checks in CI
- Default template is now displayed correctly in campaign editor
- Paddle webhooks now have improved idempotency
- Added click/open tracking for campaign emails
Precedence: Bulk
header now included in all campaign emails- Implemented per-instance
SharedSenders
- Implemented Shared Senders for AWS SES
- Added account and account credits for organizing users and implementing quotas
- Added subscription plans for app.keila.io
- Updated to Elixir 1.12
- Removed email preview text from Cerberus
Template customization & UI improvements
- Template editor for customizing Markdown campaign styles
- Improved index pages for forms, templates, and campaigns
- Updated dependencies, using upstream of
Swoosh
again
- Fixed broken template download links in production
Scheduling campaigns & WYSIWYG editor β²οΈ
- Campaigns can now be scheduled to be sent automatically
- WYSIWYG editor for Markdown campaigns
- Local sender for testing in development mode
- Formatted dates in local timezone now used on campaign overview page
- Removed default email preview text
- Fixed crash when starting release
- TailwindCSS styles are now pruned, massively reducing CSS size
- Default admin user is created correctly when
KEILA_USER
is not specified - Fixed crash when starting release
Simplified deployments βοΈ
- Improved deployment workflow with automatic migrations
- Automatic creation of root user
- Admin panel with simple user management
- Campaigns can no longer be sent twice
First official release of Keila π
This first release implements the most important features to make Keila a viable tool for managing newsletters.
- Editor for plain text + Markdown campaigns
- Sending campaigns with SMTP, SES, Sendgrid, Mailgun
- Signup forms and form editor
- Contact import
- One-click unsubscription