The client is a React application bootstrapped with CRA and served by NGINX. Authentication is handled by Auth0.
The server is a Koa application (NodeJS) using a MongoDB backend for storing game and lobby states.
We use boardgame.io as our game framework for handling game logic and state.