Some fun stuff here to figure out how to API this out well, but I'm pretty pleased with where it ended up!