Стабилизация платформы

Легаси как актив: стабилизация сложной eCommerce-платформы

GURUGROW — крупный D2C-бренд, специализирующийся на средствах от выпадения волос. Основные каналы продаж — собственный сайт и база из более 170 000 клиентов. Входящий трафик — преимущественно органический и ретаргетинговый, чувствительный к стабильности платформы и точности аналитики.

О проекте

На старте клиент обратился к нам с запросом на техническую поддержку: предыдущий подрядчик не справлялся с задачами, накопилось большое количество багов, архитектура была не описана, документация отсутствовала. Проект представлял собой неудачно разделённый монолит с двумя самостоятельными кодовыми базами и общей базой данных MySQL.
Такое разделение бизнес-логики между двумя разными технологическими стеками, тесная связь через единую БД и устаревшие компоненты создавали высокую степень сложности поддержки, а отсутствие документации затрудняло развитие и автоматизацию процессов.
СПЕЦИАЛИСТЫ ПРОЕКТА
1 Frontend
|
3 Backend
|
1 PM
|
1 QA
СТЕК ТЕХНОЛОГИЙ
React
Vue
Laravel
Yii2
Задачи
Комплексное развитие всего бизнеса: ускорение, аналитика и новые клиенты
Внедрить сквозную аналитику заказов и акций
Ускорить работу сайта и админки
Расширить каналы продаж
Повысить доверие клиентов
Наша цель — не переписать всё с нуля, а в условиях ограниченного бюджета создать устойчивую среду разработки, в которой можно двигаться итерационно, не ломая то, что уже работает.
Решение
Интеграция и оптимизация через единую аналитику и ускорения процессов
Создание единой событийной модели с интеграцией CRM, Google Analytics и Яндекс.Метрики
Оптимизация базы, собственные рекомендации товаров, кэширование
Локализованный сайт с валютой и логистикой для Казахстана
Прозрачные статусы заказов и уведомления
детали проекта

Как мы реализовали проект

Локализация для Казахстана: платежи, цены, доставка

Платформа изначально не поддерживала работу с Казахстаном: цены отображались в рублях, платежи проходили через конвертацию RUB→KZT с потерями на курсе, а расчёт доставки и интеграция с местными службами доставки были некорректными.

Ручное выставление счетов в тенге создавало лишнюю нагрузку на менеджеров, а пользователи видели несоответствующие цены и способы оплаты, что снижало доверие и увеличивало отток клиентов.
Мы реализовали отдельную версию сайта под домен .kz с сохранением архитектуры и функционала, адаптированную под местный рынок:
Отображение цен в тенге и автоматический пересчёт при изменении курса.
Подключение местных способов оплаты (Kaspi, Halyk Bank) с проверкой успешности транзакции.
Расчёт стоимости и сроков доставки казахстанских служб (Boxberry, КазПочта), чтобы пользователь сразу видел точную информацию.
Синхронизация с 1С: остатки и заказы из основной базы корректно отражались в казахстанской версии, исключая дубли и ошибки при импорте.
Клиенты видят корректные цены в тенге, могут оплачивать удобными местными методами, а доставка рассчитывается автоматически. Ручное вмешательство менеджеров стало минимальным, что повысило точность учёта и доверие пользователей.

Индексация поисковиками и дополнительная информация для пользователя

Теги формируются как отдельные странцы, индексируемые поисковыми системами.

Благодаря этому пользователь получает дополнительную структуру, удобную для навигации, а внешний трафик по низкочастотным запросам попадает сразу на релевантную категорию

Возможность задать вопрос специалисту, если клиенту нужно уточнение перед покупкой
Такой подход формирует доверие и сокращает путь от интереса к покупке: клиент получает ответы на свои вопросы сразу, не покидая сайт. А бренд воспринимается не просто как торговая площадка, а как надёжный источник информации и рекомендаций в теме здоровья.

Отказ от Retail Rocket: кастомные рекомендации вместо «черного ящика»

Retail Rocket предоставлял нерелевантные рекомендации, которые не учитывали специфику медицинской тематики. Например, при покупке миноксидила система часто предлагала шампунь, не связанный с нуждами пользователя. Внешние скрипты значительно замедляли загрузку страниц, ухудшая пользовательский опыт.

Стоимость подписки на Retail Rocket была сопоставима с зарплатой дополнительного маркетолога, что снижало экономическую эффективность решения.
Использование чужих алгоритмов без возможности тонкой настройки привело к снижению конверсии и ухудшению восприятия бренда. Зависимость от дорогостоящего внешнего сервиса ограничивала гибкость маркетинга и увеличивала операционные расходы.
Мы разработали собственный алгоритм рекомендаций, который строится на анализе пользовательских действий с учётом специфики товара:
Фиксируем ключевые действия пользователей: просмотр товара, добавление в корзину, оформление заказа.
Каждому действию присваивается вес с учётом его значимости — просмотр имел наименьший вес, оформление заказа — максимальный.
Дополнительно вес корректируется в зависимости от того, совершил ли действие текущий пользователь (увеличенный вес) или другие пользователи (сниженный)
Система собирает и агрегирует данные о действиях в течение двух недель, после чего формирует подборки товаров для показа.
Для минимизации нагрузки на сервер и обеспечения отказоустойчивости данные обрабатываются в фоновом режиме через очередь задач.
Кэширование рекомендаций реализовано на уровне CDN, что снижает количество обращений к базе данных и ускоряет выдачу персонализированного контента.
Блок «С этим покупают» теперь релевантен для узкой ниши, учитывая специфику спроса и поведения пользователей. После внедрения собственного алгоритма 5% пользователей, добавивших миноксидил в корзину, приобретали рекомендованные сопутствующие товары, что повысило средний чек и удовлетворённость покупателей.

Сохранение корзины: борьба с «разрывом» между оплатой и сайтом

Ранее при сбое оплаты, например если клиент закрывал страницу банка, корзина полностью очищалась. Пользователь, возвращаясь на сайт, видел пустую корзину и часто не завершал заказ.

Стандартные механизмы не решали проблему: сессионные корзины существовали только до закрытия браузера, а корзины в аккаунте — лишь для авторизованных пользователей, которых было меньше 40%.
Восстановление корзины после перезахода в аккаунт
Мы реализовали сквозной механизм сохранения корзины на основе уникального идентификатора, который присваивается каждому пользователю сразу при первом взаимодействии с сайтом.

Все действия пользователя — добавление товаров, промоакции, изменения количества — фиксировались по этому идентификатору и сохранялись в LocalStorage с синхронизацией через сервер, что обеспечивало сохранение корзины между устройствами и сессиями.

При авторизации или вводе email идентификатор связывался с аккаунтом, обеспечивая целостность данных и корректное восстановление корзины независимо от способа входа.
При повторном визите корзина автоматически восстанавливалась, сопровождаясь уведомлением: «Ваш заказ ждет вас!», что позволило пользователю продолжить оформление без потерь.
Это позволило сохранить собранные товары и значительно снизить потери заказов из-за технических сбоев.

Особенно важно для сложных наборов (например, «курс на 3 месяца»), которые пользователи могут собирать несколько дней.

Автоматизация акций: убрали ручное управление скидками

Маркетинг запускал акции «1+1», «Скидка 20%», но:
Менеджеры вручную меняли цены в админке, иногда забывая вернуть старую стоимость после окончания акции.
Бейджи «Акция» приходилось добавлять вручную к каждому товару.
Чтобы устранить эти сложности, мы реализовали инструмент массового импорта акционных цен с привязкой к периоду действия и настроили автоматическое добавление бейджей на основе расписания акций, что исключало ручное вмешательство.
Маркетинг теперь самостоятельно управляет акциями без риска «сломать» базовые цены. Это ускорило запуск промо-кампаний — например, «Черная пятница» была подготовлена за 1 день вместо 3.

Реферальная программа: механика «дружеского» привлечения

Существующая реферальная система была интегрирована в платформу, но пользователи не могли получать бонусы при переходе по ссылке и выводить их в личном кабинете, из-за чего вовлечённость в программу оставалась низкой.
Мы полностью переработали архитектуру и логику работы:
Принцип работы системы изменён: реферал теперь получает не скидку, а накопительные баллы
Баллы можно использовать для оплаты следующих заказов или вывести на банковскую карту — что психологически воспринимается гораздо ценнее, чем стандартная скидка.
Реферальная программа реализована как собственное решение внутри платформы, без зависимости от внешних сервисов, что обеспечило гибкость управления и контроль над процессом.
Переработанная реферальная система повысила вовлечённость существующих клиентов, стимулируя их к активному привлечению новых покупателей через личные рекомендации.

Это помогло снизить стоимость привлечения клиентов, увеличить число повторных заказов и создать устойчивый виральный эффект, что особенно важно в нише с низкой частотой покупок.

Статусы заказов: прозрачность вместо звонков в поддержку

Значительная часть обращений в поддержку — вопросы «Где мой заказ?». Менеджеры тратили время на ручные проверки и ответы.

Статусы в CRM не синхронизировались с сайтом. Клиент видел только «Оплачен», даже если заказ уже был в пункте выдачи.
Интеграция обновления статусов была реализована через API RetailCRM, которая управляет заказами и доставкой, с дополнением прямых интеграций со службами доставки (СДЭК, Почта России) для автоматического получения актуальных данных.
Статусы автоматически обновляются в RetailCRM и передаются на сайт.
Клиенты получают уведомления в личном кабинете и SMS при критичных изменениях (например, «Посылка задерживается»).
Количество «тревожных» обращений в поддержку заметно сократилось.

Появление статуса «Посылка в вашем городе» уменьшило поток звонков с вопросом «Когда придет заказ?», что повысило эффективность работы службы поддержки и улучшило клиентский опыт.

Сквозная аналитика: из «слепого» управления к данным

Ранее аналитика не фиксировала ключевые события и не связывала данные между собой. Из-за этого было невозможно видеть:
На каких этапах оформления заказа пользователи чаще всего уходят
Насколько эффективны промоакции («колесо подарков», «1+1»)
Где появляются дубли заказов в CRM
Без этих данных доработки UX делались на догадках, а маркетинг не мог корректно оценивать эффективность кампаний. Мы создали единую событийную модель, описав цепочку действий пользователя от первого визита до оплаты и фиксируя все этапы оформления заказа.
Пример отображения карты скролла на главной странице
Интеграция с Google Analytics и Яндекс. Метрикой позволила учитывать нестандартные события, такие как активация промоакций, использование подарков и переходы по реферальным ссылкам.

Данные CRM были связаны с веб-аналитикой через идентификаторы заказов и клиентов, что позволило отслеживать каналы, приводящие к дублям, и выявлять узкие места. Критичные ошибки оформления заказа автоматически логировались и попадали в отчёты без участия разработчиков.
Теперь можно точно измерять конверсию по каждому этапу и каналу, сравнивать эффективность акций и находить узкие места в воронке.

Маркетинг получил возможность быстро проверять гипотезы, а UX-доработки стали основаны на данных, а не на догадках.
Оптимизировали производительность: стабильно быстро, даже для самых «тяжёлых» данных
Платформа регулярно тормозила по нескольким причинам:
Дубли товаров в базе данных из-за некорректного импорта из 1С
Огромные кеш-файлы PHP (200+ МБ), которые админка не могла обработать
Неоптимизированные SQL-запросы
Тяжёлые сторонние скрипты, блокирующие рендеринг страниц
Для ускорения работы добавили CDN-кэширование статики и API-ответов, а также внедрили множество улучшений
Мы переписали скрипт импорта из 1С с проверкой уникальности по SKU и внедрили регулярную фоновую дедупликацию данных с логированием удалённых записей.

Кеширование админки переработали: теперь оно хранится в компактных структурах через Redis, что исключило гигантские PHP-файлы. Критичные SQL-запросы оптимизировали, а тяжёлые сторонние скрипты, включая аналитику, вынесли в асинхронную загрузку, чтобы не блокировать рендеринг страниц.
Скорость загрузки страниц на мобильных устройствах увеличилась в среднем на 35−40%, админка перестала «падать» при работе с большими объёмами данных, а бизнес-процессы внутри компании перестали срываться из-за технических ограничений.

Итоги проекта

Стабильность и высокая производительность

Оптимизация базы данных, отказ от тяжёлых блокирующих скриптов и переработка кеширования устранили системные сбои и ускорили работу сайта и админки.

Платформа стала предсказуемой в пиковые моменты трафика, что особенно важно для органического и ретаргетингового потока.

Управляемый маркетинг на основе данных

Внедрение сквозной аналитики дало маркетингу и продуктовой команде прозрачную картину: где пользователи теряются в воронке, как работают акции и какие каналы приносят реальные заказы.

Решения теперь принимаются на основе фактов, а не предположений.

Масштабирование без усложнения процессов

Локализация под Казахстан, автоматизация акций, переработка рекомендаций и реферальной программы расширили каналы продаж и повысили конверсию без увеличения штата поддержки и маркетинга.
За времяпроекта была проделана масштабная работа по стабилизации и оптимизации платформы GURUGROW. На старте команда сосредоточилась на устранении критических багов, упрощении поддержки и ликвидации узких мест, которые мешали развитию бизнеса.

Сегодня мы уже работаем не только над исправлением ошибок, но и над внедрением новых функциональных возможностей, которые позволяют компании быстрее реагировать на запросы рынка и масштабироваться.

Команда

Роман Т.
Менеджер проекта
Никита Б.
Технический директор
Николай П.
Backend-разработчик
Иван И.
Backend-разработчик
Артур Ш.
QA
Backend-разработчик
Антон Ч.
Frontend-разработчик
Никита Щ.