Section I
Hi! My name is Ollie and I am a software engineer from Exeter in the UK. I specialize in web development and I am particularly interested in writing performant code and designing efficient applications.
This page is an overview of some of the projects I have worked on for fun over the past few years. All of the source code for these applications is available on my GitHub along with some other bits and pieces, including the source code for this page.
Section II
This project is a website for my local road cycling club. As well as providing access to general information about the club, the application allows administrators to select a route for the week which will be displayed on the website and sent via email to the mailing list.
Authentication is handled via Strava's OAuth2 implementation, where only administrators' Strava accounts have permission to set and update the route. Once authenticated, additional menus become available which will display all of the user's Strava routes and allow them to select one. A corresponding title and message can be provided, which are displayed on both the website and the email notifications. Club members can indicate whether they will be attending using buttons in the email.
Since search-engine-optimization is important for this particular project it is server-side-rendered. This is done using a serverless architecture to keep hosting costs minimal. Everything is written in Rust which keeps latency low compared to languages like JavaScript since no runtime is required on the underlying server which allows for quick cold-starts, as well as Rust generally being a better performing language.
The front-end of this project is rendered server-side in a Lambda function behind a CloudFront distribution, and back-end functionality is provided by Lambda functions behind an API Gateway.
Section III
Flight Guesser is a game designed to be played when the player spots an aircraft in the real world, where the objective is to guess where the aircraft has come from and/or where it is heading. Points are awarded based on proximity to the correct locations, based on data sourced from the Flight Radar API.
The game has multiplayer functionality; players can create a multiplayer lobby and share a code for others to join. While in a multiplayer lobby, a real-time leaderboard will be available.
The front-end of this project is hosted from an S3 bucket behind a CloudFront distribution, and the back-end is driven by Lambda functions and API Gateway.
Section IV
I have written solutions to some of Eric Wastl's Advent of Code programming challenges.
I have built a simple web application to make it easier to run my solutions. The programs have been compiled into WebAssembly and will run directly in the browser, which runs on all platforms and provides near-native performance. The application uses a web worker pattern to allow programs to be safely terminated early, as well as to not block the main thread while they are running.
The front-end of this project is hosted from an S3 bucket behind a CloudFront distribution. All logic is handled in the client so there is no need for any back-end services.
Section V
This project is a simple tool for learning foreign languages. Each round the player is presented with a word in the source language, and three words in the target language. The player must correctly identify the corresponding word in the target language to score a point. As the player progresses, more words are introduced until all of the 1000 most common words are included.
The front-end of this project is hosted from an S3 bucket behind a CloudFront distribution. All logic is handled in the client so there is no need for any back-end services.
Section VI
The aim of this project is to synchronize a timer between a server and all of its connected clients whilst using a minimal number of requests.
The implementation is driven by websockets which are automatically connected when a client is loaded. On connection, the websocket will push the current elapsed time to the client. The client will use its system clock to update the displayed value based on this offset.
Clicking the button will send a reset request to the server, which will trigger the server to push a zero offset value to all connected clients. Since the websockets will time-out and re-connect every five minutes, the displayed time should not drift significantly. Displayed times are generally within a tolerance of approximately one second, although this can be longer for slow connections.
The front-end of this project is hosted from an S3 bucket behind a CloudFront distribution, and the back-end is driven by Lambda functions and API Gateway.
Section VII
Section VIII
Background image courtesy of NASA Hubble Space Telescope Gallery.