Hello, world: how this blog is built
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 loadsTheme#
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 list item with
inline code - A second item with a link to the About page
A blockquote, for the occasional quote worth highlighting.
| Element | Styled |
|---|---|
| Tables | yes |
| Images | later |
That's it for now.