Here's a brief introduction to some of the projects I've built or made significant contributions to! More details about some of the most interesting parts of the projects coming soon...

Refract is a JavaScript library which makes makes reactive programming possible in apps using React, React Native, Preact, Inferno, or Redux.

Reactive programming is a powerful programming paradigm which allows engineers to express complex asynchronous logic flows in a clear and declarative fashion. This can help reduce surface area for bugs, improve code reuse, simplify complex functionality, and make impossible functionality possible.

Refract provides an API designed to expose the internals of a typical unidirectional data flow, and make it easy to separate logic from imperative side-effects. It takes care of the hard parts of connecting your reactive programming library to your app, so you can focus on writing your logic instead.

Find Out More Documentation  Code


Harmony is a Chrome extension which simplifies the Discord interface and adds some useful features.

Discord is a chat application (primarily aimed at gamers) which is used by some major subsections of the programming community. I'm an active member of several of these servers - most notably Reactiflux - and as a result use Discord daily.

The Discord interface has some bugs and slight annoyances which regularly get in the way, and some useful features which would be easy to implement are currently missing. Harmony has been a great way to explore how Chrome extensions are structured while solving these everyday problems!

Web Store  Code


My wife creates content for the Sims 4 - custom clothes, hairs, objects, etc - and shares her creations with the game's community.

The Sims 4 creator community is mostly active on Tumblr, so she primarily posts her content there. She wasn't happy with any of the existing Tumblr themes, so she asked me to create one for her.

At first, I tried to avoid the awkward Tumblr theme template system by building a React app which consumed Tumblr's API. Unfortunately her blog is too popular, and her followers were regularly unable to access it due to rate limiting on the API!

As a result, I started again and re-created the same design as a plain Tumblr theme. Some extra non-Tumblr functionality was rebuilt into vanilla JavaScript, fetching data directly from Contentful's API.

Website  Code

Midnight Sun

My wife and I worked together in our spare time over the course of a couple of years to build an online game, and managed the community which grew around it.

The game was a text-and-graphics based RPG where users were given superpowers, and included a host of different features to keep them engaged. The core was a real-time multiplayer battle system, complete with non-player characters governed by a complex algorithm determining how they would interact with real users.

Users were able to choose from 32 superpowers, ranging from simple (such as telekinesis, pyrokinesis, or superhuman strenth), through to complex (mind control, power absorption, time manipuation, and so on). These were all painstakingly balanced and fully realised, with a huge variety of capabilities and effects.

The backend was written in PHP; the frontend was written as vanilla CSS/HTML with a custom DOM manipulation system built using jQuery to handle interactivity.

WPC Extended

A WordPress plugin which provides a simplified interface for adding to and updating the Customizer, bundled with several custom controls and shorthands to make life easier.

As it's a WordPress plugin, this uses a mix of PHP, CSS, and jQuery to implement extra functionality on top of the WordPress platform. It makes theme customisation and development significantly faster by providing a simpler and more intuitive interface for adding advanced customisation options to the system.

The plugin itself was designed to be extensible. For example, the Automated SASS Export plugin injects the customisation options into a SASS compiler and compiles the user's CSS on update, providing a much faster and more responsive developer experience.