2023 Retrospective

09 Jan 2024 · By Joshua, Ed, and Freddy

We’ve reached the end of 2023! Let’s take a look at what’s happened in those ~365.24 days hurtling around the sun on this big ol’ wet rock.


Our first ever project is still ticking over, with hundreds of thousands of visitors every month, and over 35 billion pops this year. This time last year the top 5 countries were Hong Kong, Thailand, Taiwan, Japan, and South Korea, and that’s still the case today.


Popcat.Click was built in Sheffield, so it’s always been on our mind to commission an artist with ties to Sheffield to make some kind of popcat.click merch. We chose Geo Law to create the illustration, and it slaps. It’s available on various colours from shop.popcat.click, with tie dye being the most popular.

An Iterated Function System rendered with Fernery that resembles a cyanotype of a Leptosporangiate fern An Iterated Function System rendered with Fernery that resembles a cyanotype of a Leptosporangiate fern

We’re using teemill to print and distribute these. They’re a sustainable print on demand company used by the likes of BBC Earth. When you’re finished with the t-shirt, regardless of how worn out it is, you can send it back to teemill to be recycled, and you’ll be given some in-store credit - which you could spend on one of our recycled t-shirts made out of old t-shirts like yours!

Given it’s been over 2 years since Popcat.click first went viral, we’ve somewhat missed the boat on this. However, they’ve still sold fairly well, and we now have a working storefront setup to create other merch should there be another opportunity.

Something Else?

We’ve got another very exciting merch item coming in 2024. Make sure you’re subscribed to our newsletter to be the first to know when it’s available!

Twitter Bot

Popcat.Click’s twitter bot died this year, as a result of Twitter’s API changes. It was fun while it lasted but we probably won’t be bringing it back.


One of our first projects to go live this year was spinningrat.online.

One day while trawling the internet Josh stumbled across the horizontally spinning rat meme:

Evidently the internet was having quite a lot of fun watching a low poly rat spinning to an extract of Lynyrd Skynyrd’s Free Bird. “Why not make it possible for everyone to watch this marvel together?”, we asked ourselves. And then we did.

This was a good opportunity to iterate on popcat.click by creating something that somehow requires even less user interaction - you don’t even click the rat. You just watch it spin. The more people who are watching with you, the more rats there are, and the faster they spin.

This project drove the development of a service to provide a (sometimes accurate) live figure of the number of people viewing a webpage at the same time, which we can reuse in future projects.

According to our analytics spinningrat.online reaches hundreds of thousands of people every month.


After making spinningrat.online, we thought it’d be interesting to make another crowd participation game that requires more user interaction than popcat.click. Getting some experience with three.js was also something we were interested in.

A web game was born where each user was a rat running around an empty tarmacked void. It was very cursed. We then saw the maxwell cat meme and thought that’d be more light hearted, so swapped out all the assets.

There was no goal in the game at first. You just landed on a page and could drive a maxwell cat around, and see everyone else driving their own maxwell cats around too. Each cat is given a random name from a word list, and eventually your country’s flag emoji is added to this name. It was initially fun to simply be able to interact with people from around the globe as a maxwell cat.

A screenshot of a maxwell cat on maxwellcat.world, named 'Bartholomew', with an Irish flag emoji

Syncing the 3D positions of multiple clients across several devices all over the world isn’t straightforward. Releasing maxwellcat.world like this allowed us to verify what we’d built works; we’re hoping to reuse this now somewhat tried and tested service for other projects in the future. In the meantime we could figure out what kind of goal we wanted to add to the game.

The answer came when we looked at what other models bean(alwayshasbean), the user on sketchfab who published the original maxwell cat 3D model, had made. Robert the fat rat stood out. Cats eat rats, so there we had it. Similarly to popcat.click, driving your maxwell cat into Robert scores you a point for your country. All of the points are visible on a leaderboard.

Currently the United States is in the lead with over 200,000 “rat points” (we haven’t got a name for them yet), and similarly to spinningrat.online it’s used by hundreds of thousands of people every month.


Josh has been learning Dutch this year. Dutch nouns are linguistically gendered. For masculine/feminine nouns the article “de” is used, while for neuter nouns the article “het” is used. For example, “the milk” is “de melk” and “the water” is “het water”.

Giving someone who’s learning Dutch a noun and asking if it’s a “de” or “het” word is a fun game. Letsdoubledutch made an Instagram reel doing exactly this as a comedy sketch. So, we made it a reality at ishetdeofhet.nl.

A screenshot of the ishetdeofhet.nl landing page, asking if the word 'fiets' is a 'de' or 'het' word

When you answer you’re then shown what everyone else’s answers have been in a nice little pie chart:

A screenshot of the results for 'fiets', stating 'de' is the correct answer and that there were 170 votes for 'de' and 6 for 'het'

A complication in this game is that some words can be “de” in one context and “het” in another. For example “zout” (salt) is a “het” word, but at the dinner table you would ask for “de zout” because what you’re actually asking for is “de zoutstrooier”[1]. Compound words usually inherit the gender of their last component, and “strooier” is a “de” word, hence “de zoutstrooier”.

Language is a mess. Words like “zout” immediately cropped up so we added an “example sentence” feature to provide clarification in these ambiguous circumstances. These example sentences weren’t great, so we hid them behind a button labelled “beta feature”. This helped properly set expectations. For words where no example is necessary, it also meant fewer people viewed the example sentence at all, so fewer people had a negative experience.

The wordset we used was also bad. For example, it contained the word “klutsmelk”, which was apparently in 1989 suggested as alternative to the English loanword “milkshake”[2]. Nobody uses it. The wordset also didn’t contain anything hard so for an average Dutch person it’s just boring.

This project was a flop. A few thousand Dutch people used it, and then it was forgotten. We’re hoping to reuse the backend of this for other voting projects in the future.


Writing programs to generate fractal imagery is very 90s. In the past, Josh has done it in Golang. Haskell is an interesting programming language we hadn’t used for a while and wanted to practice. Iterated Function Systems seemed like they’d lend themselves nicely to being implemented in a functional programming language, so Fernery was born.

The ferns we used initially are reminiscent of Anna Atkins’ cyanotypes. Over time some more IFSs have been added to Fernery. So far nobody from outside TwoTwelve has contributed a new one, but it would be very welcome.

Fernery is our most starred project on GitHub. This is probably a result of Freddy having setup our own Homebrew tap which makes it super easy to install and use Fernery on MacOS.

Here’s some example images:

An Iterated Function System rendered with Fernery that resembles a cyanotype of a Leptosporangiate fern An Koch Snowflake rendered with Fernery, white on an icy blue background An Iterated Function System rendered with Fernery that resembles a tree

We also used these images to test the waters with teemill (and these shirts are still available), before we had the popcat.click illustrations in hand later in the year.

New Infrastructure

For our new 2023 projects, we’ve developed a new infrastructure setup using Hetzner’s ARM64 servers, which have amazing price to performance. If you’d like to give them a try, you can use this link to get €20 free credit.

We’ve chosen Kamal, from Basecamp, to manage our deployments. Although it’s originally intended for Rails apps, it’s very flexible and we’ve been able to use it for our Go projects easily.

Finally, we tie it all together with Tailscale, which lets us build a virtual network between our developer machines, servers, GitHub Actions runners, and anything else we want - with full access control and logs.

What’s Next?

We’ve got 3 different projects on the go right now. The only one we’re willing to disclose at the moment is that we’ve hopped on the AI bandwagon for one of them, and it’ll hopefully be released sometime early April. Join our newsletter to stay tuned!

  1. There’s a better article at onzetaal.nl about exactly this case: https://onzetaal.nl/taalloket/de-het-zout ↩︎

  2. https://www.dbnl.org/tekst/_nee003198901_01/_nee003198901_01_0137.php ↩︎