Skip to content

Our Digital Legacy: The Technologies That Power Our Online Presence

With all the different languages and frameworks you may be interested to know what we chose to build nova on, we will be going through each of the different frameworks and languages we use to bring you the nova experience you know.

Back end

There are a lot of distinct parts to the back end so to make it simpler to understand we will split this up into category's

Database

For our database needs we use MongoDB1 with the Bridge-Mongo2 ODM18, we used to use PostgreSQL3 with the pg4 module but we recently switched as MongoDB1 suited our needs more since it allows for easier access to embedded data and integrates with the complex data models that nova use's

With the switch to MongoDB1 we can expect a slight increase in performance and a massive increase in developer productivity as MongoDB1 is much easier to integrate with our current system. You can watch the video on MongoDB1 below for more information or head down to the sources section at the bottom of the page.

Language

We use Typescript6 as our coding language of choice for its type safety7 and better developer experience through its pre-runtime error catching5, for example here is a snippet of code written in Javascript8, there are no errors shown so we would think that this code is fine to run

Example.js
1
2
3
4
5
6
7
let string = "2"

console.log(string.startsWith("2"))

string = 1

console.log(string.startsWith("1"))

but when we do run it we can clearly see that this code has an error due to 1 not being a string

Console Error

However if we were to write this same code in Typescript6 we get a type error in the IDE9 without having to run it

Example.ts
1
2
3
4
5
6
7
let string: string = "2"

console.log(string.startsWith("2"))

string = 1 // Type 'number' is not assignable to type 'string'

console.log(string.startsWith("1"))

this has saved a developer time spent debugging by catching the errors before the code is even ran, type safety7 is one of the biggest productivity boosts for any developer and love Typescript6 or hate it you cannot deny that it saves a lot headaches searching through a stack trace trying to figure out why this one random variable is undefined. 

Don't deny it we've all been there.

If you want to learn more about how typescript6 works and how you can migrate your project over to it check out the sources at the bottom of the page where we will have links to all the resources we reference in this blog or you can watch the video below.

Packages

Discord.JS

We use a number of packages to help with development with the main one being Discord.JS10 often shortened to d.js which is a wrapper for the discord API11 and also provides a lot of useful classes that nova relies on such as their Collection12 class which extends the Map13 type with extra utility methods. Without discord.js10 nova would not exist in the same state it does today so it is not an exaggeration to say that discord.js10 is the most important package for nova.

Bridge-Mongo

Bridge-Mongo14 is a ODM18 for MongoDB1 compatible with Mongoose52 ODM18 that allows us to manipulate database data based on native types and objects.

Other Services

Podman

There are some other services and software that we use that don't fall under any of the other category's such as podman15 which is the container25 engine16 we use to run all of the nova backend processes such as the main bot code and the database instances.

Podman15 is very similar to Docker17 so we have linked a video on docker as most of the concepts transfer however if you want details on how podman15 works you can go to the sources section at the bottom of the page.

Jenkins

Jenkins19 is a part of a CI/CD20 pipeline and acts as the main piece of software allowing changes to go live when pushed to our git21 repo22.

When a change is pushed to our git21 repo22 Jenkins19 detects this and starts a build process where it goes through multiple stages of testing23 and building24, once all of those pass the build is complete. For us part of the build process is the building of an image26 and the deploying of that image to a container25 which allows for seamless transition to newer versions of nova.

Jenkins19 is very similar to other CI/CD20 tools such as github27 actions28, to further explain the process we have linked a video below on CI/CD20 featuring github27 actions28. All concepts transfer across so everything in the video applies to Jenkins19 as well. There are also links to other resources at the bottom of the page

Git/GitHub

Despite their name Git21 and GitHub27 are not the same things, Git21 is a distributed version control29 system while GitHub27 is a developer platform that allows developers to create, store, manage and share their code and it is built on top of Git21.

We use these for our version control29 like many other people do, there are other solutions such as GitLabs30 or BitBucket31 but we chose GitHub27.

We have linked below two videos explaining Git21 and GitHub27 or you can see the bottom of this page for links to more info

API

Express.JS

Our API32 (yet to be developed) uses Express.JS33 for its routing34 as it allows for the quick development of API32's.

Below we have linked a video on RESTful35 API32's and you can also find more information in the sources section at the bottom of the page

Front end

There are lots of different frameworks and libraries we use for our front end, some of these are used exclusively by the dashboard (yet to be made but there is a concept site out, find at the bottom of the page)

Frameworks and libraries

Astro

Astro36 is a static site37 framework which speeds up sites by reducing the amount of javascript8 used and when it is executed through the process of islands38 and partial hydration39. An island as explain by Astro36 is

...any interactive UI component on the page. Think of an island as an interactive widget floating in a sea of otherwise static, lightweight, server-rendered HTML.40

Astro Islands

An island38 always runs in isolation from other islands on the page, and multiple islands can exist on a page. Islands can still share state and communicate with each other, even though they run in different component contexts.

This allows our sites to have interactive elements while still being fast and responsive, this is currently used on both our marketing site and dashboard concept.

We have linked a video explaining Astro36 below and there are other resources that can be found at the sources section at the bottom of the page

TailwindCSS

Tailwind CSS41 is a CSS42 framework that creates a large list of predefined utility classes43 which you use to style your html44 using inline classes, this does create larger html however it is much more maintainable.

We use tailwind CSS for our Marketing site and Dashboard concept as it is a great way to quickly create UI's and there is a large collection of premade components45.

We have linked a video explaining TailwindCSS41 below and there are other resources that can be found at the sources section at the bottom of the page

Preact

Preact46 is a lightweight alternative to React47 that works with the same API's as react so it is very easy to migrate to it, Preact46 describes itself as

...a lightweight and high-performance Virtual DOM53 library that works with React components.48

We use Preact46/React47 because it is quick and easy to make responsive UI49's however some of our sites may be moving away from react47 such as the dashboard which may switch to using Vue.JS50 in the future.

We have linked a video explaining React47 below as the concepts transfer to Preact46 and there are other resources that can be found at the sources section at the bottom of the page.

We also linked a video on Vue.JS50 as it is very likely the dashboard will switch to it.

Vite

Vite51 is a Javascript8 build tool that makes it easier and faster to build web apps, it allows for fast building and handles bundling. It is used on our marketing site to speed up builds and development.

We have linked a video explaining Vite and other resources can be found in the sources section and the bottom of the page

Conclusion

Well thats everything we use right now, we hope you enjoyed learning about how Nova works and all of the different frameworks and libraries that help to get Nova to you. Below you can find the sources section where all the technical terms and sources for our information and we want to say a big thank you to Fireship for his in 100 seconds videos as they are perfect for explaining a concept in a concise manner go check out his channel.



Sources


  1. https://www.mongodb.com/ 

  2. https://mongo.bridge.codes/ 

  3. https://www.postgresql.org/ 

  4. https://www.npmjs.com/package/pg 

  5. https://dev.to/kovalevsky/detecting-errors-before-running-code-with-typescript-44e4 

  6. https://www.typescriptlang.org/ 

  7. https://en.wikipedia.org/wiki/Type_safety 

  8. https://developer.mozilla.org/en-US/docs/Web/JavaScript 

  9. https://en.wikipedia.org/wiki/Integrated_development_environment 

  10. https://discord.js.org/ 

  11. https://discord.com/developers/docs/reference 

  12. https://discord.js.org/docs/packages/collection/2.1.0/Collection:Class 

  13. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map 

  14. https://mongo.bridge.codes/ 

  15. https://podman.io/ 

  16. https://www.aquasec.com/cloud-native-academy/container-platforms/container-engines/ 

  17. https://www.docker.com/ 

  18. https://www.dctacademy.com/blog/what-is-object-document-mapper-odm 

  19. https://www.jenkins.io/ 

  20. https://en.wikipedia.org/wiki/CI/CD 

  21. https://git-scm.com/ 

  22. https://docs.github.com/en/repositories/creating-and-managing-repositories/about-repositories 

  23. https://codefresh.io/learn/ci-cd-pipelines/ci-cd-testing-why-its-essential-and-how-to-make-it-great/ 

  24. https://about.gitlab.com/topics/ci-cd/#what-is-continuous-delivery-cd 

  25. https://en.wikipedia.org/wiki/Containerization_(computing) 

  26. https://opensource.com/article/21/8/container-image 

  27. https://github.com/ 

  28. https://github.com/features/actions 

  29. https://en.wikipedia.org/wiki/Version_control 

  30. https://about.gitlab.com/ 

  31. https://bitbucket.org/ 

  32. https://en.wikipedia.org/wiki/API 

  33. https://expressjs.com/ 

  34. https://en.wikipedia.org/wiki/Routing 

  35. https://restfulapi.net/ 

  36. https://astro.build/ 

  37. https://en.wikipedia.org/wiki/Static_web_page 

  38. https://docs.astro.build/en/concepts/islands/ 

  39. https://en.wikipedia.org/wiki/Hydration_(web_development)#Partial_rehydration 

  40. https://docs.astro.build/en/concepts/islands/#what-is-an-island 

  41. https://tailwindcss.com/ 

  42. https://en.wikipedia.org/wiki/CSS 

  43. https://blog.logrocket.com/css-utility-classes-library-extendable-styles/ 

  44. https://en.wikipedia.org/wiki/HTML 

  45. https://developer.mozilla.org/en-US/docs/Web/API/Web_components 

  46. https://preactjs.com/ 

  47. https://react.dev/ 

  48. https://preactjs.com/ 

  49. https://en.wikipedia.org/wiki/User_interface 

  50. https://vuejs.org/ 

  51. https://vitejs.dev/ 

  52. https://mongoosejs.com/ 

  53. https://en.wikipedia.org/wiki/Document_Object_Model 

Comments