Presentation Timer is a small application intended to help academics and other people practice presentations with strict time limits. It allows for up to two warnings to be displayed visually or audibly or both at any time during the presentation. The visual warning is modeled after how academic conferences warn presenters about how much time they have remaining.

Requirements about the presentation process at conferences were elicited from Jaana Eigi who provided valuable insights. This is the JavaScript version that runs as a static single page app.


The async web app messaging service found in static-server

Messages can be posted by multiple clients the page will then automatically update for all clients.

The messages are stored on a Mongodb database on mLab.

Made as part of a course.


Quizzer is a small desktop application that reads an SQLite database of countries and then asks what the capital of a randomly chosen country is.

It presents this in the form of a multiple choice question with one correct answer and three incorrect answers.

This is a webapp version of an earlier Tkinter project which does the same.


A generic eCommerce site site with call to action, user accounts and payment processing using stripe API.


Wiki-goo is a mash up of the Wikipedia and google maps APIs. Given an address it returns a marker for that address and Wikipedia articles related to that area so you can discover interesting things connected to that area.

Bootstrap has been used for basic styling and Bootstrap Toggle toggle for sliding buttons.


This project was for a client with a large amount of Flickr data and photos that wanted to transition to a new custom site.

Transferred over 15,000 pictures and all data from Flickr via Flickr API. Making over 100,000 API calls for EXIF, album and photo data. The client was mainly interested in preserving tag and album data.

Built a photo site from scratch implementing a database schema for the data and a file structure for photos. Development was iterative with feedback from the client at each stage influencing the next.

Made a new complete tagging system that allows spaces and special characters which uses the existing tag data from the API data.

The site allows new content to be added and uses React via an API for uploading and selecting content.

Deployed the site and all content via SSH to a VPS running Ubuntu Linux which serves the site using Nginx and Gunicorn, the site is also secured with SSL.