Projects and Experiments

Nomic Automation System

In 2020 myself and a small group of friends started a game of Nomic, which has since earned the name Blue Sheep Nomic (or "BS Nomic" for short).
To summarize the concept of Nomic: The game begins with no rules (or a few basic rules to define Nomic) and players take turns proposing rules or modifications to rules. A proposed rule is voted upon and, if the majority of players like the rule, it is applied to the game.


Seasons 1 and 2 both used a Discord server and a shared document to record everything, but that was somewhat limited and tedious to maintain.
In 2022 we started Season 3 of BS Nomic, but this time we used an integrated and automated system that I created.
I combined a Discord bot with a GitHub pages site, which autonomously handled voting, rule management, and player stats.
I loved working on the system and might have become carried away, usually spending more time updating the system than playing the game.


The Nomic Automation System was used for Seasons 3 and 4 - the latter of which ended in late 2023 - and involved many interesting concepts. We had different rule structures (including a tree structure which was fun to render), multiple types of propositions, ruleset history, and custom Discord commands to make playing more streamlined.

4D Chess with Branching Timelines

In July of 2020, the game 5D Chess With Multiverse Time Travel was released and very quickly gained popularity.


One of my friends pointed the game out to me, but rather than purchasing it and playing it, I immediately recognised a very interesting challenge: to create an open-source version of the game myself.
Over the next few months I leveraged the extra time that the pandemic gave me to create my own version of the game, using only videos and livestreams to figure out how the game worked.


In September of 2020 I informed the 5D Chess community via the official Discord server about my remake, and I quickly discovered a few other developers working on similar projects. One of those developers created an Open 5D Chess Discord server and a new open-source 5D chess community formed. From this community came multiple remakes of the game; improved checkmate detection algorithms; an open-source piece graphic set; data interfaces to modify the original game; and more.

I haven't actively worked on my version since early 2021 because I became busy with other things, but I maintain that I will revisit the project eventually. I'd love to bring the elegant time travel rules of 5D Chess to other games, such as Arimaa.

4D Chess preview image

Interactive Campus Map

In 2021 I created an interactive, vector-based map application for a school campus.
It was built without any libraries or APIs - using plain HTML, JS, CSS, PHP, and SQL.


Although the ground-up development of the project was impractical, the final product implemented all desired functionality.
The main idea was to build a performant, web-based map that scaled well on various screen sizes and supported mobile and desktop use equally.

It incorporated features for staff to schedule classes by clicking on classrooms and for students to view where classes would run.
There was also an administrative panel that allowed classrooms to be added, modified, and removed on the map.


Neither the final product nor the source code of this project are publicly available.

Pedestrian Behaviour Simulator

In 2024 I used Rust and RayLib to create a simple micro-scale footpath simulation, where pedestrians follow basic rules to navigate to their destination and avoid collisions.


This experiment was part of a small research project, where I wanted to investigate if there is any difference in travel time due to pedestrian etiquette. That is: does staying left on the footpath improve pedestrian flow, and hence reduce travel time?


This particular simulation, which was calibrated on real-world data, suggested that there is no significant difference in travel times when comparing good etiquette and no etiquette. With more tests for different situations I might have found some difference, but that wasn't the point of this experiment.