Meme It: Real-Time Multiplayer Meme Game
Overview
We built an online multiplayer meme game where players are dealt randomly-chosen meme templates, write captions under a time limit, vote on each other's submissions, and see a leaderboard at the end of each round. A game holds two to eight players in a code-joined lobby, with an admin who controls settings (round count, time limits, super-like and super-dislike quotas, optional template swapping) and can kick disruptive players. A chat runs through the lobby and the game so players can react in real time. I was group leader for the project, working on the lobby and game UI, the draggable text-box system for meme creation, the proximity chat, and the round-start synchronisation that keeps all clients in step.
System Architecture
The non-obvious component is GameJob: a per-game background thread that ticks once a second to drive state transitions, so the GameController stays responsive and every connected client follows the same authoritative clock. Authentication is UUID-token-based, which is enough to keep random users out of running games without dragging in a heavier auth layer.
Final Result

The deployed game is fully playable end to end: code-joining a lobby, creating memes with resizable and recolourable draggable captions, voting with limited super-likes and super-dislikes, and a round-and-game leaderboard that highlights the round's best and worst meme. SonarCloud gave us A-grade on every metric across both client and server, and JUnit on the backend plus Jest on the frontend put coverage above the 75% target.
Problem We Struggled With
We hit a Google App Engine cold-start issue where the Spring Boot backend's slow startup combined with App Engine spinning up multiple instances in parallel caused in-memory games to crash if a request was routed to a different instance mid-game; once the backend was warm the issue disappeared, but it was a real reminder that an in-memory game state and an auto-scaling deployment target are an awkward fit.