Monin Inc. is an international company who develops and sells flavored syrups, concentrated flavor and mixed used in the preparation of different drinks and beverages used by bartenders all over the world. The company owns a large list of recipes to promote all products, which is used by their customers.
The website they owned for online sales was based on a Magento 1 site and as the end of life of the support for the platform version is coming to an end, they approached looking for help on translating more than 25 different Magento specific modules which were developed specifically to fill their business needs, and port them into the new Magento 2 platform. This modules varied from modifications into the shipping method selection, selection of the existing store based on the url required, modifications to the price of products and generation of PDF files to promote their recipes or generate a specific Pinterest image for their recipes, to mention some of them. Based on the business requirements and the code from the original Magento 1 modules, we developed the new version of the modules porting all the rules and behaviors into the new Magento 2 structure.
The biggest challenge of the project was to keep not only the business rules, but we also had to improve the performance of every module. In order to reach this, we have used a large number of tools that allowed us to identify bottlenecks, debug design errors from previous version and optimize each piece of code in an organized and controlled way. We also helped to improve the recipes search tool in the new website. This is a key tool for selling and promoting products.
Another key part of the project was to keep a really good organization and documentation for this new implementation according to Magento2 standards. We received directions to replicate modules from Magento 1, almost without documentation from them. The new module should be loaded selectively based on each different online store, each one depends of a region, e.g France is a store and US is another store, this is why we have created each one into a different git repository. Thus, we were able to install modules based on each store needs. To accomplish this, we use PHP Composer and Packagist service to install modules and dependencies into a fresh Magento instance, allowing us to verify one by one those modules, confirm these are working as expected. We've integrated the coding standard tools from Magento to validate that the code generated on the modules validates against the standards required. At the end of the development phase, we started implementing unit and integration testing using the default Magento Testing Framework which includes technologies like PHPUnit and Codeception. We have a separated GitLab repository per each module, therefore we have integrated a CI system to validate change and standard on each merge request.
Once the modules pass all our tests alone and all integration tests, the new template for the site was requested to be ported to include the new Magento 2 standards and also added some of the changes required from the Marketing team into it. This includes to integrate a section of the website which was a WordPress site rendered by the Magento 2 site without having two different domains. Using a 3rd party extension the contents of the Wordpress site are shown and navigated as a native Magento 2 page. As part of the design, we created the different categories display based on the type of product and recipe they were in, leaving up to 4 different ways to display the categories listings. As the recipes have their own way their content we integrated the frontend view to the a recipe module which gathers their information from an external API system and display the contents on the site with the related recipes and products used on the system.
Based on the complexity of this application, we used Lando to manage all the different modules setups and different databases. Additionally, we included there all the dependencies and commands for the developers environment, allowing to avoid having different configuration between the developers and enabling to use the same versions of PHP, MySQL, Redis, RabbitMQ and NodeJS as we will use on the new site.
As the website needed to continue working as it is right now with the same products, recipes and contents as the previous Magento 1 site, we took the Magento 2 migration tool and extended the steps required to migrate the data from the Magento 1 database into the new database and ensure that all the created modules and third party installed modules have their data migrated correctly between the two breaking versions.
Based on client requirement for the server, we used a PaaS called Platform.sh which allows to fully deploy environments for the website integrating new code automatically when we push changes to git repository. Thanks to this approach, we automatize the deployment of changes for the website, allowing to setup the new version and changes required with minimum downtime.
After the extensive work done to migrate this Magento 1 site into a fully functional Magento 2 website with WordPress integrated we continue doing the changes required on all the modules and adding new elements to keep the system up to date with the changes on the business rules as required and improving both the performance and speed using tools like Blackfire and New Relic.
Visit website in the following links
United States: https://www.monin.com/us/
Latin America: https://www.monin.com/spa/
Canada – English: https://www.monin.com/ca/
Canada – French: https://www.monin.com/fr-ca/
- Magento 2 Enterprise: It the commercial version of the most popular open source ecommerce application.
- Lando is a free, open source wrapper for Docke, which allow us to use docker containers with a single file configuration.
- Docker Compose is a tool for defining and running multi-container Docker applications.
- Packagist is the default Composer package repository. We used private packages.
- Composer is an application-level package manager for the PHP programming language that provides a standard format for managing dependencies of PHP software and required libraries.
- Platform.sh PaaS for Multi-Cloud Hosting, Development, and Deployment with PHP
- Wordpress is a free content management system (CMS) used to build websites and blogs.
- Amazon Web Services (AWS) is a secure cloud services platform, offering compute power, database storage, content delivery and other functionality to help businesses scale and grow.
- Magento WebAPI is a REST API framework provided by Magento
- Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
- RabbitMQ is an open-source message-broker software (sometimes called message-oriented middleware) that originally implemented the Advanced Message Queuing Protocol (AMQP)
- PHP (Hypertext Preprocessor) is a widely-used open source general-purpose scripting language
- MariaDB 10 is an open source relational database management system (DBMS) that is a compatible drop-in replacement for the widely used MySQL database technology.