Ray Tracing
Ray tracing screenshot
TypeScript
TypeScript
React
React

This project was an experiment with 2d ray tracing to produce a 3d environment.The user can move and rotate the camera through a "3D" environment generated from a 2D map of walls.

The project is developed in React.Rays are cast from a camera in 2D, and then the distance of the ray to the nearest wall is used to calculate the displayed height and brightness.This is a technique similar to that used early 3D games such as "Wolfenstein 3D".

Chess
Chess screenshot
TypeScript
TypeScript
C Sharp
C#
Docker
Docker
Angular
Angular
Microsoft
SignalR
Google Cloud
Google Cloud Platform
MySQL
MySQL

This project was developed as part of my third year dissertation for University. It is a three tier web application which supports chess games played online between two people, single player games against the computer offline, and offline multiplayer functionality. It is implemented as a PWA which allows for functionality without internet connection (including playing against the computer).

This project allowed me to expand and apply my knowledge with technologies such as SignalR, cloud computing and development of PWAs. This project also provided an opportunity to practice and develop my existing skills with ASP.NET web api development, database design and front-end web development.

Lockdown Quiz Buzzer
Buzzer Screenshot
TypeScript
TypeScript
C Sharp
C#
Angular
Angular
Microsoft
SignalR

During the COVID-19 lockdown, me and my friends would meet up on video calls and play various online games together. We organised a virtual quiz, and needed some way of working out who answered first. This was the inspiration behind creating this buzzer system, which would allow people to "buzz in" as soon as they knew the answer to the question.

I only had a few days to implement the system, so some shortcuts were taken. One example of this is that all storage on the API is done in-memory (instead of using a database) as this was significantly faster to implement, at the cost of scalability. This decision was worth it though, as this system was only intended to be used by a handful of users at a time.

The core requirements for this system were for it to be simple to invite players to a room, intuitive to use, record and display the order that players buzzed in as well as the time difference between them, and the creator of the room can add and remove points from players depending on if they got the answer correct.

An extra feature that would be useful to add that was found from using the system during a lockdown quiz is to introduce a customisable time limit after the user presses the buzzer in which they must answer, to prevent buzzing before the player knows the answer.

Mini Chess Bot Challenge
Chess Challenge Screenshot
C Sharp
C#

My attempt at the SebLague mini-bot chess challenge. The idea of this challenge was to create a chess bot which was as strong as possible, but with a limit of 1024 tokens of source code.

Digital Portfolio
Digital portfolio screenshot
TypeScript
TypeScript
React
React
Remix
Remix
Docker
Docker
Tailwind CSS
Tailwind CSS
Prisma
Prisma
SQLite
SQLite
Next.js
Next.js

This is my digital portfolio. I've rewritten this portfolio several times using various different frameworks, languages and technologies:

  • First in Next.js
  • Then in Remix using the Epic Stack, hosted in the cloud using Fly.io
  • Then simplified to a regular Remix app using TypeScript, Tailwind CSS and MDX, hosted on a VPS using Dokku

I use this portfolio to experiment with and learn about new things.