Hey there, internet rando!
I'm Adam Coster, CEO and co-founder of video game studio Butterscotch Shenanigans (@bscotch).
I'm a fullstack web developer and DevOps enthusiast, but also spend a lot of my time thinking about data, productivity, and business (see my personal blog). I talk about all of that a lot on my weekly podcast, Coffee with Butterscotch, co-hosted by my co-founders (and literal brothers).
I'm embracing the monorepo lifestyle, and so this repo will accumulate stuff I create outside of work. Most of the stuff I create is for work, so at any given moment there might not be much of anything in here.
Most of the stuff I've worked on is closed source. Here's a quick summary of my biggest projects:
- Video Game Webtech: I develop and maintain all of the webtech for our games, starting in 2015 with our "BscotchID" service, which in 2018 I replaced with a shinier service, "Rumpus". Migrating users between those systems without downtime was quite the endeavor! BscotchID/Rumpus features include:
- Cross-platform save syncing (e.g. allowing players to switch between a mobile device and a console without losing progress)
- Cross-platform user-generated content sharing (in Levelhead, players can create and share custom levels and compete on per-level leaderboards)
- Centralized account management, allowing players to connect their accounts to any platform account
- A public API allowing players to build their own projects using data from Levelhead
- Studio Website: I develop and maintain the central website for our studio, which is basically the front-end for Rumpus. I built it with Vue v2 and have been slowly migrating it to Vue3 Typescript. I admit to being a middling front-end developer; the vast majority of my development time goes into the backend and tools to support our games and team. Still, I think the site came out alright. Features include:
- A custom newsletter system, allowing our team to build and send a variety of opt-in newsletters to our players and other groups
- The "Feedbag" -- a system for collecting and managing player feedback at scale
- Automated game changelogs, generated from Git messages and made available via the site (see Levelhead's Patchnotes as an example)
- Tons of internal features for our staff to manage aspects of game development, testing, and customer support
- Bscotch String Server. Our last two games were localized into 12 languages, and one of those (Crashlands 2) has well over 100,000 words. Dealing with all of those strings in a way that can best support our team and our external localization partners was quite the endeavor. I created our own "String Server" to mediate that, complete with:
- Auditing/editing strings (with downloadable changes)
- The ability to add context (text, images, video)
- Display of current translations
- Detection and display of various translation error cases
- Import/export via the localization-standard file format: XLIFF
- Automatic scraping of thumbnails and metadata from our game-asset-management system.
- A custom glossary and spellcheck, with an API allowing use in other contexts (like our game asset editors).
I've open-sourced a handful of our studio projects. See the studio's GitHub (@bscotch) for the full list, but here are the highlights:
- Stitch: We use GameMaker for game development, and I've made many tools and pipelines over the years to improve the development process in GameMaker. The latest, and the one we open-sourced, is "Stitch". Stitch is a "Pipeline Development Kit" for GameMaker; we use it to automate asset management and parts of the build process. It includes a bunch of CLI tools, programmatic tools, a desktop application for managing game projects, and a VSCode extension allowing use of VSCode as an alternative to the GameMaker IDE.
- Rumpus Community Edition SDK: In the few weeks leading up to the launch of Levelhead, I built a public API ("Rumpus Community Edition" a.k.a. "Rumpus CE") to allow players to build their own tools and sites using player and level data from Levelhead. To give those devs a head-start on building something, I made this SDK specifically for interacting with Rumpus CE.
I got a PhD in Cell & Molecular Biology back in 2014, and then immediately joined my brothers in co-founding Butterscotch Shenanigans where I ended up mostly doing webtech and, as of July 2021, now occupy the CEO role. Yes, that's a weird path. It's a long story.
Anyway, I'd be remiss if I didn't take a moment to force my dissertation upon you, dear reader:
"Quantitative single-cell imaging reveals insulation of morphogenic signal transduction"