From ff3cd5ed5507496149b683d2052cd48431fbb246 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 15 May 2026 12:51:50 +0200 Subject: [PATCH 01/11] Add 'How I Built My Own Newsletter Setup' post (draft) --- content/2026/newsletter-setup/index.md | 189 +++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 content/2026/newsletter-setup/index.md diff --git a/content/2026/newsletter-setup/index.md b/content/2026/newsletter-setup/index.md new file mode 100644 index 00000000..745d63ba --- /dev/null +++ b/content/2026/newsletter-setup/index.md @@ -0,0 +1,189 @@ ++++ +title="How I Built My Own Newsletter Setup (And Why)" +date=2026-05-15 +draft=true +[taxonomies] +tags=["dev", "culture"] ++++ + +A few people asked me how this newsletter is sent. +The honest answer is: I'm still figuring it out. + +Here's the story so far, because the technical bits turned out to be less interesting than the path that got me there. + +## Tinyletter + +For years, my newsletter on this blog was just a small form pointing at Tinyletter. +I never thought about deliverability, bounce rates, suppression lists, SPF, DKIM, DMARC, or any of that. +I wrote a thing, hit send, people got it. +It just worked. + +Then Tinyletter shut down. + +I always wanted something *like* Tinyletter, but more open and more hackable. +Something I could actually understand. +With Tinyletter I had simplicity, but I didn't own anything. +When it disappeared, my list disappeared with it. + +{{ figure(src="placeholder-tinyletter.jpg", caption="TODO: screenshot of the old Tinyletter signup form, or a goodbye-Tinyletter image") }} + +## The fly.io Detour + +People kept asking me when the newsletter was coming back, so I cobbled something together on fly.io. +A small Rust API, a CSV file with subscribers, sending through SMTP. +It worked, technically. +But I never actually sent anything. + +I didn't really know what I wanted to write about, or who I was writing it *for*. +So the list just sat there. +Cold. +Months passed. +Then more months. + +Turns out, a cold list is a problem all by itself. +When you finally do send to a list of people who haven't heard from you in a year, mail providers get suspicious and you can get flagged as spam. +Suddenly your "I'll get to it eventually" newsletter is actively bad for you. + +I learned a lot in that period – the [git history](https://github.com/corrode/newsletter) is a graveyard of half-finished ideas – but the bigger lesson was about the writing, not the code: +I needed a clear idea of *who* this was for. + +I love newsletters like [The Pragmatic Engineer](https://www.pragmaticengineer.com/) because they're hands-on and fact-heavy. +I wanted to do something in that spirit, but with more of *me* in it. +Random thoughts allowed. +Slightly weird tangents encouraged. +I'm a person, not a content pipeline. + +(I've written about this before in [What to Write](/2024/what-to-write/).) + +## The Hunt for a Sending Service + +So now I had a goal, but I needed a service to actually send the mail. +This was the hardest part by far. + +I tried a lot of things. +Mailchimp is bloated and feels designed for someone else. +Other services were either way too expensive for what I wanted to do, or pushed me toward "campaigns" with templates and tracking pixels and engagement scoring – which is the opposite of what I want. + +I just want to send personal-feeling emails to people who said they wanted them. +No tracking. +Proper double opt-in. +Working unsubscribe headers. +That's it. + +Then I found [Plunk](https://www.useplunk.com/). +Open source, fair pricing that scales with your list size, an API that doesn't fight me, and it does the deliverability work I don't want to think about – SES integration, bounce handling, suppression list, hosted unsubscribe pages. +I'm a paying customer now. +No affiliation, just genuinely happy. + +I even sent them a small contribution at one point: [PR #359](https://github.com/useplunk/plunk/pull/359). +Merged in ten minutes. +That kind of responsiveness is rare, and it told me a lot about the project. + +The first real send went out to a thousand-plus contacts that hadn't heard from me in ages. +I was bracing for a wave of bounces and a spam flag. +It went fine. +Bounce rate around 1%, no complaints. +I exhaled. + +{{ figure(src="placeholder-status-dashboard.jpg", caption="TODO: screenshot of `send status` showing the colour-coded bounce table") }} + +## The "This Feels Like Home" Moment + +The setup clicked when I realized I could write issues as plain markdown files in a folder, version-controlled, with a small CLI for everything else. +That's where I feel at home. +Editor, terminal, git. +No web dashboard between me and the writing. + +The whole thing lives in one repo: + +``` +newsletter/ +├── issues/ # one .md per edition (1.md, 2.md, ...) +├── send/ # the CLI I run locally +├── subscribe/ # tiny HTTP service behind the website signup form +└── old/ # the previous fly.io setup, kept for reference +``` + +The CLI is called `send`. Here's what it can do: + +``` +$ send help + +Usage: send + +Commands: + new Create a new issue file and open $EDITOR + list List local issues + lint Check links in an issue (or all issues) + test Send a test email to a single address + publish Publish the issue to all subscribed contacts + status Show contact-list and campaign deliverability report + prune List unsubscribed contacts and (after confirmation) delete them +``` + +Issues are plain markdown. +The first non-empty line is the topic. +Everything after is the body. +No frontmatter, no YAML, nothing to remember. + +The subject line gets built automatically as `corrode v0.N.0 # `. +The major version stays at `0` forever – a small joke about projects that never quite reach 1.0. +(That subject scheme was Simon's idea. More on him in a second.) + +`send publish 2` shows me a preview, the recipient count, and a `y/N` prompt before it actually fires anything off. +`send status` shows me per-campaign deliverability with bounce-rate cells colour-coded against the SES thresholds, plus daily bounces and unsubscribes, so I can spot trouble early. +`send prune` deletes unsubscribed contacts after I confirm, because Plunk keeps them around indefinitely otherwise. + +The signup form on the website POSTs to a tiny Rust service called `subscribe`. +It validates the email, drops anything with the honeypot field filled in, and forwards to Plunk. +No JavaScript on the page. +Plunk sends a transactional confirmation email (double opt-in, basically free). + +{{ figure(src="placeholder-architecture.jpg", caption="TODO: simple architecture diagram — website form → subscribe service → Plunk; send CLI → Plunk → SES → subscribers") }} + +Everything runs on a Hetzner box. +I push to git, [Nixpacks](https://nixpacks.com/) detects the Rust crate, builds it, and the new version is live. +Push to deploy. +It feels almost unfair how easy this kind of thing has gotten. + +Yes, I know I could have used an off-the-shelf tool. +But I've [argued before](/2025/build-it-yourself/) that building small things yourself is one of the best ways to actually understand them – and to keep owning the parts that matter. + +## The Friend Who Told Me What Not To Do + +A lot of what I avoided getting wrong, I avoided because of my friend [Simon](https://github.com/m3t0r) (yes, the same Simon who edits the [podcast](https://corrode.dev/podcast/)). +Simon knows mail. +More importantly, he knows *why* mail is hard, and he was generous with the warnings. +He told me what not to do and explained why. +He also came up with the `corrode v0.N.0` subject line, which still makes me smile every time I send an issue. + +Thank you, Simon. + +## The Bug I Shipped on Day One + +I forgot that the `From:` address actually needs to be a real mailbox if you want replies to work. +The first issue went out as `newsletter@corrode.dev`, which didn't exist as a mailbox. +A kind reader replied to say hi, his message bounced, and he forwarded the bounce notice back to me to let me know. +Fixed within the hour. +Now the alias exists and replies just work. + +You will ship bugs. +Ship them anyway. + +## What I'd Tell You + +If you've been thinking about doing this yourself: do it. +Self-hosting is genuinely easier than it used to be. +There are great open source services for almost every piece. +You don't need to reinvent the deliverability stack – you just need to pick the right tool (Plunk, in my case) and let it handle the parts you don't want to think about. + +I have no idea what I'm doing most of the time. +I'm learning as I go. +It's fun, and that's most of why I'm doing it this way. + +If you'd like a peek at the (somewhat hacky) repo, send me a mail and I'll send you a link. +Or wait until I clean it up a bit and open source it properly. +Probably both. + +Reply anytime. +I read every email. From 9b0102a6cdc9ec92bc812a2441db8113bcd1a2d4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 21 May 2026 09:41:40 +0200 Subject: [PATCH 02/11] Edits, image assets, and typo fixes --- content/2026/newsletter-setup/index.md | 158 ++++++++---------- .../newsletter-setup/raw/plunk-dashboard.png | Bin 0 -> 119310 bytes .../raw/tinyletter-compose-message.png | Bin 0 -> 168683 bytes .../raw/tinyletter-landing-page.jpg | Bin 0 -> 33584 bytes .../raw/tinyletter-shutdown.png | Bin 0 -> 223563 bytes .../newsletter-setup/plunk-dashboard.avif | Bin 0 -> 5599 bytes .../2026/newsletter-setup/plunk-dashboard.jpg | Bin 0 -> 9226 bytes .../2026/newsletter-setup/plunk-dashboard.png | Bin 0 -> 19382 bytes .../tinyletter-compose-message.avif | Bin 0 -> 25151 bytes .../tinyletter-compose-message.jpg | Bin 0 -> 39687 bytes .../tinyletter-compose-message.png | Bin 0 -> 94527 bytes .../tinyletter-landing-page.avif | Bin 0 -> 31965 bytes .../tinyletter-landing-page.jpg | Bin 0 -> 45305 bytes .../newsletter-setup/tinyletter-shutdown.avif | Bin 0 -> 145668 bytes .../newsletter-setup/tinyletter-shutdown.jpg | Bin 0 -> 107405 bytes .../newsletter-setup/tinyletter-shutdown.png | Bin 0 -> 223563 bytes 16 files changed, 69 insertions(+), 89 deletions(-) create mode 100644 content/2026/newsletter-setup/raw/plunk-dashboard.png create mode 100644 content/2026/newsletter-setup/raw/tinyletter-compose-message.png create mode 100644 content/2026/newsletter-setup/raw/tinyletter-landing-page.jpg create mode 100644 content/2026/newsletter-setup/raw/tinyletter-shutdown.png create mode 100644 static/2026/newsletter-setup/plunk-dashboard.avif create mode 100644 static/2026/newsletter-setup/plunk-dashboard.jpg create mode 100644 static/2026/newsletter-setup/plunk-dashboard.png create mode 100644 static/2026/newsletter-setup/tinyletter-compose-message.avif create mode 100644 static/2026/newsletter-setup/tinyletter-compose-message.jpg create mode 100644 static/2026/newsletter-setup/tinyletter-compose-message.png create mode 100644 static/2026/newsletter-setup/tinyletter-landing-page.avif create mode 100644 static/2026/newsletter-setup/tinyletter-landing-page.jpg create mode 100644 static/2026/newsletter-setup/tinyletter-shutdown.avif create mode 100644 static/2026/newsletter-setup/tinyletter-shutdown.jpg create mode 100644 static/2026/newsletter-setup/tinyletter-shutdown.png diff --git a/content/2026/newsletter-setup/index.md b/content/2026/newsletter-setup/index.md index 745d63ba..1ab0949c 100644 --- a/content/2026/newsletter-setup/index.md +++ b/content/2026/newsletter-setup/index.md @@ -1,83 +1,85 @@ +++ title="How I Built My Own Newsletter Setup (And Why)" date=2026-05-15 -draft=true +draft=false [taxonomies] tags=["dev", "culture"] +++ -A few people asked me how this newsletter is sent. -The honest answer is: I'm still figuring it out. +I had a newsletter on this blog for years, but I didn't send a single email for a long time. +This is the story of how I finally got it back up and running, and what I learned along the way. -Here's the story so far, because the technical bits turned out to be less interesting than the path that got me there. +{{ figure(src="tinyletter-landing-page.jpg", caption="The old Tinyletter landing page, now a sad 404.", credits="[Wayback Machine](https://web.archive.org/web/20240229161126/http://tinyletter.com/)") }} -## Tinyletter -For years, my newsletter on this blog was just a small form pointing at Tinyletter. -I never thought about deliverability, bounce rates, suppression lists, SPF, DKIM, DMARC, or any of that. +## The Tinyletter Years + +For years my setup was a small form on the website pointing at Tinyletter, a small newsletter service that was focused on writers. +What I liked about it was the simplicity. +I never had to think about email deliverability, bounce rates, suppression lists, SPF, DKIM, DMARC, or any of that. I wrote a thing, hit send, people got it. -It just worked. -Then Tinyletter shut down. +{{ figure(src="tinyletter-compose-message.jpg", caption="The Tinyletter compose page, showing the simplicity of the interface.") }} + +It just worked. Then Tinyletter shut down. + +A bit of history: Tinyletter was built in 2010 by [Philip Kaplan](https://en.wikipedia.org/wiki/Philip_Kaplan), reportedly coded [in a single day (on Sunday, the 31st of October, 2010)](https://techcrunch.com/2010/11/12/pud-revisits-his-past-launches-an-email-newsletter-platform-with-tinyletter/). + +It got acquired by Mailchimp one year later, and quietly became the de facto home for writers who wanted a personal newsletter without thinking about funnels, segments, or A/B tests. + +Then in late 2023, Mailchimp (now part of Intuit) announced they'd shut it down. +The official wording was that their "business priorities have evolved" and that they were "laser focused on building tools to serve marketers and help small businesses grow." +[But perhaps writers were never the customer.](https://simonowens.substack.com/p/tinyletter-was-one-of-the-greatest) + +{{ figure(src="tinyletter-shutdown.png", caption="Mailchimp's shutdown announcement, late 2023.", credits="[EmailOctopus](https://emailoctopus.com/blog/alternative-to-tinyletter)") }} + +Just before Tinyletter went dark on February 29, 2024, I made a final backup of my subscriber list, but I didn't have a plan for what to do with it. + +## Denial -I always wanted something *like* Tinyletter, but more open and more hackable. -Something I could actually understand. -With Tinyletter I had simplicity, but I didn't own anything. -When it disappeared, my list disappeared with it. +At this point, I became hostile to the idea of using a third-party service. +I looked at all options and bounced off all of them. -{{ figure(src="placeholder-tinyletter.jpg", caption="TODO: screenshot of the old Tinyletter signup form, or a goodbye-Tinyletter image") }} +- **Too expensive.** Most services price per contact and assume you're running a business funnel, not writing letters to people. +- **Too marketing-focused.** Templates, drag-and-drop builders, A/B tests, engagement scoring, tracking pixels. The whole vocabulary is wrong. I don't want to run *campaigns*; I want to send *email*! +- **Not hacker-friendly.** No markdown, no CLI, no API I'd actually enjoy using. Everything happens in a web dashboard built for a marketing team. +- **Not open source.** If the next Tinyletter shuts down, I'd like to keep going without having to migrate again. +- **Tracking by default.** Open tracking, click tracking, pixels in every footer. I don't want to know who opened what. I want to write, you read it (or don't), the end. -## The fly.io Detour +## Migrating to Fly.io People kept asking me when the newsletter was coming back, so I cobbled something together on fly.io. -A small Rust API, a CSV file with subscribers, sending through SMTP. -It worked, technically. -But I never actually sent anything. +A small Rust API, a CSV file with subscribers, and a way to subscribe through the website. +The idea was to deal with the sending later, but at least offer a way to sign up. -I didn't really know what I wanted to write about, or who I was writing it *for*. -So the list just sat there. -Cold. -Months passed. -Then more months. +The list just sat there. Cold. Turns out, a cold list is a problem all by itself. -When you finally do send to a list of people who haven't heard from you in a year, mail providers get suspicious and you can get flagged as spam. -Suddenly your "I'll get to it eventually" newsletter is actively bad for you. +When you finally do send to a list of people who haven't heard from you in a long time, mail providers get suspicious and you can get flagged as spam. +Suddenly your own newsletter can turn against you. -I learned a lot in that period – the [git history](https://github.com/corrode/newsletter) is a graveyard of half-finished ideas – but the bigger lesson was about the writing, not the code: +I learned a lot in that period, but the bigger lesson was about the writing, not the code: I needed a clear idea of *who* this was for. I love newsletters like [The Pragmatic Engineer](https://www.pragmaticengineer.com/) because they're hands-on and fact-heavy. I wanted to do something in that spirit, but with more of *me* in it. -Random thoughts allowed. -Slightly weird tangents encouraged. I'm a person, not a content pipeline. (I've written about this before in [What to Write](/2024/what-to-write/).) ## The Hunt for a Sending Service -So now I had a goal, but I needed a service to actually send the mail. +Eventually, I went back to the original problem: I still needed something to actually send the mail. This was the hardest part by far. -I tried a lot of things. -Mailchimp is bloated and feels designed for someone else. -Other services were either way too expensive for what I wanted to do, or pushed me toward "campaigns" with templates and tracking pixels and engagement scoring – which is the opposite of what I want. - -I just want to send personal-feeling emails to people who said they wanted them. -No tracking. -Proper double opt-in. -Working unsubscribe headers. -That's it. - Then I found [Plunk](https://www.useplunk.com/). -Open source, fair pricing that scales with your list size, an API that doesn't fight me, and it does the deliverability work I don't want to think about – SES integration, bounce handling, suppression list, hosted unsubscribe pages. +It is open source, the pricing scales with your list size, and the API doesn't fight me. +It does the deliverability work I don't want to think about ([SES integration](https://aws.amazon.com/ses/), [bounce handling](https://debounce.com/glossary/bounce-handling/), [suppression list](https://mailchimp.com/resources/email-suppression-list/), [hosted unsubscribe pages](https://docs.useplunk.com/concepts/templates)). I'm a paying customer now. -No affiliation, just genuinely happy. +I'm not affiliated, just a genuinely happy user. -I even sent them a small contribution at one point: [PR #359](https://github.com/useplunk/plunk/pull/359). -Merged in ten minutes. -That kind of responsiveness is rare, and it told me a lot about the project. +I even sent them a [small contribution](https://github.com/useplunk/plunk/pull/359) and they merged it in ten minutes. +This made me feel like I was actually part of the community. The first real send went out to a thousand-plus contacts that hadn't heard from me in ages. I was bracing for a wave of bounces and a spam flag. @@ -85,23 +87,22 @@ It went fine. Bounce rate around 1%, no complaints. I exhaled. -{{ figure(src="placeholder-status-dashboard.jpg", caption="TODO: screenshot of `send status` showing the colour-coded bounce table") }} +{{ figure(src="plunk-dashboard.jpg", caption="The Plunk dashboard, showing the campaign overview and deliverability report. As you can see, I don't track who opens my emails.", credits="[Plunk](https://www.useplunk.com/)") }} -## The "This Feels Like Home" Moment +## This Feels Like Home -The setup clicked when I realized I could write issues as plain markdown files in a folder, version-controlled, with a small CLI for everything else. +I realized I could write issues as plain markdown files in a folder, version-controlled, with a small CLI for everything else. That's where I feel at home. -Editor, terminal, git. -No web dashboard between me and the writing. +Just me, a cup of hot chocolate, my editor, the terminal, and git. +No more web dashboard between me and the writing. -The whole thing lives in one repo: +The whole thing lives in a single repo: ``` newsletter/ ├── issues/ # one .md per edition (1.md, 2.md, ...) ├── send/ # the CLI I run locally -├── subscribe/ # tiny HTTP service behind the website signup form -└── old/ # the previous fly.io setup, kept for reference +└── subscribe/ # tiny HTTP service behind the website signup form ``` The CLI is called `send`. Here's what it can do: @@ -115,39 +116,23 @@ Commands: new Create a new issue file and open $EDITOR list List local issues lint Check links in an issue (or all issues) - test Send a test email to a single address + test Send a test email to myself publish Publish the issue to all subscribed contacts - status Show contact-list and campaign deliverability report - prune List unsubscribed contacts and (after confirmation) delete them + status Show contact-list and deliverability report + prune Delete unsubscribed contacts ``` -Issues are plain markdown. -The first non-empty line is the topic. -Everything after is the body. -No frontmatter, no YAML, nothing to remember. - -The subject line gets built automatically as `corrode v0.N.0 # `. -The major version stays at `0` forever – a small joke about projects that never quite reach 1.0. -(That subject scheme was Simon's idea. More on him in a second.) - `send publish 2` shows me a preview, the recipient count, and a `y/N` prompt before it actually fires anything off. `send status` shows me per-campaign deliverability with bounce-rate cells colour-coded against the SES thresholds, plus daily bounces and unsubscribes, so I can spot trouble early. -`send prune` deletes unsubscribed contacts after I confirm, because Plunk keeps them around indefinitely otherwise. -The signup form on the website POSTs to a tiny Rust service called `subscribe`. -It validates the email, drops anything with the honeypot field filled in, and forwards to Plunk. -No JavaScript on the page. -Plunk sends a transactional confirmation email (double opt-in, basically free). +The signup form on the website POSTs to a tiny Rust service called `subscribe`, which runs on my own server. +It validates the email, and forwards to Plunk. No JavaScript needed. +Plunk sends a transactional confirmation email (for double opt-in). -{{ figure(src="placeholder-architecture.jpg", caption="TODO: simple architecture diagram — website form → subscribe service → Plunk; send CLI → Plunk → SES → subscribers") }} - -Everything runs on a Hetzner box. +Everything runs on a Hetzner box which runs Coolify. I push to git, [Nixpacks](https://nixpacks.com/) detects the Rust crate, builds it, and the new version is live. -Push to deploy. -It feels almost unfair how easy this kind of thing has gotten. -Yes, I know I could have used an off-the-shelf tool. -But I've [argued before](/2025/build-it-yourself/) that building small things yourself is one of the best ways to actually understand them – and to keep owning the parts that matter. +[Building small things yourself](/2025/build-it-yourself/) is one of the best ways to actually understand them and to keep owning the parts that matter. ## The Friend Who Told Me What Not To Do @@ -164,26 +149,21 @@ Thank you, Simon. I forgot that the `From:` address actually needs to be a real mailbox if you want replies to work. The first issue went out as `newsletter@corrode.dev`, which didn't exist as a mailbox. A kind reader replied to say hi, his message bounced, and he forwarded the bounce notice back to me to let me know. -Fixed within the hour. -Now the alias exists and replies just work. +I fixed it and now the alias exists and replies just work. + +## One List, Not Two -You will ship bugs. -Ship them anyway. +While I was at it, I also collapsed my older endler.dev newsletter and the corrode.dev one into a single list. +Both were always written by me, and running two parallel setups never really made sense – same person on the keyboard, mostly overlapping audience, twice the maintenance. Going forward, there's just one newsletter. If any of this isn't for you, you can always unsubscribe and never hear from me again. No hard feelings. ## What I'd Tell You If you've been thinking about doing this yourself: do it. Self-hosting is genuinely easier than it used to be. There are great open source services for almost every piece. -You don't need to reinvent the deliverability stack – you just need to pick the right tool (Plunk, in my case) and let it handle the parts you don't want to think about. - -I have no idea what I'm doing most of the time. -I'm learning as I go. -It's fun, and that's most of why I'm doing it this way. +That would be its own blog post, so let me know if you want me to write it. If you'd like a peek at the (somewhat hacky) repo, send me a mail and I'll send you a link. +It's really not that interesting, but if you're curious about how it works, I'm happy to share. Or wait until I clean it up a bit and open source it properly. -Probably both. - -Reply anytime. -I read every email. +Probably will just take me another few years to get around to it. diff --git a/content/2026/newsletter-setup/raw/plunk-dashboard.png b/content/2026/newsletter-setup/raw/plunk-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..bb20f409a0953c0d27f192a5c498225468a5b408 GIT binary patch literal 119310 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 - {% endif %} {% if page.taxonomies.tags and ("dev" in page.taxonomies.tags or - "oss" in page.taxonomies.tags or "rust" in page.taxonomies.tags) %} {% - include "snippets/codecrafters.html" %} {% endif %} + {% endif %} {% include "snippets/newsletter.html" %} {% if + page.taxonomies.tags and ("dev" in page.taxonomies.tags or "oss" in + page.taxonomies.tags or "rust" in page.taxonomies.tags) %} {% include + "snippets/codecrafters.html" %} {% endif %} {% endblock content %} diff --git a/templates/snippets/newsletter.html b/templates/snippets/newsletter.html new file mode 100644 index 00000000..c39c99e2 --- /dev/null +++ b/templates/snippets/newsletter.html @@ -0,0 +1,123 @@ + + + + + From 3f6806969323a41858e7437589e91b84e475fd01 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 21 May 2026 09:45:04 +0200 Subject: [PATCH 04/11] Style newsletter callout to match site design --- templates/snippets/newsletter.html | 75 ++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 5 deletions(-) diff --git a/templates/snippets/newsletter.html b/templates/snippets/newsletter.html index c39c99e2..dc585023 100644 --- a/templates/snippets/newsletter.html +++ b/templates/snippets/newsletter.html @@ -1,4 +1,4 @@ -