diff --git a/docs/observer/STATUS.md b/docs/observer/STATUS.md index ecd61d82..3925e79b 100644 --- a/docs/observer/STATUS.md +++ b/docs/observer/STATUS.md @@ -1,6 +1,6 @@ # Brain Status (auto-generated) -Last updated: 2026-07-07T16:17:13.094Z +Last updated: 2026-07-08T00:28:55.453Z | Контролёр | Состояние | Детали | |---|---|---| @@ -112,9 +112,9 @@ Episodes since last run: 542 / threshold: 10 | PID | Имя | CPU-время | Возраст | |---|---|---|---| -| 2132 | Code | 8.78ч | NaNч | -| 3276 | MsMpEng | 7.97ч | NaNч | -| 4 | System | 3.46ч | 0.0ч | +| 2132 | Code | 9.28ч | 12285432.5ч | +| 3276 | MsMpEng | 8.93ч | 0.0ч | +| 4 | System | 3.72ч | NaNч | ⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий. diff --git a/docs/superpowers/specs/2026-07-08-portal-metrika-webvisor-design.md b/docs/superpowers/specs/2026-07-08-portal-metrika-webvisor-design.md new file mode 100644 index 00000000..256c22e9 --- /dev/null +++ b/docs/superpowers/specs/2026-07-08-portal-metrika-webvisor-design.md @@ -0,0 +1,108 @@ +# Дизайн: Яндекс.Метрика + Вебвизор на портале (кабинет клиента) + +**Дата:** 08.07.2026 +**Статус:** дизайн утверждён заказчиком, готов к плану работ +**Автор:** Claude (brainstorming с владельцем) + +## Цель + +Дать владельцу смотреть **видеозаписи поведения клиентов** в кабинете портала +(`lk.liderra.ru`) вместо чтения логов. Владелец — не программист; видео нагляднее. +Смотрим, **как** клиент пользуется кабинетом: какие экраны открывает, куда жмёт, +где «затупил», где не нашёл нужное. + +## Ключевое ограничение — 152-ФЗ (персональные данные) + +Портал показывает **личные данные**: телефоны и имена лидов, сделки, биллинг. +Вебвизор пишет то, что на экране, и отправляет в Яндекс. Поэтому запись ПДн +клиентов в сторонний сервис недопустима без защиты. + +**Решение (утверждено):** маскируем в записи **только личные данные** (телефоны, +имена лидов) — Вариант 1 из трёх обсуждённых. Клиент на своём экране видит всё как +обычно; маскировка влияет **только** на сохранённую запись, не на живой экран +клиента. В видео вместо `+7 999 123-45-67` — `▮▮▮`, но структура и действия видны. + +Отвергнуто: +- Вариант 2 (замазать всё содержимое) — безопасно, но видео малополезно. +- Вариант 3 (не маскировать) — 152-ФЗ риск, отклонён. + +## Решения (зафиксированы с владельцем) + +| Вопрос | Решение | +|---|---| +| Что маскируем | Только личные данные (телефоны/имена лидов) — Вариант 1 | +| Охват записи | **Только кабинет клиента.** Админка, поставщик, страницы входа — БЕЗ записи | +| Счётчик | **Отдельный новый** счётчик для `lk.liderra.ru` (НЕ переиспользуем лендинговый 110476275) | +| Политика конфиденциальности | Добавить строку про использование Яндекс.Метрики | + +## Состав работ + +### 1. Отдельный счётчик Метрики +Владелец создаёт новый счётчик для `lk.liderra.ru` (сайт = lk.liderra.ru), присылает +номер. Отдельный от лендинга — чтобы статистика портала и лендинга не смешивалась +и Вебвизор/маскировку настраивать независимо. + +### 2. Вставка счётчика в приложение с условием охвата +- Счётчик подключается в главном HTML-шаблоне SPA (Blade-view приложения). +- Запись/инициализация Вебвизора — **только когда пользователь в кабинете клиента** + (guard/роль клиента), НЕ на страницах входа, НЕ в админке, НЕ в кабинете поставщика. +- Реализация условия — по контексту авторизации (guard) / по группе маршрутов. + +### 3. Учёт переходов в SPA +Портал — одностраничное приложение (Vue Router, экраны без перезагрузки). Подцепить +`ym('hit')` к смене маршрута, чтобы каждый экран считался и попадал в запись сессии. + +### 4. Маскировка ПДн в записи (главное) +- Пройти по экранам кабинета клиента: список сделок, карточка лида/сделки, профиль, + везде, где выводятся телефоны/имена лидов. +- Пометить эти элементы меткой Яндекса «скрыть содержимое из записи» (класс/атрибут + Вебвизора для hide-content). Точный механизм маскировки — уточнить по актуальной + документации Метрики на этапе плана (класс типа `ym-hide-content` или аналог). +- Поля ввода паролей Вебвизор маскирует сам по умолчанию — но на них не полагаемся + для ПДн лидов, помечаем явно. + +### 5. Защита сервера (CSP) — блок приложения +По аналогии с лендингом (уже сделано 08.07 для landing-блока): в CSP-заголовок +**блока приложения** `lk.liderra.ru` добавить для `https://mc.yandex.ru`: +`script-src`, `img-src`, `connect-src`, `child-src blob:`, `frame-src blob:`, +и домены Метрики в `frame-ancestors`. Без `child-src`/`frame-src blob:` Вебвизор +не пишет (проверено на лендинге: «Посетители есть — Вебвизор пуст»). +NB: у приложения CSP сложнее лендинга (там уже есть smartcaptcha/yastatic/yandex.ru +директивы) — добавлять аккуратно, не ломая существующее. + +### 6. Политика конфиденциальности +Добавить строку об использовании Яндекс.Метрики (аналитика/запись сессий с +маскировкой ПДн). Место — политика/пользовательское соглашение портала. + +### 7. Выкат — аккуратно (код приложения, не статичная страница) +1. Собрать фронт (Vite build). +2. Бэкап (текущий build + nginx-конфиг). +3. Деплой на боевой. +4. **Проверка живьём** — обязательные пункты: + - Счётчик пишет заходы (отчёт «Посетители» наполняется). + - Вебвизор реально записывает сессию (появляется запись, играется). + - **Маскировка работает: телефоны/имена лидов в записи замазаны** — критично. + - Портал не сломан (вход, ключевые экраны 200, приём лидов/оплаты живы). +- Маскировку проверить **сначала на тестовом стенде** (crm.bp-gr.ru / локально), + потом боевой. + +## Главный риск + +**Утечка ПДн через незамаскированный элемент.** Если хоть один телефон лида +просочится в запись — это утечка персональных данных в Яндекс. Поэтому проверка +маскировки на реальных экранах кабинета — обязательный gate перед боевым выкатом. +Лучше пере-замаскировать, чем недо-. + +## Отличие от лендинга (почему сложнее) + +Лендинг = один статичный HTML-файл (правка + scp за минуты). Портал = живое +Vue-приложение + Laravel: нужна вставка в SPA, условный охват по роли, учёт +SPA-переходов, ручная разметка ПДн по экранам, правка более сложного CSP, +сборка+деплой приложения. Риск выше — работаем через тестовый стенд и проверки. + +## Вне охвата (YAGNI) + +- Запись админки/поставщика/входа — НЕ делаем. +- Тепловые карты/аналитика форм сверх Вебвизора — не в этой итерации. +- Согласие-баннер (cookie consent) отдельным UI — не в этой итерации (покрываем + строкой в политике; при необходимости — отдельная задача).