Rohit Dubey
Rohit Dubey
Back to projects
Featured

SupplyNote

Modernizing a Legacy Supply Chain Platform

Preview

SupplyNote screenshot
1 / 4

Case Study

SupplyNote Modernization

Overview

SupplyNote is a supply chain and procurement platform used by businesses to manage inventory, vendors, purchasing, invoices, POS operations, and other day-to-day operational workflows.

When I joined the project, the platform was built on AngularJS and a legacy Express.js backend. The codebase had grown significantly over the years and modernization had become increasingly important for maintainability, scalability, and future product development.

I joined as a Senior Software Engineer with the goal of validating and executing a modernization strategy that could move the platform forward without requiring a complete rewrite.


The Challenge

The existing platform consisted of:

  • AngularJS frontend
  • Legacy Express.js backend services
  • RabbitMQ-based communication
  • Redis integrations
  • Multiple business-critical modules
  • 50+ screens and workflows
  • A codebase exceeding 100,000 lines of code

A full migration would likely take a year or more and would introduce significant delivery risk.

The challenge was not simply rewriting code.

The challenge was determining whether the product could be modernized incrementally while continuing to support existing users and business operations.

Key constraints included:

  • Existing users could not be disrupted.
  • Legacy services had to continue functioning.
  • Not all backend services could be migrated immediately.
  • New role and permission models needed to be supported.
  • The team needed a foundation that could be extended after the initial migration phase.

The Solution

Rather than pursuing a complete rewrite, I designed a phased modernization approach.

The frontend was rebuilt using modern Angular while preserving compatibility with existing backend systems where necessary.

On the backend, I introduced a NestJS-based architecture that could coexist with legacy services and gradually replace them over time.

This approach allowed the product to evolve without requiring every system to be migrated simultaneously.

The strategy focused on:

  • Establishing a modern Angular foundation.
  • Introducing NestJS architecture for future development.
  • Integrating with existing Express services where migration was not yet practical.
  • Supporting RabbitMQ and Redis-based workflows.
  • Implementing modern role and permission handling.
  • Reducing technical debt while maintaining business continuity.

Technical Challenges

Migrating Without Rewriting Everything

One of the biggest challenges was accepting that a complete migration was not realistic within the available timeline.

Instead, the new platform had to coexist with legacy systems while providing a path toward full modernization.

Legacy Service Integration

Several backend services remained operational during the migration.

The new architecture needed to communicate seamlessly with existing services while avoiding disruption to business workflows.

Roles & Permissions

The platform contained complex business processes involving vendors, procurement teams, inventory operations, and administrative users.

Ensuring role-based access behaved consistently across both legacy and modern systems required careful planning.

Large Application Surface Area

With more than 50 screens and numerous interconnected workflows, maintaining consistency during migration was critical to avoiding regressions.


Technologies Used

  • Angular
  • NestJS
  • Express.js
  • RabbitMQ
  • Redis
  • PostgreSQL
  • Google Cloud Platform (GCP)
  • TypeScript

Outcome

Within approximately five months, I delivered a stable modernization foundation that demonstrated the feasibility of migrating the platform without a complete rewrite.

The resulting system allowed:

  • Existing users to continue using the platform.
  • New users to be onboarded onto the modernized system.
  • Engineering teams to continue migration efforts on top of a stable foundation.
  • Future development to move forward using modern Angular and NestJS architecture.

Most importantly, the project transformed a high-risk migration into a practical and incremental modernization strategy, enabling the business to evolve the platform without disrupting day-to-day operations.

My Role

As the primary engineer driving the modernisation effort, I was responsible for: * Defining the migration strategy. * Rebuilding the frontend using Angular. * Designing and implementing the NestJS architecture. * Integrating legacy and modern systems. * Migrating critical business workflows. * Establishing foundations for future engineering teams. To accelerate delivery, I leveraged AI-assisted development workflows for code modernization, refactoring, and migration tasks while maintaining architectural ownership and engineering oversight.

SupplyNote — Case Study