Portfolio Website for Davin Stirling

About

Background

Hi, I'm Davin, an IT Professional with over 12 years industry experience, pivoting into web development

I'm mainly interested in backend technologies, eg Java, PHP, Node, GraphQL, and am keen to build on my experience in a collaborative and supportive environment that embraces diversity

I'm eligible to work in the UK, where I'm currently based, and also in New Zealand where I lived for 12 years pre-covid

While I am currently employed, I'm open to future opportunities that are related to wellbeing/health care/psychology - here's my Developer CV

Qualifications

Java course - mthree, March 2022

Certified Scrum Master - Agilify, 2020

Full Stack Web Development bootcamp - iO Academy, 2020

Certificate of Completion for the iO Academy Full Stack Web Development Course, awarded to Davin Stirling

First Class BSc (Hons) in Computer Science integrated with IBM UK

Davin received a First Class Bachelor of Science Honours Degree in Computer Science, Integrated with IBM UK, from the University of Portsmouth

Interests

I'm interested in good design & architecture, psychology and mental health, sci-fi shows, traveling and making short films

GitHub Profile

Projects

* Tech Keyword Filter *

| | | | | | | | | | | | | | | | | | | |

| | | | | | | | | | | | | | | |

Total Projects: 22

Task Battleships

Added August 2023
Task Battleships website

If you have a lot of tasks to do and can't decide which one to do next, try Task Battleships! First enter all the tasks, then hide them in the battleship grid, and surprise yourself with your next task!

I made this for a community coworking group that I attend online, as sometimes people, including me, have trouble deciding what task to tackle next.

I deliberately used JavaScript so I could store the data in an array in the browser and get the site up & running quickly, and not have to deal with storing user's data in a databases and then providing user access etc.

Ada Rock Paper Scissors

Added Dec 2022

Rock Papar Scissors written in Ada

Ada is a programming language commonly used for safety critical systems.

I've been trying to learn its syntax via the AdaCore website, and started making the Rock Paper Scissors game to practise using it and the GNAT Studio IDE

Python Weather Project

Added Nov 2022

Python Weather website showing a list of locations to choose from

I used python to query a public REST weather API, and retrieve a list of locations, then display the weather for a given location.

This project was created during a 2 week python bootcamp - later on I refactored the code to use OOP classes for Locations and Forecasts

Python 3 | Flask | Jinja templating engine | HTML5 | REST API

Shopping Cart using Java and Spring Boot

Added March 2022

XYZ Retail Store Shopping Cart written in Java

For the final project of our intensive 6 week Java course, I worked as part of a team of 5 to create a Shopping Cart App.

The brief was to create an app where users could view products, add them to the cart and generate an invoice with a price breakdown that included taxes.

While we were able to get a lot of the services written eg Customer, Product, Type, Order History, we didn't have enough time to integrate the different services so they could work together.

I spent time working on the API calls for the Type class (so users could see Products by Type eg Books, CDs), dynamically generating the Show Types buttons based on whats in the database, combining the Search and Display Products pages functionality, trying to write more performant queries using Hibernate syntax and adding more CSS styling.

More

The architecture was intended to be a microservices setup with REST API calls and MVC, but we ended up with one frontend repo and one backend repo with REST calls.

During this project I got to appreciate the importance of having sufficient up front design, and clearer communication about whats important in the requirements and also between team members. As part of the Java course we also created a short presentation and spoke about our roles and challenges with the project.

Next, I want to try and finish integrating the services and get them working together, upload the code to GH and work out how to deploy it all to Heroku with an online relational database.

Java v11 | Spring Boot | MySQL | MVC | REST API

Console version of Rock Paper Scissors using Java

Added Feb 2022

Console version of Rock Paper Scissors game written in Java

I've created a console version of the Rock Paper Scissors game.

This was my first assessment and verbal code review, as part of a course I'm taking to relearn Java. I definitely reused some of my earlier code from my JavaScript version of this game.

I've since refactored the code into more smaller methods, so each has less responsibility.

Hackathon - Job Habit Tracker

Added Feb 2022 | Updated Apr 2022

Job Habit Tracker app

* This demo app is currently unavailable while I look into alternative hosting providers, as Heroku is no longer offering a free tier from 28 November 2022 *

I took part in a Hackathon run by Troopl between 2-6 February. The brief was to create a Goal Tracking App, so I decided to track job seeking habits.

I used MERN stack with the MongoDB Atlas cloud database and GraphQL API for the backend, and React for the frontend. The app was deployed to Heroku as 2 separate repos - this involved me learning to extract and then setup environment variables and secrets in Heroku for the first time.

The app currently has features to Register and Login Users, and to display Profile info and Goals on the Dashboard page. As it turns out, displaying the Goals was harder than I thought it would be, as React has its own way of rendering data from arrays, and I'm more of a backend person.

Now I'm in the process of creating and processing a form in React to add a new goal to the database, by calling the existing GraphQL mutation.

GraphQL API | JavaScript | Node.js | Express | React | HTML5 | MongoDB Atlas | Heroku Hosting | GitHub API Repo | GitHub UI Repo

Wellbeing Tracker Questions using Node, GraphQL API and MySQL

Added Jan 2022

GraphQL API used to provide Wellbeing Tracker Questions

I liked working with GraphQL on the bootcamp, so wanted to practise using it to make a Wellbeing Tracker last year.

However at that time I could not get GraphQL to work with either Node and MySQL, nor with PHP and MySQL. As the Tracker's only tech requirement was a relational database, I looked at my existing repos that used MySQL, and the most suitable was a PHP app that used the MVC framework. So thats why my original Wellbeing Tracker uses that tech stack.

However I was later able to get Node and GraphQL to work with MySQL, after being advised that I needed to use the promise-mysql npm package, which was not mentioned in the online tutorial that I had found and was following.

More

The Tracker lets users answer questions from the GP-CORE form about how they have been feeling over the last week. I've tidied up the repo and included 2 queries for now, to get all the Questions or a single Question.

Next I'd like to add in some new queries to get Users and Questions together, add in some mutations so that a given User's Answers can be saved, and find a better way of refactoring and structuring the code that connects to the DB.

JavaScript | Node.js | GraphQL API | express-graphql | Express | promise-mysql | MySQL | GitHub Repo

PowerShell Scripts to manipulate Users and Mailboxes

Re-added Jan 2022

PowerShell Script to create Public Folder

While working on a service desk during 2017-8, I created several Powershell scripts, that manipulated User and Mailbox objects, within a corporate Microsoft environment.

One example was a script to create Public Folders in Exchange, using a seed file of input data, as that was a common and time consuming task.

Another example was a script to move security groups from one manager to another within Active Directory. I created this script during a restructuring period when multiple managers were moving departments, and it reduced the amount of time my Team Leader had to spend on admin work after hours.

Laravel TShirt App

Work in Progress - Dec 2021/Jan 2022
Screenshot of the Laravel TShirt App

I've started learning Laravel 8 by following a tutorial about making a CRUD app, but customising the fields to make a TShirt App instead. I've also recently added an Image Uploader and deployed it as a demo site.

I actually own a lot of tshirts, as I collect them whenever I go traveling, so they are usually about events or places I've been to. Sadly most of my tshirts are still in Auckland, as I only had a few with me when I traveled to the UK.

So far I've noticed that, compared to the Slim framework, there's a lot less boiler plate code required to get basic functionality up and running.

Delorean themed Random Quotes Template

Added Dec 2021
Screenshot of the Delorean Random Quote Generator Template website

I created a unicorn themed Random Quote generator with positive affirmations and then decided to turn it into a GitHub Template that others can use to generate their own Random Quotes.

Since I made this pre-Christmas, I also added a Toggle button to give a Snowing effect and make it more festive!

You can customise the template by adding your own text and images into the relevant arrays. For the Template repo I've used a Delorean theme, with quotes from the film Back to the Future.

Template | Frontend | JavaScript | CSS3 | HTML5 | GitHub Repo

Wellbeing Tracker using PHP and MVC

Updated Dec 2021

Screenshot of the Wellbeing Tracking website - which is a list of questions on the left, eg 'I have felt ok about myself', with groups on radio buttons on the right where you can choose an answer on a frequency scale between 'Not At All' and 'Most of the Time'

View Live Demo

I'm interested in psychology so decided to digitise the GP-CORE form where you can answer questions about subjective wellbeing.

CORE Forms from the CORE Systems Trust can be used to monitor changes in wellbeing over time in health care situations. There are different versions, like GP-CORE for the General Population which has 14 questions.

After collecting the answers on the form, and storing them in the MySQL database, I plotted the overall score on a graph using the JpGraph library. This app is built using the Slim 4 framework and MVC pattern, and is still a work in progress.

More

In June I started restructuring the app into separate pages within a feature branch, and added register/login functionality. In August I finished protecting the routes and individual pages with sessions, and the app now has enough features that I've deployed a live demo version. In September I deployed a more mobile friendly version with better Media Queries and improved formatting of the Question Form

Next I need to tidy up my git branches so that all the feature commits in different branches get merged into main, and then I can start work on adding more features, like a password reset option and additional forms.

Some of my bigger challenges have been working out how to better use the graph plotting library, and learning more about using Git (eg cherry picking & stashing) in order to resolve certain branching issues I came across. I also discovered that some tech isn't meant to work together - like trying to add JWT to my project without realizing its mainly intended for APIs and I'd written a (small) monolith...

Full Stack | PHP | Slim 4 | MVC | JPGraph | MYSQL | CSS3 | HTML5 | Responsive | GitHub Repo Feature Branch

Cat-themed PWA ToDo App

Updated Dec 2021
Screenshot of the PWA ToDo App

As part of the bootcamp last year we did a half day workshop on PWAs or Progressive Web Apps.

We took an existing ToDo app written using the Slim 4 framework, and turned it into a PWA by adding a Service Worker to provide offline support.

I've since updated it by improving the styling and adding a cat-theme. I've also now got the live demo site setup and working with the Offline browser option.

Full Stack | PHP | Slim 4 | JavaScript ES6 | HTLM5 | PWA | GitHub Repo

Rock Paper Scissors Game

Work in Progress - Oct 2021
Screenshot of the Rock Paper Scissors Game

I'm currently working through a FrontEnd Mentor Challenge to build the Rock Paper Scissors game, and I've recently improved the layout and styling.

I've deliberately tried to break the challenge down into tiny tasks and put them in separate branches, and then documented in the Readme how I went about solving this challenge in an iterative way.

Frontend | JavaScript | CSS3 | HTML5 | GitHub Repo

PHP Template with Unit Tests for Code Katas

Sept/Oct 2021
Screenshot of the PHP Template with Unit Tests for Code Kata

I was working on a PHP code kata with my mentor and couldn't remember how to setup unit tests. So I thought I would make a GH Template repo that was already setup with such tests, so I could easily reuse it when practising other code kata or challenges.

Reversi Game Kata

I've since cloned the repo and used it for a kata to work out the next legal moves for a game of Reversi.

Poker Hands Game Kata

I'm currently also working through implementing the rules of Poker for another kata with my mentor.

48 Hour Hackathon - Lemonie Mental Health Exercises

Submitted 18 July 2021

Screenshot of the Lemonie Mental Health Exercises website - the prototype contains 2 exercises and elements of gamification

I took part in my first 48 Hour hackathon over the weekend 16-18 July 2021, as part of Level Up Society Hackathon

It was both exciting and challenging to work with new people to try and design & build a prototype with gamification elements, all within 48 Hours!

We choose the categories of Mental Health and Learning and made a website where you can complete exercises based on a Dialectical Behaviour Therapy workbook

I mainly worked on setting up & designing the Firebase cloud DB, and writing functions using async/await in vanilla JS to add and get data from the DB. I also tried to integrate that with the Vue front end, but ran out of time.

Our Submission is here - Lemonie: Self Reflection for Recovery, by Team Awesome Force

Next I'd like to finish integrating the front and back ends and setup proper access controls for the cloud database.

Full Stack | Firebase Firestore DB | JavaScript ES6 | Vue v2 | Bootstrap | Tailwind CSS | GitHub Repo

Killjoys Themed Vue Example

Work in Progress - July 2021

Screenshot of the xxx

I attended a webinar about Vue and then googled for some further tutorials to make an example page, themed around characters & situations from the TV series Killjoys

Hack Night - Space Flight Booking Site

Added April 2021

Screenshot of the Space Flight Booking Site - An outer space background with many small stars, with 3 orbiting planets indicating the day, month and year that you can book your space flight, and a central Check button representing the sun

I attended a mini hack night in April, where teams of 3 were challenged to create a system that allows people to book a space flight, all in under 90 mins!

We decided to make a website where you could select dates, and I was able to contribute ideas & code from my previous solar system animation, plus async/await for calls to the deliberately flaky external API.

Although we didn't finish the website that evening, I really enjoyed the experience of being thrown together to create something tangible within a short timeframe.

Next I'd like to finish my take on the site by adding suitable booking success & failure images and making them appear & disappear at the right time.

Frontend | JavaScript | HTML5 | CSS3

RESTful Banking API

Finished March 2021

Screenshot of RESTful Banking API

After learning about RESTful APIs and Node, I finished created a Banking API, themed with characters from the TV series Killjoys.

I later documented the API by adding routes, example requests, and local install instructions to the Readme

Backend | JavaScript | Node.js | Express | MongoDB | REST API | GitHub Repo

Social Media Site using GraphQL

Updated March 2021
Screenshot of Social Media Site

As a team of 4 we made a 'Today I Learned' social media site called Knowsy. We decided to use the MERN stack, with separate repos for the front & backend, and GraphQL for the API calls to MongoDB.

More

We mostly did pair programming and I chose to work on the backend API. I was heavily involved in researching & creating the GraphQL queries & mutations, and later integrating the front & backends. We handled login manually, using the jsonwebtoken and bcrypt node modules

This was our first scrum project working unsupervised, and I learned that I definitely prefer a more structured environment. Next time I would allocate time for researching before sprint/task planning, as we hadn't used GraphQL before. I would also allow more time when estimating tasks, to deal with the inevitable issues that crop up when trying to integrate different repos worked on by different people.

On the demo site above, you can currently create an account or login with an existing account. The demo database is hosted in the cloud using MongoDB Atlas

Full Stack | GraphQL | JavaScript ES6 | Node | Express | JWT | BCrypt | React | MongoDB Atlas | GitHub Repo

To Do App using PHP MVC

Finished December 2020
Screenshot of To Do App

We learned about MVC & PHP frameworks, then used them as part of an exercise to create a To Do app. We cloned an existing repo that contained the Slim 4 framework, and worked through the architecture plan as a group. I then worked independently to create the functionality to add, complete or delete a task from the underlying MySQL DB, using Routing, the Dependency Injection Container, Factories, Controllers & Views.

Full Stack | PHP | Slim 4 | MVC | MYSQL | HTML5 | GitHub Repo

Scrum Master for Ecommerce Site using Design Patterns

Finished November 2020
Screenshot of Ecommerce Website

I volunteered as Scrum Master and facilitated our team to create an e-commerce site based on existing product data. I used my previous OO experience to assist the team with creating the architecture plan for the site.

We decided to use the Hydrator Entity design pattern along with a PDO Connection in our LAMP stack, with HTML, CSS & Bootstrap for the frontend. We also reviewed the SOLID principles and adjusted the plan accordingly. I did pair programming to create some of the classes and peer reviewed colleagues code in GitHub. During Sprint Review I gave a non-technical overview of the site's architecture.

Full Stack | PHP | Bootstrap | MYSQL | SOLID | GitHub Repo

Jarver's Crypt Maze Game

Finished October 2020
Screenshot of Jarver's Crypt Maze Game

As part of a scrum team of 8 people, we designed & created a maze game using Javascript. I did some pair programming to design the splash screen wireframe & code that, and coded the eventListeners to detect collisions with the path & ghost obstacles. I also implemented changes after our tutor's code reviews

Frontend | JavaScript ES6| HTML5 | CSS3 | GitHub Repo

Solar System Animation using only CSS and SVGs

Finished October 2020

Screenshot of Solar System Animation

As part of learning Advanced FrontEnd techniques, we created an animation of our solar system, using SVGs and keyframes & animations in CSS