Jackbox Games (Funkmaster) is a dedicated Content Management System for Jackbox Games Inc., leader of party games genre, the author of such titles as: "The Jackbox Party" series, "Fibbage", "Quiplash" or "YOU DON'T KNOW JACK" series. A tool developed in Electron is used by quiz question writers, editors and media artists who cooperate together in order to efficiently prepare content for each Jackbox Games Inc.
While the project idea was to develop a new version of a tool for creating, editing, managing and publishing the content for Jackbox Games, there were several challenges:
- to improve the workflow between game content writers, voice talents, editors and game developers (and thus their productivity)
- to provide great user expierence
- to refresh an old app look and feel by creating a new, trendy UI
- to use the newest and the most reliable technologies in order to assure a long app lifecycle and high extendability
- to create a standalone app, independent from the OS (thanks to Electron)
Solution / Technology challenge
The biggest challenge we faced developing Jackbox Games (Funkmaster) was its integration with Perforce. Unfortunately, there wasn't any native Perforce client for node.js. Which meant that we had to write a client and a model manager from scratch.
Once that obstacle was tackled, we had to make it work seamlessly with the desktop application, without the need to access the files in the filesystem to perform any task. Also, the user had to be able to make searches not only based on the questions' metadata but also on its content, and we had to prevent the situation where more than one user was modifying (in any way) the same question.
We solved those problems adding a database layer between the Perforce client and the application. The database will work indexing the questions (both metadata and content), allowing efficient searches by any field and fast access to the content. Additionally, we would store the status of the questions (ie, if any user is editing a given question) to avoid simultaneous editions on the same file. Those changes would be broadcasted in real time to the users of the desktop application with WebSockets.
The Application was built on top of the Electron framework, using React to write the components and Redux to manage the state. The backend was responsible to integrate Perforce CMS with the desktop clients. We used Express to handle the requests, and a MongoDB layer to index the content of Perforce's Depot, enabling the users to perform fast searches on the content stored in the depot. Additionally, we used SocketIO on both ends to achieve real-time communication and ensure that clients were always working with up-to-date data.