К содержимому
01 / 05
Компания
Звук
Продукт
Пульт
Роль
Product/UX-⁠дизайнер
Период
Q1 2026

Рефакторинг раздела Модерации

Пульт — внутренняя CMS Звука для музыкальной редакции; раздел «Модерация» — рабочее место модераторов, которые каждый день разбирают эпизоды подкастов, треки, плейлисты и профили на нарушение контент-политик.

Компания
Звук
Продукт
Пульт
Роль
Product/UX-⁠дизайнер
Период
Q1 2026
01

Контекст

Раздел «Модерация» никогда не проектировал дизайнер — он собрался из отдельных задач разработки без единой логики. К моменту аудита в очереди стояло больше 4 000 нерассмотренных решений и свыше 3 000 незакрытых конфликтов между модераторами, а часть проверок шла в обход Пульта — через Google-⁠таблицы и сторонний сервис разметки изображений.

Роль и период

Product/UX-⁠дизайнер, Q1 2026. Вёл раздел один от начала до конца — без исследователя, аналитика или второго дизайнера в процессе. Без готового брифа разобрался, как работает чужой раздел: провёл аудит с нуля. Договорился с модераторами об интервью и проводил их лично. Рисовал экраны и там же проверял их на живых модераторах перед передачей в разработку.

Задача

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

Масштаб

4 468

решений в очереди дашборда «Задания» на момент аудита — масштаб проблемы, с которого начался проект.

441
профиль
390
треков
129
эпизодов
3 182
конфликта
02

Аудит

Прежде чем что-то менять, задокументировал раздел как он есть. Карта раздела — реальная структура экранов и переходов на момент аудита:

Артефакт 01 · карта раздела

Карта раздела

Реальная структура экранов и переходов на момент аудита: поиск разбит на пять типов контента, задачи — на семь очередей.

МодерацияРазметкаконтентаОтчетыИстория решенийЗаданияНастройкиПоиск контентаПлейлистыПрофилиПодкастыТрекиРелизыРешениемодератораДобавить в моизадачиПросмотррешенийПроверкаплейлистовМои задачиРешениемодератораПроверкапрофилейДобавить в моизадачиРешениемодератораПроверка трековПроверкаэпизодовПроверкарешенийРазрешениеконфликтовВыбор типаконтентаКачествоПриоритетыСтоп словаПолитикиПросмотр+изменениеПросмотр +изменениеСоздание,изменение,удалениевкл/выклСоздание,изменение,удалениеПросмотртаблицы
  • Модерация
    • Поиск контента
      • Релизы
        • Решение модератора
      • Треки
        • Решение модератора
      • Подкасты
        • Решение модератора
      • Профили
        • Решение модератора
      • Плейлисты
        • Решение модератора
    • Задания
      • Мои задачи
        • Выбор типа контента
          • Решение модератора
      • Проверка плейлистов
        • Добавить в мои задачи
      • Проверка профилей
        • Добавить в мои задачи
      • Проверка треков
        • Добавить в мои задачи
      • Проверка эпизодов
        • Добавить в мои задачи
      • Проверка решений
        • Решение модератора
      • Разрешение конфликтов
        • Решение модератора
    • Разметка контента
    • Отчеты
      • Просмотр таблицы
    • История решений
      • Просмотр таблицы
    • Настройки
      • Качество
        • Просмотр+ изменение
      • Приоритеты
        • Просмотр + изменение
      • Стоп слова
        • Создание, изменение, удаление вкл/выкл
      • Политики
        • Создание, изменение, удаление
  • Добавить в мои задачи
  • Просмотр решений

Кроме карты — матрица ролей и прав (администратор / модератор / проверяющий / менеджер), карта сущностей и BPMN-⁠процессы принятия решения по контенту и разбора конфликтов. Схемы ниже перерисованы в визуальном языке сайта: подписи и связи — как в исходниках:

Артефакт 02 · карта сущностей

Карта сущностей

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

СущностиРелизыНазваниеОбложкаСодержимое (треки)НазваниеАудиодорожкаТрекиНазваниеОбложкаТекстАудиозаписьПодкастыОбложкаНазваниеОписаниеАвторСодержимое (эпизоды)НазваниеАудиодорожкаЭпизодыОбложкаНазваниеОписаниеАвторАудиозаписьТекстовая расшифровкаПлейлистыНазваниеОписаниеСодержимое (треки)НазваниеАудиодорожкаПрофилиИмя профиляОписание профиляАватар профиля
  • Сущности
    • Релизы
      • Название
      • Обложка
      • Содержимое (треки)
        • Название
        • Аудиодорожка
    • Треки
      • Название
      • Обложка
      • Текст
      • Аудиозапись
    • Подкасты
      • Обложка
      • Название
      • Описание
      • Автор
      • Содержимое (эпизоды)
        • Название
        • Аудиодорожка
    • Эпизоды
      • Обложка
      • Название
      • Описание
      • Автор
      • Аудиозапись
      • Текстовая расшифровка
    • Плейлисты
      • Название
      • Описание
      • Содержимое (треки)
        • Название
        • Аудиодорожка
    • Профили
      • Имя профиля
      • Описание профиля
      • Аватар профиля

Так же задокументированы два процесса раздела — проверка сущности и разбор конфликта:

Артефакт 03 · BPMN

Процесс модерации сущности

Процесс модерации контента, создания решения и проверки на конфликт.

Проверка сущностиModeration SystemExternal SystemsKafkaIngestПроцесс модерации сущностиПроверка наличия конфликтов с другими решениямиданетданетнетданетдаданетданет1.1. Пользовательосуществил вводфильтров поконтенту1.1. Пользовательполучил списокконтента впоисковой выдаче1.1. Пользовательвыбрал контент дляпроверкиСущность пакетная?(релиз/подкаст/плейлист)Проверитьнаименования иаудиодорожкисодержимогоВыявлены нарушения?1.3. Создатьзадачу намодерациюПроизвестипроверкуатрибутов, несвязанных ссодержимым1.4. Создатьрешение1.4. Указатьполитики1.6. Для контентапроставлен признакexplicit?1.7. Проверитьналичие другихрешений попромодерированнойсущности1.7. Решение есть иактивно?1.7. Оно отличается оттекущего?1.7. Создатьконфликт1.7. Отображениеинформации (error)об ужесуществующемрешенииПроверкаизображенияВыявлены нарушения?1.2. Заменаизображения наизображение поумолчанию1.5. Событие офакте модерации1.6. Маркировкавзрослого контента

Шаги схемы по порядку:

  1. Пользователь осуществил ввод фильтров по контенту, получил список и выбрал контент для проверки (1.1)
  2. Параллельно: проверка изображения и проверка сущности. Для пакетной сущности (релиз, подкаст, плейлист) проверяются наименования и аудиодорожки; при нарушениях создаётся задача на модерацию (1.3)
  3. Если в изображении выявлены нарушения, оно заменяется на изображение по умолчанию во внешних системах (1.2)
  4. Проверка атрибутов, не связанных с содержимым; создание решения и указание политик (1.4)
  5. Событие о факте модерации во внешних системах (1.5); для контента с признаком explicit — маркировка взрослого контента в Ingest (1.6)
  6. Проверка конфликтов с другими решениями (1.7): если решение уже есть, активно и отличается от текущего — создаётся конфликт, иначе отображается информация об уже существующем решении
Артефакт 04 · BPMN

Процесс разбора конфликта

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

Moderation SystemнетдаданетданетнетдаБыл созданконфликт порезультатамсоздания 2различных решенийв рамках однойсущности2.1. Получитьсписок конфликтов2.1. Открытьвыбранный конфликтПровести модерациюсущности2.2. Указатьмодераторов,допустивших ошибкиВозник случай, когданельзя обвинить одногоили второго модераторав ошибке?Решение совпадает содним из решениймодератора?Решение модератора, скоторым совпадаетрешение признанокорректным?Отобразить ошибкуПроверяющий исправилрешение по ошибкаммодераторов?Указать корректныеполитики (толькоесли оба не правы)2.3.Деактивироватьстарые решения1.4. Создатьрешение2.4. Выполнитьрасчёт веса ошибкимодератора(ов)2.2. Указатьданный факт,проставив флаг

Шаги схемы по порядку:

  1. Был создан конфликт по результатам создания двух различных решений в рамках одной сущности
  2. Получить список конфликтов, открыть выбранный конфликт, провести модерацию сущности, указать модераторов, допустивших ошибки (2.1–2.2)
  3. Если нельзя обвинить одного или второго модератора в ошибке — указать этот факт и проставить флаг
  4. Иначе: если решение совпадает с одним из решений модераторов и оно признано корректным — далее; если нет — отобразить ошибку, и проверяющий исправляет решение по ошибкам модераторов (цикл)
  5. Если решение не совпадает ни с одним — указать корректные политики (только если оба не правы)
  6. Деактивировать старые решения (2.3), создать решение (1.4), выполнить расчёт веса ошибки модератора (2.4)

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

Артефакт 05 · модель статусов

Статусная модель решений

Как созданное решение получает статус NEW, ACTIVE или REJECTED и когда возникает конфликт: когда по сущности уже есть решение и создаётся отличное от него.

Решение уже существует?ДаНетКонфликт разрешенКонфликт разрешен или решение отозваноСоздано решениеСоздано отличное от первогорешение (NEW)Создаётся конфликтАктивное решение (ACTIVE)Деактивированное решение(REJECTED)

Шаги схемы по порядку:

  1. Создано решение. Если решение уже существует — создаётся отличное от первого решение (NEW) и создаётся конфликт; если нет — решение становится активным (ACTIVE)
  2. После разрешения конфликта или отзыва решения оно деактивируется (REJECTED)

Интерфейс на момент аудита: отдельный экран поиска на каждый тип контента, чекбоксы вместо чипов, никакой дизайн-системы.

Форма поиска релизов с длинным списком фильтров; слева меню раздела.
Открыть целиком →
Три экрана подряд: форма поиска подкастов, выдача эпизодов, окно решения с чекбоксами.
Открыть целиком →

А раздел «Задания» — тот самый дашборд с очередью, с которого и считался реальный масштаб.

Дашборд «Задания»: карточки очередей по типам контента.
Открыть целиком →
03

Исследования

Не ограничился опросником — сел рядом с модераторами и продукт-овнером модерации и смотрел вживую на экран, как они пропускают через себя сотни эпизодов и треков в день: как ищут мат по Ctrl+F и попадают не туда, как держат список стоп-слов в голове, потому что интерфейс их не помнит, как переслушивают спорные места на ускорении и как вместо разметки в Пульте открывают сторонний сервис в соседней вкладке.

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

CJM

CJM по эпизодам и подкастам — по каждому элементу экрана (обложка, ID, автор, описание, рекомендация ИИ, score, стоп-слова, комментарий, текст эпизода, выбор политик, кнопки управления, счётчик, поиск, история решений) сведены цель, как работает сейчас, проблема, вопрос, идея и решение.

Артефакт 06 · CJM

CJM по элементам экрана

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

АспектОбложкаID подкаста/эпизодаАвторНазвание подкаста/эпизодаОписаниеРекомендация AIScoreСловаКомментарийРешенияТекст эпизодаВыбор политикИтог решенияКнопки управленияСчётчик проверенного контентаПоиск контентаИстория решений
Цель

Просмотр обложки с целью модерации

Могут быть изображения, которые попадают под 18+

Есть необходимость переходить по ID в звук, для того, чтобы просмотреть обложку или описание, проверить на наличие ссылок на запрещённые сервисы

Просмотр автора

Просмотр названия

Просмотр описания на наличие запрещённых ссылок, призывов и т. д.

Помощь в принятии решения на основе рекомендации AI

Оценка веса по стоп-словам

Просмотр стоп-слов, которые определил AI

Оставить комментарий

Вынести решение по контенту

Просмотр текста эпизода для проверки по стоп-словам

Выбор политики исходя из решения

Просмотреть итог решения, перепроверить себя

Сохранение решений или переход вперёд-назад

Видеть, какое количество контента осталось проверить либо проверил уже сегодня

Найти контент чтобы посмотреть решения или принять решение по контенту из списка жалоб

Просмотреть историю решений, чтобы перепроверить себя

Или сравнить решения нескольких модераторов

Как сейчас

Маленькая обложка

Копируют ID и вставляют в поисковую строку

Обычный просмотр без необходимости перехода в звук

Опытные модераторы могут определить, что подкаст “плохой” или “хороший” по автору

Обычный просмотр без необходимости перехода в звук

При наведении открывается всплывающее окно с текстом описания.

Практически не пользуются, не обращают особого внимания

Практически не пользуются, не обращают особого внимания

Только сравнивают, у кого выпал больший score

Просмотр стоп-слов, далее проверка текста по этим словам.

Конкретно этим комментарием не пользуются.

Выбор одного решения, далее выбор политики, если на контент накладывается какое-либо ограничение (блок или эксплицит)

Пользуются поиском в браузере (Ctrl+F) по стоп-словам из списка в карточке

Также могут использовать дополнительные слова исходя из собственного опыта

Открывается выпадающий список с множественным выбором

Видим только решение

Сохранение используется постоянно

Кнопка назад практически не используется

Назад используется редко в случае, если не хочется разбираться в сложных случаях

Сейчас нет

Из огромного списка фильтров и полей с поиском пользуются только полями с ID и UPC

Таблица со списком

Открывается дровер с историей решения

Проблемы

Трудно рассмотреть контент на обложке

Обложку приходится открывать изображение в новом окне и увеличивать

Или переходить в звук и смотреть там

Замедляет время обработки контента, так как приходится открывать другую вкладку со звуком и менять данные ID в поисковой строке

нет данныхнет данных

Описание может быть очень длинным

Прокрутки нет, текст не умещается в экран

Ссылки некликабельные

Приходится переходить в звук для проверки

нет данныхнет данныхнет данных

Непонятно, куда он уходит и зачем нужен

Все комментарии проставляются в решении

Сейчас 5 решений

2 из них не используются

Окно с текстом очень маленькое. Его нельзя расширить, очень много приходится прокручивать

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

Каждый раз закрывают попап, чтобы посмотреть список стоп-слов и скопировать их, потом снова открывают текст и поиск в браузере и так несколько раз.

В выпадающем списке указаны все имеющиеся политики, не сортируются в зависимости от решения

Хочется вынести самые популярные наверх

Неудобно каждый раз открывать выпадающий список и выбирать

Нет возможности посмотреть какие политики выбраны

Приходится отменять решение и вводить политики заново.

Иногда происходит какой-то баг, и кнопка «Сохранить» остаётся неактивной

Приходится обновлять страницу и заново проставлять решения с политиками

Модераторы не понимают, сколько единиц контента проверили.

Используют обходной способ — скриншоты или перезагрузку окна — для подсчёта.

нет данных

Неочевидный и неудобный просмотр решений в случае когда их несколько

Вопросы

Можем ли открывать обложку в попапе в увеличенном виде?

В треках идентификаторы — это ссылки на звук

В эпизодах подкастов почему нет?

нет данныхнет данныхнет данных

Может быть убрать?

Может быть убрать?

нет данных

Точно не нужен? может быть мы чего-то не знаем?

нет данных

Можем ли мы добавить в попап с текстом поиск и якорные ссылки на стоп-слова?

А можем на выбор политик навесить хоткеи?

Этот случай вроде уже прорабатывается?

Из-за чего такая ошибка может быть?

Сможем ли сделать такой счетчик?

Кажется, не должно быть сложным, просто +10 при сохранении решений

Для чего нам столько полей?

нет данных
Идеи

Открывать обложку в пульте в увеличенном формате

Сделать ID кликабельными ссылками с переходом в звук

нет данныхнет данных

Переделать UI элемента. Добавить прокрутку и возможность переходить по ссылкам

Убрать малоиспользуемый элемент, избавимся от визуального шума

Убрать малоиспользуемый элемент, избавимся от визуального шума

нет данных

Убрать неиспользуемый элемент

Убрать лишние типы решений

Добавить список стоп-слов в попап с текстом

Добавить поиск

Добавить якорные ссылки на стоп-слова

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

Отказаться от выпадающего списка, выводить сразу список политик с чекбоксами

Хотим попробовать хоткеи

Дать возможность видеть политики, применённые к решению

Нужно понять причину и найти способы решения

Сделать счетчик с количеством проверенного контента

Убрать неиспользуемые поля и фильтры

Улучшить UX и UI раздела просмотра истории

Решения

Делаем и больше, и открываем

Делаем кликабельные ID

нет данныхнет данных

Переделываем

Убираем

Убираем

нет данных

Убрать неиспользуемый элемент

Убрать/скрыть

Пробуем-делаем

Отказаться от выпадающего списка, выводить сразу список политик с чекбоксами

Хотим попробовать хоткеи

Дать возможность видеть политики, применённые к решению

нет данных

Делаем (нужен ещё бэкенд)

Лишнее убираем

Улучшить UX и UI раздела просмотра истории

Находки

Аудит и CJM вскрыли структурные проблемы, а не только локальные раздражители:

  • один и тот же экран «Задания» на одних сущностях показывал несколько карточек, на других — одну, без объяснения логики;
  • набор кнопок действий менялся от сущности к сущности (одобрить / сохранить / сохранить моё решение) без видимой причины;
  • интерфейс не показывал, какие решения взаимоисключающие, а решение по треку внутри релиза визуально читалось как решение по всему релизу;
  • один и тот же паттерн — попап поверх дровера — на разных экранах конфликтовал сам с собой;
  • разметку контента и фильтры поиска нужно было пересобрать заново, а не точечно поправить;
  • поиск на каждый тип контента был отдельным экраном вместо одного с переключателем — и это же подтверждала CJM-⁠строка «Поиск контента».

Поверх системных находок — конкретные разрывы UX из интервью с модераторами:

  • поиск (Ctrl+F) искал по всей странице вместо текста конкретного эпизода и перекидывал на соседние карточки;
  • список политик не был отсортирован по частоте, и самые частые (безопасность несовершеннолетних, пропаганда ЛГБТ, пропаганда наркотиков, антироссийская пропаганда) стояли ниже редких;
  • нельзя было посмотреть уже выставленные в решении политики, не сбрасывая его;
  • не было счётчика обработанного контента и хоткеев на сохранение и выбор политик;
  • сохранение решения иногда молча не срабатывало и требовало перезагрузки страницы.

Часть идей по скорости и мотивации команды сверил с тем, как это решено во внешнем сервисе разметки, которым модераторы пользовались в обход Пульта.

04

Решения

Каждое решение — по одной схеме: находка из аудита и интервью → что сделано в макетах → почему.

Единый экран поиска вместо пяти

Находка

Поиск на каждый тип контента был отдельным экраном — пять разных экранов. · аудит; CJM «Поиск контента»

Решение

Единый экран поиска контента с вкладками по типу: треки, релизы, эпизоды, подкасты, профили.

Почему

Из длинного списка фильтров модераторы пользовались только полями с ID и UPC — лишние поля и фильтры решили убрать, а вместо пяти форм оставить один экран с переключателем.

Карточка эпизода как основной рабочий экран

Находка

Набор кнопок менялся от сущности к сущности без причины; интерфейс не показывал, какие решения взаимоисключающие; не было счётчика обработанного контента; уже выставленные политики нельзя было посмотреть, не сбросив решение. · CJM «Решения», «Счётчик проверенного контента», «Итог решения»

Решение

Счётчик «Проверено сегодня» сразу в шапке, стоп-слова и описание над плеером, решение — переключателем Approved / Blocked / Explicit вместо чекбоксов, политики — отдельными чипами с быстрым переходом к редактированию.

Почему

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

Политики: хоткеи вместо кликов

Находка

Список политик не отсортирован по частоте: самые частые стоят ниже редких. Хоткеев на сохранение и выбор политики нет, а модератор разбирает сотни решений в день. · CJM «Выбор политик»; интервью

Решение

Список политик вынесен в отдельный дровер с нумерованными хоткеями 1–9 и 0 — по одной цифре на политику — и сохранением по Enter вместо клика мышкой по каждому пункту.

Почему

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

Поиск внутри текста эпизода

Находка

Ctrl+F искал по всей странице, а не по тексту конкретного эпизода, и перекидывал на соседние карточки. Модераторы ищут мат и стоп-слова вручную. · CJM «Текст эпизода»; наблюдение за модераторами

Решение

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

Почему

Чтобы сверить стоп-слова, окно с текстом приходилось закрывать и открывать заново, — в CJM отсюда идея встроить поиск и список стоп-слов в само окно.

Обложка подкаста на полный экран

Находка

Чтобы рассмотреть обложку, модераторы переходили на основной сайт по ID — об этом просили в интервью. · CJM «Обложка»; интервью

Решение

Обложку подкаста можно раскрыть в полный размер прямо на экране модерации.

Почему

На обложке могут быть изображения 18+, а маленькую обложку трудно рассмотреть: её открывали в новом окне и увеличивали или переходили в звук.

05

Результат

Раздел вернулся из Google-⁠таблиц и стороннего сервиса разметки внутрь Пульта — единая рабочая поверхность для очереди проверки контента.

Все решения — единый экран поиска, карточка с переключателем Approved / Blocked / Explicit, дровер политик с хоткеями, поиск внутри текста — сделаны не только для эпизодов. В макетах показан эпизод как самый сложный случай (плеер, текст, стоп-слова), но те же паттерны отмасштабированы на треки, релизы, подкасты, плейлисты и профили — это часть той же работы, а не отдельная задача на потом.

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

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

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

Следующий кейсCSAT и Time-⁠to-⁠Market в Пульте