a list of some of my pages or projects

home (~4kb gzipped)
my home page!
typechart (~18kb gzipped)
a Pokémon type chart for generations VI+
discord quote generator (~131kb gzipped)
generate quotes in the style of discord's "Imagine a place" promotional images.
quizlet (~8.7kb gzipped)

a quiz generator, using OpenTDB to supply the questions.

This was originally made as a challenge to see if I could make a mostly accessible (by my current standards, let me know if/how it can be improved) test / score system that used css to do all the interactivity of the quiz (once generated).

Afterwards I focused on making the quiz's that were generated print friendly and styling the questions around grade school tests using more css.

hooooooooooooooooooooooooooooooooooooooooooooooooooooooooorse (~1.5kb gzipped)
a very long (endless) horse, inspired by after seeing it and wanting to make a very small and lightweight clone without a dependency on jquery or anything like that.
tower unite laser projector simulator (~50kb gzipped)

A simulator for Tower Unite's laser expressions.

The parser uses parser-lang, this made writing the parser pretty easy and only took an hour or so. Most of the time was spent verifying behavior between Tower Unite and my parser.

I wrote a basic ast node based interpreter, but it wasn't very efficient so I wrote a bytecode compiler and interpreter and the significantly improved things. Even still, I still wanted better performance and so I wrote a bytecode interpreter in assemblyscript.

Unfortunately, most of the transferred size is from the wasm binary generated from assemblyscript.

The actual projector output is a simple canvas 2d renderer.

If I come back to this in the future, I'd like to transpile the language to a gpu shader, handwrite the parser, and improve the wasm binary size.

Most of the interpreter's logic is pretty simple, it's just a bit tedious to write by hand. So making a small language similar to walt for generating a smaller wasm binary might be beneficial.

I've since released 2.0, which replaces the old parser with a handwritten one, and the renderer with gpu shader compilation.

The transfer size increased a bit and it mostly comes from the library twlg-core.js being imported, something I'd like to remove a dependency on in the future.