Projects

Is it really a personal website without a section dedicated to showing off a bit? I have created and worked on loads of different projects in my free time using all kinds of technologies, but here are just a few of them!

Resolute

Resolute is a cross-platform, user-friendly desktop GUI application to find, install, and manage mods for the game Resonite. It's built with Tauri, an application framework that uses the system WebView for rendering. The backend (where all of the real work is done) is entirely written in Rust and the frontend is a Vue.js SPA. Communication between the frontend and backend is done via JSON-based IPC. Nearly all functionality is contained within an externally-reusable Rust library so that others may easily make use of my work and potentially build an alternative UI if desired.

  • Desktop App
  • Open Source
  • Tauri
  • Vue.js
  • Rust
  • JavaScript

Discord.js

For several years, I was the main developer/maintainer for Discord.js, which is the most popular client library for interacting with the Discord API and has many millions of downloads. I authored hundreds of commits across various repositories, reviewed and merged many others, and led the direction of the library during that time. Among my contributions are substantial improvements to the main library, rebuilding and constantly improving the documentation website (using Vue.js) and the generator tool for it, and building the CI/CD pipeline using GitHub Actions. Additionally, I was the primary community manager for the projects for quite some time.

  • Library
  • Open Source
  • Node.js
  • JavaScript
  • TypeScript
  • Website
  • Vue.js
  • Sass / SCSS

Discord.js Commando

Commando was an advanced and easy-to-use command framework for Discord.js. I designed it from scratch, and it became the official command framework for Discord.js for a time. Commando introduced many concepts to the Discord development community that hadn't really been done before, and ultimately it inspired similar features and progress in other frameworks.

  • Library
  • Open Source
  • Node.js
  • JavaScript

Heartsock

I've been an avid user of VR for several years and I spend a lot of time in social VR games such as Resonite. One neat thing users started to do is display their real-time heart rate on their avatar for anyone nearby to be able to see. Heartsock is an application I built to accomplish exactly that! It's split into two main components: the Wear OS app and the server application that one would typically run on the computer they're playing games on.

For the Wear OS app, I put a lot of effort into making the Jetpack Compose-based UI user-friendly while being as optimized as possible in order to avoid draining the watch battery too quickly. On the server side of things, it's also extremely optimized, being a pure Rust console application hosting a WebSocket. The watch and game both connect to the WebSocket that the server runs, which is easily discoverable thanks to built-in mDNS functionality. Whenever the watch sends new heart rate data, the server immediately relays it to all other connected clients, allowing the game to receive those updates and display the user's heart rate in real time.

  • WearOS App
  • Android App
  • Server App
  • Open Source
  • Jetpack Compose
  • Kotlin
  • Rust

BLFC Tracker

Tracker is BLFC's web-based time-tracking system that manages volunteers, tracks their volunteer hours, offers rewards for their efforts, and integrates with Telegram. It's built entirely by a volunteer team that I am a part of. Upon first joining the team, I both rebuilt the backend from the ground up, going from a plain PHP backend to a much cleaner, more modern Laravel application, and overhauled the frontend to go with it. Not only was the new version (dubbed simply "Tracker v2") used during BLFC 2023 with great success, it will continue to serve as a useful utility for future years, and will likely become the foundation for growth and future tools for the convention.

  • Website
  • Laravel
  • Bootstrap
  • PHP
  • SQL
  • JavaScript
  • Sass / SCSS
  • Docker

This website!

For a long time, this website was incredibly barebones and devoid of nearly all content. Seriously, just look at it. Although I repeatedly upgraded it over the years to keep it up to date with modern technology, the overall appearance and content didn't change significantly for nearly 10 years. Now? It's got a fresh new coat of paint, and is much more palatable to share. Plus, it has more info about me! Wow!

Want the juicy details on how it's running? Stick around:

  • The backend is using Laravel, a lovely PHP MVC framework designed for the modern era. Since it's serving an SPA, it's also running Node.js for SSR.
  • The frontend styles are written in SCSS developed on top of Bootstrap, the tried-and-tested CSS framework originally created by Twitter. I'm using Bootstrap 5.3 because it added color mode support and makes fairly good use of CSS custom properties. Why not Tailwind? Because I'm still a believer in the use of semantic class names when it makes sense, and Tailwind is the exact opposite of that. It's great for certain use-cases, but not all (in my humble opinion).
  • As for the frontend JavaScript, I created two iterations of this design: one using vanilla JavaScript, and the current version, rewritten with Vue.js and Inertia.js. The community likes to refer to this combination (+ the use of Laravel on the backend) as "the modern monolith". It has nearly all of the advantages of an SPA and a monolithic backend.
  • How about those fancy pills showing my real-time Discord status and activities on the home page? Those are powered by a self-hosted Lanyard instance. It runs a Discord bot to gather the presence data from my account, plus a simple API and WebSocket server to retrieve the information from.
  • And finally, since it's <current year>, the whole thing is containerized with Docker, using a custom image based on Alpine Linux. I can spin this thing up on any server in mere minutes! In fact, so could you!*

    * Provided I make the source public, which I plan on doing Soon™ 😀

  • Website
  • Laravel
  • Vue.js
  • Inertia.js
  • Bootstrap
  • Node.js
  • PHP
  • JavaScript
  • Sass / SCSS
  • Docker

RPBot

RPBot was a Discord bot that I built in Node.js (using Discord.js) and ran for a few years. It was powered by GRAF, the predecessor framework to Commando that I built for this bot and shared with the community. Although relatively simple, it was added to over 100,000 Discord servers with millions of members between them. It provided commands useful for storing/showing character bios and rolling dice in an effort to improve the text roleplaying experience on Discord.

I was an early adopter of Discord and am a continued believer in it as a communications platform, so of course I build things for it! I have since shut the bot down due to growing hosting fees (running a large bot gets costly!), but have begun a total rewrite of it in Rust, so it will see the light of day again soon!

  • Discord Bot
  • Open Source
  • Node.js
  • SQL
  • JavaScript

Moosik

I created Moosik as a simple Discord bot that did music functionality (playing audio from internet videos) in Discord voice channels extremely well. My motivation for building it came from the unpleasant UX of existing public music bots, so I designed it to be easy to use while having very friendly user output.

  • Discord Bot
  • Open Source
  • JavaScript

Task Timer

Task Timer is a Chrome app that was my first major public project and had well over 200,000 active users at its peak. It's mostly in maintenance mode at this point, as it does nearly everything I ever wanted it to, and Chrome apps are on their way out. I was working on an Android version of the app for a long time that went through many iterations using various technologies, but it has been on hold for a while now.

  • Chrome App
  • Open Source
  • JavaScript
  • CSS

Bing Bong!

Bing Bong! is a simple, customizable module for FoundryVTT that plays sounds when chat messages are received. This is my first foray into extending FoundryVTT and is relied upon heavily in the D&D groups I participate in.

  • FoundryVTT Module
  • Open Source
  • JavaScript

Voting Site Manager

A plugin for any Minecraft server implementing the Bukkit API (Spigot, Paper, etc.) that adds a command for players to view a list of websites to vote for the server on. Server admins could fully customize the list of sites and even modify them in real-time via additional server commands for convenience. It could also periodically broadcast the list to all active players.

  • CraftBukkit Plugin
  • Open Source
  • Java
  • Minecraft

Papyrus language support for Atom

I made a set of packages, atom-language-papyrus and atom-build-papyrus, that together add full Papyrus language support to Atom. Papyrus is the scripting language Bethesda made for their Creation Engine introduced with The Elder Scrolls V: Skyrim and expanded upon in Fallout 4. Atom was my main editor at the time, having all but replaced Sublime Text in my daily usage.

  • Atom Package
  • Open Source
  • JavaScript
  • Skyrim

GfycatLinkFixerBot

I built GfycatLinkFixerBot to solve a minor annoyance of mine and many others around the time of WebM files first widely replacing GIFs: Reddit users posting direct links to Gfycat GIF versions of files rather than the auto-detecting WebM / GIF link. As everybody knows now, WebMs and other video formats are often a much better solution for encoding memetic animation content than GIFs and result in much smaller downloads, saving time and data on mobile devices. The bot would detect the usage of a Gfycat GIF direct link and comment with a fixed link to the appropriate auto-detect page.

  • Reddit Bot
  • Open Source
  • Python

SproutPossible

SproutPossible was a web-based fundraising platform for K-12 schools. I built it with a small team of other developers over the course of a couple of years as a contractor. The infrastructure was also entirely designed by me, heavily using AWS for its various services (namely; EC2, S3, ELB, RDS, and CloudFormation).

  • Website
  • Laravel
  • Bootstrap
  • jQuery
  • PHP
  • SQL
  • JavaScript
  • Sass / SCSS
  • Amazon Web Services