Information

My passion project through the majority of 2017–18 was the development of custom userscripts to streamline my web browsing experience. At the same time, I took it as an opportunity to move away from using jQuery and begin focusing on writing vanilla JavaScript, as ES6 was quickly improving the front-end development landscape.

Once accustomed to plain JavaScript, I began experimenting with CoffeeScript and found that the terse, Pythonic language structure increased my enjoyment of the development process, much as Pug had done while developing Blackie Mini Storage. On the other hand, it also complicated my workflow, requiring Node & Gulp to generate the userscript files. I now use those two technologies as a foundation for most of my projects.

In 2018, I came across TypeScript which—while much less fun to write than CoffeeScript—was far more widespread, used professionally, and promoted better coding practices, prompting me to switch. Since I was already using Node/Gulp in my CoffeeScript workflow, transitioning to TypeScript wasn't a large step.

Unfortunately, documentation for userscripts is sparse and outdated at best, so I've been forced to develop my own custom workflows and create atypical solutions to problems that could otherwise be easily-solved with access to the source code. As I plan on developing many more userscripts in the future, I created a TypeScript Userscript Builder that allows a userscript project to be set up quickly and painlessly. It includes TypeScript & Sass, automatic timestamping/version incrementing, build/watch/release commands, easy metadata configuration, and other helpful features to quickly bootstrap a new project.

The largest userscripting project I've undertaken is a complex script for a small, private hobby community. The script—which is used by many dozens of people—inserts its own settings page, adds buttons, tweaks layouts, filters messages, and fixes small bugs. I've also contributed to some scripts that link books/movies on database sites (like Goodreads) to others, or created scripts simply for my own day-to-day browsing. One current, but unfinished project aims to add quality-of-life features to Plex that are present in other media libraries.

Technology

The userscripts are tested in Chrome & Firefox using both Tampermonkey and Violentmonkey, but will likely work in any modern web browser since ES6 support is now commonplace. The scripts are loaded into Violentmonkey in Chrome during development to take advantage of how Violentmonkey auto-refreshes the script when changes are made.

While the scripts can be run using any userscript extension that implements Greasemonkey API v3, they no longer run using Greasemonkey itself since API v4 is not backwards compatible and is unsupported by any other extension.

The scripts typically use Git for version control or Greasyfork for hosting, depending on their scopes and needs.