Hello, world: how this blog is built

· Updated · 2 min read

This blog is a static site built with Zola. This first post doubles as a test page: it uses every element the theme has to style.

Why a static site#

A static site is a folder of files. Any web server can serve it, it has no database to patch, and it loads fast. I'm working with JS/SPA every day in my job and know the complexity very well and enjoy to not have to fiddle with JS on my own private blog.

What Zola brings#

Zola is a single binary with templates, Sass, search indexes and feeds built in. There is no node_modules folder in sight.

Deployment#

The source of this blog lifes in a github repo and is served by github pages with a custom domain. Every push to main of this github repo triggers a github action that - on success - publishes a new version of this blog.

Code#

Here is some Rust, to check the highlighting colors:

use std::collections::HashMap;

/// Counts how often each word appears.
fn word_counts(text: &str) -> HashMap<&str, usize> {
    let mut counts = HashMap::new();
    for word in text.split_whitespace() {
        *counts.entry(word).or_insert(0) += 1;
    }
    counts
}

fn main() {
    let counts = word_counts("the quick brown fox jumps over the lazy dog");
    println!("'the' appears {} times", counts["the"]); // 2
}

And a shell session with a deliberately long line that has to scroll inside its box on small screens:

zola build && python3 -m http.server --directory public 8000 # then open http://localhost:8000/ and check that every page, feed and search result loads

Theme#

The blog uses a custom theme (astro-kip) that built claude based on my design-system. It will be fine-tuned over time and published separately on my github.

Everything else#

A blockquote, for the occasional quote worth highlighting.

ElementStyled
Tablesyes
Imageslater

That's it for now.