Our new website is live!
Over the last few months, we have put an incredible amount of effort in redeveloping our website, in order for us to take our service quality to our clients to the next level.
As it is tradition in all applications that we develop, we have made sure that security, accessibility, user interface, and performace are top notch.
For this new iteration of the website, we have chosen the very best technologies and architecture available right now, using a multiport approach, separating the frontend, backend API, and database into different microservices for ultimate flexibility and scalability. This new platform allows us to implement technologies like Machine Learning/Artificial Intelligence for our client portal, the possibility to turn our website into a Progressive Web App (PWA), building native apps for specific sections of the website without duplicating data or code, etc.
Our data model is complex, requiring checks for integrity and consistency. For this reason, PostgreSQL is an invaluable tool for us, because it forces data integrity and consistency through ACID compliance, allows full-text search, has excellent extensibility, concurrency, performance, and security.
This was the easiest decision of all, since we are a Symfony and PHP powerhouse. After over 21 years using PHP and around 15 years using Symfony as our framework of choice, we have the confidence that our backend application has the best possible performance and security. In this case, we have used Symfony to build a fully decoupled and database-agnostic CRUD API microservice that communicates the data between our frontend application and our PostgreSQL database.
After comparing the different alternatives: React, Vue.js, Angular, Ember, Knockout, Polymer, Riot... We decided upon using Vue.js because it is lightweight, uses HTML templates out of the box instead of JSX, and has a much less steep learning curve than most of the other competitors, making it easier to learn and for apprentices and junior programmers.
Once the decision of using Vue.js was made, it was crystal clear that we wanted to use NuxtJS on top of it, so we could have an opinionated framework to give us consistency in folder structure for our projects. NuxtJS also has the advantage of letting you choose how you want to build and deploy your application: server-side render (SSR), single page application (SPA) or static. Each of the three options has pros and cons. We were debating whether to build it as a static app or use server-side rendering; in the end we went for the SSR to take advantage of the improved SEO, performance, and dynamic data retrieval.
For the design framework, the options were even more abundant: Boostrap-Vue, tailwindcss, Vuetify, Buefy, Fish-UI, Quasar, Vux... We were torn between Buefy (an implementation of Bulma for Vue.js) or Vuetify, but, being big fans of Google's Material Design philosophy, we chose Vuetify for our website, spending a considerable amount of time customising it to our branding.
AWS give us great tools to make sure that we have world-class infrastructure with easy and fast scalability. Through command-line interface deployment of databases, APIs, and microservices to AWS is a breeze, with endless possibilities for automation using tools like Ansible, Terraform, etc.
We use Netlify to deploy our NuxtJS + Vuetify frontend application. This a new provider to us and we are testing it at the moment, so we might change it in the future, depending on the results of our monitoring in the next few weeks. So far we are happy with its ease of use, out-of-the-box CDN and very good performance. However it has some quirks regarding how it handles headers, redirections, etc., which makes us miss our beloved Nginx-powered servers.
PERFORMANCE + SECURITY
Since these two topics are crucial for us, we are going to publish a blog article explaining what metrics and tools we use to monitor performance and security.