Background
I made this blog on a serious budget. After ditching Ghost as a platform for several reasons. I began digging into free hosting/blogging solutions, and had a difficult time finding anything solid. Eventually, I settled on GitHub Pages. Unfortunately, it came with a few caveats that frustrated me. Since I’ve been asked a few times, I will explain what issues I hit and how I worked around each issue.
The Problems I hit
- GitHub Pages only allows static content, so blogging is difficult at best and ends up being a lot of markdown.
- At the time, they did not support user-provided TLS certificates if you used a custom domain. They finally added support for that about a year ago.
- GitHub Pages doesn’t provide some of the advantages of self-hosted options, such as running mailservers and new post subscriptions.
Static Content
This was solved using a pretty heavily modified version of the Moon Jekyll Template. This template allowed me to aggregate posts into a nicely formatted list and actually have something that resembled a blog.
Sadly, working in markdown can make layout and visualizing posts somewhat difficult, especially with Jekyll’s metadata at the top of the file. I am still working on a final solution for this, but so far I have been using Dropbox Paper, which supports exporting to markdown: https://help.dropbox.com/paper/export-docs
Later I began adding metadata using https://prose.io, which I have found somewhat clunky, but functional.
With this post as my first test, I plan to start using a python script I hacked together to generate metadata tags based on exports from dropbox paper, filenames, or some combination of both:
https://gist.github.com/Plazmaz/1a3ba0348a08972e7144ba6c76933842
TLS/Caching
The TLS and redirects from HTTP are handled via Cloudflare. I use page rules to redirect my old blog subdomain, blog.dylankatz.com, to just dylankatz.com, just because there’s some old links floating around using that subdomain. I also redirect all dylankatz.com/* pages to HTTPS versions. Additionally, Cloudflare provides caching and some basic statistics.
As a mailserver, I opted to use mailgun for both sending and receiving mail. I also configured gmail to send from my @dylankatz.com email by default using the method described here:
https://simplyian.com/2015/01/07/Hacking-GMail-to-use-custom-domains-for-free/
Subscriptions and RSS
For subscriptions, I use https://github.com/jekyll/jekyll-feed to generate an RSS feed, which I then pipe into Feedly, which allows interested readers to follow this blog!
Summary
Using a pretty small set of free tools and some tricky methods, I am currently only paying for my domain name, and have a pretty pleasant blogging experience, as well as a place for my portfolio and personal site. Hopefully this will be helpful to anyone looking for a way to host a blog on the cheap using GitHub pages.