wmnnd

wmnnd

Keila - Open Source Mailchimp Alternative Built in Elixir!

Hey folks,

I wanted to share with you a project I’ve been working on for a while: It’s an Open Source (AGPLv3) newsletter tool. Think Mailchimp, but written in Elixir and you can run it on your own server.

Check out the website with a little demo video here:

Recently, people have been talking about the PETAL stack - and it fits Keila quite well: It’s built with Phoenix/Elixir, uses Tailwind for styling, and bit of AlpineJS sprinkled on top of LiveViews.

Developing Keila has been a breeze with the amazing tools from our community.

Here are some of the tools I’m using (on top of the usual suspects like Ecto):

Right now, I’m getting everything ready for the 0.1 release. If you’re curious about the code, check it out on GitHub:
https://github.com/pentacent/keila

If you have any questions or suggestions, let me know :slight_smile:

Most Liked

wmnnd

wmnnd

Keila 0.8: Revamped UI, Segmentation, Custom Contact Data, API

It’s been a while since I posted an update about Keila here, but that’s only because I forgot to update this post :sweat_smile:

Since 0.5, there have been tons of improvements to Keila, some of the most notable changes are:

There are also some neat improvements for people running their own Keila instance

  • Login-as feature for admins
  • Automated bounce handling with SES
  • Improved official Docker image
  • Running Keila in a subdirectory

And of course Keila has also been upgraded to Phoenix 1.6 and is now using heex templates exclusively :partying_face:

The Shiny New UI

The Segment Editor

Where’s the code? Can I contribute?

You can check out the complete code of Keila on GitHub. Bug reports, feature suggestions, and code contributions are very welcome :slight_smile:

Is there a demo?

If you want to try Keila in action without installing it, you can check out the managed version for free on keila.io. If you’re interested in getting a subscription, please feel free to PM me.

If you want to install Keila on your own server, check out the installation docs.

GitHub Sponsors

Last but not least, as @Exadra37 suggested in this thread way back in February, you can now also support my work on Keila on GitHub Sponsors :heart:

wmnnd

wmnnd

Keila 0.5: WYSIWYG, Tracking + Hosted Edition!

Keila 0.5 is now out and there have been a bunch of new features since the last update I posted here!

  • WYSIWYG editor for campaigns
  • Send later feature for campaigns
  • Template editor for creating your own email designs
  • Campaign open/click tracking
  • Easier initial setup + improved dark theme

There’s now also a hosted version of Keila available on https://www.keila.io/try.
You can try it for free!

If you’re interested in getting a subscription, feel free to PM me first :slight_smile:

Let me know if you have any questions or suggestions! Bug reports and code contributions on GitHub are also always welcome :slight_smile:

wmnnd

wmnnd

Keila 0.15: MJML Support, Double Opt-In

MJML Support

This release includes full support for creating emails with MJML. Currently, I’ve integrated a code editor (based on Codemirror) and a live preview with LiveView. Rendering MJML is done via the mjml package which uses the Rust implementation of MJML (mrml).

MJML Editor and preview

Custom Signup Fields

You can now configure custom fields in the Keila Form Builder. This was an interesting feature to build, because I wanted to be able to use Ecto for validating the custom fields, but Ecto doesn’t support string keys (only atom keys). That’s why I ended up building an EctoStringMap module which allows casting params into a map with dynamically defined string keys. Check it out here: keila/lib/keila/contacts/ecto_string_map.ex at eabf9b3896ab17d38f1c253c95dcb1699c3637a9 · pentacent/keila · GitHub

Newsletter form with custom fields

Double Opt-In

Keila now has support for double opt-in which requires users to verify their email when they sign up.


If you have any questions or want to help out, let me know :slight_smile:

Where Next?

Popular in Discussions Top

PragTob
Hello everyone, I know we had quite some threads (read through lots of them) about background job processing but it remains a hotly deba...
New
Donovan
Hello everyone, I’m so glad to have discovered this awesome community. Thanks for creating it! This is my second post, and apologies for...
New
sashaafm
I’m trying to evaluate the best combo/stack for a BEAM Web app. Right now I’m exploring Yaws a bit, after having dealt with Phoenix for a...
New
pillaiindu
In django there is a cache framework backed by memcached. Rails also puts a lot of emphasis on caching, and even the idea of russian-doll...
New
mmport80
I have put far too much effort into Dialyzer over the last year or so - and basically - I doubt it’s worth the effort. It’s not as easy ...
New
mmmrrr
Just saw that dhh announced https://hotwire.dev/ Is it just me or is this essentially live view? :smiley: Although I like the “iFrame-e...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 39297 209
New
eteeselink
Hi all, In the last days, two things happened: A blog post titled “They might never tell you it’s broken” made the rounds. It’s about ...
New
klo
Got a question about when to concat vs. prepending items to list then reversing to achieve appending. So i know lists boil down to [1 | ...
New
opsb
We’re considering our architecture from a viewpoint of scaling our traffic heavily over the next 6 months. Our current deployment is runn...
New

Other popular topics Top

malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New

We're in Beta

About us Mission Statement