# How Unison Is Built
1 March 2023

## Domain provider I am using [GoDaddy](https://www.godaddy.com/) for the domain [unisonofficial.com](https://unisonofficial.com/). I don't have any specific reason why exactly I chose this provider.
## Cloud provider I am using [Digital Ocean](https://cloud.digitalocean.com/) as a cloud provider. I prefer it to others because of neat user interface and predictable pricing model.
## Certificate Authority I am using [Let's Encrypt](https://letsencrypt.org/). It's free, it's easy to integrate, it's well documented.
## Mail services/providers For the `support@unisonofficial.com` I am using [Gmail](https://mail.google.com), I don't need that much from it other than to be able to quickly answer on messages, so at the moment it's ok. I am using [Postmark](https://postmarkapp.com/) for delivering messages to the users with information of their account details and payments. It also sends me (as a developer) messages about server failures and other technical issues. I like it because of modest pricing model, well documented API and features.
## Payment provider I am using [Stripe](https://stripe.com). It's easy to integrate, it's well documented, it can be tested in local environment. Also it has good dashboard with really nice features and neat design.
## Programming language I am using [JavaScript](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/What_is_JavaScript) on the frontend and the backend. Using one language on both sides allowed me to avoid rewriting huge amount of the code.
## CI/CD I am using [GitHub action](https://github.com/features/actions). Super easy to use, native integration into [GitHub](https://github.com) where I store my code.
## Backend stack I am using [Node.js](https://nodejs.org/). In order to manage the complexity of the asynchronous environment in Node.js I am using [Async Tree Pattern](https://guseyn.com/pdf/Async_Tree_Pattern.pdf). [I am not using Promises and async/await abstractions](https://guseyn.com/html/posts/why-i-dont-use-promises-and-async-await.html). All my code on the backend consists of Async Objects, which are implemented in a similar manner as in [this library](https://github.com/Guseyn/cutie). The architecture is very close to what you can see in the [source code](https://github.com/guseyn/guseyn.com) of [my blog](https://guseyn.com).
## Database I am using [MongoDB](https://www.mongodb.com/). I managed to make it work with the models and structures in Unison. I chose Mongo because of nice features and good support for Node.js.
## Frontend stack I am using [EHTML](https://github.com/guseyn/ehtml), which allows me to reduce the amount of the JavaScript code and write most of the logic in [HTML](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started). I am using only vanilla JavaScript. Functional style allows me to manage the complexity of the JavaScript code where I cannot use **EHTML**, for example in the [Unison editor](https://unisonofficial.com/html/user-documentation-pages/unison-editor.html). I am using [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS), because that's all I need to setup styles in the app.
## More information comming soon...