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”
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
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
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 socket.io 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 (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