OpenClaw / 7leads · Концепт B v11 · FINAL

Новый запуск кампании — целостный концепт

Дашборд-интегрированная страница `/Новый запуск` с pyramidal-визуализацией структуры, real-time updates, реальным staging chrome и backend-моделью черновиков. Документ описывает что сделано, как работает и что осталось.

Концепт: B v11 (final · 29/29 задач)
Карточка: AGq1nOqq
Дата: 2026-06-01
Итераций: 7 (v4 → v11)

1Что такое концепт B

Builder-flow split-layout — финальный концепт для страницы `/Новый запуск` в дашборде 7leads. Цель: байер собирает запуск кампании через одну страницу с двумя зонами — слева широкий рабочий блок со всеми настройками + пирамидальная визуализация структуры, справа узкая sticky-панель с рекламными материалами (пул креативов + тексты).

Концепт интегрирован в реальный staging dashboard chrome (sidebar 7leads с навигацией ВЕРТИКАЛЬ / ГЛАВНОЕ / СЦЕНАРИИ / УПРАВЛЕНИЕ + topbar с поиском, Health pill, last-updated и notifications + Quickbar floating bottom с 4 actions). При смене вертикали или возврате на страницу — модальное окно черновиков.

Главные принципы концепта:
  • Структура — это один шаблон, применяется ко всем выбранным кабинетам (если 2×2×2 шаблон × 2 кабинета = 16 объявлений в Meta)
  • Визуализация структуры перестраивается в реальном времени при изменении counters
  • Большие counts (>порога) → condensed text-rendering вместо рисования всех нод
  • Все настройки в унифицированных карточках с единой ритмикой
  • Незавершённые запуски не теряются — система черновиков

2Архитектура страницы

Зоны

ЗонаРазмерСодержимое
Sidebar (sticky)220pxBrand «7leads» + Вертикаль picker + nav-группы (Главное / Сценарии / Управление) + CTA «Новый запуск» + user profile
Topbar56pxSearch bar (⌘K) + Drafts pill + Health 4/4 OK + last-updated + bell
Page head~80px🚀 Новый запуск + sub-line + кнопки «Черновики» / «Сбросить»
Source tabs40pxFacebook (active) / NewsBreak / SmartNews
Main content (LEFT broad)1frКабинеты → Структура+пирамида → Цель → Деньги → Аудитория+события → География → Расписание
Ads zone (RIGHT, sticky)440pxРекламные материалы: Пул креативов + Тексты объявлений
Quickbar (floating)Запустить · 16 объявл. + Добавить кабинет + Загрузить + Сгенерировать

Порядок секций (после v9 reorder)

  1. Кабинеты — наверху, с balance/spent/sync info по каждому кабинету
  2. Структура и распределение — пирамидальная диаграмма + counters + bigcards распределения
  3. Цель Meta (поднята выше Денег) — bigcards: Лиды / Трафик / Конверсии / Узнаваемость
  4. Деньги и ставка — Бюджет / Cost cap / CBO-ABO / 4 стратегии ставки / Окно атрибуции
  5. Аудитория + События жизни (объединены) — Пол / Возраст +/− counter / Языки / DOB-tags
  6. География compact — Search input + selected tags с bid-modifier badges + suggestions
  7. Расписание — в самом низу, full-width seg (Сейчас/По дате · Круглосуточно/По графику)

3Что реализовано

Pyramidal diagram (главная фича)

Деревообразная визуализация структуры с горизонтальными уровнями. Корень — «ШАБЛОН × N каб» (gradient purple→pink). Дети — кампании (purple-tinted). Внуки — адсеты. Правнуки — ad-dots (мини-квадратики креативов внутри `cB4-pyr-ads-block`).

CSS-only connectors через `:before/:after` pseudo-elements — никаких SVG. Каждый уровень — `

4Эволюция v4 → v10

v4 · 2026-06-01 (утро) Базовая структура
Целостная страница в dashboard chrome
  • Добавлен sidebar (64px узкий, иконочный — позже сменён)
  • Topbar с breadcrumb + direction picker
  • Workspace 2-col: canvas LEFT broad / settings RIGHT narrow (~440px)
  • 8 секций настроек: Структура / Деньги / Цель / Аудитория / Гео / DOB / Тексты / NB tracker
v5 · 2026-06-01 (день) Sync с staging chrome
Реальный chrome из staging
  • Залогинился на staging, сделал screenshot реального chrome
  • Sidebar расширена до 220px текстовая с группами «ВЕРТИКАЛЬ / ГЛАВНОЕ / СЦЕНАРИИ / УПРАВЛЕНИЕ»
  • Brand «7leads · DS 2.0 · V2 · STAGING»
  • Topbar redesigned: Search + Health pill + last-updated + bell
  • Quickbar floating bottom: 4 actions (Запустить / Добавить кабинет / Загрузить / Сгенерировать)
  • Source tabs Facebook/NewsBreak/SmartNews под page-head
v6 · 2026-06-01 (день) Pyramid + swap
Пирамидальная диаграмма + swap колонок
  • Tree-list заменён на горизонтальную пирамиду с CSS connectors
  • Smart condensed rendering для больших counts
  • Колонки swapped: settings LEFT 400px / struct-zone RIGHT broad
  • Bigcards для CBO/ABO, bid strategy, цель Meta — с описаниями
  • Возраст: range slider → input От/До
  • «Дата рождения» → «События жизни», checkbox-grid → tags
v7 · 2026-06-01 (вечер) Свайп обратно + scroll page
Settings LEFT broad / Ads zone RIGHT narrow + page scroll
  • Колонки swap-нуты обратно: struct-zone + settings LEFT broad, Тексты+Пул RIGHT narrow
  • Body больше не lock viewport — страница скроллится как другие staging-страницы
  • Sidebar и ads-zone — sticky к viewport
v8 · 2026-06-01 (вечер) Card unification + reorder
Все секции в карточках + Кабинеты наверх
  • Все `.cB4-sec` получили унифицированные card-styles (background, padding, radius)
  • Кабинеты перемещены в начало с расширенной информацией (balance/spent/sync)
  • Ads-zone: Пул креативов перемещён НАВЕРХ над Текстами
  • Ads-zone расширена до 440px
  • Описания режимов распределения расширены с примерами (По кругу: A B C A B C)
v9 · 2026-06-01 (ночь) Reorder + merge + drafts
Цель ↑, Расписание ↓, Аудитория+События merge + Modal черновиков
  • Цель Meta поднята выше Денег
  • Расписание ушло в самый низ
  • Аудитория и События жизни объединены в одну card
  • Возраст: input → counter `[−] [25] [+] — [−] [55] [+]` с JS step handlers
  • Пол: padding увеличен (`cB4-seg-tall`) для соответствия высоте age counter
  • География compact: search input + selected tags с bid-pills + suggestions
  • Modal черновиков visual mock: 2 draft cards с продолжить/удалить + actions «Закрыть» / «Начать новый запуск»
  • «Черновики 2» pill в topbar открывает modal
v10 · 2026-06-01 (день) P0 закрыто + interactive drafts
Все P0 задачи + relative-time + buttons на странице
  • Кнопки «Сбросить» и «Черновики» в page-head (рядом с rocket icon)
  • Modal: 4 cards с разным relative-time («5 минут назад» / «2 дня назад» / «3 месяца назад» / «2 года назад»)
  • Все modal-actions работают: Continue / Delete / Start-new → toast notifications
  • Auto-open modal on first load (sessionStorage flag)
  • Empty-state когда нет кабинетов — все остальные секции disabled-overlay с подсказкой «Сначала выбери кабинеты ↑»
  • Scroll fix: overscroll-behavior: contain + max-height для ads-zone
  • Спека черновиков обновлена под правило «draft создаётся только после взаимодействия со структурой»
v11 · 2026-06-01 (FINAL) P1+P2+P3+P4 закрыто
29/29 задач реализовано — концепт готов к интеграции
  • P1 lifecycle (7): inline-rename input в page-head + auto-save indicator с live tick + `cB4MarkSaving()` debounce 800ms + relative-time formatter с русским склонением + `hasInteractedWithStructure` flag + dynamic drafts pill count + reset functionality
  • P2 связь Pool↔Структура (4): раскраска ad-dots под mode (per_slot/single_set/round_robin/manual) + подсветка слотов с pulse animation при выборе pool thumb + manual flyout (modal с pool thumbs для выбора в конкретный slot) + bigcards conditional fields (Lowest cost → скрыть Cost cap row, Bid cap → переименовать label)
  • P3 интерактив (11): tag-add → активный tag, tag-remove с fade-out, geo autocomplete dropdown (12 городов), pool search filter, pool folders mock-filter, pool thumb selection с pyramid highlight, direction picker dropdown (5 вертикалей с checkmark), sidebar nav switch, source tabs switch, toggle «Показать недоступные» раскрывает 4 inactive cabinet rows, cabinet × remove с empty-state propagation
  • P4 polish (3): topbar sticky к viewport (top:65, z:18), quickbar offset с учётом ads-zone 440px (centered в main-content area), pool grid с hover meta overlay в стиле staging /Креативы

5Интерактив и real-time

Counter Кампаний / Адсетов / Объявлений → live pyramid

JS `setupCB4Pyramid()` слушает все `[data-cb4-counter]` кнопки. На каждый клик:

  1. Update state {cmp, ads, ad}
  2. Recalculate totalAds = cabs.length × cmp × ads × ad
  3. Re-render HTML пирамиды в `#cB4-pyr`
  4. Update badge «N объявл.»
  5. Update «Размер шаблона: N×N×N» в header
  6. Update «Запустить · N объявл.» в Quickbar

Описания режимов распределения

РежимОписаниеПример
Свой каждомуКаждое объявление получает уникальный креатив. Полный A/B охват6 объявл + 6 креативов → каждый креатив в одном слоте
Один наборВсе адсеты получают одинаковый набор. Отличия в результате только из-за аудиторийКреативы CR1, CR2 во всех адсетах одинаково
По кругуЦиклически распределяются по слотам. Каждый креатив встречается в разных адсетах3 креатива A·B·C и 6 объявл → A B C A B C
РучнойСлоты пустые. Клик на слот → flyout с пулом → выбор. Контроль над комбинациямиТоп-перформер CR18 в Адсет 1, новая гипотеза CR67 в Адсет 3

Modal черновиков

Empty-state «нет кабинетов»

6Система черновиков (UX)

Правило создания (после правки Тимура от 2026-06-01):

Черновик не создаётся при простом заходе на страницу или выборе кабинетов.
POST /launches/drafts/ вызывается только после того, как пользователь явно начал взаимодействовать со структурой и распределением — клик на counter Кампания/Адсет/Объявление или выбор режима распределения.
До этого — состояние держится в `localStorage`.
После первого взаимодействия — флаг `hasInteractedWithStructure = true`, дальше работает обычный auto-save через debounced PATCH.

Имя черновика по умолчанию

Новый запуск · DD.MM.YYYY · HH:MM (локальная дата создания). Пользователь может переименовать через inline-edit в page-head.

Relative-time формат

ВозрастФормат
< 60 секундтолько что
1-59 минут5 минут назад
1-23 часа2 часа назад
1-29 дней15 дней назад
1-11 месяцев3 месяца назад
≥ 12 месяцев2 года назад

Локализация на русский с правильным склонением через Intl.PluralRules.

Кнопки управления

7Backend-спека

Полная спека для партнёра: 2026-06-01-launch-drafts-system.md (rendered как HTML).

Модель LaunchDraft

id          uuid primary
name        text  (default: "Новый запуск · DD.MM.YYYY · HH:MM")
user_id     uuid fk
direction_id uuid fk nullable
source      enum('fb', 'nb', 'sn')
state       jsonb (полное состояние формы)
is_published boolean
published_launch_job_id uuid fk nullable
created_at  timestamptz
updated_at  timestamptz

Endpoints

МетодRouteОписание
POST/launches/drafts/Создать пустой черновик
GET/launches/drafts/Список (фильтр по direction_id)
GET/launches/drafts/:idОдин черновик с state
PATCH/launches/drafts/:idPartial update (debounced auto-save с frontend)
DELETE/launches/drafts/:idУдалить
POST/launches/drafts/:id/publishФинализировать → /launch/jobs pipeline

8Backlog · 29 задач

Полный backlog в 2026-06-01-concept-B-backlog.md. Краткая сводка по приоритетам:

P0 Критичное (блокирует оценку концепта) 4 задачи · ✓ закрыто в v10
  • Scroll-баг ads-zone — overscroll-behavior: contain + max-height fix
  • Modal actions (Continue / Delete / Start-new) — JS handlers + toast
  • Auto-open modal on B load — sessionStorage flag
  • Empty-state когда нет кабинетов — disabled-overlay на остальные секции
P1 Lifecycle черновиков 7 задач · ✓ закрыто в v11
  • ✓ Inline-rename draft name (`#cB4-rename` input в page-head)
  • ✓ Auto-save indicator («Сохранено · 5 минут назад» с live tick через `setInterval`)
  • ✓ Auto-save JS (`cB4MarkSaving()` debounce 800ms, тригерится на counter/budget/mode/text/tag)
  • ✓ Drafts pill dynamic count (`updateCount()` после CRUD draft cards)
  • ✓ Условие создания: `cB4State.hasInteractedWithStructure` flag, save игнорится до flag=true
  • ✓ Reset functionality (confirm → clear thumbs/counters → reload)
  • ✓ Relative-time formatter `cB4RelativeTime()` с русским склонением
P2 Pool ↔ Структура связь 4 задачи · ✓ закрыто в v11
  • ✓ Раскраска ad-dots под mode (`col-0..5` классы, `pickColorForSlot()`):
    • Свой каждому → каждый slot rotating цветом из selectedCreatives
    • Один набор → все одного цвета (первый из selected)
    • По кругу → `sel[slotIdx % sel.length]` циклически
    • Ручной → пустые `is-empty` слоты, заполняются через flyout
  • ✓ Подсветка слотов при клике на pool thumb (`cB4HighlightSlotsForColor` + CSS `is-highlighted` animation)
  • ✓ Manual flyout (`#cB4-flyout` modal) — клик на ad-dot когда mode=manual → grid креативов → выбор → ad-dot перекрашивается
  • ✓ Bigcards conditional fields: при «Lowest cost» Cost cap row скрывается, при «Bid cap»/«Target cost» меняется label
P3 Кликабельность mock-элементов 11 задач · ✓ закрыто в v11
  • ✓ Tag-add → активный tag (event delegation на `.cB4-tag-add`)
  • ✓ Tag-remove ✕ → fade-out animation + remove
  • ✓ Geo autocomplete dropdown с suggestions (Алматы, Астана, Шымкент, …, 12 городов)
  • ✓ Pool search input → filter thumbs по input
  • ✓ Pool folders chips → mock filter (Все/Топ/Sale/Архив)
  • ✓ Pool thumb selection → toggle + update count в meta + highlight в pyramid
  • ✓ Direction picker dropdown (5 вертикалей с checkmark)
  • ✓ Sidebar nav items click → mock switch active state
  • ✓ Source tabs FB/NB/SN → switch active
  • ✓ Toggle «Показать недоступные» → раскрывает 4 inactive кабинета с problem/broken/disabled states
  • ✓ Cabinet × remove → fade-out + recompute empty-state
P4 Полировка 3 задачи · ✓ закрыто в v11
  • ✓ Topbar sticky: `position: sticky; top: 65px; z-index: 18` — остаётся при page scroll
  • ✓ Quickbar offset под ads-zone: `calc(220px + ((100vw - 220px - 440px - 32px) / 2) + 16px)` — центрируется в main-content без overlap
  • ✓ Pool grid в стиле staging /Креативы (hover meta overlay через pseudo .pool-meta)

9Что дальше

Все 29 задач backlog'а закрыты в v11. Следующие шаги — про интеграцию и backend:

  1. Approval концепта Тимуром → отдать партнёру для интеграции в `dashboard-v2.html`
  2. Backend implementation — endpoints по спеке (LaunchDraft model, CRUD endpoints, publish flow)
  3. Frontend wiring в реальном staging — заменить mock-state на live API calls с debounced PATCH
  4. QA после интеграции — full walkthrough на staging.openclaw.../launch-new
  5. Прод-rollout когда staging stable
UX-аудит и X-аудит — отложено на «потом, в будущих видео» (формулировка Тимура от 2026-06-01). Текущий концепт готов к интеграции — все 29 пунктов backlog'а реализованы (P0+P1+P2+P3+P4).