Что нужно было решить
Продавцу нужно быстро понимать, какие товары приносят прибыль, а какие съедают маржу, следить за ценами конкурентов и рекламой без ручных таблиц.
Что умеет система
Цены в акциях
Товары в акциях, цены конкурентов по ссылкам, подрезка минимальной цены на заданное число рублей, нижняя граница цены. При резком падении цены у конкурента автоматически не трогает, а предупреждает.
ДРР
Расходы на рекламные кампании и доля рекламных расходов в выручке по данным рекламного кабинета.
ROI
Окупаемость по каждому товару с учётом реальных расходов, целевой ROI, налог, себестоимость. Выбор «только в наличии».
Юнит-экономика
Закупка, логистика, комиссии, реклама, возвраты и итоговая маржа. Итог можно считать по формуле или вводить вручную.
Отмены
Отмены по товарам в динамике.
Тесты товаров
Тестовая юнитка под прайс-лист: массовые правки, те же формулы, подсветка маржи и ROI.
Остатки и уценка
Проверка живых остатков и признаков уценки, сортировка и фильтры во всех вкладках.
Расширение Chrome
Проверяет цены на страницах товаров в браузере продавца: то, что не отдаёт официальный интерфейс.
Заметки и фиксация
Заметки к товарам, закрепление колонок, прилипающая строка итогов.
Статус обновлений
Видно, что обновляется сейчас, можно поставить на паузу или остановить.
Какие защитные механизмы сделаны
Вход и роли
Пароли только в виде bcrypt-хэша. Три роли, и ограничения действуют на сервере, а не только в интерфейсе: проверено запросами под разными ролями.
Наблюдатель не может навредить
Роль просмотра не может запускать обращения к Ozon: кнопки обновления и применения цен для неё закрыты на сервере.
Журнал действий
Администратор видит, кто, когда и что изменил, значение до и после. Отдельный журнал входов и выходов.
Личный ключ расширения
У расширения свой личный ключ, а не общий пароль. Его можно выдать и отозвать.
Первый администратор
Первый пароль создаётся случайным и показывается один раз, в открытом виде нигде не хранится.
Ключи внешних сервисов
Лежат в защищённом файле окружения вне репозитория, не попадают в код.
Паузы и повторы
Запросы к внешним API идут с паузами и повторами, чтобы не упираться в лимиты.
Шифрование соединения
Приложение работает по HTTPS на собственном сервере.
Доступ
Закрытый рабочий инструмент: показываем по запросу.