StudentRun
Six students, one semester, one goal: build a real-time multiplayer game for the web. StudentRun is the result — a fully functional online Jump & Run game. Building it was a different beast from the usual CRUD app, and we leaned on Scrum and CI/CD to keep things on track.
Technologies
JavaScript
We built StudentRun as a full-stack JavaScript app. Node.js powers the backend, Express.js serves the static files, and REST APIs handle game data in JSON. For real-time communication, we use Socket.IO over WebSockets. On the frontend, the Phaser framework renders the game — in WebGL when the browser supports it, falling back to an HTML5 canvas otherwise.
Physics engine
We use Matter.js, a 2D physics engine written in JavaScript, on both the backend and frontend. It handles rigid bodies, physical properties (mass, area, density), and simulates collisions, gravity, and friction.
Continuous Integration / Continuous Delivery
We host the repository on ZHAW’s GitHub Enterprise. Every pull request kicks off automated tests and checks (including test coverage). After passing, one or more team members review the code. Once approved and merged into main, the deployment pipeline runs unit tests again, analyzes the code with SonarCloud, and deploys via an Azure DevOps Self-Hosted Docker Agent to a public URL.
Architecture
The application splits into two components: the backend runs the authoritative game state on the server, while the frontend renders it on the client. Their interaction is illustrated below.
