Software Engineer Hi there! I'm a software engineer in London, currently working remotely, with a growing passion for pure functional programming in the likes of Haskell.

Quality is pride of workmanship.W. Edwards Deming



December 2018 - Present

At Adaptavist I've spent considerable time refactoring the untyped codebase to strict TypeScript, improving quality, safety, and maintainability along the way. I'm a strong voice for best practices within my team, and am a positive proponent of pure functional programming to the wider department. I've also begun leading the way on testing, introducing property-based testing to our unit tests and integration testing to our React components. I regularly pair with and mentor teammates.

  • TypeScript
  • React
  • Node
  • Testing
  • Microservices


February 2017 - December 2018

At Oddschecker I pioneered a greenfield B2B project utilising React and D3 on the frontend and Node on the backend. I was introduced to static typing via TypeScript, something I now can't see myself ever leaving behind. I was, as ever, perennially focused on code quality and long-term maintainability, and I matured significantly as a developer as it pertains to balancing overt business interests against tech debt. I also began to mentor more junior members of the team.

  • TypeScript
  • React
  • D3
  • Node
  • MongoDB


December 2015 - February 2017

My work at Impero was predominantly frontend-heavy and really challenged me to get to grips with the wonderful disaster that is CSS, as well as more importantly level up my JavaScript ability. By the end of my time here I was proficient in vanilla JavaScript and beginning to enter the world of functional reactive programming with Vue.

  • JavaScript
  • Vue
  • Node.js
  • Stylus
  • PostCSS

Perspective Publishing

March 2014 - December 2015

I designed and implemented the majority of Perspective's websites. Additionally I began the rewrite of the internal company CMS, converging dozens of legacy systems into a single unified experience. Prior to leaving I lobbied for a change from archaic FTP uploads to a version control system.

  • HTML
  • CSS
  • Sass
  • PHP
  • MySQL
  • Git

Open Source Projects


December 2020 - Present

tshm is a parser and formatter for TypeScript declarations that outputs HM-style type signatures. The parser is implemented as a recursive descent parser.

  • Haskell
  • megaparsec
  • optparse-applicative


August 2020 - Present

terpod is a terminal podcast manager written in Haskell. It allows the user to sync feeds, list feed episodes, and download episodes on demand.

  • Haskell
  • optparse-applicative


October 2020 - Present

fp-ts-std is a library targeting the fp-ts ecosystem, aiming to be something of a pseudo-standard library, fill in the gaps between fp-ts and Ramda, and generally flesh out what's missing in the parent library.

  • TypeScript
  • fp-ts


February 2017 - Present

Bukubrow is a WebExtension for Buku, a command-line bookmark manager. It includes a native binary written in Rust that interfaces with the Buku database. As of time of writing, analytics from Firefox and Chrome suggest that this WebExtension is being actively used by several hundred people. There is a work-in-progress branch in which the frontend is being rewritten in PureScript with Halogen.

  • Rust
  • TypeScript
  • React
  • Regex
  • SQLite


September 2020 - Present

bangin is a deliberately small, thoughtfully-designed shell script which replicates the behaviour of DuckDuckGo's bangs on the command-line.

  • POSIX Shell

February 2019 - Present

This is the site you're viewing right now! I've strived to make it maintainable above all else; it produces static files with Gatsby and can be easily deployed to countless service providers without any hassle.

  • TypeScript
  • React
  • Gatsby
  • GraphQL

Open Source Contributions


Aura is a command-line AUR (Arch User Repository) helper. My contribution was aimed at adhering the configuration of Aura to the XDG standard.

  • Haskell


fp-ts-contrib is a community-driven utility package for fp-ts, a library which enables typed functional programming in TypeScript. My contribution added the filterA module, which enables filtering an array with an applicative predicate.

  • TypeScript



Functional programming has reintroduced me to mathematics, the subject I always felt an affinity for. I'm working my way through Khan Academy at the moment.


Perhaps unsurprisingly as a software engineer I enjoy working with computers. I've built my own PC on which I run Arch Linux, and even game on it for everything not in VR. I use xmonad, configured in Haskell, as my tiling window manager, and (n)vim is my preferred modal editor. I live on the command-line.

Running & Self-Improvement

I've found that working remotely enables me to run more frequently. I'm still not very fast over long distances, but I'm getting there, recently hitting the beginner's milestone of 5km in 30 minutes. Self-improvement in all aspects of life is very important to me; there is nothing worse than stagnation.


I'm an avid gamer, currently predominantly spending my time with Deep Rock Galactic and Half-Life: Alyx. I hit Grand Champion in Rocket League a while back and decided that was the right time to take it out of my regular rotation, but feel free to hit me up for a game!


Available upon request.