first working version a little late since i didn't expect this to be big enough to require source control 😵💫