Photo by Darwin Vegher on Unsplash


  • Org Mode - To write the articles, from anywhere
    • Ox-hugo to parse the articles into Hugo
  • Hugo - For the website itself
  • Firebase - Hosting

Explaining the Stack

I’m lazy, the more hurdles I have to publish a blog post, the harder it is for me to even start writing. To publish something I need to be simple, fast, and easy to write from anywhere, laptop, mobile, or even from handwritten notes.

I use Org mode to write all my notes, professionally or personally. If you are familiar with Markdown, Org Mode is just another Markup Language but on steroids.

Since I’ve been using Emacs, more precisely Doom Emacs, for a while now together with Org Mode to organize my work and life. To use Org Mode to write articles was the most natural transition, even more, after finding ox-hugo an Emacs package that parses Org Mode files to Markdown, that can be used in Hugo.

Why Org Mode

“Org Mode, your life in plain text”

Org Mode is a superset of Markdown. First and more important, Org Mode is just like any other text file, it can be opened and edited anywhere, just like Markdown. Org Mode is also like Markdown as in it is human-readable but more importantly, can be extended as you need it, check all default features here, you can use it for clocking, tasks management, tables, and much more. Org Mode wins over Markdown since it is extensible as you need it to be, an example is that you can also use it for knowledge keeping, with Org-Roam, just to mention one example.

You can’t do all this Markdown so easily but I understand that is unfair since I am using Emacs. However, if you install Emacs solely to use Org Mode, you will be well served, no matter your background or for what you use Org Mode for. Check “Org Mode in the wild” for some examples of uses.

Videos on how to use Org-Mode

Why Hugo

The main reason to use GoHugo is that you create articles in Markdown, in which I can parse them from Org Mode through the use of Ox-Hugo package, there are also plenty of resources, tutorials, and themes for Hugo that makes it easy to build any static website for your need.

Why Firebase

I’ll be honest, I picked Firebase given the reason I explaining at the beggining of this blog post, it is because I am lazy. Deploying a static website to Firebase is one of the easiest ways to deploy, and since I am familiar with Firebase, it was my first choice. Nevertheless, Firebase is the one that is more easily replaceable from this Stack, with the Hugo website being static, you can deploy it to Github Pages, Vercel, Netlify or any other hosting service you prefer.

Steps to publish a new blog post

In an overview the steps I need to publish a new article are the following:

  1. Write article in Org Mode
  2. Parse the article by running a key binding, in Emacs is called key chord, C-c C-e H H
  3. Build Hugo website, for it I only have to run the command $ hugo or $ hugo serve that keeps building the website locally with every new changes
  4. Deploy to Firebase by running $ firebase deploy

In the near future. I am going to add a Makefile so I can run the 3rd and 4th steps in one line. After, I might add a simple CI/CD to simplify even further. But the current setup is so simple that, for now, I don’t feel the need.


While the Stack I use for this blog is unorthodox it is the one that fits me the best, and in my honest opinion, the fastest starting from writing to publishing also, and no less important is that everything can be versioned through git and saved in a remote repository.

Any part of the Stack can be replaceable, you can ignore all about Org Mode and write your articles directly in Hugo through Markdown, and you can go all crazy and use Pandoc to convert a plethora of file formats to Markdown if you are crazy enough.

About the hosting, since Hugo builds a static website, you can deploy the website anywhere you prefer.

Stay tuned for more blog posts on each step of building a blog with this Stack.

Hit me up at Twitter let me know if you have any questions or if you prefer to feel free to schedule a 1 on 1 on