<?xml version="1.0" encoding="UTF-8"?>

<!--|
    | Atom feed templated extracted from the Zola SSG builtin templates source code.
    | Modified to add support for a custom icon image.
    |
    | File copied at 2026-08-22, permalink:
    |   <https://github.com/getzola/zola/blob/5835ee8ea605ae7bc6a8dba28f032233a6c00b43/components/templates/src/builtins/atom.xml>.
    |
    | This file is licensed under the MIT Licence.
    | It is Copyright (c) 2026 Jorge Dobón Blanco, Vincent Prouillet
    | and contributors (see <https://github.com/getzola/zola/graphs/contributors>).
    |
    |-->

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    
    <icon>https://dobon.dev/processed_images/icon.ab5074eb75da7606.avif</icon>
    
    <title>
         
        Articles — 
         
        Jorge Dobón Blanco
    </title>
    <subtitle>Personal website about computer science, art, politics and other topics.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://dobon.dev/en/articles/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://dobon.dev/en/articles/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-09T00:00:00+00:00</updated>
    <id>https://dobon.dev/en/articles/atom.xml</id>
    <entry xml:lang="en">
        <title>SSG Adventures</title>
        <published>2026-08-09T00:00:00+00:00</published>
        <updated>2026-08-09T00:00:00+00:00</updated>
        
        <author>
            <name>Jorge Dobón Blanco</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://dobon.dev/en/articles/ssg-adventures/"/>
        <id>https://dobon.dev/en/articles/ssg-adventures/</id>
        
        <content type="html" xml:base="https://dobon.dev/en/articles/ssg-adventures/">&lt;p&gt;It&#39;s practically a given that every user of &lt;a rel=&quot;external&quot; href=&quot;https://indieweb.org/IndieWeb&quot;&gt;IndieWeb&lt;/a&gt; should have as their first post a text
explaining their initial misadventures creating and deploying their personal website.&lt;/p&gt;
&lt;p&gt;My case is no exception. I originally tried to bring my site to life, first
by creating my own SSG (&lt;em&gt;Static Site Generator&lt;/em&gt;), &lt;a rel=&quot;external&quot; href=&quot;https://codeberg.org/jdobonb/amiga&quot;&gt;of which remnants still remain&lt;/a&gt;.
Shortly after, I realized the complexity of this task, and with university
still consuming much of my time, I decided to put this project on hold for a while.&lt;/p&gt;
&lt;p&gt;With this article, I want to test the writing and format of a &lt;em&gt;blog&lt;/em&gt;,
and discuss the creative and design process that led to the current technology
stack of &lt;a href=&quot;/en&quot;&gt;dobon.dev&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;and-in-the-beginning-there-was-lobste-rs&quot;&gt;And in the beginning there was &lt;a rel=&quot;external&quot; href=&quot;https://lobste.rs&quot;&gt;lobste.rs&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My interest in having my own digital space goes back a long way.
Accidentally, while trying to resolve the various doubts that arose during
my self-taught journey in the world of computing, I came across texts that
I found very interesting and educational, as in many cases they opened the
door to completely new concepts.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://michael.stapelberg.ch&quot;&gt;Michael Stapelberg&lt;/a&gt;&#39;s explanations of his experimental package manager &lt;a rel=&quot;external&quot; href=&quot;https://michael.stapelberg.ch/posts/2019-08-17-introducing-distri/&quot;&gt;d1stri&lt;/a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https://xeiaso.net&quot;&gt;Xe Iaso&lt;/a&gt;&#39;s detailed explanations of his &lt;a rel=&quot;external&quot; href=&quot;https://xeiaso.net/blog/paranoid-nixos-2021-07-18/&quot;&gt;paranoid NixOS configuration&lt;/a&gt;,
and &lt;a rel=&quot;external&quot; href=&quot;https://faultlore.com&quot;&gt;Aria Desires&lt;/a&gt;&#39; rant about &lt;a rel=&quot;external&quot; href=&quot;https://faultlore.com/blah/c-isnt-a-language/&quot;&gt;the current state of C-based ABIs&lt;/a&gt;
were small windows into everything in my field that I didn&#39;t know.&lt;/p&gt;
&lt;p&gt;It was therefore natural for the desire to write and share my opinions and
discoveries to arise within me, a desire that remained latent but constant
throughout the years. Upon arriving at university and speaking with my peers,
I realized that perhaps I had underestimated both my ability to teach and show
others my discoveries, and the pleasure I derive from doing so.&lt;/p&gt;
&lt;p&gt;After the first semester, somewhat more settled in university life,
I decided to dedicate my scarce free time to building my own website.
During that period, while routinely browsing &lt;a rel=&quot;external&quot; href=&quot;https://lobste.rs&quot;&gt;lobste.rs&lt;/a&gt;,
I came across a new, clear, and direct entry:
&lt;a rel=&quot;external&quot; href=&quot;https://arne.me/blog/write-your-own-ssg&quot;&gt;Why You Should Write Your Own Static Site Generator&lt;/a&gt;
(&lt;a rel=&quot;external&quot; href=&quot;https://lobste.rs/s/5hf7qf/why_you_should_write_your_own_static_site&quot;&gt;entry on lobste.rs&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Motivated by this article, I opened RustRover with the intention of creating a SSG
that would fulfill a short and humble list of features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incremental rendering.&lt;/li&gt;
&lt;li&gt;Rendering based on HTML templates.&lt;/li&gt;
&lt;li&gt;Multilingual support.&lt;/li&gt;
&lt;li&gt;Atom font generation.&lt;/li&gt;
&lt;li&gt;AVIF image optimization and generation of WEBP and JPEG fallbacks.&lt;/li&gt;
&lt;li&gt;Hot reloading.&lt;/li&gt;
&lt;li&gt;Taxonomy system.&lt;/li&gt;
&lt;li&gt;Comment support with Webmention.&lt;/li&gt;
&lt;li&gt;Minification of HTML, CSS, and JS.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://indieweb.org/POSSE&quot;&gt;POSSE&lt;/a&gt; syndication.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope the irony is clear... Looking back, my mistake is obvious;
the complexity of the system I needed was far too high.
Development quickly became an uphill battle due to the second semester,
which was already running at full capacity, and a series of self-imposed restrictions,
I wanted it to be a fully-fledged general-purpose SSG, not a &lt;a rel=&quot;external&quot; href=&quot;https://hannahilea.com/blog/houseplant-programming/&quot;&gt;houseplant program&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All of this led to the project ending prematurely, dissatisfied with what I had managed to achieve.
I believe there were a few key points that made the task much more difficult:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I underestimated the difficulty of creating a functional cache and the limited
need for incremental rendering in most SSGs, given the rendering speeds they can achieve.&lt;/li&gt;
&lt;li&gt;Converting between image formats proved to be more complex than simply adding&lt;/li&gt;
&lt;li&gt;an extra library and function call. &lt;a rel=&quot;external&quot; href=&quot;https://imagemagick.org&quot;&gt;ImageMagick&lt;/a&gt; has a highly complex API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are only two hard things in Computer Science: cache invalidation
and naming things.&lt;/p&gt;
&lt;p&gt;— Phil Karlton (&lt;a rel=&quot;external&quot; href=&quot;https://www.karlton.org/2017/12/naming-things-hard/&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;hugo-makes-me-dizzy&quot;&gt;Hugo Makes Me Dizzy&lt;/h2&gt;
&lt;p&gt;I was away from this topic for a while; a self-hosting project,
which I want to write about in the future, took up a lot of my time.&lt;/p&gt;
&lt;p&gt;Just as August was beginning, I decided to finally have my own website,
and I chose &lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt;, which is undoubtedly, along with &lt;a rel=&quot;external&quot; href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt;, and &lt;a rel=&quot;external&quot; href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;,
one of the most widely used SSGs in the world...&lt;/p&gt;
&lt;p&gt;It wasn&#39;t a productive afternoon; &lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt;&#39;s documentation turned out to be a disaster
More like a reference guide than a document that helps you learn how to use the tool,
it constantly introduces new concepts and links too many pages together,
making the whole thing overwhelming.&lt;/p&gt;
&lt;p&gt;Their &lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io/getting-started/quick-start/&quot;&gt;Quick start guide&lt;/a&gt; treats the tool as a black box,
forcing the installation of a theme, as it doesn&#39;t explain how the template and styling system works.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;Hugo&#39;s Glossary&lt;/summary&gt;
&lt;p&gt;&lt;em&gt;This section wasn&#39;t originally going to be hidden behind a dropdown,&lt;/em&gt;
&lt;em&gt;but I made it too long. Besides, it ended up sounding too much like a rant.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;An example of this problem is his &lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io/quick-reference/glossary&quot;&gt;glossary of terms&lt;/a&gt;,
which has many issues such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The addition of common computer terms that only make the
glossary too long, for example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Boolean: A &lt;em&gt;boolean&lt;/em&gt; is a data type with two possible values, either &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cache: A &lt;em&gt;cache&lt;/em&gt; is a software component that stores data so that
future requests for the same data are faster.&lt;/li&gt;
&lt;li&gt;CLI: &lt;em&gt;CLI&lt;/em&gt; stands for command-line interface, a text-based method for
interacting with computer programs or operating systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;— The Hugo SSG Glossary (&lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io/quick-reference/glossary&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The existence of proxy terms, for example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Dimension of content: See dimension.&lt;/li&gt;
&lt;li&gt;Bundle: See page bundle.&lt;/li&gt;
&lt;li&gt;Bool: See boolean.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;— The Hugo SSG Glossary (&lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io/quick-reference/glossary&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The invention of unnecessarily complex terminology:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dimension: A &lt;em&gt;dimension&lt;/em&gt; is a categorized axis of content variation that
allows multiple variations of a logical page to exist simultaneously.
The three dimensions are &lt;em&gt;language&lt;/em&gt;, &lt;em&gt;role&lt;/em&gt;, and &lt;em&gt;version&lt;/em&gt;. For example,
a logical page may exist in 6 languages, 4 versions, and 2 roles.&lt;/p&gt;
&lt;p&gt;— The Hugo SSG Glossary (&lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io/quick-reference/glossary&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&#39;t get me wrong, this glossary isn&#39;t a critical issue,
but it perfectly exemplifies the poor state of Hugo&#39;s documentation.&lt;/p&gt;
&lt;/details&gt;
&lt;h3 id=&quot;what-if-i-use-bash&quot;&gt;What if I use Bash?&lt;/h3&gt;
&lt;p&gt;For a very brief period, I considered not using an SSG, but rather a series of
Bash scripts that would utilize tools like &lt;a rel=&quot;external&quot; href=&quot;https://pandoc.org/&quot;&gt;Pandoc&lt;/a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https://mikefarah.gitbook.io/yq&quot;&gt;yq&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The idea lasted only an afternoon. I quickly realized how it would end up
with the same problems as my original attempt at an SSG, and I also remembered
my hatred of shell scripting.&lt;/p&gt;
&lt;h2 id=&quot;using-zola&quot;&gt;Using Zola&lt;/h2&gt;
&lt;p&gt;Finally, I gave a second chance to a tool that once performed flawlessly and
that I still don&#39;t know why I abandoned: &lt;a rel=&quot;external&quot; href=&quot;https://www.getzola.org/&quot;&gt;Zola&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have no complaints. Its &lt;a rel=&quot;external&quot; href=&quot;https://www.getzola.org/documentation/getting-started/overview/&quot;&gt;Getting Started - Overview&lt;/a&gt;
quickly guided me in creating a simple personal blog, demonstrating the functionality
of its template system and its concise terminology based on pages, sections, and indices.&lt;/p&gt;
&lt;p&gt;It&#39;s a &lt;em&gt;SSG&lt;/em&gt; that aims to be fast, unobtrusive, and offer just the right amount of functionality.&lt;/p&gt;
&lt;h2 id=&quot;let-s-talk-about-open-source&quot;&gt;Let&#39;s Talk About Open Source&lt;/h2&gt;
&lt;p&gt;On a more personal note, I was pleased to see that the project transitioned from
a MIT licence (permisive) to the EUPL (&lt;em&gt;libre&lt;/em&gt; and viral).
I&#39;d like to include the following excerpt from a conversation that took place on GitHub:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Unfortunately there is a massive change for corporate users in the US.
EUPL is categorically prohibited across the tech industry as
it gets lumpedin with AGPL and SSPL. This license effectively makes zola
impossible to even run the binary in any US commercial setting.
— psarossy&lt;/p&gt;
&lt;p&gt;Too bad for US corporate users then? No reason to lump EUPL with AGPL.
[Version] 0.21 is still available for those users.
— Keats (creator of &lt;a rel=&quot;external&quot; href=&quot;https://www.getzola.org/&quot;&gt;Zola&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;— Excerpt from the conversation in Issue #3093 of the Zola GitHub repository
(&lt;a rel=&quot;external&quot; href=&quot;https://github.com/getzola/zola/issues/3093&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think it perfectly illustrates the asymmetrical situation we find ourselves in
the Open Source world. The corporate and professional world has created a set
of expectations over volunteers and people who practice computer science as a hobby,
forcing them to provide products and services of excellence and business-ready.&lt;/p&gt;
&lt;p&gt;I think it&#39;s relevant to reiterate a series of often-forgotten truths:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everyone is free to create when and how they want, regardless of whether
what they create has &lt;em&gt;practical use&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;You are under no obligation to examine Pull Requests or any other proposals
for adding code, whether written by a human or AI.&lt;/li&gt;
&lt;li&gt;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I highly recommend the text &lt;a rel=&quot;external&quot; href=&quot;https://lake.computer/blog/help-wanted/&quot;&gt;help wanted&lt;/a&gt; by &lt;a rel=&quot;external&quot; href=&quot;https://lake.computer/&quot;&gt;Lake Hope&lt;/a&gt;,
which explores this topic in greater depth.&lt;/p&gt;
&lt;h2 id=&quot;post-mortem&quot;&gt;&lt;em&gt;Post mortem&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;On the one hand, I&#39;m very happy to finally have a place to share my ideas and opinions.
But I can&#39;t help thinking that I haven&#39;t managed to develop the necessary skills
of a software engineer; burnout, exhaustion, and a lack of knowledge have played
a key role in this, but not having been able to develop a more competent
SSG program leaves me with a bittersweet feeling.&lt;/p&gt;
</content>
        
    </entry>
</feed>