Дашборд Fit&Lead Group
Три проекта (Fit&Lead, СММ-агент, ИСКРА) в двух контурах. Аналитический: лиды, реклама, трафик, продажи, связки, воронки; источники Битрикс24 (только Fit&Lead), Метрика, Директ, выгрузки продуктов, соцсети. Рабочий: задачи с канбаном и архивом, КПИ, СММ-станция (контент-план, генерация, согласование, публикация) и раздел Директа с планом и фактом. Права двумерные: отдел (СММ, Реклама) на проект. Многопользовательский, доступ по паролю.
готовS1 · Каркас, доступ, деплой6/6
Цель: Живой дашборд на сервере под паролем: роли работают, экраны пустые и честные.
В РАБОТЕS2 · Ядро данных и загрузка файлов5/7
Цель: Любой файл из любого источника ложится в единое ядро без дублей, метрики считаются в одном месте.
В РАБОТЕS3 · Рабочее место отдела: задачи, бэклог, КПИ15/16
Цель: Отдел работает в дашборде уже сегодня, до появления доступов к данным.
В РАБОТЕS4 · Аналитика проектов и конструкторы6/7
Цель: Экраны, ради которых всё затевалось: воронки, связки, каналы, разрезы.
В РАБОТЕS5 · Коннекторы источников5/8
Цель: Данные приезжают сами, руками ничего не грузим.
В РАБОТЕS6 · Качество данных, план и алерты4/5
Цель: Видно, каким числам можно верить, и что от плана отстаёт.
В РАБОТЕS7 · Соцсети: статистика постфактум7/8
Цель: Охваты, подписчики и вовлечение подтягиваются к опубликованному, КПИ считаются сами.
готовS8 · Проверки по сроку1/1
Цель: Отложенные проверки, чтобы не забылись.
готовS9 · Отделы, права, справочники проектов7/7
Цель: Права отдел на проект и сущности, без которых разрезы потом слипнутся.
В РАБОТЕS10 · СММ: бренд-кит, контент-план, генерация13/14
Цель: СММщик генерит руками, дашборд помогает пресетами и бренд-китом. Видео и ИИ-аватаров нет.
В РАБОТЕS11 · СММ: согласование8/10
Цель: Идея проходит согласование внутри дашборда, без переписки в мессенджере.
В РАБОТЕS12 · Директ: план, факт, отклонения, ИИ-разбор11/12
Цель: Видно, где реклама отходит от нормы, и почему.
В РАБОТЕS13 · Директ: управление рекламой1/5
Цель: Заложено сейчас, реализуем позже: не только смотреть, но и вести.
планS14 · СММ: публикация0/3
Цель: Отправка в соцсети. Пишется кодом, включается и проверяется отдельным решением владельца.
готовS15 · Доступы: пароли, логины, права3/3
Цель: Свести доступы всех сервисов в одно место с правами по людям
В РАБОТЕS16 · Календарь отдела и встречи2/3
Цель: Общий календарь задач, дедлайнов и встреч с приглашениями
В РАБОТЕS17 · Направления отдела: СЕО и квалификация лидов2/3
Цель: Два новых направления в структуре дашборда
Ворклог (места остановки)
Дашборд переехал на https://marketing.fit-lead.ru. Домен уже вёл на наш сервер, добавил отдельный блок nginx с проксированием на 127.0.0.1:3190, сертификат Let's Encrypt с автопродлением, http уводит на https редиректом. Блок отвечает только на своё имя, поэтому остальные проекты сервера продолжают открываться по IP с портом — проверил atlas, 24contentzavod, myvisionagency и порты 3061, 3080, 3170. В конфиге подняты лимит тела запроса до 200 мегабайт (медиатека грузит видео) и таймаут до 300 секунд (обмены с Битриксом идут дольше минуты), плюс заголовок noindex: рабочему инструменту отдела в поиске делать нечего.
→ Порт 3190 оставлен открытым как запасной вход, кука сессии пока без флага Secure — иначе вход по голому IP сломается. Когда все перейдут на домен: поставить COOKIE_SECURE=1, перезапустить приложение и закрыть 3190 снаружи. Записано в docs/DEPLOY.md.
Починил стоимость лида: делила рекламный расход на ВСЕ заявки CRM подряд, включая 1541 регистрацию блогеров в личном кабинете и то, что менеджеры нашли руками — выходило 326 руб вместо настоящих 3071. Теперь знаменатель только заявки с рекламной меткой, рядом стоит стоимость качественной заявки (43610 руб). Заодно починил конверсию качественной в сделку: делила все сделки месяца на качественные заявки и давала 192 процента, теперь считает только сделки, выросшие из заявок этого месяца. Собрал раздел аналитики из четырёх экранов: Показатели (13 плиток с планом, отклонением и трендом за 12 месяцев, плюс те же цифры графиками и таблицей с выгрузкой в Excel), Сквозная воронка (визиты-заявки-качественные-сделки-выиграно-деньги с разрезом по направлениям), Каналы (заявки, качество, сделки, расход, цена заявки, деньги, провал внутрь канала), Планы на год (показатель на месяц, пустая клетка это отсутствие плана, кнопка размножить). Узнаваемость бренда снимается Вордстатом по токену Директа, Вебмастер для этого не нужен: недельный крон, Fit&Lead 969 показов в месяц, СММ-агент 168.
→ Правда по данным за 90 дней: реклама 470210 руб, 335 заявок, 10 качественных (3 процента), 10 сделок, ноль выигранных. Самостоятельный поиск менеджеров 222 заявки, 14 качественных, 4 выигранные сделки. Телеграм даёт лучшее качество: 65 заявок, 13 качественных, 20 процентов. Осталось за владельцем: заполнить планы на год на новом экране и поправить фразы бренда (fit lead ловит небрендовые английские запросы). Не собирается: выручка помесячно и LTV, сумма стоит у 53 сделок из 1021.
Починил счёт лидов: метрика складывала достижения ВСЕХ целей Метрики, хотя подпись обещала только отмеченные как лид. За 30 дней выходило 19833 «лида» при 45 отправленных формах — туда попадали просмотры страниц (Главная 1418, Рекламодателям 1199) и задвоенная автоцель перехода в мессенджер. Ошибка тянула стоимость лида, конверсию визит-заявка и план против факта. Теперь по проектам с CRM считаются заявки CRM, по остальным — только отмеченные цели; заявки CRM привязаны к проекту, чтобы не попадать в цифры соседей. Плюс подключил сделки: 1021 сделка со стадиями, воронками, менеджером и признаком успеха, и блок «Путь заявки» — источник, заявка, сделка, выиграно, деньги, сшивка по ссылке на лид.
→ Правда по данным за 90 дней: реклама 470210 руб расхода, 337 заявок, 10 качественных, 10 сделок, ноль выигранных. Самостоятельный поиск менеджеров: 223 заявки, 16 качественных, 4 выигранные сделки. Сумма заполнена только у 53 сделок из 1021 — выручку по источникам считать не на чем, чинится в CRM. Органику от прямых заходов не отделить: нужна связка по идентификатору посетителя Метрики.
Подразделы вернулись из полосы над содержимым в боковое меню, но раскрыт всегда ровно один раздел — тот, где человек находится; при переходе в другой прежний схлопывается сам. Стрелка справа раскрывает соседний раздел, не уводя со страницы. Раскрытие считается по адресу на сервере, поэтому меню приходит сразу в правильном виде. Компонент SectionTabs удалён, вставки убраны с 25 страниц, списки подразделов остались в lib/nav.ts.
→ Проверено: 16 страниц отдают 200, на /content раскрыт Контент, на /tasks — Работа, остальные свёрнуты. В логе срезанных углов: раскрытый вручную соседний раздел не переживает переход, возврат в раздел открывает его главный экран.
Перестроил навигацию. Меню было 9 групп и около 30 ссылок, стало 7 пунктов: подразделы ушли вкладками внутрь страниц, списки вкладок собраны в lib/nav.ts. Проект выбирался четырьмя способами (адрес /p/код и /seo/код, выпадающий список на пяти экранах контента и в воронках, фильтр на доске задач, жёстко зашитый код в разборе рекламы и лидах) — теперь один сквозной переключатель над меню, cookie на год, всегда сверяется с правами. «Все проекты» складывает цифры; где сумма бессмысленна (контент, бренд-кит, воронка, разбор рекламы, лиды) экран берёт первый доступный и пишет об этом подписью. Экран проекта и SEO-проекта вынесены в components/screens, старые адреса продолжают работать. Проверено: 28 страниц отдают 200 в обоих режимах, меню ровно 7 пунктов, подпись появляется только при «всех проектах».
→ Не сделано осознанно: выбором проекта нельзя поделиться ссылкой (он в cookie), вкладки не помнят последнюю открытую. Записано в SCOPE-CUTS-LOG. Дальше по очереди: сшивка лида со сделкой в CRM и экран под нового человека на квалификации.
Раздел «Лиды и квалификация»: лиды CRM Битрикса приезжают в дашборд каждые 15 минут (первый обход 4192 лида за полгода, дальше только изменённые по метке времени). Экран считает долю качества от решённых, разрезы по источникам, направлениям, ответственным и кампаниям рекламы, отдельно стоимость качественной заявки, список зависших дольше суток и холодная база. Заведены отделы SEO и Квалификация лидов с наборами разделов по умолчанию.
→ Главное из данных: заявки с рекламы 69 за 30 дней, качественных 5, качественная стоила 41 649 руб. Метки кампаний приезжают шаблоном ({reklamodatel}, {campaign_id}) — пока не починят в рекламе, расход по кампаниям не разложить. Дальше: сшивка лида со сделкой (15 воронок в портале) и отдельный экран под нового человека, когда выйдет.
Хранилище доступов: шифрование AES-256-GCM ключом из окружения, показ пароля отдельным запросом с журналом и автоскрытием через 30 секунд, права по людям, сборка списка что менять при уходе человека. Календарь: встречи из Битрикса рядом со сроками задач и слотами контент-плана, занятость коллег отдельным тумблером, блок приглашений с ответом в Битрикс и внутренним предложением времени. Заодно причесали системные чекбоксы и выпадающие списки во всём дашборде.
→ Спринт 17: направления отдела и экран квалификации лидов. В Битриксе доступна CRM: 8929 лидов и 1438 сделок, надо решить с владельцем что из этого тянуть и как размечать по проектам.
Пошёл по очереди задач. Битрикс: импорт поставлен на расписание каждые 15 минут плюс кнопка «Обновить из Битрикса» у владельца на доске. Выгрузка задач в Excel теперь уносит фильтры доски (проект, ответственный, источник, статусы) и подписывает условия отбора первой строкой файла. Сделан контроль выхода публикаций: сверка плана с собранной статистикой площадок, окно ±18 часов, стадия подтягивается сама, пропущенные попадают в список на контент-плане и в уведомления. На первом прогоне выяснилось, что 19 материалов давно вышли, но висели в статусе «запланировано».
→ Следующее по очереди: хранилище доступов (спринт 15) и календарь встреч с приглашениями (спринт 16, лучше вместе с двусторонним календарём Битрикса). Владельцу: добавить скоуп sonet_group, чтобы вместо «группа 18» было название, и разобрать 35 задач наследства предшественника.
Подключил Битрикс24 через входящий вебхук. Разобрались с правами: методам tasks.task.* нужен именно скоуп task, а не tasks — по нему всё отбивалось. Собрал коннектор: справочник людей (68 человек) с раскладкой по корзинам «мой отдел», «наследство», «чужие»; импорт незакрытых задач в одну сторону с источником, ссылкой на оригинал и чужим статусом словами. Приехало 43 задачи: 8 у отдела (Шамрай, Уланов, Трапезников), 35 наследства от предшественника Шатрова, 32 чужих пропущено. На доске задач бейдж «Битрикс», ссылка на оригинал и фильтр по источнику, наследство по умолчанию скрыто.
→ Календарь: события читаются (личный календарь 126), нужен двусторонний синк и слой встреч с приглашениями. CRM открыта, сделки пока не тянем. Разобрать 35 задач наследства: что забрать, что закрыть. Добавить скоуп sonet_group, чтобы видеть названия групп вместо номеров.
Свёл остаток задач по роадмапу и завёл новые направления от владельца: хранилище доступов с правами и журналом, общий календарь отдела со встречами и приглашениями, направления СЕО и квалификации лидов, фильтры в выгрузке задач, контроль выхода публикаций по контент-плану с уведомлением о пропуске. Три новых спринта: 15 доступы, 16 календарь и встречи, 17 направления отдела. Всего 12 новых задач.
→ Владельцу выбрать, с чего начинаем: доступы, календарь встреч или контроль публикаций. По СЕО нужно понимать источник данных: Метрика по поиску есть, Вебмастер нет. По квалификации лидов нужен источник самих лидов: Битрикс или формы.
Доточил разбор рекламы по замечаниям владельца. Во все разрезы добавлены визиты, заявки и цена заявки: Метрика тянется теми же разрезами (устройства, пол-возраст, гео, площадка Директа, тип площадки, тип условия показа) и склеивается с деньгами кабинета по ключу. Ответ на вопрос про Smart TV: 475 «конверсий» кабинета при 133 визитах и нуле форм — конверсий больше, чем визитов. Добавлено окно «3 недели» и история изменений: восемь недель в цифрах и лента событий, восстановленная по дневному расходу. Убрал ошибочную рекомендацию проверять формы на fit-lead.ru: формы работают, причина в том, что поисковый трафик схлопнулся в 22 раза, а сеть заявок не даёт.
→ Ключевое к решению: доля сети выросла с 24% до 47% бюджета за три недели, приложения съели 24% бюджета и дали одну заявку, Едадил 11 620 ₽ и ноль заявок. Владельцу: срезать сеть, запретить приложения, переключить цель оптимизации на формы, вернуть объём на поиск.
Разобрал рекламу Fit&Lead по всем доступным данным и собрал экран «Разбор» в блоке рекламы. Главные находки: реклама простояла 26 дней с 24 июня по 19 июля; после паузы кампании не возобновили, а скопировали (три пары дублей на 453 606 ₽); кабинет считает конверсиями не заявки (692 против 25 форм в августе, Smart TV даёт 95% «конверсии»); 33% сетевого бюджета уходит в мобильные приложения (48 755 ₽ на 715 приложениях); автотаргетинг тратит 88% бюджета; конверсия основного сайта упала с 5,06% в мае до 0,35% в августе, форма «Реклы» дала 1 заявку против 161 в мае. Две недели к двум: расход −44%, клики −61%, цена клика +45%, визиты −59%, заявки 16 против 28. Отдельно выяснил, что реклама ведёт на landing1, а не landing2, и что на landing2 стоит тот же счётчик 110820866.
→ Владельцу: проверить формы на fit-lead.ru, переключить цель оптимизации МК с URL-целей на формы, запретить мобильные приложения в сети, убрать дубли кампаний, решить по недокормленной автостратегии (2 000 ₽ за заявку при 5 заявках в неделю). После правок вернуться через неделю и сверить цену заявки.
Изучил контент-стратегию Fit&Lead v2 и перестроил под неё план. Главное расхождение: цель 12 000 подписчиков в стратегии суммарная по Телеграму, ВК и Инстаграму за 18 месяцев, а план был по одному Инстаграму на 12 месяцев. Теперь стартовая точка это сумма трёх каналов (354 на 19.08: Инстаграм 262, Телеграм 76 и 16, по ВК цифр нет), в расчёте отдельный ввод прироста Телеграма и ВК. Добавлены коридор из раздела 11 с подсветкой месяца, где мы стоим по факту (второй), три круга аудитории, контент-формула 50/30/20, 12 рубрик с форматами и частота постинга, KPI воронки в продукты по этапам. Мои выдуманные рубрики убраны.
→ Решения владельца: считаем месяцы с начала работы по стратегии или с сегодня; кто ведёт ТГ и ВК на частоте 4-6 и 3-5 постов в неделю; кто и как замеряет долю целевой аудитории (стратегия просит выборку 200 профилей на канал в квартал, дашборд этого не умеет). По ВК до сих пор нет цифр: нужен токен.
Сделал раздел «Планы на обсуждение» и первый план: 18 000 подписчиков в Инстаграме с разворотом аккаунта в сторону сообщества ЗОЖ. Изучил лендинг landing2 и цифры аккаунта: медиана ролика 848 просмотров, три ролика по 50-62 тысячи с реакцией 0,1%, охваты после 5 июля упали до 250-850. Обратная воронка считает контент, рекламу и размещения у авторов раздельно; цена подписчика в рекламе задаётся в долларах с курсом, по каждому источнику видно подписчиков и деньги. Три сценария: только контент даёт 3 919 за год (22% цели), контент плюс реклама по 0,40 доллара за подписчика — 563 400 ₽ за год.
→ Владелец решает: бюджет и с какого месяца, кто снимает ролики, условия размещений у авторов, вторая пара метрик (заявки авторов и брендов). Первый месяц открутки нужен ради собственной цены подписчика: сейчас в расчёте допущение.
Владелец решил не использовать платные вызовы модели: разбор недели пишу я по сводке, которую считает дашборд. Убрал кнопку сборки и платный маршрут, оставил два действия: забрать сводку и положить текст. Написал шесть разборов за 10-16 августа: реклама и соцсети по трём проектам. По воронкам починил три вещи по скриншотам: названия типов трафика теперь русские и «Direct traffic» слился с «прямыми заходами»; выбранные шаги стоят по порядку; атрибуция больше не размазывает расход по доле целей (инстаграму приписывалось десять тысяч рекламного бюджета, а цена цели у всех выходила одинаковой) — теперь расход идёт через кампанию, а вместо бессмысленной цены цели стоит конверсия визита в цель.
→ Разбор за следующую неделю писать так же, по сводке. Открытые вопросы к владельцу: обвал целей кабинета у Fit&Lead с 372 до 72 за неделю, четыре тестовые кампании Рекл_Тест_Артем_МК на 8 557 рублей в неделю за 2 цели, метка кампании reklamodatel без номера (212 тысяч расхода не привязываются). Ключ OpenRouter из .env убран обратно.
Собрал конструктор воронок, связок и атрибуции на тех данных, что есть, не дожидаясь Битрикса. Цели Метрики теперь тянутся все, а не только лидовые, и с разрезом по источнику и меткам: 11 650 строк за полгода. Ярлыки целей приведены к тем же правилам, что у визитов, иначе цели не сходились с источниками. Расход цепляется к кампаниям по названию и номеру; у главной кампании Fit&Lead в метке стоит {reklamodatel} без номера, поэтому 212 тысяч расхода в разрез не легли — чинится разметкой ссылок. Сделал блок «ИИ аналитика» вверху рекламы и соцсетей: числа считает код, модель пишет выводы. Добавил колонку отклонения в план рекламы с порогом из настроек оповещений и правило «План месяца под угрозой». Всё залито на cfru, доки обновлены.
→ Ждёт решения владельца: запустить первый разбор (около 4 рублей на Sonnet или 0,2 на дешёвой модели) и включать ли еженедельное расписание — строка в кроне уже стоит, выключена. Дальше: сверка прогноза с фактом по накопленным разборам, разметка ссылок в Директе, первый клик и распределение поровну в атрибуции — после событий Метрики.
Закрыт последний пункт из накопленного списка — референсы в медиатеке. Медиатека теперь два разных запаса. Сверху референсы: всё, что уже вышло в Телеграме, Ютубе, Инстаграме, ТикТоке и Тредсе, с обложкой, форматом, просмотрами, лайками, комментариями и вовлечённостью. Ничего заводить руками не надо, они приезжают со сбором статистики. Ниже прежний блок сгенерированного с ценой. Смысл не в архиве, а в переиспользовании: кнопка «Взять за основу» заводит новый материал с тем же текстом и подписью, откуда он взят и сколько собрал. Дальше текст правится под новую тему. Это быстрее, чем вспоминать удачный пост и копировать его руками из приложения. Сортировка по умолчанию по просмотрам, потому что вопрос почти всегда «что зашло»; есть сортировка по вовлечённости и по свежести, фильтры по площадке и формату, поиск по тексту. Проверено на живых данных: 60 карточек, 56 обложек через свой прокси, создание материала по референсу работает.
→ Из того, что просили, всё сделано. Заблокировано и ждёт владельца: вебхук Битрикса (задачи в бэклог и двусторонний календарь), токен ВК, решение по официальному доступу к статистике Инстаграма и ссылка на ТикТок уже получена. Не начато по прежнему решению владельца: создание контента ИИ и создание кампаний в Директе — обе во второй очереди.
Закрыл оба хвоста по задачам, которые сам называл несделанными. Файлы в карточке задачи: до двадцати штук по 50 МБ, загрузка пачкой, скачивание по клику, удаление. Лежат в томе, наружу отдаются приложением, видимость наследуется от задачи — иначе вложение обходило бы права на чужую работу. Колонки доски задач больше не зашиты в код: настраиваются отделом, хранятся в базе. Переименование не ломает задачи, потому что ключ колонки не зависит от названия. Задачи из убранной колонки не пропадают, а переезжают в первую, и сколько именно переедет — написано в окне до сохранения. Бэклог и «Завершено» в настройку не входят: это системные состояния со своими экранами, очередью и архивом, и убрать их значит оставить задачи без выхода. Проверка статусов в API теперь собирается из базы, жёсткого списка нет. Проверено на сервере: завёл задачу, приложил файл, карточка его отдала; добавил колонку «Дизайн», перенёс в неё задачу, вернул набор по умолчанию — задача переехала обратно, ничего не потерялось. Битрикс по решению владельца пока не трогаю.
→ По задачам сделано всё, что просили. Ждём вебхук Битрикса, токен ВК и решение по официальному доступу к статистике Инстаграма. Из старого списка остаются референсы в медиатеке из выгрузки Ютуба и Телеграма.
Раздел задач, который я честно откладывал, сделан. Сначала прямой ответ на вопрос владельца: нет, до правок задач я не доходил, они лежали во второй очереди с 17 августа. Теперь сделаны. Карточка задачи открывается модалкой с доски и из календаря: название, описание, проект, исполнитель, приоритет, срок, чек-лист, обсуждение, история изменений. Правки сохраняются по месту, без ухода на отдельную страницу. Стрелки «влево-вправо» убраны, остались «завершить» и «вернуть в работу», перенос мышкой между колонками работал и раньше. Удаление с подтверждением. Срок при постановке теперь по умолчанию сегодняшний, рядом быстрый выбор: сегодня, завтра, через три дня, через неделю, без срока, своя дата. Выгрузка задач в Excel: задача, описание, проект, статус, приоритет, исполнитель, постановщик, сроки, чек-лист, число комментариев. Видимость та же, что на доске, иначе выгрузка стала бы дырой в правах. Новый раздел «Календарь» в блоке «Работа»: месяц, неделя, день, кнопка «Сегодня», сегодняшний день подсвечен. Плюс в углу дня ставит задачу сразу на эту дату. Клик открывает ту же модалку. У кого открыт раздел контента — галочка «показывать публикации», и в календаре рядом с задачами видны материалы контент-плана. По Битриксу зафиксировано новое решение владельца: задачи только из Битрикса к нам в бэклог с пометкой источника, обратно ничего; календарь в обе стороны. Не начато, ждём вебхук.
→ Не сделано и названо вслух: вложенные файлы в задаче (ссылки пока живут в описании) и настраиваемые колонки доски задач — они жёсткие в коде, в отличие от доски контента. Битрикс ждёт адрес портала и входящий вебхук с правами на задачи, календарь и пользователей.
Раздел рекламы доведён до кабинета директолога. Состояния кампаний теперь называются как в самом Директе: Запущена, Остановлена, Архив. У тех, кого API прячет, — Тратит сейчас или Без расхода N дней. Появилось управление: кнопка остановить и запустить прямо в таблице. Закрыто разделом рекламы, доступом к проекту, подтверждением и записью в журнал. Проверил на уже остановленной кампании — Директ ответил своей ошибкой, путь рабочий, живого не трогал. Провал в кампанию: фразы и автотаргетинг с расходом, реальные поисковые запросы, группы, объявления с заголовками и текстами, куда ведут и с какой разметкой. Собрано по шести кампаниям 92 фразы и 11 426 запросов с кликом или расходом; топ-запрос «генератор картинок» — 120 кликов и 1126 рублей. Отдельно проверил вопрос владельца про Мастер кампаний. Объекты закрыты полностью: справочник, группы, объявления возвращают пусто даже по прямому id. А отчёты работают: расход, метрики, фразы, автотаргетинг и 5186 поисковых запросов по одной кампании. То есть провалиться в МК можно, но через отчёты, а не через объекты; управлять ей отсюда нельзя. Попутно: ссылки объявлений размечены не utm, а собственной разметкой Яндекса cm_id с подстановками. Сначала экран писал «меток нет» — это было бы неправдой, поправлено.
→ Дальше по очереди владельца: задачи уровня Трелло и референсы в медиатеке. Ждём токен ВК и решение по официальному доступу к статистике Инстаграма.