Ниша
Электротехника, опт и розница
Регион
Москва и область
Срок
16 недель
Команда
4 человека: аналитик, дизайнер, два разработчика
Год
2025

Каталог на 9 200 позиций, где менеджер собирает заказ за четыре минуты вместо четырнадцати

Что было до · 01

Точка отсчёта

Цифры ниже сняты до начала работ по данным клиента, а не по нашим оценкам.

Сайт стоял на конструкторе четвёртый год. Товары заводили руками, поэтому в каталоге лежало 640 позиций из 9 200 складских, а остальное менеджеры отправляли прайсом в Excel. Остатки обновлялись раз в сутки ночью, и половина заказов приходила на то, чего уже нет.

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

Позиций на сайте из 9 200 складских
640
Сборка одного заказа менеджером
14 мин
Отказы на странице поиска
38%
Заявки с сайта, в месяц
11
Что сделали · 02

Порядок работ

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

  1. 01

    Разбор номенклатуры и характеристик

    3 недели

    Выгрузили 9 200 позиций из 1С и свели характеристики к 12 полям, по которым реально выбирают. Треть значений пришлось нормализовать: «16А», «16 А» и «16 ампер» лежали в одном поле как разные строки.

  2. 02

    Прототип каталога и корзины

    2 недели

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

  3. 03

    Обмен с 1С

    4 недели

    Остатки и цены по договору каждые 15 минут, номенклатура — раз в сутки. Обмен односторонний: сайт ничего не пишет в 1С, кроме заказа, поэтому сбой на сайте не может испортить учёт.

  4. 04

    Вёрстка, поиск, сборка

    5 недель

    Каталог собирается статически, поиск и подбор работают на Typesense. Страницы категорий рендерятся на сборке, поэтому LCP не зависит от того, сколько человек сейчас на сайте.

  5. 05

    Приёмка и перенос

    2 недели

    Перенесли 640 старых адресов на новые редиректами один к одному, отдали доступы, исходники и инструкцию контент-менеджеру. Две недели вели оба сайта параллельно.

Экраны · 03

Что получилось на экране

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

Скриншот Каталог автоматов: подбор по 12 характеристикам, остатки по двум складам и цена по договору
Скриншот Карточка позиции: характеристики таблицей, аналоги, сертификаты и кратность упаковки
Скриншот Корзина оптового клиента: цена по договору, кратность, отсрочка и расчёт доставки
Скриншот Панель менеджера: заказ, собранный клиентом, с историей правок и статусом в 1С
Результат · 04

Что изменилось в цифрах

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

Замер 15.03.2026, через 6 месяцев после запуска
Показатель До После Итог
Сборка одного заказа менеджером 14 мин 4 мин −71%
Заявки с сайта, в месяц 11 26 ×2,4
Отказы на странице поиска 38% 12% −26 пунктов
LCP каталога на 4G 4,2 с 1,4 с −67%
Задержка остатков 24 ч 15 мин обмен по расписанию
Позиций доступно на сайте 640 9 200 весь склад
Динамика за 12 месяцев 04.25 — 03.26
8 15 23 30 Заявки с сайта, в месяц запуск · 09.2025 сломан подбор 26 04.25 06.25 08.25 10.25 12.25 03.26 Месяц замера

Ноябрьская просадка — наша ошибка в подборе, разбор ниже. Декабрь и январь в этой нише всегда выше среднего: закрываются годовые сметы.

Что пошло не так · 05

Три недели поиск отдавал не то

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

Через полтора месяца после запуска клиент сказал, что менеджеры снова считают заказы в Excel. Мы полезли в логи поиска и увидели, что 1 400 позиций не находились по характеристикам вообще. Причина была в нашей же нормализации: мы свели «16А» и «16 А» к числу 16, но не учли позиции, где номинал записан дробью — «6,3 А». Парсер отбрасывал такие значения молча, без ошибки, и позиция уходила в индекс без номинала.

Нашли не сразу, потому что смотрели не туда: первые дни искали проблему в Typesense, а она была на шаг раньше, в выгрузке. Исправили за пять дней, ещё за два переиндексировали каталог. Но три недели, с середины октября до начала ноября, часть каталога работала хуже старого сайта — это видно на графике.

Что поменяли после этого

После этого случая любой парсер данных клиента у нас обязан падать с ошибкой на непонятном значении, а не пропускать его. И на приёмке мы теперь сверяем не выборку, а полное число позиций с заполненными характеристиками — с числом из 1С.

Больше всего я боялся, что получится красивый сайт, с которым менеджеры не будут работать. Сейчас заказ на сорок позиций собирается быстрее, чем я успеваю дойти до кофемашины. История с поиском в октябре мне не понравилась, но нашли и починили сами, без моих напоминаний — это дороже, чем «всё идеально».
Дмитрий Кузнецов Коммерческий директор поставщик электротехники, Москва
Стек и соседние кейсы · 06

На чём собрано

Фронтенд
AstroTypeScriptCSS без фреймворка
Данные
PostgreSQLTypesense
Интеграции
1С:Управление торговлейЮKassa
Инфраструктура
DockernginxGitHub Actions
Живой сайт

Ссылку даём по запросу: в каталоге видны оптовые цены по договорам, и клиент не хочет, чтобы их листали конкуренты.

Расскажите про задачу — вернёмся с вилкой

Посмотрим текущий сайт и спрос в вашей нише руками, пришлём оценку с методикой расчёта и список вопросов, которые нужно решить до старта. Если задача не наша — скажем сразу.

Три проекта из списка пришли по рекомендации предыдущих клиентов. Спросить о нас напрямую — нормальная практика, дадим контакты.

Позвонить Оценить проект