My Portfolio

Personal Website Projects

These website projects were designed and coded entirely by myself in my spare time.


A Chatbot

Technologies: Object Oriented PHP, MySQL, SQL, HTML, CSS, Javascript, Natural Language Processing
Soft Skills: System Architecture
This chatbot, dubbed Spiraleye, took many hours of pacing up and down and a couple of times sitting bolt upright in bed, to perfect. It is written in PHP and has a MySQL backend. It uses an algorithm as it's engine and uses a few logical techniques to simulate conversation. In a similar way to Searle's Chinese room, it does not understand or process language (yet!), so it won't win any Turing awards. It is weak A.I (as opposed to strong A.I that does not yet exist), but it does mostly hold a conversation. You might call it a surrealist Spiraleye Chatbot...

In my Github

Please also see my Github

floodRisk API/App

See projects: Flood Risk API | Flood Risk React App
Technologies: python, flask, json, MySQL, docker, REACT
Soft Skills: System Architecture
An app to determine the flood risk from the Environment Agency data, for a postcode in the UK. There is a REACT App to consume a Python Flask flood-risk API.
I created a Python script to process the Environment Agency CSV data for flood risk by latitude/longitude and postcode and put it in a MySQL database. I thought about using AWS Lambda for running the script, but in the end I decided that was overkill. The script did take a long time to run as there were 1.4m rows of data in the CSV, but it was not necessary to use the AWS service to run it.
I developed the API in Python Flask, which is also in my github. Flask is lightweight and easy to implement and allows for flexibility. There is an endpoint for floodRisk which takes a postcode and returns flood risk data if the postcode is found in the data. There is also an endpoint for searching postcode matches by inputting partial text - this is to help with later development of nearby data.
The API is available in a docker container in the repo. The advantage of using docker to package the implementation is that it can now be run on any machine with docker installed and the API will automatically install it's own dependancies inside the container.
I also wanted to learn to use REACT to consume an API and build a front end for it, primarily. On using it, it seems well suited to changing data inside components which can be linked to an API via form input.
Future Development
Add the ability for the FloodRisk Component to pick up nearby data. This will need a new API endpoint to generate a list of nearby postcodes based on a postcode input. These nearby postcodes would then have data printed for them via the original flood risk API call.

isVegan API

See projects: isVegan API | isVegan React App
Technologies: python, flask, json, sqlite, REACT, Javascript
Soft Skills: System Architecture
An API written with the flask microframework in Python. It's aim is to list foods and provide an endpoint to determine if the foodItem is vegan and detail any caveats. There are endpoints for foodItem, category and isVegan. Initially I thought I would find a dataset to query in the API, but after thought I made the problem a programming one – create API endpoints to insert the data (and later to have it be approved), instead of just reading a load of pre-set data. There is some basic error checking and an included sqlite database which will hold the data. Although this might not be the best idea in terms of security, if the project is intended for production this would change.

I built a front end in React which consumed the API. It has a set of CRUD forms for the endpoints foodItem and category and it has a form field for submitting to isVegan. The API was amended to accept text and partial text and return a list of matching foodItems and their isVegan status. Future development is to build a Vue front end for comparison with React.

Word visualisation scraper

See project: Word visualisation scraper
Technologies: python, nltk, d3.js, json, javascript
Soft Skills: System Architecture
Takes in a URL and outputs a JSON data file of the most common words within that URL, along with a couple of other pieces of language processing information. This file is consumed by a d3.js script to generate a visual word cloud as a HTML page.

Word generator

See project: Word generator
Technologies: python, nltk
Soft Skills: System Architecture
Word generator that takes in a set of letters and generates a list of words of a certain length. Managed via command line. Requires NLTK.

Recent Professional Website Projects

These projects were implemented while in my current position

Alumni website

Technologies: Responsive CSS/Media Queries, Raiser's Edge, Google Analytics
Soft Skills: Leading team meetings, organising workload
I was asked input into assisting with a Raisers Edge website implementation using NetCommunity Spark software. I implemented Google Analytics and helped with analysing the data to improve traffic and conversion. I also added a style sheet to the Raisers Edge website to convert it into a mobile responsive website. Had monthly meetings to discuss amendments, which I mostly took the lead on.

System Library

Technologies: Object Oriented PHP
Soft Skills: Organisation, planning, system architecture
Added a class library within the company intranet, which included class files in PHP for utility and different functions. For example, date class/functions, string class/functions, array class/functions, member class/functions. All of which are being added to and built upon. Some of which replace existing functions which were inconsistently organised in several files in different locations, making updating and maintaining easier when collated in the library.

Permissions system

Technologies: Object Oriented PHP, MSSQL, SQL, HTML, CSS, Javascript
Soft Skills: Organisation, planning, system architecture
An object oriented PHP system for adding intranet permissions, adding a user to a group and allowing either a user or a group to have differing access levels for permissions on resource URLs. There was a feature for disallowing folder inheritance, similar to Windows UAC and also for differing levels of access for each user/group/resource. The System was designed with a requirements document, ERD and database model. The system was implemented within an intranet which was built with MSSQL and PHP. Authentication is managed via a workplace singal sign on authentication system.

Guidebook PWA mobile app

Technologies: PHP, MySQL, CSS, HTML, Javascript, Progressive Web Application
Soft Skills: Organisation, leading requirements meetings, planning, system architecture
This is a Progressive Web Application (PWA) to provide functionality offered by a much more expensive app offered by a third party company. The idea was to disseminate various types of information to new students in order to save paper and make this process more efficient. Initially I had requirements meetings to establish needs. A custom PHP/MySQL CRUD CMS was built to manage a set of basic pages within the app and a vanilla Javascript service worker was implemented to enable caching and installation of the PWA on mobile home screens. Future development could include using push messages.

Previous Professional Website Projects

These website projects were coded while working at Granite 5, until 2017.

Cambridgeshire Chambers of Commerce

Involved for the duration of: Jun 2012 - May 2017
Technologies: PHP, MSSQL, MySQL, CSS, HTML, Javascript
Soft Skills: Organisation, time management, planning, system architecture
A high profile offline database integration with a WAMP backend, including an MSSQL server where third party T-SQL updates are made to the database. The website serves up member data, allowed members to post news, advertising and events and make changes to their details. As well as code the website, I modelled the database and ensured the correct data was imported/exported from the third party MSSQL system

Casas Cantabricas

Involved for the duration of: Feb 2006 - May 2017
Technologies: Object Oriented PHP, MySQL, Responsive CSS/media queries, HTML, Javascript
Soft Skills: Organisation, customer service, commercial awarenesss, time management, teamwork, planning, system architecture
A luxury Spanish holiday website where users can see real-time booking information for accommodation. This project had a legacy CMS, developed over a period of 10 years, which needed to be integrated into a new front end. Both the legacy and new systems had MySQL database backends.

Scotsdales Garden Centre

Involved for the duration of: Oct 2014 - May 2017
Technologies: PHP, MySQL, SOAP XML, Responsive CSS/media queries, HTML, Javascript
Soft Skills: Organisation, customer service, commercial awarenesss, time management, teamwork, planning, system architecture
This project involved integrating an off the shelf EPOS system with Granite 5's CMS backend. The products were imported via a SOAP XML feed and processed in a robust way to counter any data discrepancies and loss of connectivity or data. The product set was then allowed a set of admin features that could be adjusted daily for pricing, delivery options, special offers and locations. The site was mobile responsive and multi-device compatible.

The National Council for Training Journalists

Involved for the duration of: Mar 2011 - May 2017
Technologies: Object Oriented PHP, MySQL, Responsive CSS/media queries, HTML, Javascript
Soft Skills: Organisation, customer service, commercial awarenesss, time management, teamwork, planning, system architecture
This project involved integrating the website MySQL database with a remote MSSQL database server using data migration software called Pentaho and the in-house CMS built in PHP/MySQL. The website allowed members to have different roles; students to see up to date exam results, apply for awards and exams and also allows tutors/admin staff to book exams. There was also a time/role limited asset library for exam documents and videos. I was responsible for the technical aspects of the project including specification, architecture and build. I continued to support and develop this website while at Granite 5.