Emacs and Org Mode to Manage a Website
A funny story happened to me recently. I accidentally deleted my Hugo-managed website from a local drive. Not a big deal. I had a backup copy in a git repository and on a backup drive. However, I saw this as an opportunity to move my notes and posts from Apple Notes to Emacs org-mode. Although I had tried to use it before, I struggled to find an effective way to use it in my daily routine.
But this time it was different.
Spacemacs is an exceptional starting point with sane defaults and all the features I need. Everything works as expected right out-of-the-box.
I whipped up a quick prototype over the weekend: Emacs generates a website from org pages and copies static assets such as css files and images.
Lastly, I decided to migrate off Plausible. I like this tool a lot, but my static websites have approximately 5k visits per month, and I can process .log files with a simple script. VisiData is an amazing tool to visualize data and automatically generate pivot tables.
Makefile handles most common operations:
make build
: incrementally build a websitemake serve
:caddy
serves website on :1313 portmake publish
:rsync
a website to remote servermake stats
: show visits, requiresjq
andvisidata
make watch
: watch files and automatically rebuild a website after they change, requiresentr
make clean
: clean up
I uploaded files to a repository: https://github.com/oneearedrabbit/emacs-website-publisher
I could have used Terraform to configure the server, but right now it is done manually:
- Cheap DigitalOcean instance, install Arch: https://wiki.archlinux.org/title/Arch_Linux_on_a_VPS
- pacman -S rsync caddy ufw
- sh -c 'curl https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service > /etc/systemd/system/caddy.service'
- chmod 644 /etc/systemd/system/caddy.service
- ufw allow proto tcp from any to any port 80,443
- edit /etc/caddy/Caddyfile and modify root * /srv/http/example.com
- systemctl start caddy
I long for the days when hosting my own applications gave me a greater sense of connection to the tools. It breaks my heart to see the shift and the loss of that intimate connection with the digital life. I refuse to be the consumer.
However, as much as I enjoy this journey, I feel like a part of it is missing until I can finally have my very own RPi connected to Internet running quietly in a cozy corner. One day, but not today.