DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

Peter Sugihara
Peter Sugihara

Posted on

Mailing: Build, test, send emails with TypeScript and React

Github link

We’re longtime users of Action Mailer and wanted something similar for our typescript/react apps. We didn’t find anything, so we decided to build Mailing. We added some small features that we would’ve liked in Action Mailer, including a mobile preview toggle (with hotkeys), and the ability to send a test email right from the browser while developing. Finally, we went all in on MJML so that we never have to think about nested tables or email clients :)

HTML is simple, why a framework?
Writing raw HTML for emails is a bit like making a website in 1999… table layout, inline styling, no JS at runtime. As modern web frameworks mature it becomes more and more arcane relative to the rest of the codebase.

Why code emails at all?
There are a lot of nice no-code SaaS email solutions these days, but sometimes you want your app to be self-contained or need more automated testability or you want to enforce a design system programatically. I’ve hit all of the above and I’m also just more comfortable expressing layout as code than learning a bespoke WYSIWYG editor.

At our real estate startup, one of our most loved features was an email digest of new properties matching your search criteria. It was a cornerstone retention mechanism and we had a ton of logic (and tests) ensuring that it wasn’t sent twice in a day, never contained the same property more than once in a week, had the properties ordered in a certain way, could be retried on failure, metered sends over time to avoid self-DDOS etc, etc. As we grew and started moving some stuff to Mailchimp and Iterable for marketing to own, product emails with a ton of logic stayed in the codebase where they could be tested.

Without further adieu, please check it out and LMK if you find it useful (or bugs). Thanks!!

Check it out on Github!

Top comments (0)

🌚 Friends don't let friends browse without dark mode.

Good news! You can update to dark mode in your DEV settings.