Back to Home
Raincode Jan. 2022-Apr. 2022

Raincode was a project as part of my college course's final NEA (Non-Exam Assessment). It was ambitious for college projects and vastly surpassed every other project submitted that year for the exam board, described by my teacher as being inspiring and the most work he's ever seen done for an NEA project. I received an A* which contributed 20% to my final grade for Computer Science.

The project itself was to develop a website that gave users a platform to practice their programming skills by solving small problems, while competing with other users to complete the problems first. In terms of technical capability and function, this required many different moving parts in order for the website to scale properly according to (hypothetical) demand.

For example, the entire site was realtime. This means that if a player changed their username, it would be immediately propagated to all users who could see that user's username on-screen so that it would update in realtime. Additionally, this realtime behaviour was required for the game itself for players to feel engaged with other players and to allow for a chat so that users could discuss the game

There were 5 different back-end services: an authentication server for handling users, a matchmaking server for handling games, a "cronjob" server for handling recurring jobs that needed to be executed every few hours, a realtime distributor server to connect many different users to the many different back-end services, and finally a "dispatch" server which securely executed and validated the output of solutions according to the problems they were intended to solve.

On top of the project itself, I recorded the entire development journey over 4 months with a 1700 page, 150,000 word report which discusses both my initial ideas and plans, as well as the development progress itself and finally ending with a full evaluation of the website, including changes I would've made in hindsight and what goals I didn't meet fully in the timeframe.

For pre-production/development, each page was designed using Figma, with architectural design being designed with Diagrams.net. Also, DrawSQL was used to visualise the database beforehand. The database used PostgreSQL with caching done through Redis. Supabase was used for content delivery, for example with user's avatars.