Originally, this month’s blog post was supposed to be a guide how to self-host my new app Applause (it’s out now, by the way!) on Uberspace—but then this came into my head like an intrusive thought. So let’s get it out.
Some time in ’05 or ’06, I grew tired of rereading the same books over and over again. I’d get a new book for my birthday or Christmas, and I’d have read it cover to cover shortly after. Months before I’d be getting a new one, so my only choice was to read it, or another one of my already-read books again. And again. And again.
There was a time, when I had read every book in my bookshelf at least twice. My meagre allowance wasn’t enough for snacks (extremely essential) and a new book, and the little village I grew up in didn’t have a library I knew of. So I reread the same books over and over and eventually grew tired of them.
So I wrote my own.
Finishing that first novel when I was eleven or twelve years old unlocked something within me. I learned I could create something from nothing, and that set me onto a path that helped shape who I am today.
A Book Needs a Website
And a website needs games. At least that’s what I thought back then. I didn’t have a game console. I couldn’t even watch much TV. The only two computer games I could play occasionally were Lego Racers 2 and Tux Racer. But a book needed a website, and a website needed games.
How hard could it be to make a website? How hard to make a game?
I had no money, but I had a laptop and an excruciatingly slow internet connection. So I downloaded a random 3D software (which I later learned was some bootleg copy of Blender distributed by another company). I opened it up, added two meta balls, and played around with them for a total of five minutes before closing and uninstalling that software.
Turns out even making assets for a game was ridiculously hard, and I didn’t even realise that there was such a thing as code, and it would be hard as well. I shelved the project.
Besides, I had a sequel to write. The old-fashioned way, with pen and paper.
A Brave New World of Free Software
It took me about four more novels before I started writing one directly on a computer. In Open- or LibreOffice, because Word licences were prohibitively expensive even back then. In the meantime, I had discovered Blender, GIMP, Inkscape, and later Ubuntu, and with them the wild world of Linux and Free Software.
It was a dream come true for a constantly broke kid like me. I had no idea what I was doing, but I made it work, somehow. I remember wanting to theme my desktop the way the cool kids in my class were doing with their copies of Windows XP, but they wouldn’t let me know how.
Well, using GNOME 2, GTK themes and Compiz, I could do things like 3D-desktop cubes and windows that wobbled when dragged and went up in flames when closed. Never mind that I couldn’t reliably mirror my screen during presentations because it would crash my graphics drivers.
There was so much to do, so much to learn—and all of it for free.
A Python in the Mountains of Italy
Back then, I spent most of my summers in a remote mountain house on the Ligurian coast of Italy. It was in the middle of the forest with a view of the distant ocean. Quiet. Very disconnected. I think we only got an internet connection in 2015 or something.
Before that, I was completely offline. Just me and my laptop, Blender, and a copy of the Python documentation which must’ve come bundled with Blender or something, I still don’t know how it ended up on my hard drive. Or how I found it, for that matter.
All I knew was that I had access to a few more computer games, but I was bored with them and I wanted to take another stab at building my own. Blender had a built-in game engine back then, and you could get quite far by attaching sensors, controllers, and actions to objects. But you also could only get so far with that. If you wanted more, you’d have to write code in Python.
So I taught myself Python (and programming as a whole for that matter) by reading that excellent documentation. Without the ability to look something up on the web, to search error messages.
That unlocked a whole other level of freedom.
Block by Block
Eventually, Minecraft plopped up out of nothing and took the world by storm. That game seemed like a dream come true for me. Infinite exploration, infinite ways to be creative and shape the world. Except you needed a credit card to buy it. And I had none.
My parents didn’t want to let me use theirs on some random payment platform for a stupid computer game. They told me to go out more and touch some grass.
So I built my own Minecraft. Well, I tried to. My Blender Game Engine powered prototype had an assortment of placeable blocks, a functional inventory and crafting system, a first person player controller…but I struggled to get the world generation running. I hadn’t heard of procedural generation yet (I barely understood procedural materials!) and besides, the performance quickly dipped with more than a few hundred blocks in my game world.
Turns out, even years later and with all my amassed knowledge, making games was ridiculously hard. Besides, with enough nagging, my parents finally bought me a copy of Minecraft. It was fun, for a bit.
But I had learned something new about myself. I enjoyed making things far more than consuming them. In those days, there was a myriad of free to play online role-playing games. I tried so many of them, but none stuck. I would play for a bit and then think I could do better. So I would open Blender and build a system or an asset, and it would be so much more satisfying than playing even though I obviously never finished any of those projects.
I mean we all thought we could build the next big MMO by ourselves at some point or other, didn’t we?
An All-Nighter in the Writer’s Den
At some point, I got myself a Chromebook, one of the very first ones. It was the summer before I started going to university. At that point, I had a semi-successful writer’s blog on Tumblr with which I had finally managed to turn my dabblings in HTML and CSS into a proper custom theme.
I had dabbled in Java and Lua, built some prototypes in Love2D after realising the additional complexity of 3D in game development. It was the early days of Google+ and the beginning of the rise of Google Docs. My Chromebook didn’t run Linux, or any of the apps that had become like old friends by that point.
But it was my gateway to the power of web technologies. A full word processor in the browser? Working offline, even in the remote Italian mountains? Powered by HTML, CSS, and JavaScript?
I stepped on that Chromebook that summer when going to bed one night. That sad little crack has etched itself into my memory. It is the only tech product I ever broke, and so soon after I got it!
It was devastating.
But it led to me buying my first laptop with Linux preinstalled, an XPS 13 Developer Edition from Dell. Back on Linux, back with all my favourite tools. I was still doing all my writing in Google Docs, however, and tinkering with my Tumblr themes, amazed at what I could do with a text editor and a browser.
The possibilities kept me up one night. All night. What if I took everything I had learned about creative writing and world building and put it into a single application? A perfect tool for any writer, ideation, plotting, and, of course, writing in one app? Powered by web technologies? Perhaps expand it into a social network for writers, connect it with a print-on-demand service, give every writer their home on the web.
How much more productive I would be! And I had everything I needed to build it. So I got to drawing the UI.
A Little Thing Called Electron
Before PWAs, before Node.js and Electron, I was obsessed with building my UI with HTML and CSS, but still allowing users to access their local filesystem and run my app separate from their browser. So I cobbled together a Python wrapper which opened a web view and offered a communication layer between Python and JavaScript. It worked, but it was rough.
So I kept looking for better solutions, stumbling first over node-webkit (now known as NW.js) and later the Atom editor (Sublime being too expensive!) and the framework that powered it, Electron. It was the final piece of my puzzle. All the power of a (somewhat) native app, written in JavaScript and with an HTML/CSS UI. Nothing would stop my dream project!
Except I was at uni and had co-founded and joined a writers’ club, and it was running on Moodle, of all platforms. I couldn’t let that stand. So I built a social network. Meteor was the bee’s knees back then and to its credit, it allowed a still somewhat rookie like me to build a full-stack reactive application in a relatively short amount of time.
I felt unstoppable.
Framework Wars
Meteor quickly enshittified, unfortunately. React was the new kid on the block and everything seemed to pivot towards it. But it came from Meta (well, still Facebook back then) and so I hated it on principle. I tried Riot, I tried Angular, I tried Vue and never looked back.
Chrome apps came and went. Electron went mainstream. PWAs became a thing, but much later. In that time-frame, I built a time tracking app and my dream writing software, which you might now know as Qami. Then came Prt Mny, 256c, a full redesign and rewrite of the social network, Untold Stories.
I got my first degree, then my second degree. Built Done in Time, Mattrbld and Hydrt. Quadrants and now, Applause. And wrote less and less.
Today, so many years later, I caught myself thinking, to write, I need a writing app. For that writing app, I need a sync protocol. For that sync protocol, I need a website. For that website, I need a static site generator, for that static site generator, I needed an analytics app.
I know I am procrastinating creative writing and still have a lot to learn. But I love that I can build all that, and I’m proud of what I’ve made so far.