Xing

⮜ Back to Blog

We Have Kahoot at Home

I learned the hard way last year after coming back to graduate school that my beloved Kahoot had been bought out by private equity, led by Goldman Sachs, and now charges high subscription fees for access to features like having more than a couple of students in game at once.

I did end up paying for a month of this last year, ultimately reimbursed by the department (shoutout to Cornell CS), but the experience left such a poor taste in my mouth for a product that I considered ultimately so simple that I just decided to bite the bullet and write my own. After all, spite is of course my best motivator.

So here it is. Introducing my own bootleg knockoff store-brand quiz-based realtime review game.

I call it KaXing.

Since I was building a game from scratch for myself, I added some features I always wanted but never had in Kahoot. Most importantly, the game is controlled not by clicking on buttons on the game board, but from a separate mobile device designated as the remote controller. This lets me walk around the room and point at the projector while still being able to control the game. There's also the option to pause on the question alone, or the question together with the answers, for as long as needed before allowing students to answer (useful for questions that need additional context from me). The short answer questions are graded against a regex instead of a fixed list of correct answers, and there's a map question type too.

The initial prototype was built over Thanksgiving break last year, in just a few days, and tested with my CS 2112 students that semester. I've since used it a few more times and also put in a lot of work over the summer. The visual question editor, though janky, is still a lot easier than editing the JSON manually.

I don't own the rights to distribute any music, though you can specify your own custom music at runtime by passing in a link to a JSON music config file as the query string. I haven't documented the full format yet, but it's a JSON file with the fields theme, end, gg, and q. The first three are strings with links to songs to play for the main title screen, when time runs out for a question, and at the end of the game. The last field is an object where keys are the question length in seconds (like "20") and the values are arrays of strings to songs for that question length. Note your CORS headers must allow my site to read your JSON, or else it won't work.

Right now it's all just running on a single socket.io server in an Azure App Service instance, which is more than enough for my needs with less than 100 students per game, but I don't know how scalable this is. Maybe for a future project I'll rewrite the backend to be more robust, but for now, this works.

Create your own KaXing at michaelxing.com/kaxing. Happy reviewing.

⮜ Back to Blog