Second time trying something like this. I definitely have room to improve, but I thought I'd share anyways