How to Start Your Blog in 2023
molodtsov.me
molodtsov.me
I had a self-hosted WordPress blog from 2006-2010, but security updates become a burden, especially since I had to modify the WP source code a little to do exactly what I wanted with the RSS feeds.
After a few years of not blogging at all, I decided to use the simplest possible "system", which is writing blog posts in raw HTML in a text editor, as well as writing the RSS feed in raw XML in a text editor. It's not pretty, but it's zero maintenance. I've been doing that for 10 years now, and I don't think I'd ever go back to a third-party dependency.
I should mention my other motivation: occasionally one of my blog posts will get massive traffic, such as #1 HN, or getting linked by the tech media. In cases like these, static HTML files are great. My website never gets overwhelmed and becomes unresponsive from the load, even though it's just on a little shared hosted server.
That seems like it'd do the same thing and just take out some of the drudgery.
The answer given:
> to take out some of the drudgery
SSG is third-party dependency in one way.
At the end of the day you have to pull in a SSG from elsewhere and run it.
So from writing to publishing is a short flow.
I’m still ironing out the kinks, but it made blogging way more pleasant for me, after trying a few other things and being unimpressed overall.
But I like to think that, when that time comes, I will be the author of that tooling. As it sounds you are. Kudos!
It suits me well.
What's wrong with you?
In all seriousness I love me some JetBrains's, but boy do they eat RAM like there's no tomorrow.
Still a paying and satisfied customer.
<head>
<title>Title</title>
</head>
<body>
<p><b>2023.02.20</b></p>
<p>This is the first paragraph.</p>
<p>This is the second.</p>
</body>
Save that as "blogpost.htm" somewhere a web server can see it.Add stylesheets and so on as you get more comfortable, but it really is that simple. All that matters in the long run is what you put between the <p> tags.
I should start by saying that I'm not averse to a little "manual labor". I know a lot of people feel compelled to automate everything, and if you're like that, then you wouldn't like my methods at all. ;-)
My entire blog is in a git repository.
I use BBEdit for text editing. https://www.barebones.com/products/bbedit/ It has a full set of HTML tools and templates.
Whenever I want to write a new blog post, I create one from an HTML template that already has a style sheet, header, footer, and other structured info.
All of my blog posts are listed reverse chronologically in a table in the "index.html" file. I just have to create a new table row for the new blog post at the top and fill in the date, filename, and title.
I can preview the blog post in a web browser while I'm writing it, and BBEdit accepts drag and drop of images files, automatically creating img elements.
I also have a template for the RSS feed entries. I use the Atom format FWIW. Each entry has a section where I can copy and paste the HTML from the blog post into the RSS feed:
<content type="html"><![CDATA[ ]]></content> </entry>
I use the W3C feed validation service to check the RSS syntax, and I also subscribe to the local copy of the RSS feed file in my RSS reader app. https://validator.w3.org/feed/
That's about it! My system has become slightly more sophisticated over the years. When I started blogging this way, it was even more primitive. The whole point was to just start blogging, and not worry about my blogging system. It seems that worrying about the blogging system stops a lot of people from blogging in the first place.
I couldn’t agree more, and I’ve been a victim of it myself. This is why I like zero-config setups now. Choosing themes is the most attractive nuisance ever…
I'm also a "tooling minimalist", but I'm curious how you handle things like grouping posts (or do you just not bother?).
Assuming everything's not on a single page, how do you avoid tedious duplication?
As noted in my other comment, I looked for it out of curiosity too, and it's incredibly satisfying to see how fast it loads.
The blog engine itself [2] is one I wrote starting back in 1999, and still in use. It works, does exactly what I want, so there's no reason to change it. And to see it in action: <https://boston.conman.org/>.
[1] You can see an example here: <https://github.com/spc476/mod_blog/blob/master/NOTES/testmsg>. The markup engine is written in Lua: <https://github.com/spc476/mod_blog/blob/master/Lua/format.lu...>.
Imagine how pleasant browsing the internet would be if most sites were like this?
I’m starting to think tech in general is 1% signal and 99% noise…
One day I'll clean it up and offload it to github for others who are like-minded.
Believe it or not, the tool actually even worked with Cygwin after I switched to Windows (on my very first laptop).
[1] https://log.schemescape.com/posts/static-site-generators/pre...
2. Possibly, try to get a domain of your own, and preferably a `.com`. Point that to whichever server you use (if they don't allow you to point, that is a net negative). Keep pointing to the services that you keep moving as they keep dying. One day, you might just end up writing in plain HTML and (s)FTP into a folder.
3. If you are going to use images/audio/video quite a tad more than usual -- start using a CDN (pretty cheap and some are free these days). If those are hosted on https://cdn.mydomain.com, you can move your content wherever you want and those images, audio, video just works. I was able to change WordPress hosting providers in minutes because I don't have to move the static assets.
edit: added the 3rd point.
But honestly, my blog there is not about “engagement”. I don’t really care if anyone reads it. It’s more of a personal journal to blog about the multi year, “hybrid digital nomad” life we started last year.
.net .org .me .io .blog .info
You can make it topical too .expert .engineer .doctor .camera .software
Or have fun with it .lol .wtf .foo
While perhaps not as pervasive as during the 1990s, I still feel like most people are more familiar with / assume / default to ".com" than any of the others.
With .systems I would expect somewhat reduced inbox deliverability but with .icu, .xyz, .top, .live and similar, you can forget about egress email.
> The registrant name and administrative and technical contact information of non-individual registrants, such as corporations, is displayed by default. The registrant name and administrative and technical contact information of individuals, such as Canadian citizens or permanent residents is not displayed in WHOIS per the CIRA Privacy Policy. Generally non-individuals are public and individuals are private.
CA domains have had a privacy default for individuals since 2008. As someone who's received personal threats as a result of WHOIS info, I'd rather stick with the more certain option.
1. Add the image at `content/posts/post-title/image-name.png`
2. Add markdown that references it, like ``
3. Build and push to main, and then the image is available in minutes at `https://<host>/posts/post-title/image-name.png`
Part of the reason I use Hugo is because it's so low friction — the hard part is the writing (and writing consistently), and keeping everything else easy is key.
Jekyll keeps assets separated. Your posts live in _posts. Your static assets live together in a different directory.
I briefly experimented with switching from Jekyll to Hugo, but had too much invested—custom plugins and reliance on existing Jekyll plugins—in the Jekyll ecosystem to make the switch worthwhile.
From its repo: "Pagefind runs after any static site generator and automatically indexes the built static files. Pagefind then outputs a static search bundle to your website, and exposes a JavaScript search API that can be used anywhere on your site."
Pagefind is cool!
https://GitHub.com/fazalmajid/fts5index
Demo: use the search sidebar on blog.majid.info.
But yes, what you describe is how search works on Sphinx-generated documentation sites and is quite impressive technology even before WASM.
And don't get me wrong, I use Hugo as well.
At least don't upload any pics you've taken at home without stripping out the GPS info
It doesn't cost anything and there's no ads. Even linking your domain to it used to be free (sadly no longer true). It has a very decent writing experience and the out of the box design is simple but effective. It has a reasonable amount of customization. It has wide support for apps.
It's part of a network so you get functionality like claps, a comment system, followers, the like. Blogging with a "social network" built-in. It has newsletter support.
I think that's a sweet deal for such low (or even zero) costs. Ultimately I'd think your writing is what the value of your blog is, not the behind-the-scenes technical tinkering. Unless that really is your thing.
Should you be paranoid about Medium going under, there's an export option.
Note that I'm the kind of person that wrote my own blogging software in the early 2000s. Tinkered and managed it that way for well over a decade.
I've given up on it. It's time wasted. Nobody cares about your blog design, it's hard enough for anybody to care about the actual text in today's landscape. Hence, pick your battles, keep it simple.
The mandatory (unless are able to join their program to opt-out) paywall reduces the number of people who can even see your blog
1. You pick a cheap shared hoster
2. You buy a domain and connect it
3. You download a PHP blog system, like Wordpress
4. You unpack the files into the webroot, configure the database (or use a blog system that supports sqlite, like Serendipity [which I develop for])
5. Pick a theme, install a minimal amount of plugins. Optionally customize the theme a bit.
6. Done.
Sure, going with a hosted offering looks easier, but you still have to manage things like your domain, interoperability and backups, so hosting it on your own gets easier very fast.
No need to worry about points 3 and 4, and very little to do for 5.
Backups can be a simple git push.
Put it behind a CloudFlare free tier. Been happy forever after.
--
[0]: https://getgrav.org/
I'm inclined to agree that Grav is a good choice, but it still has the exact same fault as other software out there, notably updates sometimes randomly breaking things in odd ways: https://blog.kronis.dev/everything%20is%20broken/grav-is-bro... (note: typically you shouldn't run software updates inside of containers due to their immutable nature and instead just run a newer version of the container, but if you're working with persistent volumes then there's also really nothing preventing you from doing so)
Of course, if you don't update it, you'll eventually run into security related issues, which is more or less inevitable whenever you expose anything with write access (even when it is technically protected by an username and password; our industry still keeps getting basic things wrong all the time), as opposed to fully static assets: https://blog.kronis.dev/everything%20is%20broken/grav-securi...
Personally, I will probably keep using Grav for the foreseeable future, maybe even some day carry over the theme customizations that I use as well as all of my content to a more recent version, but for now I'm stuck on a comparatively old version that's thankfully a bit locked down at the web server level. Don't get me the wrong way, WordPress will be even worse in regards to both updates and security, I've seen entire sites be brought down because of a single plugin needing an update that's no longer compatible with something else.
If you are already paying for cloud storage somewhere, you might be able to start by saving your writing to a public folder. Instant blog.
Worry about deployment later. The content is a bigger barrier.
The current iteration is optimized around not having it be a source of stress or anxiety for me. Here is my setup:
* I just use self-hosted Wordpress site on a Digital Ocean droplet.
* I made my own theme that strips pretty much everything out: it's one big page with 500+ posts on it, all text. No comments, images, video, anything like that. Minimal markup. Takes less than a second before the page can be interacted with.
* There are no post pages, and no archives (again, just one big page).
* Consequently, you search by pressing cmd-f in your browser, which is so much better than a search widget (and is the main reason I went with this design).
* I make entries whenever I want to, and then queue them up with a plugin that releases 1 post every 4 days, on a schedule. I have 112 posts in the queue, so I could not touch this thing for a year and it would be still running.
* My main goal for the blog is to record things that have happened: diary, commonplace book, repository for movie and book reviews. Not to make money or be a famous thought leader and influencer. I recognize that's not everybody's goal, but with those simplifying assumptions in place, it became super easy to make and maintain a blog.
In my case I use MDX, which is Markdown that allows components (eg React) to be embedded. This is great for interactive content, articles with charts, visualisations, etc.
Which is almost never taken into consideration as an option in this kind of posts.
I don’t think it’s hard to start a blog in 2023. It’s hard to start a blog if you have very strict requirements AND you want to do everything on your own without being a developer/designer.
It's an option, but it's a bad option. Setting up and running a blog is not a one off process. For things like Wordpress there are literally security patches. For most other platforms there are updates. Wordpress has auto-update but it can be flaky, especially if the site owner tinkers with things.
If you get someone else to set something up for you it'll either rot, or you'll be pestering them to update it for you.
If you don't have the technical ability to run something just pay for a service instead.
And you can also simply ask someone every year or so to perform some basic maintenance on your site like we already do for countless other things in our lives.
> you'll be pestering them to update it for you.
Am I pestering my mechanic to perform maintenance on my car every year? No it's called work. It's his job.
I would also recommend spending less than 30 minutes setting up a blog if you have less than 4 posts written. [2]
[0]: https://thrice.me/
Reasons:
If I leave it for 10 years and come back I will know how to maintain it. The tools will exist (especially if WordPress auto upgrades).
If I use some static site gen, I will need to remember all the syntax, use some docker container to run the version I used all that time ago. Even coming back to it after a year can leave me with confusion.
Also WordPress has a brilliant ecosystem of plugins and themes. And if you are worried about security, there are plugins that will pump it out into a static site on S3, if you like, so you can use WordPress to author, and S3 to host.
The WordPress ecosystem can rival most no-code tools too.
Also hosting is ubiquitous, and cheap, and usually simple (open CPanel, hit install new Wordpress Blog).
I guess you could install a bunch of old versions on Ruby, gems, etc. on your machine too, but docker, or a VM might be easier.
Or you could go through, remember how all the code works and upgrade it to the latest versions of everything to run it. Assuming the SSG du jour 2013 is still maintained :-).
I tried to resurrect a 2 year old NodeJS project and gave up trying to upgrade it to the latest versions, NodeJS people really love their major version changes, and breaking back compat for no real reason.
A SSG generated site will be the same in 10 years as its today, even if you might need to fix some things with your project to make further updates.
With wordpress you could export it to HTML as a backup but it is an extra step.
[1] after 15+ years where I wrote my own CMS, wrote my own static site generator, used wordpress, used drupal.
What is it that people are trying to automate?
Content should come first, before worrying about optimizing your static build or tweaking your CSS or moving to Substack or whatever else. That can all be done later when you've found your writing rhythm.
I spent a late-night research session a few weeks back running through many of the main options they mention only to settle on the conclusion that there wasn't something that had the compromise of features, simplicity, and price that I was looking for.
I didn't check out write.as when I was looking into things though, so maybe that'll be my next failed experiment.
"The most popular CMS in the world, and yet I just can’t stand its admin page."
There are some things in there I can't stand, but I said the same thing about Drupal and I used that for 15 years or so.- https://herman.bearblog.dev/building-software-to-last-foreve...
I've written a post about why I enjoy Mataroa a lot: https://pivic.blog/blog/mataroa/
> a static site is a site with no fancy clicky things, signups, comments, just plain html
Technically I think you can have comments via some embedded widget. Each page is still static, but there's a script tag in there that embeds a widget into the page that gives you commenting, usually via some SaaS
I think Disqus was the big one for a while. There was one I saw recently that uses github as the auth provider, which was interesting
I have been thinking about the comments feature. It's like peas and carrots having comments on a blog. I have almost added them before, but didn't for fear it would sacrifice any of the simplicity - which led me to think about modules/plugins. I like the idea of plopping down a folder or zip that the Bearclaw binary then reads and incorporates. Maybe that's feasible, maybe it's not.
I'm going on a walk in a little bit and will give thought to a plugin system. Any ideas you have in mind?
I’ll try to remember to let you know how it turns out after I get it all going..
Also, one thing I'd like to sort out is making the page titles on the pages.html page that it generates not be based on the filename, but on the title of the article so-you-dont-see-stuff-like-this on pages.html.
As of yesterday since I added config variables, I'd like to relocate those to an external file to avoid recompile, and then use those to populate the header so that people don't take time to fill in the config and then still get "Bearclaw Blog" when they fire it up.
I really appreciate the time you're taking to talk this out with me, it's very inspiring and I'm getting lots of ideas. I can't wait to get done with Job 2 today so I can hammer out some of these things :) Thank you
In the end, I chose Ghost's lowest tier. While it is limited regarding the theme choices, I've found that you can customize the free standard themes via their code injection feature[1].
[1]: https://www.shmostert.com/customize-standard-ghost-themes/ (disclaimer: the guide is from my blog)
Customizing themes is also super simple in my opinion, though I've never tried their shared hosting and am unfamiliar with limitations that come from that.
But yeah, that's why I said that if you're OK with the workflow Ghost provides and at least one theme you should probably use it.
Aside from taste being subjective, most of the tools mentioned are customizable. That is, you can tweak the markup and CSS to your own taste.
The post starts being concerned about aesthetics but then finishes with:
"Having the right tool certainly helps, but at the end of the day, what matters is what you write there. Focus more on the content and just ensure the process of writing and posting is simple enough."
Finally, time is money. Spending an added hour (or two) with a build process (or whatever) isn't savings at all. If Goal #1 is to publish then anything that gets in the way should be avoided.
There are some solid points made, but the argument is inconsistent.
I honestly find it more fun to setup my blog than writing content for it... Which might be a problem. (And also explain all the blog posts describing a complex setup).
Some people do this and won't admit it!
And it'd foolish not to say that at the end of the day writing is more important than having a blog that's just beautiful.
There's one niche option I haven't covered there called [Aegea](https://blogengine.me/), which looks good out of the box, but I can't really recommend it based on the way the author develops it: no roadmap, no community feedback, basically no support, yet has paid features.
Seriously, just pick one and set it up. People blog on manually edited HTML files, it really doesn't matter.
I did it because I remember having issues with jekyll installation from time to time, like it suddenly broke out of nowhere, and trying to fix it became a pain.
Then I looked for alternatives and found Hugo, changed the template and installed in all my systems (Windows, Linux, macOS) and it has worked like a charm. Also, the speed boost was super noticeable, like, several times faster.
So if I were to choose again between Jekyll and Hugo, I'd go with Hugo.
edit: on the third hand... i need a place to practice and stay in shape with full stack dev as i'm more of a manager/therapist these days. So maybe something from the ground up is in my future
Plus, it has the added benefit of keeping your front-end skills upto date.
I also use self-hosted WordPress for a hobby blog and like the graphical editor and easy drag drop of images.
I will shamelessly plug my solution: md2blog. You just plop Markdown files into folders and it does the rest, without letting you get distracted by themes.
Edit: addressing the article, md2blog does not support email subscriptions, but it does generate an Atom feed. It also requires using a command line (but the tool is a single binary, so no installation or dependencies to deal with).
That said, I haven't updated my blog in years, and at this point I'm not sure I still know how to! But the good thing about a static site generator, is it just sits there in S3, costing me just $0.14/month.
I want something with a clean, easy to read front end -- that's where WordPress has really struggled, good looking "blog" focused themes.
It is PHP based, works on a cheap limited web hoster.
The concept is: Upload a markdown file plus associated media, and it does the rest for you.
For customisation, you can use Twig and CSS, or a predefined theme (I didn't look into these, I wanted a custom appearance).
For feeds there are plugins, for comments I use a "mail me at post023@mydomain.url" approach.
Yes sir, with my new service you can just type in your Hackernews username and have a fully formed blog launched based off your comments to various posts, all properly dated and archived.
And that’s not all, using the latest and greatest in AI tech, you can have automatically generated hash tags used for categorizing posts.
Why waste time writing a blog from scratch? Have my service build you a full blog today!
just write
stop using tools, just an HTML document is fine.
Lots of features included: RSS, sitemaps, multi author, regular/guests, tags, unlisted/draft, i18n, accessibility, very customizable...
My newsletter is based on it: https://thisweekinreact.com/ I edit content there first in Markdown and then copy paste to ConvertKit
For me, writing outside Notion has become impossible. Notion AI does a fantastic job fixing my grammar and style. My English has always been less than passable and Notion AI does make it much better. I hope they dont make it very costly when they take it out of alpha.
The free version has all functionality, but is restricted in storage space and doesn't come with a nice domain name.
If you want to focus on tweaking the site to your heart's content, go right ahead, but the number #1 component to a blog is...writing.
Focus on that and stop worrying about the rest of the details.
Some requirements:
- Code snippets are pretty and colored, and cover multiple languages
- Posting images is easy
- There's a tool to convert my existing Wordpress articles into it (I have 20+ years of that)
- Ideally, Markdown, but I'd consider similarly intuitive mark ups (I can do HTML but would rather not)
[0] https://ryansouthgate.com/goodbye-ghost-hello-hugo/#im-no-lo...
[1] https://wojteksychut.com/posts/this-domain-is-8-minutes-old/
- My blog lives in a Git repo I host on my own Gitea server.
- I run Working Copy on my iPad to push to/pull from the repo.
- I use iA Writer to edit files in Working Copy.
- Every 5 minutes, a script on my webserver runs `git pull`. If anything changed, it runs `hugo build`, then rsyncs the output to the webroot for my domain.
What I see in iA Writer is my blog’s contents. When I edit those words and `git commit` them in Working Copy, they magically show up on the web a few minutes later.
Edit directly in working copy
Blog repo is on GitHub
When I push to the main repo Cloudflare Pages does hugo build
I wonder if there’s any tools or pipelines for 1 place to write content and then deploy to many platforms based on our config / api keys..
The hard part is sticking to it; content is truly king
EDIT: Fixed. But the battle with the ports and broken default SMTP server settings was hard
I know there are ways around it, but does HN have filters for headlines ending in "in <year>"?
# top (title / url)
news.ycombinator.com##tr.athing span.titleline > a:has-text(/(GPT|blockchain|202[3-9]$)/):upward(tr)
# bottom (stats / comments)
news.ycombinator.com##tr.athing span.titleline > a:has-text(/(GPT|blockchain|202[3-9]$)/):upward(tr) + *Still not sure I'd recommend it, the community can be pretty toxic.
Open source; small but smart team. Highly recommended.
[0]: https://ghost.org/
I take notes in md anyway so hoping that’ll be reasonably ergonomic
E.g., here is DHH's blog: https://world.hey.com/dhh
Too much tracking, too many paywalls, and not easy to relocate your posts to another platform.