Bachelor of Computer Science for Games Technology
La Trobe University


Tutor (various courses)
La Trobe University

Co-founder, Senior Software Architect, Head of Front-End
Aerion Technologies

Skills and Preferences

It's hard to know what to include in a list of skills, so I've resorted to listing things I particularly enjoy working on and with

  • Learning new things
  • CSS
  • HTML
  • Tinkering
  • JavaScript
  • TypeScript
  • C#
  • PHP
  • Ruby (still learning)
  • UX Design
  • UI Design
  • Software Architecture
  • LEGO
  • ActivityPub
  • .NET
  • Video Games

I helped found Aerion Technologies while I was still in University.

Throughout my 15 years there, I gained a significant amount of experience across many different aspects of software development. Beyond programming in many different languages, I have also had experience with UX / UI design, requirements gathering, documentation, project management and so much more.

I have personally overseen all aspects of a project, from initial client meetings and discovery, through design and clarification, front-end and back-end development, all the way through to DevOps, deployment and user acceptance testing. I've worked with and alongside businesses from many different disciplines including international architecture and construction companies as well as entrepeneurs needing technical assistance to see their idea through and small businesses who just need an online presence.

I'm a tinkerer by nature. I have many personal side project ideas and things I am interested in. I've done quite a bit of work in the early days of Obsidian, building in CSS tweaks and new functionality before themes and plugins were officially supported; helping shape the direction of some of those features.

Also, check out my LinkedIn for endorsements and such. (I'm not very good at LinkedIn, tbh)

Below I have listed some of the projects I have been involved with, both with Aerion and in my own free time. This list isn't exhaustive, but does represent a cross-section of my varied experience and skills. (I'm still working on populating this)


Cube Tube picture of Cube Tube

Skills: Ruby, Game Development, Art, Design

Nostalgia inducing, 8-bit style, side scrolling tetrominos, ON A TRAIN!

I've always wanted to get into game development. It's not easy, though. For this project I decided to try and learn something completely new. I didn't have much experience with Ruby as a programming language, but here was the DragonRuby Game Toolkit and a tutorial on how to make a simple Tetris-like game.

However, I couldn't just follow a tutorial then slap a price tag on it, so I took things further. I combed through various asset and sound libraries I'd purchased over the years through Humble Bundles and brainstormed ideas. I eventually came up with "Cube Tube", a variation of Tetris where you load cargo on a train.

I adjusted and tweaked and flipped everything on its side. I opened up MagicaVoxel and created a subway station and a voxel train, using those to generate my 2D art. I also found some music I kinda liked in my packs and tweaked and chopped it up to make a new soundtrack. I spent way too much time trying to make the music more dynamic; I initially wanted it to get faster and faster and the speed of the game increased. Unfortunately, it just ended up beyond my capabilities. People still like the music though, so that's cool.

I look at the code base now, and I wonder how much of it was actually in that original tutorial. Probably not much, anymore. I also tweaked the game for touch controls, and built and tested a mobile version, for both Android and iOS. It's also available on Windows, Mac and Linux.

It's not perfect, but I'm proud of it. It's a fun little time-waster. It plays well and it sounds great. And I did it all by myself. pats own back

LDToypad.NET picture of LDToypad.NET

Skills: .NET, C#, Hardware

A .NET library for communicating with the LEGO Dimensions toypad

This was a little bit more of a hack to see if I could, rathen than it being something truly useful, but it is still pretty cool. I found other attempts to do the same thing in other languages, but couldn't get anthing actually working.

Through a lot of reading, and some trial and error, I worked out how to communicate with the toypad, and then wrote up a library that allows me to connect to it, change the lights, and most importantly, read the physical tags placed on it.

The reason for doing this is to automate some things on my computer. As a proof of concept, I made myself a little app that sits in the system tray. When I place my Batman minifigure on the right panel of the toypad, my computer switches to another remote desktop. Place him on the left, and I go back to the original desktop. I also set up a custom Joker minifigure tag which, when placed in the middle sport, will hibername my computer.

It's fun, but I've never gotten used to multiple desktops, so I rarely used it. I ought to come up with some better ideas and hook it back up one of these days...

Sliding Panes (Andy Matuschak Mode) picture of Sliding Panes (Andy Matuschak Mode)

Skills: CSS, JavaScript, HTML

A unique way to view open panes in Obsidian

In early 2020, I found myself inspired to try and collect my thoughts in a collection of linked notes. I was mostly inspired by Andy Matuschak and the way his notes website opened linked notes in columns, so you could see where you'd been.

I did attempt to create my own similar thing for a bit, but then I discovered Obsidian. It was pretty new at the time, but seemed to do what I wanted in terms of linking notes together.

However, it didn't have the cool horizontal stacked notes thing that Andy Matuschak's website had. However, based on my experiments with building a similar thing myself, I thought I could modify the internal CSS of Obsidian to present notes in a similar format. And it worked! Not only that, it was pretty popular with others!

Later in the year, the Obsidian team opened up their plugin API (which I helped discuss with the devs) and I migrated my fun CSS tweak into a full-blown JavaScript plugin. Doing so won me the inaugural Best Plugin of the year in 2020.

The functionality has been since incorporated into the core of Obsidian. By using the "stack tabs" option, you get vertically stacked notes that slide over each other, just like I'd envisioned from Andy Matuschak's website.

Robotic Mission to Mars picture of Robotic Mission to Mars

Skills: C#, ASP.NET, MVC3, HTML, CSS, JavaScript, AJAX, Computer Vision

An interactive educational game which simulates a Robotic Mission to Mars, including control of a real-life robot!

This was one of my favourite projects to work on, despite the frustrations. A cloud-based application for the Victorian Space Science Education Center (VSSEC), which would allow a class of secondary school children log in, be assigned various mission roles and run a simulated Mars Rover mission.

The kicker: students actually ended up controlling a physical rover robot that would drive around VSSEC's on-site Mars simulation area.

It was a technical challenge to run 12+ users concurrently viewing the same set of data, and issuing requests and instructions to each other. Data was partially plotted in advance, and partially randomised. There were also random events like dust storms or electromagnetic interference, which the students would have to cooperate and coordinate to overcome.

Plus the added technical challenge of interfacing with VSSEC's rover, as well as computer vision data to track its physical location on the ground. It would've been so much easier to simulate that data along with the rest, but you can't beat the coolness factor of driving a real robot and seeing the live feed from its camera.

Also, once development was almost complete, we recieved graphic designs from a design agency, which required a lot of re-working to the front-end to make it fit the final design. It ended up looking great, though.

Shopfront Solutions picture of Shopfront Solutions

Skills: C#, ASP.NET, MVC3, HTML, CSS, JavaScript, WinForms, Printing, Customer Support, Management, UX design

A platform for digital marketing in the retail sector

This was a big project.

It started small enough. A system to print shelf tickets for a group of pharmacies. Of course, that had its own technical challenges. Not least of which was printing from a browser in such a way that it would be consistent with pre-printed and/or pre-perforated paper. We ended up developing an unobtrusive background application for windows that would handle communication with the printer, and a separate web system for creating the print jobs.

This expanded a lot. We built an entire visual editor for printible tickets with multiple dynamic labels and layouts of those labels. We also expanded the management side of the system to handle promotional periods and other forms of marketing. The idea became for marketing departments to create and upload assets and product pricing details, and the stores just had to log on and print what was relevant to them.

With nearly a thousand stores using the system, there was a lot of iteration around the UI/UX of the system, especially about making life easier for the store users. We also started handling support tickets and calls (myself included) in order to better assist the stores. This helped me put an emphesis on the UX design, as I got to know the kinds of people that were using the system (and designing things so I had less support tickets to attend do :P ).

Before I left, I was part of the management of the product as a whole, and was working on a big redesign and re-branding. Partially in an attempt to simplify the entire system, and to reach out to more non-pharmacy retail chains and outlets.