Static blog generator
This blog is generated using Pelican which takes post and page content (written in .md, .rst, .html, etc. format) and uses a set of Jinja2 templates to generate all the needed files for a blog. This includes Atom feed XML files, pages for tags and categories, pagination, and everything else you normally get with a blog.
I picked Pelican back in 2012 mostly because it was written in Python, which is the language I am most efficient in. It is still adequate and I have not found enough reason to go through the effort of switching. However, if I were to start a similar blog from scratch I would likely look at more minimal and efficient solutions like Hugo instead.
I use Amazon S3 to host the output generated by Pelican and all the site's static assets that are not otherwise hosted by a CDN. Amazon S3 provides a relatively cheap solution for storage and hosting of static content. I then have Amazon CloudFront sitting on top of S3 as a CDN and cache layer, which also importantly enables me to use Amazon AWS Certificate Manager to enable HTTPS for the blog. CloudFront also adds gzip compression for most of the blog's content, assuming the visitor's browser supports it.
Amazon has a nice guide on how to setup HTTPS with CloudFront.
Math in posts
I used to use MathJax to render mathematical symbols and equations on this blog. Recently however, I learned about KaTeX which supports a subset of LaTeX but renders quite a bit faster than MathJax, at least based on this comparison.
More importantly, KaTeX can be run offline to produce the output HTML/SVG in advance. Noticing this, I wrote a simple Pelican plugin to process the HTML output of Pelican after successful blog generation and to use KaTeX to process LaTeX expressions and replace them with rendered HTML/SVG. You can find the plugin on GitHub at sahands/pelican_katex although it still needs some cleaning up and optimizing to be user friendly.