Why I moved away from Hashnode
If you’re not new to my blog, you may have noticed that I have migrated my blog to a much more minimal static website that’s not hosted on Hashnode anymore. This change is somewhat reflective of a larger change in the type of software I use, which is why I thought it might make an interesting article.
The free web used to be free(er)
I started using the Internet regularly in about 2014, when I joined the Scratch social coding platform for kids. The mid 2010s were a great time to be online - resources for learning and communicating were available widely for free. I spent a ton of time exploring different website building platforms, teaching myself how to write code, and experimenting with cool ways to represent my online presence. The Web felt like a relatively small place, too - people were commonly maintaining their own blogs and personal websites, and I loved exploring them and seeing how each person wanted to present themselves. Every site and blog I visited had a different style, layout, and theme, and it was easy to personalize. My first personal site was on Wordpress.com, where there was an abundance of themes to choose from and plenty of customization options. I was also able to create multiple sites and experiment with them. Wordpress was nice but also somewhat limiting, as all you could do outside of the themes was tweak CSS in a tiny, non-formatted <textarea> field. This led to me moving over to Blogger, Google’s blogging software. Blogger opened me up to custom HTML templates where I could tweak each and every aspect of the layout, styling, and design. I was like a kid in a candy store - all of this, for free? Blogger ended up being the platform that really got me into web development, and I used it for several years before building my own site with raw HTML and CSS.
Now let’s look at the web today. The concept of personal blogging is all but extinct from the public consciousness, replaced by the algorithmic social feed we all hate but can’t seem to tear ourselves away from. If you’re not someone with a lot of technical experience, it’s getting increasingly more complex to have any kind of presence on the internet outside of being tied into a predatory social media ecosystem. The advent of LLM agents on the Internet has also made it a very different place, with more robots reading, writing, and interacting with content than humans. Free plans for website builders and web hosting are much harder to find, and have generally become more restricted. I think anyone who was around during that golden age of the Web in the early to mid 2010s is longing for a renaissance of the smaller, more intimate Internet of webrings, personal blogs, and a bit more privacy.
Unfortunately, that throwback is not coming easily any time soon. Big tech companies are earning millions on selling user data from those who use their free services by doing targeted advertising and profiling. Especially in the United States, where governing bodies can’t seem to find a way to federally legislate user privacy rights, there isn’t much hope for things to get better.
“Free” platforms almost always decline
Hashnode is a developer-centric blogging platform. I joined Hashnode somewhere around 2022, when it was still somewhat of a startup. Their proposition was simple: you get a free blog on your own domain, you own your content, you can sync it with a GitHub repository, you can add custom CSS, and your content is optionally federated from your blog onto a universal feed on the Hashnode platform. For a while this was great. I kept my blog there (with minimal activity) for several years. However, I decided to get back into writing this year, and when I came back to look at Hashnode this year, I was disappointed to see that most of my favorite features had been paywalled. Custom domains and GitHub repository sync were the two most significant paywalled features, but even worse was the fact that other features had been removed entirely. Custom CSS is no longer a feature. The ability to separate your blog from Hashnode’s feed by default also no longer exists. You can still technically do it, but you have to manually toggle the switch for each post before you publish it.
I was confused at first about why Hashnode would have made these decisions, especially when they’re things that they should have known would cause developers to be displeased with the platform. Then I did some research and found out that Hashnode is a company fully funded by venture capital.
VC-funded companies are annoying
The idea behind venture capital makes sense - investors putting money into an early startup hoping to strike gold with something super profitable. Practically though, it tends to create companies that get big quick and crash hard. Hashnode is not at all alone - I’ve used a ton of VC-funded products that started out with really neat ideas, got their funding, and then weren’t able to be profitable enough for investors and ended up ruining their products with bloat and rapid paywalling. This is in my opinion less the fault of the startups, but more so of the system that allows them to expand so rapidly instead of growing naturally.
I am personally tired of tying my content and my workflows to tools that are propped up by venture capital, simply because I don’t want to be burned when a product shuts down or gets worse because it can’t fulfill its promises to its investors. I first realized this was an issue about a year ago, and since then I’ve been doing my best to make the most important products that I use on my computer either open-source or provided by established companies with secure profit margins. This mindset is one of the (many) things that makes me so hesitant about the use of generative AI. Every single GenAI company out there right now is dumping way more money into developing LLMs and diffusion models than they’re getting back from users, and the vast majority of these companies are fueled by investors who believe that at some point, AI will do something so revolutionary that it has to pay off. All of this led into my push into self-hosting (which I hope to write about more soon), and also my migration of this blog.
Moving wasn’t hard
I’m a big JavaScript fan, which most developers would disagree with me on, but I love it. It’s an enjoyable language to write, it has a great ecosystem, and it’s constantly getting better. We’re in a sort of golden age of JavaScript frameworks right now - a stage where library authors are utilizing the existing web platform APIs to create frameworks that enhance the process of building websites instead of reinventing the wheel. Astro is one of my recent favorites. It’s compatible with existing frameworks like React and Vue, but it also lets you use vanilla JavaScript combined with JSX within its .astro files. It has native support for Markdown processing, making content management for a small blog super easy. It leverages existing web APIs like Web Components and the Request/Response APIs instead of custom handling like React Server Components. It’s lightweight and easy to get started - so easy, in fact, that I built this entire blog, imported some of my old articles, and deployed it to Cloudflare Pages in a single afternoon!
After some cleanup, I do plan on open-sourcing both the blog’s source code and content. The code will be MIT licensed, and the posts will be under CC BY-NC-SA.
Why not self-host a blog?
I don’t think blogs should be distracting. I come to them to read, and so my main priority is just to get to the content as fast as possible, with as little overhead as possible. I could have hosted this on my own personal server, but that would have made me solely responsible for uptime, security, ISP speeds, etc., which is just unnecessary. The code and content both live in a private GitHub repository that I have mirrored to my home server, so even though Cloudflare hosts it, I have complete control over my content. I’ll definitely be writing more about self-hosting in the future, though.