Fill out a brief

Design constructor with 1,000,000,000+ product combinations

Personal account with product constructor functionality

«UYUT» is the largest manufacturer of sun protection and window decor in Eastern Europe and the CIS: curtain rods, roller blinds, horizontal and vertical blinds, pleated curtains, and similar products with electric drive. The company has the widest range of products in this market segment. If you’re looking for something and UYUT doesn’t have it, chances are you won’t find it anywhere else in Eastern Europe . UYUT is b2b-oriented and operates through dealers. The main development challenge is that UYUT offers a highly diverse range of designer products with numerous modifications. The client approached us with a request to develop a personal account with product constructor functionality, allowing users to view the final result online and place an order in just a couple of clicks.

Goals

  • Create a personal account for order processing
  • Develop an online product constructor with visualization of the final product
  • Automate the direct transfer of orders to the production database

Ultimately, the goal is to minimize order processing time and human error.

Before

  • Complex integration of a production database using 1980-1990s technology stack, developed over 25 years
  • Inability to place orders online — orders could only be sent via email. It was not possible to assemble orders in the constructor and visually see the final product
  • Salon managers spent a lot of time compiling and approving orders
  • The employees received hundreds of calls and emails, then forwarded them to production. Items were lost, deadlines extended, and the process was cumbersome

Problem: Clients could only choose from a paper catalog that required constant updating. The website was not suitable for salon managers to showcase color and material combinations. Managers had to call the reception to check the availability of specific colors, fabrics, etc. They couldn’t visually show colors not in the catalog. Our task was to enable managers to show clients various color combinations with available components using the online constructor.

Now

Five times faster for employees

Previously: UYUT reception staff received orders via calls and emails from salon managers. Order details had to be manually entered.

Now: Staff receive emails with all parameters, automatically generated in the production database. Order creation speed has increased by at least 5 times.

Five times faster for dealers

Previously: To place an order with UYUT, managers had to call or manually fill out order forms via email. This process was time-consuming. If a new salesperson joined a salon, they had to learn the product range from the catalog → manually fill out order forms and send them via email. Training and errors led to business costs.

Now: Orders are automatically compiled when selecting the required parameters. Instead of lengthy form-filling, everything can be done in a few clicks. Manager productivity has increased fivefold, allowing salons to process more orders. Service quality and speed have also improved.

With a new salesperson, they quickly adapt to the system, start working faster, and maintain service quality.

Project Challenge

Client Database Integration

Task: Integration with a complex database of over 10,000 clients and a vast number of products. The challenge was in mapping fields and handling a large volume of data transfer. Each company had a minimum of 3 filled information points + 11 fields of information in each point. This was a massive amount of data that needed to be correctly sorted and organized for pulling information into the required fields.

Implementation: Partially integrated the old database into the new one. An integrator created a layer allowing us to extract information from the old database. We then correctly integrated this data into the new database. To avoid manual field transfers, we developed functionality that pulls all client data based on a unique ID from the old database.

Now: When a UYUT manager needs to create an account for an existing client in the new database, they simply find the ID in the old database, input it into the new one, and all data is loaded. We only partially integrated the database and spent significantly fewer resources. This approach eliminated the need to duplicate client data and allowed us to maintain the company’s business processes.

Production Database Integration

Task: UYUT offers 1,000,000,000+ combinations of finished products. The challenge was to ensure that products could be assembled using a constructor mode and correctly sent for production. The marketplace format with ready-made products was unsuitable for this. The complexity lay in working with an old database where maximum precision was required in field mapping and data retrieval to avoid incorrect order representation.

Implementation: We configured it so that after selecting each modifier, it was linked to the relevant field in the production database. During order creation, a calculation is made for each product consisting of 66,000 rows, as each product has up to 18 unique modifiers. All this information is input into the production database.

Before: A salon manager manually filled out the order form → sent it via email → the order arrived at reception → a UYUT employee manually re-entered the order → then production began.

Now: Orders are automatically generated in the production database and immediately sent for production

Development

We inherited tasks from another team, so we had to clean up the code and understand the work done before us. We had to rewrite a significant portion of the backend, around 70-80%, from scratch. Backend and frontend were developed in conjunction with the integrator. Some design elements were provided by the client, but we collaborated on certain sections. The site was built using Vue2 by the team that worked before us, and we decided to stick with the same stack.

We conducted code refactoring, eliminating duplicate lines and cleaning up the code from makeshift solutions. In numbers, we removed 4000 lines and wrote 2500 new ones.

Integrated the client database. Information on 10,000+ UYUT clients was integrated into the personal account without duplicating databases.

Linked products in the constructor to UYUT’s database products. This ensured that over 300 product modifiers were correctly transmitted directly to the production database.

Automated the order creation process. After creating an order in UYUT’s production database, the order is automatically formed, allowing production to start immediately without unnecessary approvals.

Integration kickoff

In the first month, we closed 80 ASAP tasks on the frontend side before moving on to integration. The main goal was to integrate products + client databases + delivery addresses + consignees + real-time price calculation.

The first section was the most challenging. We needed to understand the integration system, and the rest would follow smoothly. While integrating products, we delved into each process, synchronized with the integrator, and their methods of operation.

 

  • Linked all products on the frontend with their entities in the production database
  • Implemented the display of client data, addresses, and consignees in the personal account frontend
  • Integrated real-time price calculation for products
  • Implemented automatic order creation in the UYUT production database

Creating “My Orders” Sections

Added the display of all orders + detailed view of each order.

Each product position image is assembled by the constructor and saved in the “My Orders” section. If any position is deleted from the product lineup, the image will still remain active for the user who created it months ago.

Previously: In the tasks handed over to us, the product image was assembled from positions available on the site. If one of the positions was removed from the site due to discontinuation, the image would break and not display. If a client placed an order six months ago, they could return and see a broken image.

Now: The image is assembled from unique product IDs integrated into the database. It is then saved in the “My Orders” section. It remains in the client’s account and won’t be deleted if the product is discontinued. Even after a year, the client can return and see the selected composition – the image will work.

User Profile

The user profile pulls in all data: user ID, login and full name, company information, delivery address, and consignee data.

 

Additionally, users can change the logo in the header of their personal account. Importantly, dealers can customize products under their salon’s brand and with their prices using the online constructor. This allows them to create orders while with the client.

Admin Panel

Through the admin panel, you can configure all product modifications displayed in the client-side constructor: add fabrics and new colors, change configurations. For example, if a new color is introduced, UYUT employees can add it via the admin panel without involving programmers.

Partially integrated the production database into the new system

Previously: there was no full integration with the client database. Data had to be manually entered each time a client was created in the system. We worked on the user profile, adding all necessary fields with client data.

Now: when creating a client, all data is automatically pulled based on their ID from the production database.

Order creation for dealers has been simplified: delivery address and consignee can be selected independently when creating an order.How it works: for example, a dealer company may have multiple delivery addresses and consignees – different points and recipients. They function as templates – fill in all consignees and addresses once, then easily manage logistics in the company. All data is pulled from the UYUT production database

 

Results

by 5 times
the work of UYUT and distributor managers was accelerated
by 2 times
new employee onboarding at distributors was accelerated
Vue 2
Vue 3
GraphQL
Nuxt
MongoDB
Nest.js
Redis
Michael Sparks
Project Manager
Kevin Cooper
Frontend Developer
David Smith
Backend Developer
Alex Newman
Frontend Developer
Nicholas O'Brien
Designer