Anteprima dell'articolo Vendure: The Backbone of Deesup's Growth

Vendure: The Backbone of Deesup's Growth

Introduction

We are Deesup Srl, an exclusive #marketplace for iconic design furniture, lighting, and accessories. Specializing in selected brands, we offer a platform where individuals and retailers can both buy and sell high-quality, branded design furniture. As we scaled our business our previous e-commerce solution became increasingly inadequate. We faced significant challenges in managing increased traffic and maintaining efficiency in our multivendor environment, prompting us to seek a modern and efficient solution for supporting our growth.

Why Vendure?

We evaluated various solutions including Magento and Shopify, aside Vendure: we chose this latest one as it was the most aligned one to our requirements. As developers we value flexible, high-performance, and open-source software: three qualities not commonly found in many e-commerce platforms.

Here’s why we selected Vendure:

Technology Compatibility

Vendure is built on #NodeJS, aligning perfectly with our existing tech stack. Its headless architecture allows us the flexibility to customize front-end experiences without altering backend logic.

Open Source and Modular

Being open-source, Vendure offers transparency and adaptability. Its modular architecture meant we could tailor functionalities specifically to our multivendor marketplace requirements, adding or modifying features as needed. We actively participate in the Vendure community, contributing to both the plugin ecosystem and the core codebase. This involvement not only helps improve Vendure, but also ensures it evolves in ways that are beneficial to businesses like ours.

Scalability

Initial tests with Vendure's early versions demonstrated its robustness and scalability. We began with version 1.X for our migration tests and have since progressed to implementing version 2.X as we continue to expand and refine our platform.

Ease of Customization

  • Plugin System: One of the strengths of Vendure is its robust plugin system, which has made it exceptionally easy for us to add custom features. This flexibility has been crucial in adapting the platform to our unique requirements.
  • Event Bus: The use of Vendure’s event bus has been instrumental in enhancing functionality. It allowed us to append custom features to existing processes without disrupting core operations.
  • Subscribers: By utilizing TypeORM's subscribers, we can define and register classes that respond to specific lifecycle events, e.g. beforeInsert, afterUpdate, and more. These subscribers enable the implementation of tailored business logic, ensuring data integrity and sophisticated interactions with database operations.

Resource Efficiency

Compared to other platforms, Vendure operates efficiently on smaller servers, minimizing the footprint and operational costs while simplifying the infrastructure:

  • Kubernetes and VPS Compatibility: Vendure’s lightweight resource consumption makes it an ideal choice for Kubernetes-driven infrastructure, although it performs just as well on a simpler VPS setup.
  • Microservices Compatibility: The platform’s efficiency and modular nature fit perfectly within our microservices architecture, allowing us to maintain high performance and scalability.

These factors collectively made Vendure an easy choice for Deesup, ensuring high-performance and scalable marketplace that meets the specific needs of both sellers and buyers in the design industry.

Planning the Transition

As part of our transition from WordPress to a more modern e-commerce platform, we devised a comprehensive strategy centered around the development of a bespoke migration plugin. This plugin was designed to ensure a seamless transfer of critical data elements. Here’s how we managed the process:

Plugin Development

  • Data migration: The custom plugin we developed is capable of migrating users, categories, attributes, and products, along with their associated assets. It also handles the many custom fields we created for the venture, ensuring that no element is left behind.

Robust Design

  • Resilience: Understanding the complexities involved in data migration, our plugin is designed to be robust. It can be paused and restarted right from the last completed step, allowing us to manage the migration in an iterative manner without losing progress.

Testing and Validation

  • Staging Environment: Before finalizing the migration, we conducted extensive testing in a staging environment. This was critical to ensure that all data and functionalities were replicated accurately on the new platform.
  • Verification Process: We rigorously compared the pre-migration and post-migration states to verify the completeness and accuracy of the migration.

Execution

  • Final migration: This structured and phased approach not only minimized downtime but also ensured that our new platform was fully functional and reflective of our previous setup in WordPress, thus maintaining continuity for our users and stakeholders.

From Test to Production

The development process took less than a year, during which we built each plugin progressively, relying on solid documentation, a growing and enthusiastic open-source community, and the support of an expert and responsive core team. Our Vendure e-commerce platform officially launched around two years ago, and since then, we have progressively achieved our business goals. Vendure comes with built-in support for project dockerization, allowing us to easily deploy our application across different cloud platforms such as AWS and Google Cloud. We have successfully run Vendure on both Google Cloud Run (and AWS App Runner) and Google GKE (and AWS EKS), demonstrating its versatility and robust performance in various environments.

Boosting Sales: Integrating a Boost Plan in Vendure

As part of our ongoing development, we aimed to create a new revenue stream by allowing sellers to purchase a "boost plan" for their products, making them more visible on our platform for several weeks. Initially, we were concerned about how much effort it would take to extend Vendure to handle this new feature, but the supportive Vendure community helped us find an efficient solution.

Creating the Boost Plugin

The first step was to create a new feature within Vendure that could manage these boost plans. This involved setting up a special module that could handle the unique requirements of the boost plans. This module creation involves developing a new Vendure plugin, a flexible NestJS module enhanced with Vendure capabilities.
Vendure plugins allow developers to create new database entities and expose custom shop/admin APIs. They offer streamlined organization where logic related to specific entities is scoped within their respective plugins.

Defining the Boost Plan Entity

We then needed to define the boost plan entity and its fields within our boost plugin.
The boost plan entity has a 1:1 relation with the @vendure/core Product entity, ensuring that boost plans are seamlessly integrated into the normal order flow within Vendure. This simplifies the development process for non-product entity purchases.
The boost plugin takes a list of boost plans as arguments and creates both a BoostTier and a Product entity for each plan. Consequently, purchasing a BoostTier entity requires purchasing its related Product through the Vendure standard order flow.
The last required field for the boost plan is the “expirationSeconds“ containing an epoch counter which determines how long the boost has to persist on the product after the customer subscription.

Configuring Vendure Custom Fields

Vendure allows developers to configure their application through a 'vendure-config' file. The intriguing part is that Vendure plugins can extend this configuration at runtime, generating new customFields on @vendure/core entities such as Product.
The boost plugins relies on the generation of the following customFields:

  • productVariant.customFields.boostedAt: Indicates when a boost plan has been purchased for that product."
  • productVariant.customFields.activeTier: The slug of the boost plan has been purchased for that product.
  • orderLine.customFields.boostVariantId: The ID of the productVariant that the customer is purchasing a boost plan for, used to detect boost orders and to apply boost on the target product once purchase is completed.
  • product.customFields.boostTier: 1:1 relation between the Product and the BoostTier entity.

These custom fields allow us to track and manage the boost plans within the Vendure ecosystem, ensuring seamless integration with existing functionalities.

Final Steps

We used Vendure's built-in tools to enhance the functionality of the boost plans, making them easy to manage and to be extended in the future.
Since implementing this feature, it has become a reliable addition to our platform, providing a new revenue stream and enhancing the visibility of our sellers' products. This experience has showcased Vendure's flexibility and adaptability, making it an excellent choice for modern e-commerce solutions.

Scaling Success with Vendure

We are extremely satisfied with the performance and flexibility of the Vendure framework for our current e-commerce platform. Encouraged by this success, we have decided to use Vendure for a new type of e-commerce platform we are developing.
Our new project involves providing a series of pre-built e-commerce solutions for multiple customers. Leveraging the robust foundation we've built on Vendure, we can efficiently create and deploy these solutions. By developing several Vendure plugins, we have isolated them in a private package registry hosted on GitLab, allowing us to reuse our custom logic across different projects.
Vendure's flexibility, particularly its event-bus feature, enables us to subscribe to our own events published from the shared packages. This capability allows us to customize workflows and customer communications seamlessly. We can easily integrate and manage communications through email, HubSpot contacts, and Twilio SMS, all within the Vendure framework. This streamlined process enhances our ability to meet diverse customer needs while maintaining high standards of performance and reliability.

Conclusions

Our journey with Vendure has been a transformative experience, driving Deesup to new heights in the e-commerce landscape. The transition from WooCommerce to Vendure has enabled us to overcome previous limitations and scale our business efficiently. Vendure’s modern, flexible, and scalable framework has empowered us to build a robust platform tailored to the specific needs of the design furniture market.

The seamless data migration, ease of customization, and integration capabilities have significantly optimized our operations. Implementing features like the boost plan has not only provided new revenue streams but also showcased Vendure’s adaptability. Moreover, Vendure’s open-source nature and vibrant community have facilitated continuous improvement and innovation.
Encouraged by our success, we are now leveraging Vendure for new projects, creating pre-built e-commerce solutions for multiple customers. Vendure's modular architecture and event-bus feature have allowed us to efficiently reuse our custom logic across various platforms, ensuring consistent and high-quality service delivery.

In summary, Vendure has proven to be an invaluable asset, aligning perfectly with our goals and values. It has equipped us with the tools to remain at the forefront of e-commerce technology, delivering exceptional experiences for our users and stakeholders. We look forward to continuing our growth and innovation journey with Vendure as our trusted partner.

Our CEO and co-founder Valentina Cerolini stated “When scaling the business you also need a supportive and solid stack to work with, moving to Vendure we enforced Deesup’s technological stack, enhancing our ability to deliver a seamless and innovative shopping experience for our customers.”