_jamie_lee_spink

Senior Software Engineer

Based in Malta

Jamie Lee Spink
Jamie Lee Spink
Jamie Lee Spink
Jamie Lee Spink

There is nothing I enjoy more than taking ownership of a project and working towards more maintainable, performant, robust and reusable solutions.

About

With 10 years of commercial experience under my belt, I am still enjoying using my skills to create compelling digital experiences. Having previously indulged in electronic music production, web development became the focus of my attention once I discovered the thrill of bringing functionalities to life and sharing them with the world.

  • Tailwind
  • Javascript
  • OOP
  • FP
  • Lodash
  • Prisma
  • Chrome Extensions
  • Gutenberg Blocks
  • Dato CMS
  • Drupal
  • Nuxt.js
  • Vue.js
  • Git
  • PHP
  • Joomla
  • Wordpress
  • HTML
  • CSS
  • SCSS
  • Angular
  • Node.js
  • Next.js
  • React
  • TypeScript

Projects

https://www.betsify.com.br/

  • Javascript
  • OOP
  • FP
  • Lodash
  • Dato CMS
  • Git
  • Node.js
  • Next.js
  • React
  • TypeScript
  • Tailwind

https://casinogringos.se

  • Node.js
  • Next.js
  • TypeScript
  • Git
  • Wordpress
  • HTML
  • CSS
  • SCSS
  • React
  • Javascript
  • FP
  • Gutenberg Blocks
  • Nuxt.js

https://nätcasinoguide.se

  • Dato CMS
  • Git
  • HTML
  • CSS
  • SCSS
  • Node.js
  • Next.js
  • React
  • TypeScript
  • Javascript
  • FP

https://thepunterspage.com

  • React
  • Javascript
  • OOP
  • Gutenberg Blocks
  • Git
  • PHP
  • Wordpress
  • HTML
  • CSS
  • SCSS

https://sportwettenvergleich.net

  • Javascript
  • OOP
  • Gutenberg Blocks
  • Git
  • Wordpress
  • HTML
  • CSS
  • SCSS
  • React

https://cryptimi.com

  • Javascript
  • OOP
  • Git
  • PHP
  • Wordpress
  • HTML
  • CSS
  • SCSS

https://picksandparlays.net

  • Drupal
  • Nuxt.js
  • Vue.js
  • Git
  • PHP
  • HTML
  • CSS
  • SCSS
  • Node.js
  • Javascript

Experience

  • 2023 - Present

    Senior Web Developer - Flamingo Media

    It's a great pleasure to be taking ownership of a network of sites with zero technical debt. I am taking a particular interest in architecting systems related to features such as live previews and authentication as well as developing custom plugin solutions to remove bottlenecks that I encounter.

    • Node.js
    • Next.js
    • TypeScript
    • Git
    • PHP
    • Wordpress
    • HTML
    • CSS
    • SCSS
    • React
    • Dato CMS
  • 2020 - 2023

    Senior Frontend Developer - WIS

    After an initial period of maintaining and developing new features on existing websites with lots of technical debt, I played a pivotal role in guiding the company towards a more modern tech stack. Although we did not transition to using Wordpress as a headless CMS, I led the migration of all content to custom Gutenberg blocks. Since Gutenberg blocks are based on React, my experience in Javascript frameworks enabled me to lead the team towards 2 major re-releases: The Punter's Page and Sportwettenvergleich.

    During my time in this role, I was promoted to Senior Web Developer and also worked on a chrome extension the company aquired which notifies the user about better odds at competing bookmakers when they are placing a bet. It did this by intercepting the network request and parsing the data. There were a lot of moving parts to this project and although it had a lot of promise, the company eventually discontinued work on it.

    • Git
    • PHP
    • Wordpress
    • HTML
    • CSS
    • SCSS
    • React
    • Gutenberg Blocks
    • Chrome Extensions
  • 2019 - 2020

    Frontend Developer - QM Media

    Initially focused on maintaining a network of Drupal websites, but following my recommendation moved towards a new architecture. Making use of my experience in consuming data from headless CMS's, we transitioned the frontend to Vue.js and Nuxt.js.

    With a custom CMS that uses Firebase and a frontend hosted on Vercel, I found significant improvements on performance and maintainability. As the company then sold their websites I was unable to finish what I started but it was an excellent experience in guiding a small company towards a better system.

    • Node.js
    • Vue.js
    • Git
    • PHP
    • HTML
    • CSS
    • SCSS
    • Drupal
  • 2017 - 2019

    Frontend Developer - Raketech

    Building upon my existing experience in building modern, responsive SPA’s, I developed and maintained Wordpress, Joomla and custom CMS casino affiliate websites. The high volume and fast paced nature of the work exposed me to a wide range of issues and their subsequent solutions. I was able to supplement my Javascript knowledge with PHP skills as required in most legacy CMS frameworks. It has also been enlightening to be exposed to the business requirements of a new company going through a period of rapid growth.

    I was the sole developer in charge of improving and building upon the 150 websites we had for the UK market. I then moved to maintaining a web application which uses Wordpress as a headless CMS, providing data via the Wordpress Rest Api to Nodejs, making use of Vuejs on the frontend, and it's server side rendering framework, Nuxtjs.

    Perhaps the highlight was taking full ownership of developing a new website from scratch. Cryptimi is an affiliate website concerned with cryptocurrency. I delivered the project ahead of time and to a high standard.

    • Node.js
    • Wordpress
    • CSS
    • SCSS
    • HTML
    • Joomla
    • PHP
    • Git
    • Vue.js
    • Nuxt.js
  • 2014 - 2017

    Junior Frontend Developer - PagesJaunes Resto

    Developed new revision of existing food ordering website. Focused primarily on the frontend but took a keen interest in the backend functionality that allowed for syncronised group orders. In hindsight, this was a great role to start my career as I was able to work with lots of tech that would help me in future roles.

    • Node.js
    • TypeScript
    • Angular
    • SCSS
    • CSS
    • HTML

Blog

Performant randomised fetching in Prisma

Performant randomised fetching in Prisma

Have you ever needed to fetch some random rows from a database in Prisma? What if you can't just select random ID's because some rows have been deleted? And what if you have a large database? And what if performance is critical? There are many ways to tackle this problem, each with their own merits. I'm just going to present you with the option I chose.
Read More
Recursion and replacing strings

Recursion and replacing strings

What if you needed to write a function that will replace a string in a blob of data regardless of what shape that data might take. It could be an array of objects, an object containing arrays, a string or...you get the point. This is a great excuse to use recursion.
Read More
Functional programming and dot chaining

Functional programming and dot chaining

How often do we perform a series of mutations on the same data? I don't know about you but I hate to introduce more and more state into the application via variables with more and more confusing names. It's not until you work on a codebase of a certain size that you feel the need to abstract away certain logic into neat little packages.
Read More
Typescript and curried functions

Typescript and curried functions

If you are looking to learn functional programming, currying is likely one of the first things you will stumble across.In a nutshell, it enables us to pass arguments to a function one at a time. Upon passing each argument, it effectively mutates the function such that it can perform different operations. I recently came across a perfect opportunity to put this to use.
Read More