Website Version 4.0

Today, I am launching a new version of this website. Version 4.0 of this site represents a significant departure from the look and feel of FAB INDUSTRIES that I established when I relaunched my personal website in July of 2018 in preparation of me going freelance. This new website project, which I replaced my old blog with back then, was my first attempt at hosting a static website. Ever since 2018, this website has been built using the static site generator Hugo. Since 2020, it has been deployed via Netlify. I've tweaked the look and feel of FAB INDUSTRIES continuously over the years, including with some major updates to the theme. That last big update was version 3.0 last year.
My Hugo Odyssey
While I still love static sites — and deploying them via Netlify — I have soured on Hugo in the last year or so. Despite its claim of being “the world’s fastest framework for building websites”, Hugo has been getting slower and slower for me. At a rate that does not seem to correspond to the growing complexity of this, rather extensive, website. My site has been growing at a pretty steady rate, while Hugo has been getting almost exponentially slower for me over the last twelve to twenty-four months. Hugo's decision to render sites to disk instead of to RAM didn't help matters. Sure, I switched it back, once I figured out that a) my site was suddenly being compiled much slower, and that b) this was because the process was bottlenecked by disk I/O1, but it still rubbed me the wrong way. Don't break things that are working because you have an idea that probably only sounds great in your own head and your developer/maintainer echo chamber. At least do some testing first.
There are other issues with Hugo. The shoddy documentation being one, but I can work around that and I obviously have for years now. What I find worse is the feature bloat. Hugo grows bigger and more complex by the day and none of the stuff that is being added is stuff I need. On the contrary, the constant changes and deprecations mean that all it does is make my compile times longer and occasionally, when I update my Hugo version again, my theme breaks and Hugo starts throwing around error messages that I need to spend precious time to fix when I could be writing. And all because of features and changes that I don’t want and that add things that don’t do anything for me.
I'm not the only one feeling this, except I have the additional issue that I don't buy the claim from the Hugo devs that their software is incredibly fast. In my experience, it simply isn't. Compiling Markdown into HTML files isn’t rocket science. Even if there are a lot of files.

I have come to the conclusion that a lot of the issues I have been having with Hugo are due to it becoming something that I don’t want. Its developers seem to want to develop it into a jack-of-all-trades system to create everything you could possibly do with a static website, while I seek a simple tool that enables me to quickly and efficiently built my own, very specific website. I want the site to be as simple as possible for visitors and I want a simple tool on my end that builds that site. This is why I started looking for a new static site generator.
A More Hands-On Approach
I took this opportunity to scratch another itch I’ve been having lately: Instead of adapting a pre-built theme for whatever system I was going to choose, I wanted to built the HTML/CSS framework for the new version of this site as much myself as was feasible for me. Partly because I wanted more control over how things look and feel around here, and partly because I wanted to see if I can still do something like that. And the attempt has indeed pleasantly reminded me of my time building websites in the late ’90s.
Luckily, I found a small software project that allowed me to both switch to something much simpler than Hugo and also afforded me the opportunity to be more hands-on in building the look and feel of the site without having to learn a complicated templating language that requires me to understand all kinds of bells and whistles that I will never need anyway, but that I now need to code around. The solution I found has the added bonus that it uses Lua for all the parts of the software that I interact with in building my site, which is something that appeals to me as I both really like Lua and have been coding in it a lot recently.
The software I found, the static site generator that now creates this site, is called luasmith and it is a really nifty little gem of a tool. It is a single C library that uses Lua as a templating language. Like Hugo, it converts Markdown files into static HTML and CSS, but unlike Hugo, it is a simple binary with no runtime dependencies that's only a few hundred kilobytes in size. And it even has a link checker and syntax highlighting built in. In the last few months, I've been digging through the project (the documentation is still very rudimentary) and have worked to adapt one of its built-in themes to the site you see before you today. I even got a bug fixed in the project in the process.
Aside from the use of Lua, I especially like two things about this software:
- It is explicitly limited in scope. It wants to be a small tool that does what it does really well instead of wanting to do everything for everyone.
- The way it is built means that, even if it is abandoned tomorrow and even if I can’t figure out enough C to fix things myself (which is likely), I can still keep using it — probably indefinitely.
One frustration I have with the JavaScript ecosystem is that it's constantly changing. Node, Deno, and Bun do a respectable job of keeping old versions around, but I don't want to have to worry about breaking changes.
On the other hand, C changes very slowly, and previous versions of Lua are essentially set in stone. Throw in some static linking, and you've even got an artifact that should stay usable for a long time.
I love this approach to software development! It is very refreshing nowadays.
Downsides of the Switch
I've enjoyed building this new version of the site with luasmith a lot. But one of the downsides of it is the fact that it doesn’t have a built-in development server, like Hugo has. While it is possible to preview the website structure that luasmith builds by navigating to the directory of .html files with a file explorer and opening them manually with a browser, that isn’t exactly user friendly and also comes with some issues as some things break or won't behave like they will when the site is live on the web. Therefore, I kind of built my own development server using Static Web Server and some simple batch scripts.
The first script, fx-compile.bat simply builds the website. It deletes my output folder for the baked website content and then regenerates the site by running luasmith twice to create the English and German parts of this website (which you can switch from the ⇆ link in the site header).
@echo off
setlocal
cd ..
cd fx-public
rd /s /q public
cd ..
cd fx
.\luasmith.exe theme\en\theme.lua
.\luasmith.exe theme\de\theme.lua
The second script, which I called fx-serve.bat, does the same thing, but then also spins up a webserver on localhost at port 8787 that serves a local version of the website.
@echo off
setlocal
cd ..
cd fx-public
rd /s /q public
cd ..
cd fx
.\luasmith.exe theme\en\theme.lua
.\luasmith.exe theme\de\theme.lua
.\static-web-server.exe --port 8787 --root ..\fx-public\public\ --log-level info
Once I've changed some of the Markdown files that make up the source code for the site, I regenerate my preview version by killing and restarting the server script. Since the server script tends to bury warnings from luasmith, I run the former script once in a while to see if the link checker flags up any mistakes I’ve made in linking pages or images. There's no live reload, like Hugo has, but I can live with that. I'll take lean code over that small convenience any day.
There are some downsides that come with this switch. Some of them affect you, the site visitor, but those should be temporary. I've been working on learning the new tools and designing this site for a few months now and I was quite anxious to finally take the new site online for a while now. Me pulling the trigger to put it online now, though, does mean that a lot of content from the old site isn’t online yet. I will continuously add old stuff until all the old content is back, though.
Since I've taken the opportunity to also change some of the site structure to better fit my current needs, we will have to live with some dead links, too. That can’t be helped. But I am actively working to make the content on the site more discoverable, so that should probably at least alleviate this issue. Plus, the fact that I’m running a very simple static site that’s pure HTML should help massively with making everything very searchable via search engines.
I don’t know yet if luasmith is faster than Hugo in rendering the site, as much of the content of the old site, as mentioned, hasn’t been imported yet. But I do have a sneaking suspicion that, in the end, luasmith will be faster. Even if Lua should technically have a massive disadvantage against Go when it comes to pure processing speed. The much leaner code might win out in the end, though. We will see. But even if it is slower than Hugo, the speed issue might have been the one that initially annoyed me and made me look for an alternative, but in the end, luasmith won me over with attributes that I now, after working with it for a few months, find much more important and compelling. Like being able to built this website in perpetuity without ever having to touch the software that is doing it if I don’t want to. Or the simple joy of having a templating language that I am able to understand, using a programming language that I actually enjoy writing stuff in.
The New Website Look and Feel
The website that results from all of these extensive behind-the-scenes changes is a much simpler one. Unlike in previous updates to the site, where I’ve continued to introduce complications, with version 4.0 I aim to reduce them. I am trying to practice what I preach here, taking my criticism of Hugo to heart for my own project. Less bells and whistles hopefully means I can concentrate more on what actually matters: the content.
For one thing, there’s not a single line of JavaScript on the whole site. All the effects2 are done purely in CSS. Which is a pain to develop, no doubt, but it is also very cool what you can do with it these days. And not having to load JavaScript is always a worthy goal, in my opinion. I've also done away with any third party embeds, so everything you will find on this site is under my control.
Security & Privacy
Not loading any JavaScript or any code from any other domain should make this site as secure as a website can possibly be. The site, naturally, also doesn’t put any cookies or other hidden files on your system. My code doesn’t track you at all. The only information that is collected on you upon visiting this site is what my hoster Netlify gathers to provide some very rudimentary, and unintrusive, visitor statistics. This site is basically a relic from the ’90s, before the internet became corrupted by commercial interests and all the tracking that came with that.
Design
Speaking of the bygone times, I've also created my own site design based on my own palette that recalls ’70s and ’80s aesthetics. A reader has called the resulting look “rusty and industrial” and I think that’s pretty spot-on. With the new design and the new colours, I’ve made the decision to simplify things and only have a dark theme. I’ve designed it in a way that should still make it print well and I feel that having a dark-theme-only site is relatively uncontroversial.
Source code syntax highlighting is baked into the finished HTML pages by luasmith via Scintillua, using the aforementioned palette, of course. The fonts I am using are still Inter for most text and Iosevka for fixed-width applications like source code display. Both fonts have been fine-tuned and use several custom settings like the bent lowercase “l” and alternate numerals in Inter to make text more readable. I’ve also enabled slab-like styles wherever feasible, including for a lot of the Iosevka glyphs and the punctuation marks in Inter, because I find that look more pleasing to the eyes.
I’ve tried my best to make the new look and feel very readable and straightforward, with a few nice flourishes that hopefully never get in the way. I’d be interested to know what you think about the new design.
Feedback
And speaking of leaving feedback, that is another thing I’ve hopefully made simpler. After trying many ways for my readers to leave me feedback over the last few years on different iterations of the FAB INDUSTRIES website, here I’ve also decided to keep it simple. Just email me via the address listed at the bottom of every page. If you prompt me to, I will post your feedback on the relevant page on the site, or I will simply keep it private between us, if you prefer. Email should work for everyone and is just the simplest way to do this, I think.
Site Organisation
The blog is now organised into four different groups of content, which are all shown on the overview and archive pages. Notes and photos are shown directly, and fully, as single elements on the page. Each of these have permalink pages that can be reached by clicking on their ⚑ icon. Articles and podcast episodes are represented as smaller items. These are highlighted by a glowing border and can be read on their individual pages by clicking on teaser images, the headline or the link provided at the bottom of the preview item. Podcast episodes also have the actual audio file linked right there, displayed as a native HTML player that can be clicked on to play or download the corresponding MP3 file.
The headline navigation provides access to the content you should be already be used to from the previous versions of the site. The ⇆ link allows you to switch between the English and German parts of the website. The homepage and the blog overview also present a list of #tags that allow you to see all the major topics I have written about over the years. These are listed, in descending order, by the number of items in each category.
A new feature, which I call LCARS, is also listed in the top navigation. This is a database, of sorts, organising the available content on the site. Think of it as a kind of manually curated sitemap. I am still building it, so the page doesn’t have much on it right now and it will, for the time being, only be available on the English part of the site. But I hope that in the future, this feature will make it easier for readers to find the most interesting and relevant content hidden away in years and years of blog index pages on this website.
Full-content RSS feeds are available for both the English and German parts of the site. Fell free to subscribe to one or both of those, depending on what languages you speak.
Looking Ahead
I will be hard at work in the coming weeks and months, adding older content back to the site. If you are missing a particular piece, please be patient, it will be back eventually. Allegedly, I also have a day job, which means I’m providing all of this free content on the side. If you want to help out and provide an incentive for me to spent more time on this work, taking out a blog subscription would be very welcome.
I hope you like the new website. I am looking forward to hearing your feedback on the new version of the site.
