Portfolio


What I build.

Things I've worked on...






Google Maps Address Saver

This is a small Django project created as a means to experiment with the Google API. The project was built to authenticate with the Google API, create a Google fusion table using the fusion table API and render a Google map. When a location is clicked on the map it's checked and verified that it's a legitimate address and not a mountain/forest/lake etc. Once verified an Ajax post request is sent to store the coordinates of that location to the created fusion table as well as a sqlite table of addresses. The list of verified locations clicked then appear in the table below the map and a marker is placed on each of these clicked locations.


Git Repository Youtube

UWP Access

UWP-Access is an app built in Python Flask designed to help merchants fulfil the requirements of GDPR. The app installs a widget on a merchants store which allows customers to send data access requests at their desire. The merchant gets a notification in the Shopify admin that a new request has been received. Once they click a button to confirm the request a request is sent to Shopify pulling all customer and order data down for that particular customer. The payload received from Shopify is then converted to CSV and automatically emailed to the customer so that no data resides on the merchants machine or email.


Private Repository

GLTC Middleware

The Great Little Trading Company is an award winning online retailer selling children's furniture. The project required the development of middleware to communicate between Shopify and their fulfilment provider. AWS Chalice along with MySQL was used to create a serverless application through AWS Lambda and API Gateway. There were four main parts to this project which were each their own standalone apps: Orders created on Shopify: This app listened to Shopify's order create webhook processing incoming orders and converting their JSON payload into XML in the desired format required by the fulfilment provider. Once the order is converted to XML it is then uploaded to S3 and parked with a record to the file stored in a table on the MySQL instance. Proceeding this, an external risk assessor app verifies the order payment and then sends an update webhook, the middleware receives this update and sends the order to a redis queue. A worker then processes the job, pulls the given order down from S3, appends it to an accepted orders file and then reuploads it to S3. A scheduler executes over a period of time to send the accepted file to an SFTP server which is then received by the fulfilment provider. Orders returned/cancelled/shipped: A scheduler running every minute would scan an SFTP server for a list of orders uploaded by the fulfilment provider. Once a file was uploaded it was pulled down and converted from XML to JSON. A request would then be sent to the Shopify API to mark the order as returned/cancelled/shipped. Inventory update: A scheduler running every minute would scan an SFTP server for a list of products and their updated inventories. Once a file was uploaded it was pulled down and converted from XML to JSON. A request would be sent to the Shopify API to update the products inventory. Boto3 was used in conjunction with AWS SES to send notifications when uploaded orders weren't recognised.


Private Repository

Sync Store

Sync Store is a Shopify app built using the Shopify App template. The app is designed to sync products and collections across multiple Shopify stores so merchants who have a dev, staging and production store can keep them all up to date. Technologies used for this app were Python, Django, Javascript, MySQL, Cron and Celery for asynchronous requests.


Private Repository

Chupi.com

Chupi.com is one of Ireland's largest e-commerce sites built on Shopify. The goal of this project was to design, author and implement a suitable development process as well as advise and build new features for the final quarter of the year. Deploybot was used in conjunction with Github to create a smoother and more scalable development process for changes on the site. Documentation was authored for the team to adhere to when implementing changes. Metafields were utilised to develop a means for non developers on the team to be able to update site contents in the background without having to edit the HTML of the site. AJAX was used on the product page and cart to allow for customisable products that weren't built into Shopify. An intelligent search feature was implemented through apps installed on the Shopify store. Javascript and liquid were used to develop a smart filtering system on the site.


Private Repository

Shopify App Template

Due to there being common features amongst all apps, the Shopify app template was started with the intent of decreasing the time it took to produce apps on the Shopify App Store whilst adhering to good software development practices to minimise bugs across all apps. The App template is written in Django and the features to date are: - Install/Authenticate: Allow for the app to be installed on the given Shopify store and store the generated access key - Subscriptions charge: Have the necessary subscription requirements built-in so that the desired monthly fee to be charged can be easily changed - Webhooks: Install and listen to all Shopify webhooks by default (product/order/customer create/update/delete etc.) so that whatever was not required could just be discarded as needed - Full test coverage: Test coverage was at 95% through all apps within the project so that everything that was already built didn't require any fixes for future apps. A template for an automated continuous integration and deployment process was also setup using Jenkins and AWS codedeploy


Private Repository

Personal Site

This is my personal website, built in Python Flask. The site allows me to login and add/edit existing projects in my portfolio. An analytics type system is also implemented into the project listings to see exactly how many hovers and clicks each project in my portfolio has, this is done using through AJAX which sends a post request to my projects route which is subsequently then stored in the database. A cron scheduler is used then to send a slack webhook every evening with a breakdown of all projects and the number of hovers/clicks each received that day.


Git Repository Youtube

Errands App

A simple errands to do list app developed in Django which allows a user to login see a list of errands as well as add, edit and delete an errand.


Git Repository

Mouse Movement Recording

A small website recording feature that uses Ajax to record the x, y position of a mouse every second as well as clicks. Selenium is then used to replay the recorded mouse movements and clicks (see /static/js/mouse_recording.js and selenium_recording.py).


Git Repository Youtube

Social Shopping

Helping build and test a Flask Shopify app enables users to include their Instagram Feeds filtered by hashtag on their Shopify Shop.


Private Repository

Emails

This project involved generating key stats and outputting them to a HTML email to be sent to heads of departments and general managers of hotels using Flask with a cron scheduler. The following emails are generated by the system: General manager email- This email goes out to all GM's every morning at 7am and gives them a breakdown of overall hotel and individual department performances for the previous day. It also shows which staff members were late/absent/had no breaks amongst other key HR stats. Group HR email- This weekly email give heads of HR their key stats for each hotel Group accountant email- This weekly email give heads of accounts their key stats for each hotel and how they are currently performing for both the current weeks and previous five week periods


Private Repository

Alkimii Admin Settings

Admin settings interface built in ruby on rails to allow for adding and editing hotels/users/logbooks as well as managing other internal settings of the system. This was done as a means to transition from the admin system rails provides by default.


Private Repository

Database migrations

This project involved building a database migration service which would provide consistency across all databases in alkimii. The system displayed a list of all tables currently in each database. When a table was added, every database was updated with that table, when a row was added to a table every other database containing that table also had the row added. A delete and rollback feature was also implemented which first added the table name, row name and data for each specific database into a Delete Table and then deleted them from all databases containing them. The rollback feature would reverse the delete using the row names and given data from the Delete Table. A duplicate feature was also in place which would allow you to duplicate schema by itself or both schema and data.


Private Repository

Hotel Voucher System

This initially started as a final year project for DBS. The goal was to build an application by yourself in a technology you weren't familiar with, for this, I decided to build a hotel voucher system for alkimii in Python and Flask. The system allowed hotels to login and view their voucher sales (which vouchers were active or validated, date sold etc.) as well as sell, validate vouchers or update voucher templates. When the voucher was sold a PDF was generated using Flasks XHML2PDF module and could be emailed (using Flask-Mail) or printed off directly. SQLAlchemy was used for all database calls and slack webhooks were integrated as well to get a live feed of all vouchers being sold. System was unit tested with 100 % pass and 90 % code coverage as well as Selenium tested. Over 500 vouchers have been sold as of 2016 with no downtime to date and took a duration of three months. I was awarded a first class honours for my final project in my postgraduate HDIP as a result.


Private Repository

Rates

The objectives were to calculate the weekly rates of each staff member in all hotels and store them in a table so the main system could just pull the data from the given table directly. This was one of my bigger projects as considerations like PRSI rates (both UK and Ireland) as well as holiday/bank holiday/sick pay all needed to be included in the calculation. A 78 hour rule feature was also implemented to calculate the amount of hours exceeding 78 some staff may have worked in a given two week period and store these values in a table for the main system to be able to lookup. Another feature built in this system was the monthly time sheet audit, this was a CSV generated which would get all the different categories of hours (normal, holiday, bank holiday etc.) and output their totals for each staff in a hotel. The time sheet audit had to be flexible (output the hours worked between any two dates) and fast so raw SQL was used instead of SQLAlchemy.


Private Repository

Supplier System

The objectives of the project were to build a demo supplier system for suppliers to login and see their orders off hotels as well as be able to confirm orders and direct message hotels. They could also add food items they sold to their inventory as well as assign prices to them and current stock numbers.


Private Repository

Flask Admin System

This was a test project required by alkimii to be done in Python and Flask with a SQL Server backend. The user could login and then proceed to add and delete other users as well as see a table list containing all users. The duration of the project took approximately one week as it was my first every project using Python and Flask.


Git Repository

Online Retailer

This was another college group project with the goal being to build a fully functional MVC web app in the .Net framework. The site chosen was an online retailer which allowed users to create an account and then buy items.


Git Repository

DBS-Banking-System

This was a group project which required the development of a student credit union account management system in windows forms for use with relations SQL database. The purpose of the project was to introduce students to three tier app development by getting them to incorporate a UI, business logic layer and a data access layer.


Git Repository

Image Processing: Count Fingers on Hand

This project involved using DCUs CIPA (Centre for Image Processing and Analysis) VSG toolbox in Matlab to count the number of finger held up by five different hand images.


Git Repository Youtube

Vehicle Parts Importer LTD.

An introductory C# console application built to provide a vehicle parts importer company with a strategic IT system by allowing them to add orders, update stock and also print invoices to excel.


Git Repository

DBS Student Admin System

A simple windows form application using lists and arrays to simulate a student admin system.


Git Repository Youtube

Coherent X-Ray Diffraction Imaging

Simulation of a theoretical derivation of the diffraction pattern obtained from an incident x-ray beam on a hydrogen atom between the 1s and 2p states.


Git Repository Youtube