Перейти к содержимому

Партнёрский B2B-портал

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

Клиент
DSSL
Продукт
Редизайн партнёрского портала дистрибьютора
Год
2024–2026
Роль
Продуктовый дизайнер
Платформа
Веб, в первую очередь десктоп

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

Команда
Единственный дизайнер; frontend, backend, продакт-менеджер, QA и тимлид
Продукт / исследование
Продакт-менеджер в команде; отдельного исследователя не было
Срок
Около шести месяцев активной работы с долгой паузой
Проверка спецификации: сорок восемь импортированных строк со статусами обработки; позади — ещё два экрана портала
Проверка спецификации — очередь, где определяется идентичность строки. Данные синтетические.

Старый портал отвечал на каждый вопрос менеджером.

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

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

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

Настоящим объектом редизайна была спецификация, а не каталог.

Бриф просил современный интерфейс, но «найти товар и положить в корзину» — единица магазина, не работы покупателя.

Покупатель работает со спецификацией на 10–50 строк, которая уже существует в таблице, пересылается и правится вручную. Старый портал заставлял вводить её снова, а неоднозначность мог разрешить только человек.

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

Провести готовую спецификацию до оформленного заказа, не потеряв ни одной исходной строки.

До первого макета я проверил то, что уже существовало.

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

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

Затем дизайн-система, двадцать экранов, React-прототип и каталог компонентов. Синтетический агент прошёл девять сценариев: 35 прогонов за три раунда. Именно сборка нашла то, чего ещё не хватало в экранах.

Собранный прототип на синтетических данных — тот же, который проходил агентский прогон. Интерфейс прототипа — на английском.

Открыть прототип (внешняя ссылка, откроется в новой вкладке)
Двадцать экранов как один индекс: каждый маршрут продукта сгруппирован по своей задаче.
Один компонент и все разрешённые варианты. Матрица проверяется в каталоге, не на продуктовом экране.

Шесть экранов были готовы до структурной проверки. Этот порядок был ошибкой.

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

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

Две находки я сначала описал неверно. Проблемой была не позиция уведомления, а четыре карточки высотой 560 px; заказ открывался, но единственный вход назывался «Оплатить счёт». Исправление первоначальных диагнозов ничего бы не починило.

Четыре решения — и цена каждого.

Импорт файла и ручной ввод — два входа одной спецификации. Значение строки разбирается на одном экране.

Почему
Два механизма разрешения создают две истории одного решения. Источник строки — файл, номер, текст и количество — должен дойти до заказа, иначе спорную поставку не с чем сверять.
Цена
Быстрый заказ потерял собственный выбор кандидата. Введённые вручную строки иногда приходится завершать на отдельном экране, и переход объясняется заранее.
Одна неоднозначная строка, оба кандидата и исходная строка файла.

Цена и наличие несут две независимые оси: подтверждено, устарело или не подтверждено — и изменилось или нет.

Почему
Изменившаяся цена всё ещё может быть проверенной. Свежесть отвечает за доверие, изменение — за проверку корзины; одна шкала не отвечает на оба вопроса.
Цена
Две оси на самых частых компонентах и более широкая колонка. «Не подтверждено» всегда написано словами: пустая цена читается как бесплатная.
Две строки изменились после импорта. У каждой названы изменение, причина и источник.

Неоднозначная строка никогда не разрешается за покупателя, какой бы уверенной ни была догадка.

Почему
Правила совместимости оборудования нигде не формализованы. Автоматическая проверка перенесла бы риск несовместимой поставки на объект, где уже ждёт монтажная бригада.
Цена
Очередь разбора — самый медленный экран: медиана 17,9 секунды против 0,9–2,8 на остальных. Это цена гарантии для того, кого она защищает.

Навигация не рекламирует несуществующие экраны. Прайс-листы и общий реестр документов убраны; документы живут в заказе.

Почему
У обоих не было подтверждённого источника и маршрута. Пустой пункт учит не доверять всей навигации.
Цена
Задача бэк-офиса «найти счёт без знания заказа» пока не имеет отдельного адреса и вернётся только с реальным источником.
Четыре пункта — и за каждым действительно есть экран.

Сорок пять компонентов — и одна строка, которую я отказался дублировать.

Двадцать четыре общих семейства и двадцать один доменный компонент. Общие взяты из открытой библиотеки только там, где были нужны экрану; таблицы закупки, строки разбора, цены, наличие, отгрузки и таймлайн принадлежат самому продукту.

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

ProductRow — Корзина / Каталог × по умолчанию · внимание · недоступно · добавлено
PriceBlock — подтверждено · устарело · не подтверждено × без изменения / изменено
Availability — подтверждено · устарело · не подтверждено × без изменения / изменено
ResolutionRow — точное · неоднозначное · отсутствует · изменено + ошибка парсинга
FulfillmentPlan — по умолчанию · выбрано · недоступно
EmptyState — нет результатов · пока пусто · ошибка загрузки

Что решено — и какой ценой.

Решено
Путь от файла на 48 строк до заказа проходит без предварительного чтения менеджером, а каждая строка хранит источник. Три из трёх агентских прогонов дошли до созданного заказа.
Пожертвовано
Скоростью в точке неоднозначности и отдельным реестром документов. Оба обменяны на гарантии, которые интерфейс способен выполнить.
Почему цена оправданна
Оба отказа защищают то, чего система сама не проверяет: совместимость оборудования и несуществующий источник документов. Ложное обещание сломалось бы на первом реальном заказе.
Что изменилось в моей работе
Теперь структурная проверка проходит до экранов. Здесь неверный порядок превратил находку ценой в абзац в полноценную пересборку.

Числа проекта закрыты NDA и не публикуются; исходной точки для сравнения тоже нет. Метрики — план измерения, а не заявленный результат. Три из трёх — агентский прогон прототипа, не внедрение.

Этот кейс, вероятно, оставил вопрос.

Большая его часть — компромиссы, а компромиссы стоит обсуждать.

Связаться со мной

Поговорим

Если кейс выше ответил на ваш вопрос — или добавил новый.