isaac zone

curious explorer

Making little things

20th of March, 2026

This is a fun silly post about something that’s bought me joy, but I want to practice blogging and have had this thought on my mind: I've been really enjoying making small things lately. Little web toys, simple Discord bots, super basic shell scripts, and bits and bobs around the house. I find this to be so enjoyable, and so freeing. It’s been really empowering to use the more basic building blocks to create things.

I think this is what got me into the idea of programming, originally. The idea the computer wasn't just a static, inflexible device, but a tool I could ultimately control and modify for my own joy. It’s really powerful to break free from the mindset that the world around you is unalterable. It might sound silly to suggest that mindset is out there to some, especially those of us who orbit around tech, but I come across it often.

I was bought up with an attitude of seeing the world as being made up of lots of parts, bolted and glued together, and others tend to focus on the whole. I feel very lucky to have had the bits-and-bobs framework my whole life. Probably in part because my parents were very much the ‘take apart a fridge for fun’ types.

While I’ve needed to focus more on productive work, I sort of lost touch with that part of myself a few years ago, and I’ve been very much in a state of rolling with the punches, I suppose. For example, if I needed a piece of software, I’d try to find something off the shelf before I tried to build my own. I don’t think the DIY attitude is ‘normal’ or always a good idea. Of course, you can end up stuck in a loop of building existing things, having to relearn a bunch of lessons others have already learned.

It’s important to me, for my own joy and growth, to rip things apart and build things from scratch, to understand the underlying structure of the world. Rediscovering that drive has been so fun. I think fun is really important. I can tend to get very bogged-down in thinking about the pain of the world, and it can be quite paralysing. I don’t think getting immobilised by that pain is productive at all.

Here’s a list of the small-scale stuff I’ve been doing over the past few months, I really hope you feel a bit inspired to bodge together some stuff of your own.

Pablo Pixarto

For a bit over a year now, I’ve been doing a piece of pixel art every day, following the @pixeldailies.bsky.app prompts, which I used to get delivered from their Discord server. Unfortunately, one of the moderators of that server got phished a few months ago, and their account was used to phish a number of other moderators (and others) in the server. Numerous regular posters (including me) were also banned.

Unfortunately, the server was totally vandalised and used to spread a virus, in the form of the old classic ‘download our new game!’ trick. Despite a moderator or two since regaining access to their accounts, the vast majority of the server history is gone and it is still in an unusable state. This was such a blow to me, because that pixel art community has made the daily prompts so much more engaging to follow, and has given it a real sense of purpose.

After waiting to see if the server could be recovered, I decided to just create a new server, which has been really quite successful! I’m very grateful to have numerous regular, active artists in the server, and no matter what level you’re at, I’d love to have you in there too!

I decided it would be fun to make a tiny Discord bot (which, arguably, could currently just be a webhook) to retrieve the latest prompt from the Bluesky account, then post and publish it to the theme channel in the server. This works super well, and was really easy to make! I used Gleam, and the fairly young grom library, which was quite pleasant. There’s some other ideas I have for the bot, but for now it’s already been quite valuable. It’s a great example of a project that I could easily over-engineer, plugging it into a database, doing some funky ATProto stuff, doing better filtering to ensure the right posts are put through, the list goes on!

While it’s fun to think about all those possibilities, just checking for a couple of key words in the post and caching the already-posted prompts in a JSON file was enough to get off the ground. The only meaningful problem I ran into was that the account sometimes posts a theme and then retracts it within 5-10 seconds. This occasionally lead to more than one post going in the themes channel of the server, but was solved by just ensuring the themes I post are more than 60 seconds old.

I forgot…

I’ve had Zeppelin, the Discord bot, a few servers I frequent for a few years now, and one of the most surprisingly useful features is the !remind command. Setting short term reminders that tag me on a platform I have on both my desktop computer & phone is super handy to me. It also means I can set shared reminders for things I need to check in with friends for.

The only gap I found was that all reminders are public to some degree, because you have to set them in a server channel. I really wanted to have a similar interface but for personal reminders. Things like ‘take your washing out’ because apparently the machine sound isn’t enough to remind me of this.

I decided to try out the Serenity Discord library and Rust for this project, which was super super fun. I find Rust to be too heavy-handed for a lot of my projects and don’t often reach for it, but I am such a fan of much of Rust and it’s ecosystem. The performance characteristics, such as low memory usage and relatively small binaries, are a massive plus to me also.

I’m a container fan. If I can, I will run just about anything in a container. I use Docker (and Podman) for both development and production deployments of databases, APIs, webservers, bots, you name it! I would normally default to just slapping together a Dockerfile and calling it a day, but in the spirit of bodging, I decided to write a shell script to deploy it to my home server, and run it as a systemd service.

This was so much fun. My sort of naive security assumption was that I should probably have a user account for deployment and a second account for actually running the service. I can only hope this is smart enough for me to get away with it, but either way my local network is locked down pretty hard to incoming requests. I also fully locked the runner account to only have access to the necessary systemd commands to restart the service, and the deploy account to only have access to the specific location of the binary.

I was inspired to try this out after watching a video about Lichess, which deploys it’s central service in a very similar way. It feels so cool to use the basic tech like this. Build the binary, rsync to the server, run with systemd. Nothing complex, no Python, no Ansible, just good old shell scripts and unix command line tools. I highly recommend doing something like this, it feels really cool.

Hy there

To my surprise, the game Hytale actually released recently, thanks to Simon from Hypixel buying it back off Riot Games. I’m super interested to see what might come of Hytale, I think it shows a lot of promise as a platform for making games on, sort of similar to Minecraft or Roblox (or so I’m told, I’ve never played it or used it, but go Lua!)

A friend of mine started a Hytale server and wanted a way to show the playercount on the server website, which Hytale currently doesn’t (really) support. My janky solution was to make a CloudFlare Workers/D1 powered HTTP API to act as a leap pad between the actual Hytale server and the website for the server. This meant getting my hands dirty by writing a Java plugin too, which was both exciting and had me let out a bit of a groan.

Honestly though, the Java plugin was super fun to make. It is super simple, it just gets the player count and sends a request to the API every 60 seconds, authorised with a key. The worker then stores the host IP of the request from the server and the playercount. Then on the other end, when you GET the endpoint and public address, it resolves the server IP and gives you the count. It’s janky, I know, but it was super fun to make.

I used Gleam for the worker which was fun, using the plinth_cloudflare package. It was alright, but I think in the future I might prefer to write my own FFI. The Hytale server API feels a heck of a lot nicer than what I remember of the Minecraft (/ Bukkit / Spigot / Paper / NMS / boy there’s too many of these) plugin space. Really cool stuff, I hope people make cool things on Hytale. I’d love to play around with it a bit more too. If you’d like to check it out, feel free to send me a message and I can authorise your Discord account to create servers on the site.

Do count on it

My partner is a primary school teacher, and their class is made up of 5-year-old students this year. For that cohort, they need to spend a lot of time on basic literacy and numeracy skills, like subitizing, counting, and building up quick recognition of numbers in forms like dominoes, tally marks, etc. For teaching this, they’ve made a stack of slide presentations, which are great, but not easy to mix and match.

This is such a great usecase for a little website. Take a bunch of images and show them in random order? I can totally do that! I wrote a simple Lustre application that does just this – and it has been working out well for my partner and the rest of their team. I also tried to add support for a presentation clicker, but I haven’t quite locked down what events to listen for there, because so many of the clickers work in different ways. It’s really exciting to make something like this which is technologically straight-forward and has real-world impact. One of the best types of projects for me, despite being a simple problem with an obvious solution.

Listen here…

My primary headphones, a near-10-year-old pair of M50x’s, have suffered through a few thousand drops and other forms of battering, and unfortunately finally took a hit they couldn’t just jump back up from, as I snapped the little piece of plastic that prevents the ear from folding out beyond a certain point. With this bit gone, they wouldn’t close around my ears and were very uncomfortable.

After a few attempts at tying it together with tape or elastic, I disassembled them and tried to resolve the underlying issue. I’m embarrassed to admit that I spent twenty minutes totally tunnel-visioned on little screws and didn’t realise I was taking apart the wrong side. A long sigh and short while later, I was actually down to the right part of the right side, and managed to get it back to an acceptable state with an overly generous drizzle of Superglue (which also coated all 10 of my fingers, somehow).

This is the second fix I’ve done to these headphones – other than cable replacements, which I have to do far too often. I despise the non-standard input – the other fix being a new cover for the headband part. After so many years, the majority of the leather (faux leather, perhaps?) had peeled off and gotten stuck into my floor, so it was time to replace it. After numerous attempts at cutting and sewing some material, I finally got a piece that fit nicely and stayed in the right spot.

Fixing these two things, as well as making a new mount to store them on so I’m less likely to drop them, was super satisfying. The thought of getting a new pair did cross my mind, but it felt wrong to give up on something that was still in a working, repairable state. Beyond the money savings, I feel like I’ve gained a new appreciation for the complexity of making a nice pair of headphones and how long they’ve survived my torment. Overall, very satisfied.


Thanks for reading, if you’ve made it this far, I appreciate you. If you just skipped to the end, I still appreciate you, but maybe a little less ;) Get some water and stretch!

that's all from this post. thanks for reading!