Developed a public-facing searching engine for news articles related to some themes in politics. The job also involved a web and brand logo design for the website (Inkscape / Figma).
I've used the microservices architecture with the following technologies: web admin and API developed with Django; front-end site used Vue.js (with the Nuxt framework) where I used mainly the Element (UI), D3 (visualization), and ReactiveSearch (search components) libraries; the search backend used ElasticSearch and the data was stored in a PostgreSQL database. Many of the tasks in the backend were distributed and executed asynchronously via Celery Workers using the message broker RabbitMQ. For the website's contact page I've created a service for relaying the messages via e-mail with server-side JSON Schema validation and SPAM prevention using Google's Recaptcha, this was encapsulated in a small Node.js application.
The entire source of the project was versioned in Git using the feature branches model. It was deployed via Docker containers orchestrated with Docker Compose into a Linux VPS. To serve the requests a combination of a reverse proxy (Traefik), Nginx (to serve static files), and the application containers alongside a Memcached instance was used.
After some time in the approval environment, I received a change requirement arising from the costs of hosting an ElasticSearch search service. After searching, I've chosen to move the entire search to the client-side using the ElasticLunr.js library. Reengineering was carried out so that the backend would request the generation of the search index file from another service made in Node.js (Vercel / Micro) and finally this generated file would be consumed by the Nuxt client. The search in the frontend was implemented with customized components in Vue and a web worker.
Django VueJS drupal PostgreSQL VueJS vuex nuxt.js axios npm jest json responsive design vuetify tdd oop