Skip to main content

Architecture Overview

What is the app built on?

TOM is built with a JavaScript stack, with VueJS on the frontend, NodeJS and ExpressJS on the backend, and MySQL for the database.

tom system design

Backend

The backend is built on Node.js, Express and a MySQL database.

The current version in use is Express 4.18.2 and running on Node 18.15.0.

Real-time Server

We use an Express server within a Node.js framework to sync all real-time changes in our app.

Node.js is an open-source, server-side JavaScript runtime environment built on Chrome's V8 JavaScript engine. It allows developers to run JavaScript code on the server side, enabling them to build scalable network applications with asynchronous, event-driven architecture.

RESTful API

We use REST for writing our backend APIs. For a guide on getting started with our API, check out this documentation.

MySQL

We use MySQL for our database. For a guide on getting started with Postgres, check out this documentation.

Frontend

The frontend is built using the Vue.js framework. The current version in use is Vue.js 3.2.13.

All dependencies can be found in the table below.

PackageDescriptionVersion
Vue.jsA JavaScript framework used to build the user interface of TOM 3.2.13
Vue Router A navigation library for Vue.js4.0.4
Vuex A state management library for Vue.js4.0.0
LeafletJS An open-source JavaScript library for interactive maps1.9.3
D3.js A JavaScript library for producing dynamic, interactive data visualisations in web browsers and is used in the overview dashboard of the country manager view 7.8.2
Papa Parse Parses CSV files and is used in the bulk upload feature where CSV files are used5.3.2
Survey JS / Knockout JS A JavaScript form builder used in the self-assessment feature of the learner view 1.9.70
Tailwind CSS An open-source CSS framework used for styling
v-idle A JavaScript plugin to detect idle/non-active users and is used in conjunction with login functionality0.3.13
Vue-dk-toast A lightweight toast notification plugin for Vue3 3.2.1
Vue-pdf-embed A package used to embed pdf files in Vue.js applications. This is specifically used in displaying the privacy policy to users 1.1.4
Vue-i18n An internalisation plugin used to translate content in the TOM app 1.1.4