Serverless Multiplayer Gaming Platform
Serverless platform where users can create and join QuakeIII games

I made this project to give an overview of the way I work. From architecture to implementation, I talk about all aspects of the project, its value and improvements.
This project is close to a real professional project, in proportion to the cost budget, and I would be glad to discuss it with you.
Demo available Mon-Fri, between 1-4pm, Paris time (UTC+1)
Credentials unique for each user, please contact me to obtain access
PC and good internet connection required


Docker images are uploaded into ECR repositories.
At each front-end react commit, the code is deployed into the serverless amplify website.
A user accesses the amplify website using a public custom domain name. He is redirected to a login page, linked to Cognito data.
After a successful login, the user can press button which will call a HTTP API and trigger lambda functions. Some APIs can only be called by users belonging to the Cognito admin group.
Lambda functions create and manage Cloudformation game server stacks. A step function is used to automatically stop game servers after a given period of time.
When a user joins a game, the client retrieves static files from a S3 bucket, and a WSS connection is established with the ECS game server task.
Each game server is contained within an ECS task. The task is composed of two Docker containers : a proxy and a game server.
A dynamodb table stores all game server data (endpoint url, cloudformation stack name, game server status,…)
Aws resources are deployed using Terraform in the Aws Dev and Prod accounts. A cloudwatch event deploys the resources during working hours, in the prod account.

QuakeIII is a first-person shooter game released in 1999 by id Software.
Initially, the C/C++ game had to be installed on the client machine to be played. But, a port to Js was created so that it can run in a browser.
I decided to use this game for this project, because :
• its license allows me to do so,
• the game components can be separated into several bricks (game server, web server, content server) and are containerizable,
• this game is a pioneer in the history of video games, and one of the first I played.