Adaptive Image Component

Problem: Making images responsive across multiple layouts is challenging when there are so many combinations of sizing, alignment, and fit that can work differently based on the image itself (SVGs in particular) and its containing element(s).
Solution: A custom web component to handle the inconsistencies and isolate the layout and styling.
Regex Parsers, Grammars, and Syntax Highlighting

Problem: Syntax highlighting for regular expressions is usually done the same as if it were a simple string, making it difficult to troubleshoot a regex without an external tool.
Solution: Two Tree-sitter grammars & parsers for JavaScript regular expressions (with and without the Unicode flag). These provided syntax highlighting for the (now sunsetted) Atom text editor.
Piecekeepers
Problem: Boardgame pieces (meeples, money, cards) get messy on the table.
Solution: Custom-sized trays that fold flat to fit in the game box and that you can use anywhere. They snap together with magnets and don't have to be aligned any particular way. I've been improving these for over a decade, from chipboard and an X-acto knife to 3D printed with two filaments.
Improved JavaScript Type Testing
Problem: Checking the type and validity of values in JavaScript can be lengthy. Type coercion makes it complicated and error prone. And if you don't know the ins-and-outs, you can get some pretty unexpected results.
Solution: A robust alternative to basic type testing, making the code more comprehensible and the outcomes more predictable.
Audio Mute Module (WIP)
Problem: Muting my computer's audio and mic isn't always easy. Multiple applications can have control of the audio. General audio settings take a few clicks to get to from the taskbar. If I'm gaming, I usually have to leave the window. And if something freezes, good luck getting anything done.
Solution: Build a device to mute audio and mic with a couple physical buttons, no software. I have yet to get all the components, but I'm using KiCad and ChatGPT to learn quite a bit about designing a printed circuit board.


Office Macros
A collection of Microsoft Office templates, macros, and VBA subs/functions to get around VBA headaches (like arrays), combine Excel workbooks, process data, and generally just automate things for coworkers.
Stack Sticky-positioned Elements (WIP)
Problem: A sticky-positioned HTML element can overlap or be hidden by another in the same containing block.
Solution: Position elements so they "stack" above/below each other to remain visible until the container itself scrolls out of view.
URI and Email Address Validation
Problem:Getting info from a URL is usually rather easy, but detecting obfuscated hostnames or using URIs with schemes other than HTTP and HTTPS can be more complicated.
Also, I've encountered forms that require an email address but that don't accept anything but the most basic addresses as valid.
Solution: Functions to validate, parse, and normalize URIs and email addresses according to specs.
Element Dimensions
This JavaScript function provides all the positions and dimensions of an element's boxes, including margins, borders, scrollbar gutters, padding, and content. Positions can be relative to the viewport, another element, or a given coordinate.
Image Converter
Drop any image onto the page to resize it and/or add a background color (for images with transparency), then save it as a PNG or JPEG. It uses the HTML <canvas>
element.
Language Grammars
In addition to the regex grammars, these were created for syntax highlighting.
G-code
-
A TextMate grammar for g-code, particularly for FFF/FDM 3D printing.
Roll20 Scripts
-
A Tree-sitter grammar for macros, abilities, and roll templates on Roll20.
-
A TextMate grammar just for the macros.