Published in


Building a better tracking system

About two years ago I started my role as the Mechatronics Training Manager for Worldskills UK

The role involves training and planning training sessions, and competitions with a group of competitors (6 max), with the ultimate goal of selecting a team of two to progress to international competition.

As part of my role, it is increasingly important to log the progress, times, and scores of various tasks, to be able to benchmark competitors against each other. This, coupled with a need to collect reviews and provide feedback to each of the competitors, and provide an opportunity to share files with competitors, led me to the task of building a dedicated tracking and metrics site.

I embarked to build the site, and, due to my choice of stack, decided to name it “nodeSkills”

nodeSkills 1.0

NODE skills V1 was a bit of an ugly brute.

The site was written from the ground up — The first site I had ever written in node — I was learning as i went, and made many mistakes

I used Express, Handlebars, and SQLite, with Bootstrap to style

It had way too much going on on each page, and tried to lift some of the graphics available on the original workdskills site, but the inevitability of feature-creep meant I continued adding styles and features, and even a horrific imessage inspired feedback system

While the system worked, my lack of understanding in async techniques caused some horrible hangs on page load, and the recommended model of generating data before page load went out the window, with much of the chart/layout generation happening on the fly in handlebars — It wasnt pretty from a code perspective.

V1 never really launched properly —Sadly the website never saw the light of the www, and was instead was confined to die in my localhost testing environment

Note: It still booted at the time of the article being written! — something i was pleasantly surprised to find.

nodeskills v2 — nodeskills v4

The next iterations were few and far between, but mid 2017, after the 1st cycle ended, I decided to scrap, and restart the site, launching with a fresh face, (and importantly a user-facing URL) — Ultimately, something that would not be achieved until the start of the Kazan Cycle in early 2018

I decided to switch from Bootstrap to Bulma (my new favourite layout framework) and in doing so developed a cleaner look for the site (although it became very messy once i started using a custom charting interface

Data / Personal info redacted

After struggling profusely to handle data entry properly, I decided to switch from Express to Koa, and from Handlebars to EJS, as the combination promised to be ‘new’, and a little more async friendly — I took a long and varied walk down exploring for dynamic data entry… At one point i through caution to the wind, and dropped SQLite for A new-fangled JSON based database lowdb. — It turns out storing the whole database in memory is a bad idea, so this was quickly reverted.

nodeSkills V

NodeSkills V (Five) was launched to a fan-fair of one, on the Jan 24th, 2018

The site has been rebuilt again, using Koa, EJS, Bulma, and finally Knex/Mysql to handle the database connections. — Sometimes its just easier to stick to what you know.

The site is hosted on Heroku — pulling the latest deploy straight from github, making this the easiest site i have ever had to maintain — gone are the days of FTP hell!

I think for next cycle, I’m going to need another re-write. nodeSkills VI will probably be mongo / react. I’m not sure that it is necessary, but it will be yet another learning Experience


Sensitive Info Redacted



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Calum Knott

Calum Knott

Hello! My name is Calum Knott, I am a Programmer and Robotic/Electronic Geek. I design software, hardware and am the Mechatronics Training Manager for WSUK