This page is for various personal projects I’ve worked on in my spare time. For professional work history see my LinkedIn page.

GameBoy Emulator in TypeScript

My GameBoy emulator is a fully featured GameBoy emulator that runs in the browser. Written completely from scratch in TypeScript, this was really an exercise in learning how computers work at a deep hardware level. I had to code the GameBoy’s CPU with all of it’s instructions and registers, it’s APU (audio processor) and implement real time digital sound, it’s old-school gpu, it’s ram, and more. One of the most difficult but also most rewarding projects I’ve worked in.


  • Supports most GameBoy games with full video and audio support
  • Touch controls for mobile
  • Controller support for mobile and desktop
  • Configurable controller and keyboard controls
  • Full screen mode
  • Customizable color palettes

NPM Package:


JS13k Game Entry – Max Damage: Crisis Mode

I lead a small team on this entry into the JS13k game competition. JS13K is a competition to build a game in 30 days, the catch is that game can only be 13 kilobytes (zipped). Being our first year entering, we spent a lot of time on an asset engine that would support our five songs, three unique sets of three-layer parallax scrolling backgrounds, multi-color animated enemies, etc, etc. Fitting all that with all the game code in 13kb isn’t easy :). The time spent on the asset engine meant we only had about a week to really design the levels and tweak gameplay, which wasn’t ideal. Still, we came in 13th place out of 78 entries in the mobile category, which isn’t too bad.


  • 9 uniquely designed levels across three unique worlds
  • 3 layer parallax scrolling backgrounds
  • 3 fully animated enemy types in 4 different colors
  • 4 sound effects
  • 5 songs
  • Combo system
  • All packed into 13kb

Game Source:
Asset Engine Source:


PSXViewer – View 2D and 3D Models from PlayStation Games

PSXViewer is a web app that lets you view assets from PlayStation 1 discs. Written in Vue and TypeScript, it uses three.js for 3D model rendering. All the asset parsing logic was written from scratch by me and put into a small library. This library can search for 2D and 3D assets that use the official PS1 SDK format and then turn them into JavaScript objects. The file definitions are written with my StructJS library which allows developers to easily define binary file structures and read and write binary files with a C struct-like interface.