Coding your own static blogging engine

2022-05-09

See all posts

As you can see from my last post, I decided to blog again.

I had used Jekyll for my last blogging attempt back in 2014 and absolutely loved the simplicity of static site generators. They allow you to render your site locally and do not require the use of a dynamic backend like, e.g., wordpress. That means you can easily deploy your site on something like GitHub Pages.

There are numerous feature-complete and solid static site generators out there: There is Hugo, Jekyll, Hyde, Pelican, and many others. If you want to learn more about static site generators, Cloudflare has a pretty nice post covering the topic.

However, this time, I wanted to try something different. Inspired by Marco Arment, Casey Liss and Brent Simmons, I decided to code my own blogging engine for fun: Panda.

In fact, the article you are reading right now is proudly generated and deployed by Panda.

A waving panda

Panda salutes you!

Panda is an extremely simplistic blogging engine consisting of only a single shell-script and it relies heavily on pandoc.

Here is an excerpt from Panda's README:

Extremely simple static blogging engine (requires pandoc)

Why the name?

If you want to try out Panda for yourself, just clone the repo and add your posts in the posts directory, adhering to the following naming format:

YYYY-MM-DD-Your-Title-Goes-Here.md

Panda supports simple front-matter for your posts, e.g.:

---
title: "Your Title Goes Here"
description: "Your description goes here."
date: 2022-05-09
language: en-EN
---

Write your markdown below the front-matter and Panda will render your post and all .md files in the root directory automatically with:

$ ./build.sh

I do not recommend it for production or anything other than prying eyes. Panda is most definitely a blogging engine with an audience of one. Despite everything, I am thrilled with how well Panda works for me! I will definitely use it for writing interesting content for this blog (hopefully!) and keep improving it as I go.

For instance, Panda does not yet support atom/rss feeds. I might add this and other features in the future.