This past weekend, I started working on a prototype to render a Cushion journal post in an email. This is the first step towards a new initiative to email my posts when I publish them. I won’t call this a newsletter, since that’s already tackled by Cushion’s monthly updates, but this will be more of an email-based option for reading the Cushion journal, alongside the blog and RSS feed.
I’m especially excited about this system because I think it’s a better fit for the journal than a blog that simply lists everything I’ve ever written. I want folks to follow along as if they’re receiving postcards from me while I’m on this “incredible journey” (puke, but I had to). I also want folks to feel free to respond once they’ve finished reading a post. Lastly, I simply want to build the system, to see what it takes. Surprisingly, I don’t prototype as much as I’d like to, so I’m using this as an excuse to spin up a quick scrappy system. If I can do this without taking forever, I’ll feel better about spinning up other quick proof-of-concepts for random ideas. To contrast with Cushion, I don’t want to be precious about this prototype—I just need it to work.
As for making it work, I’m relying heavily on mjml to handle complexities of coding HTML emails—a dark art, if there ever were one. I already finished the email renderer, which uses the same data from my Contentful CMS, but renders using mjml instead of Vue. I wrote a serverless API function to preview the template by piggybacking Cushion’s marketing site, which is hosted on Vercel. Shockingly, this was as simple as writing a file in the
/api directory—exactly the kind of scrappiness I’m looking for versus setting up an entirely new repo, app, etc.
From here, I’m planning to build a sidebar extension in the CMS with a big ol’ button to send all the emails. This does require a hosted “app”, but because it only needs to load a frame, I could also host this on Cushion’s Vercel site. I’m especially excited about building the extension because it’ll be the best UX for me—sending out all the emails without leaving the authoring environment I wrote the post from. :chefkiss:
I’m going to send the emails using Postmark, which currently handles Cushion’s transaction emails, but recently added support for batch emails. Similarly to rendering the email template, I can write another serverless function on Vercel to query the email list and send the emails. Maintaining an email list will require its own database, so I’ll have to spin one up. However, I’m definitely not paying $50/mo for one on Heroku, so I’ll need to find a cheaper option—at the end of the day, it’s just a single table of email addresses.
Once I have everything up and running, I can actually migrate an existing email list of mine from TinyLetter. A few years back, I sent weekly emails in between the monthly ones, and I used TinyLetter as a low-lift system. For individual posts, this would be a tiresome manual process (not to mention TinyLetter’s shaky future—even with the follow-up), but this list is not insignificant, so I can continue where I left off. I do realize that a few years have passed between emails sent to this group, so I definitely plan to send an initial email detailing the new approach and offering a quick unsubscribe for those who aren’t interested (or more likely, don’t remember signing up).
In the back of my mind, I do worry that this might be yet another distraction from making progress on the app itself, but I do believe there’s value in both the system and the experience I’ll get out of spinning it up. Hopefully, it’s a success, as a way for me to grow my readership, but I also hope that it makes me prototype more instead of investing so much from the get-go. Regardless, I’m excited.