How I Set Up This Blog
Template
I used Tailwind UI's Spotlight template. However, if you want to use it, you'll have to pay for it (I have found Tailwind UI to be an excellent investment). Some people will prefer their design to be unique, but I'm satisfied with something that looks nice and lets me focus on content. If you don't want to pay for Tailwind UI, Netlify also has starter templates that you can use. If you Google around, I'm sure there are plenty of other Next.js templates.
Comments
I believe that comments are important. I decided to self-host Discourse (see notes below about email setup on port 465!) for comments because you can easily create new posts automatically and embed them on your blog. I tried Commento, but the layout broke on mobile. Self-hosting Discourse is cheaper, too ($7/mo on Digital Ocean), and since it's meant to host whole communities, it has a battery of valuable features.
Transactional Email
Discourse requires a functioning email for user registrations, etc. I used DreamHost, which has very reasonable prices and configurations for simple use cases. Also, if you register the domain name on DreamHost (or transfer it), then it configures DKIM and SPF for you.
One weird thing: Discourse doesn't support port 465 for SMTP correctly out of
the box. After a bit of digging, I found that you need to set
DISCOURSE_SMTP_FORCE_TLS: true
in your containers/app.yml
(search for other
DISCOURSE_SMTP
settings to find the appropriate place to set it). After
setting this, you'll need to rebuild (cd /var/discourse && ./launcher rebuild app
), which takes a while (it took like 30-45 minutes for me).
Mailing List (Marketing Email)
Most marketing email services want you to have a registered company with a physical address that they can verify before you can set up a mailing list. Obviously, this is not ideal for a personal blog. They also tend to be expensive with fairly limited free tiers; for example, MailChimp insists on adding a banner to the bottom of all your emails in the free tier.
I used follow.it instead. It was painless to set up, did not require a physical address, and can pull new posts directly from your RSS feed, which makes publishing effortless.
Deployment
I Deployed to Netlify, which was free and easy.
That's it! I hope that this saves someone some time. It took a little while for me to find a good combination of services. I took a lot of inspiration from Coding Horror.