Back to home

Node.js

MongoDB

GraphQL

Typescript

Backend bug fixes & optimizations for INVOKE's in-house digital marketing solution product.

Over the course of four weeks, I worked on backend bug fixes and code refactoring for an in-house product, focusing on addressing existing issues while simultaneously learning the required tech stack. The project is accessible only to authorized users through a paid subscription model, with no public preview available. The system was built on a Node.js backend, and as a frontend developer, I had to quickly ramp up on backend technologies, without any formal handover. This was a challenging experience, but it contributed significantly to my transition toward full-stack development.

One of the first issues I tackled was the consolidation of the Content and Planner models. These were previously separate but returned overlapping data. I refactored them into a new Dashboard model, allowing the frontend to make a single API call to retrieve all required data, improving performance and simplifying the frontend code.

gif of project

Another key improvement involved introducing new keys and models to support the frontend's need for additional data. By adding these new fields and linking them to the necessary models, I ensured the frontend could access and display the required information dynamically. This required an understanding of how to structure the database and APIs in a way that balanced both performance and flexibility.

One of the more technical aspects of the refactoring was optimizing nested data population. I refactored the existing code to utilize Mongoose's aggregation pipeline. This allowed me to handle complex queries more efficiently, reducing unnecessary database calls and making the overall data retrieval process faster.

Finally, I implemented a content filtering system to restrict access to data based on the user's agency or client. This ensured that users could only view content relevant to them, while allowing other users to see content that was outside their scope. This was achieved by adding a filtering mechanism in the backend, which applied user-specific parameters to content queries. This change enhanced data security and tailored the user experience to different roles within the system.

© 2025 Afi Hillman |

Based in Kuala Lumpur