Оглавление
  1. Кратко
  2. Задача и метод
  3. Что уже готово
  4. Диагноз: проблемы
  5. Сравнение с аналогами
  6. Целевой продукт
  7. Алгоритмы
  8. Скрипты и инфраструктура
  9. Макеты всех экранов
  10. План по фазам
  11. Решения и риски
  12. Источники

PicSeller 2.0: анализ, сравнение с аналогами и макеты готового продукта

Что уже работает в актуальной версии PicSeller — рабочем дереве от 11 сентября, развёрнутом на https://picseller.24oros.ru, — что мешает ему стать продуктом и как устроены аналоги. На этой основе описан целевой продукт полного цикла «Создать → Править → Опубликовать → Поддерживать», собраны кликабельные макеты всех его экранов и план по фазам. Выводы опираются на код, тесты и живые прогоны, а не на описания в документах проекта.

1 октября 2026 Версия: рабочее дерево от 11.09 — последний коммит df16a68 плюс 1486 незакоммиченных файлов 166 коммитов, 98 документов Тесты: 421/421 Node и 15/15 Python 6 аудитов подсистем и сверка с актуальной версией 2 живых прогона: версии от 08.09 и от 11.09 55 аналогов в 4 сегментах: 14 российских сервисов карточек, 13 мировых ИИ-инструментов, 14 конструкторов сайтов, 14 открытых проектов

0Кратко

421/421
тестов Node проходят, плюс 15/15 Python (прогон 01.10.2026)
1486
файлов работы F0–F3 не закоммичено поверх 166 коммитов
21 → 6
пунктов меню: сейчас → в новых макетах
8 → 1
путей создания карточки: сейчас → в макетах
0
строк кода для сайта-витрины бренда
33
экрана в кликабельных макетах готового продукта

Вердикт

Актуальная версия PicSeller заметно сильнее закоммиченной, с которой начинался наш аудит: это уже публично работающая закрытая бета конвейера карточек для маркетплейсов. Но до продукта полного цикла ей ещё далеко.

Рабочее дерево от 11.09 развёрнуто как container-preflight-15 на https://picseller.24oros.ru с входом по приглашению, собирается из ARM64-контейнера и проходит 421 тест Node и 15 тестов Python. Фаза F0 из плана прошлого аудита (Codex, 10.09) закрыла пять дефектов на стыках сайта, бота, резервных копий, стилей и входа. Фазы F2 и F3 добавили настоящие контракты: бриф товара с происхождением фактов (ProductBrief), общий отчёт качества (QualityReport) и серверную партию до 100 артикулов с паузой, архивом, исправлением строк, отложенным запуском и воспроизводимым PNG-архивом с контрольными суммами. Поэтому часть выводов первого аудита устарела: публичный адрес и Dockerfile есть, лимит входа больше не общий, проверка качества работает, бриф товара появился.

Фаза F1 «один понятный маршрут» сделана наложением. У экрана «Создать» появились 4 шага и общая библиотека, но второй мастер с демо-товаром, 21 пункт меню, демо-лента, ИИ-концепции с ценами и 8 путей создания остались, а проверки на пяти пользователях не было. Новая проверка качества ставит зелёное «Можно выпускать» серии из старого мастера с чужим фото и заглушками, а Kaspi, Avito и Lamoda после F2 вообще ломают создание серии. Архитектурный долг вырос: 91 регистрация маршрутов при запуске, новые подмены HTML строкой, 17 миграций вне журнала. Две модели данных остались: правки живут в браузере, на сервер попадают по кнопке.

Главного, о чём просит владелец, по-прежнему нет: витрины бренда нет ни в коде, ни в плане прошлого аудита, публикация в маркетплейсы — заглушка, ИИ не пишет тексты и не строит визуал. Процессные риски выросли: вся работа F0–F3 не закоммичена, фазы закрыты примерно за 2,5 часа при оценке 21–35 рабочих дней, а внутренние документы с деталями инфраструктуры открыты на боевом домене без входа. Первый этап рекомендованного пути — публичный запуск — в основном пройден; впереди один путь создания, серверный источник истины, витрина и публикация.

Как открыть результат
  • Онлайн: отчёт — https://picseller-v2.24oros.ru/, кликабельные макеты — https://picseller-v2.24oros.ru/app/#/screens (выкладываются на сервер sagr).
  • Локально: файл studio-v2/index.html или автономная версия с встроенными снимками studio-v2/dist/PicSeller-2.0-analiz.html.
  • Спецификация продукта и экранов: studio-v2/DESIGN.md.
  • API кликабельного макета: studio-v2/app/API.md.
Срочно, до любых новых функций
  • 99 внутренних документов открыты без входа на https://picseller.24oros.ru/docs/: в 26 — ssh, Tailscale, IP-адреса и Coolify, в 5 — пути домашнего каталога на сервере. Это вопрос безопасности (проблема 21).
  • Работа F0–F3 и сборка выпуска не зафиксированы в git: 1486 файлов вне коммитов, последний коммит — 08.09. Ревью и откат по коммитам невозможны, работу легко потерять (проблема 22).

Рекомендация: «Бренд-студия из каталога»

Продавец один раз заводит товары — файлом Excel, ссылкой на WB или Ozon либо коротким брифом с фото. Из «Товара» с подтверждёнными фактами PicSeller собирает серии карточек для WB, Ozon и Яндекс Маркета, презентацию для оптовиков и сайт-витрину бренда на поддомене с кнопками «Купить на WB/Ozon» и формой заявок. Править можно словами и вручную; когда факты меняются, сервис предлагает обновить все затронутые материалы сразу. Публикация одна на все каналы: с проверкой, журналом и откатом.

Почему это направление. Оно полностью закрывает запрос владельца, а план прошлого аудита ведёт только к конвейеру карточек — витрины в нём нет. Базовый ИИ площадки уже раздают бесплатно (Ozon — фон, WB — описания), а свободная ниша другая: серия в стиле бренда, проверка по датированным правилам площадки, публикация с откатом и витрина бренда из тех же данных. Витрину для селлеров в России не делает никто: Canva и Pomelli собирают сайт бренда, но не для маркетплейсов, а Pomelli в России недоступен. Направление переиспользует готовое — сцену, рендер, очереди, бриф товара и отчёт качества, серверные партии, бренд-кит, контейнер, поддомены *.24oros.ru и Coolify. Два других рассмотренных направления закрывают запрос хуже: «Карточки под ключ с публикацией» не дают сайта и конкурируют с бесплатным ИИ самих площадок, а «Приватный контент-конвейер для брендов и агентств» уводит в длинные продажи и упирается в одну GX10. Главный риск выбранного пути — распыление на три продукта сразу, поэтому этапы идут строго по очереди.

Первые три шага

0Зафиксировать и обезопаситьФаза 0 · 1–2 недели (оценка)
Закоммитить работу F0–F3 по фазам и поставить тег выпуска; закрыть /docs на боевом домене; сделать демо-фото и тексты-заглушки ошибками проверки качества и починить Kaspi, Avito и Lamoda; убрать демо-обвязку и заглушки; вычистить deploy/ от копий исходников и разовых скриптов.
1Надёжный запуск и одна модель данныхФаза 1 · 3–4 недели (оценка)
Проверка /healthz и внешний мониторинг, копии по расписанию вне GX10, один скрипт выкладки с проверкой и автооткатом. Сервер становится единственным хранилищем: автосохранение вместо кнопки «На сервер», таблицы брендов, папок и библиотеки фото, импорт из браузера. Вход без администратора.
2Один путь создания и ТоварФаза 2 · 4–5 недель (оценка)
Старый мастер — переадресация на /app/create, вместо 8 путей один. «Товар» — серверная таблица на основе брифа: факты переиспользуются во всех материалах. Один движок раскладки со слотами, ролями и профилями площадок, меню из 6 разделов, пилот с 5 продавцами.

Дальше — витрина бренда на поддомене и публикация в WB, тексты от ИИ с проверкой происхождения и сцены товара, редактор уровня Canva, оплата и команда. Общий срок до полного продукта — оценка 5–7 месяцев командой из 2–3 человек. Подробности — в разделе 9 «План по фазам».

Внешний риск: маршрут публичного трафика не записан

С 24.09.2026 публичные порты 80 и 443 ведут на сервер sagr; доступ к нему владелец открыл 01.10. При этом picseller.24oros.ru открывается публично через 217.199.253.218 — так отвечает DNS *.24oros.ru, а в docs/87 записан другой адрес, то есть маршрут изменили вне репозитория. 01.10 около 15 минут оба поддомена не отвечали. Пока маршрут не записан и не наблюдается, выкладку и онлайн-проверку новых фаз нельзя считать надёжными.

Что нужно от владельца
  • Решить вопрос с маршрутом трафика: подтвердить нынешний путь через 217.199.253.218 или перенос приложения на sagr, чтобы маршрут можно было записать и наблюдать.
  • Согласовать фиксацию работы Codex F0–F3 в git: без коммитов её легко потерять.
  • Подтвердить направление «Бренд-студия из каталога» и наше толкование: «сайт» — это витрина бренда продавца (см. раздел 1).
  • Заморозить новую инфраструктуру (бот, скрипты, журналы) и выдать коды приглашения 5 продавцам для пилота основного пути: продуктовая приёмка F1 до сих пор заблокирована.
  • Для витрины с формой заявок — оферта и политика обработки персональных данных (152-ФЗ). Позже — платёжный провайдер (ЮKassa или CloudPayments) и цены тарифов.

Все решения и риски — в разделе 10.

1Как мы поняли задачу и как проверяли

Запрос владельца — нашими словами

  • Глубоко разобрать PicSeller: что реально работает, как устроены алгоритмы, интерфейс, скрипты и инфраструктура.
  • Сравнить с аналогами — российскими сервисами карточек, мировыми ИИ-инструментами и конструкторами сайтов.
  • Описать продукт, который создаёт проекты с нуля, позволяет направленно их править, публикует и поддерживает после выпуска.
  • Показать макеты всех экранов такого продукта и план, как к нему прийти.

Наше толкование

Довести PicSeller до цельного продукта полного цикла «Создать → Править → Опубликовать → Поддерживать». Из одного описания товара — фото, фактов и артикулов — получаются серии карточек для WB, Ozon и Яндекс Маркета, презентация для оптовиков и сайт-витрина бренда. Всё правится руками или словами и публикуется в один клик с журналом и откатом.

Это допущение

Под «сайтом» мы понимаем сайт-витрину бренда продавца: страницы бренда и товаров с кнопками «Купить на WB/Ozon» и формой заявок. Если имелся в виду универсальный конструктор любых сайтов, архитектура из раздела 6 подходит и для него: типизированные секции в JSON, правка словами через план операций, статическая публикация с версиями и откатом. Поменяется набор секций и шаблонов, а не основа.

Какую версию анализируем

Кода PicSeller сейчас две версии, и разница между ними существенная. Анализируем рабочее дерево от 11.09, потому что именно его видят пользователи и на нём будет строиться дальнейшая работа. Каждая из 77 строк реестра и каждая из 20 проблем первого аудита сверены с ним отдельно, и сделан второй живой прогон. Где цифры относятся к версии 08.09 — например, замеры скорости редактора, код отрисовки которого с тех пор не менялся, — это сказано прямо.

Коммит df16a68 · 08.09.2026

Последний коммит в git: 166 коммитов за 5 и 8 сентября. По этой версии сделаны шесть аудитов подсистем и первый живой прогон (около 60 экранов, 18 снимков). Тесты — 299 из 299.

Рабочее дерево · 11.09.2026 — его и анализируем

Незакоммиченная работа Codex 08–11.09 в основной папке проекта: 1486 файлов — 71 изменённый и 1415 новых, из них 1105 — копии исходников в deploy/container-*. Именно это дерево развёрнуто как container-preflight-15 на https://picseller.24oros.ru: SHA-256 10 из 10 сверенных файлов клиента совпали. Последние правки кода — 11.09 в 01:05; позже были только пересборки и отдельный макет интерфейса F4 от 26.09. Тесты — 421 из 421 Node и 15 из 15 Python.

Прошлый аудит Codex (10.09) и его план

10.09.2026 Codex провёл собственный аудит (research/audit-2026-09-10, опубликован на picseller-lab.24oros.ru). Его вердикт: развитый прототип с отдельными работающими серверными процессами, но не коммерческая платформа. Тогда проходили 409 из 409 тестов Node. Аудит нашёл 5 воспроизводимых дефектов на стыках сайта, бота, восстановления, стилей, квот и входа. Он предложил сначала завести контракты (бриф товара, версия рецепта, состояние задания, отчёт качества, опись выгрузки), один путь «Исходники → Оформление → Проверка и скачать» и позиционирование «студия проверяемого товарного контента». Целевое меню: Создать, Каталог, Задания, Сценарии, Бренд; цель — пилот на 5–10 продавцах.

ФазаЧто предлагалосьСостояниеКомментарий
F0Сверка и надёжность: зафиксировать изменения и выпуск, исправить 5 дефектов на стыках, обновить карту возможностейвыполнено техническиВсе 5 дефектов закрыты с тестами, образ выложен и проверен. Но «зафиксировать изменения» не сделано — ни одного коммита.
F1Один понятный маршрут: единый мастер, общая библиотека, состояния сохранения, без дублирующих входовв работеИндикатор шагов и общая библиотека есть. Дубли входов не убраны (путей 8), лендинг ведёт в старый мастер, проверка на 5 пользователях заблокирована.
F2Контракт товара и качества: бриф, источники фактов, версия правил площадки, общий отчёт качествавыполнено техническиБез официальных правил площадок: одна версия picseller-core-2026-09-11 для WB, Ozon и ЯМ.
F3Каталог и воспроизводимый выпуск: артикулы, предпросмотр импорта, исправление строк, архив, кэш выгрузоквыполнено техническиПроверено в публичном браузере на preflight-15.
F4Сценарии и Telegram: сохранённый сценарий, расписание, журнал, пауза, бот через общий заказне начатоЕсть заготовки бота без живого канала, однократный отложенный запуск партии и отдельный макет интерфейса от 26.09.
F5Качество ИИ: профили модели и промпта, отложенная выборка, проверка фактов и товаране начатоОтложенная выборка подготовлена, но не запускалась; последний прогон команд серии — 17 из 21.
F6Команды и коммерческий пилот: роли, самостоятельный вход, тарифы, платежи, поддержкане начатоКоманда и тарифы — макеты, OAuth и платежей в коде нет.
F7Площадки и масштабирование: официальный адаптер маркетплейса с предпросмотром публикациине начатоПубликация — заглушка PS.demoOnly.

Сайта-витрины в плане нет ни в одной фазе: слово «витрина» встречается только как витрина Яндекс Маркета в требованиях к изображениям. Наш отчёт продолжает этот аудит. Мы принимаем его контракты и сделанное в F0–F3, закрываем хвосты — фиксацию в git, безопасность, один путь создания, проверку на пользователях — и добавляем то, чего в плане нет: витрину бренда, сервер как единственный источник истины и поддержку после выпуска.

Рабочий стол прошлого макета интерфейса Codex «PicSeller — будущая студия»
Прошлый макет интерфейса Codex «будущая студия» (picseller-lab.24oros.ru/demo/). Это отдельный кликабельный макет: данные учебные и хранятся в браузере, API и ИИ нет. Меню из 6 пунктов (Рабочий стол, Создать, Мои карточки, Проверка, Автоматизация, Помощь), мастер в 3 шага с обязательным подтверждением фактов, 4 клика до серии на учебном товаре. В актуальной версии из его идей уже есть прогресс шагов, проверка фактов перед скачиванием, сохранённые стили и серверные партии. Нет линейных шагов, полей фактов с источником, крупного выбора стиля, быстрого редактора, отдельного экрана «Проверка» и сценариев.

Цикл продукта и где PicSeller сейчас

1СоздатьОсновной маршрут из брифа работает, есть серверный каталог до 100 артикулов. Витрины нет, «Товар» — только бриф внутри проекта, путей создания 8.
частично
2ПравитьРедактор, роли текста, быстрые правки и оформление серии работают. Нет привязок, правки текста на холсте и стилей.
частично
3ОпубликоватьЕсть скачивание файлов с проверкой качества. Публикация в WB, Ozon и ЯМ — заглушка, витрины нет.
только макет
4ПоддерживатьНикто не следит за правилами площадок, ценами и фактами; заявок и состояния сайта нет. Telegram-бот написан, но не подключён.
нет

Чем мерили готовность

  • Работает онлайн на публичном поддомене — по правилу владельца, локальный результат готовым не считается.
  • Продавец сам проходит путь от товара до опубликованного материала, без демо-данных и подсказок для разработчика.
  • Данные хранятся на сервере и открываются с любого устройства — это требование P0 из docs/02.
  • ИИ не выдумывает: каждая строка текста ссылается на подтверждённый факт.
  • Интерфейс не обещает того, чего нет.

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

1. Шесть аудитов подсистем (по версии 08.09)

ПодсистемаЧто смотрелиЧто прогнали
ИИ и автоматизацияМодели Ollama и ComfyUI на GX10, очереди заданий, помощники брифа, структуры и редактора49 из 49 тестов ИИ-части
Сервер, данные и выкладкаserver/*.mjs, база и миграции, выкладка, браузерное хранилище299 из 299, серверные 37 из 37; пробный drizzle-kit generate на копии
Фото-конвейерУдаление фона, очередь фото, сохранение цвета, очистка файлов, замена фото40 тестов Node и 9 Python; воспроизведены 2 дефекта
Редактор и графическое ядроМодель сцены, раскладка, отмена, трансформации, шрифты, экспорт, серверный рендер178 из 178; замеры скорости в браузере
Документация, план и качествоREADME, docs/01–68, планы, история 166 коммитов, обещания против кода299 из 299 и 9 из 9; разбор git log
Интерфейс и навигацияindex.html, экраны, меню, стили170 из 170 (core); проход в браузере, замер на 375 px, подсчёт маршрутов

2. Сверка с актуальной версией (11.09)

Снимок рабочего дерева прочитан и сравнён с df16a68 только на чтение. Каждая строка реестра и каждая проблема перепроверены. В изолированной копии с собственной базой подняли сервер и прошли экраны через Playwright. Прогнали тесты: 421 из 421 Node за 7,06 с в 39 файлах и 15 из 15 Python. Сборка npm run build проходит. Пробный drizzle-kit generate сделан на копии. Публичный адрес проверен запросами 01.10.2026: «/» — 200, «/auth/sign-in» — 200, «/v1/projects» — 401, «/healthz» — 404; SHA-256 10 из 10 файлов клиента совпали со снимком. Основная папка проекта и GX10 не менялись.

3. Два живых прогона

Первый — версия 08.09: около 60 экранов, 191 внутренняя ссылка, 18 снимков, ошибок консоли нет. Второй — версия 11.09 на локальной копии той же сборки, что на публичном адресе: около 40 экранов в 4 контекстах браузера, 29 снимков (16 на компьютере, 4 на телефоне, 9 справочных — публичный адрес и лаборатория Codex). Ошибок страницы нет; ответы 503 были только у бота и PNG-выгрузки, которые в локальном режиме не подключены.

4. Исследование аналогов

Четыре сегмента, 55 продуктов: 14 российских сервисов карточек вместе со встроенными ИИ-инструментами WB, Ozon и ЯМ; 13 мировых ИИ-инструментов товарного визуала; 14 ИИ-конструкторов сайтов полного цикла; 14 открытых проектов, на которые можно опереться. Смотрели публичные страницы 30.09–01.10.2026; для открытых проектов — данные GitHub и реестра npm.

5. Сводный диагноз и его пересмотр

Шесть аудитов, прогон и четыре исследования сведены в один диагноз; противоречия разрешены отдельным прогоном тестов и подсчётом маршрутов двумя способами. Затем диагноз пересмотрен по актуальной версии: из 20 проблем 10 частично исправлены, 7 остались без изменений, 3 стали хуже, полностью не исправлена ни одна; найдено 11 новых проблем.

6. Проверка утверждений по коду

Ключевые утверждения о версии 11.09 перепроверены по снимку. Публикация — по-прежнему заглушка в foundation.js:36. Dockerfile есть, его HEALTHCHECK вызывает scripts/container-health.cjs, а маршрута /healthz в server и scripts нет. Правила у WB, Ozon и ЯМ одни — product-contract.js:10-15. В compose выключены команды серии и загрузка моделей и указан образ preflight-14. Документов 98 в docs и 99 в prototype/docs. В схеме базы 27 таблиц, SQL-миграций 24, а в журнале Drizzle 7 записей. Тегов script — 80, разметка class="row wrap" — 42 раза.

Ограничения
  • Анализируем рабочее дерево от 11.09 по снимку основной папки, сделанному 01.10.2026. Если после этого в папке что-то менялось, в отчёт это не вошло.
  • На публичный сайт мы не входили — нужен код приглашения. Проверены только ответы сервера и совпадение файлов.
  • Живой прогон версии 11.09 шёл без моделей, фото-провайдера и фонового рендера, поэтому PNG-архив партии локально ответил 503; по документам состояния на GX10 он проверен.
  • Часть цен западных сервисов взята из вторичных обзоров.
  • Даты и числа правил площадок (например, обновление требований WB 28.08.2026 и ограничения Ozon с 15.08.2026) частично взяты из вторичных источников; перед реализацией их нужно сверить с официальными документами.
  • В чужие кабинеты не входили и платных генераций не запускали — только публичные страницы.
  • Замеры скорости редактора сделаны на одном Mac в Chromium.
  • Аудит редактора сообщил, что один его вызов, вероятно, выполнился во вкладке другой сессии (127.0.0.1:4391) и мог в памяти сдвинуть координату фото на 1 px без сохранения. Тот проект стоит проверить.

2Что уже готово

Реестр из 77 возможностей сверен с версией 11.09: у каждой — статус, что изменилось с 08.09 и ссылка на код, тест или проверку. Ниже реестра — 35 новых возможностей версии 11.09, сильные стороны, путь пользователя и снимки.

39
работают и подтверждены тестом или прогоном
24
работают частично, с существенными ограничениями
9
только макет: экран или кнопка есть, функции нет
5
только в документации или справке
35
новых возможностей в версии 11.09

Статусы: работает — есть код и тест или живая проверка; частично — работает с существенными ограничениями; только макет — экран или кнопка есть, функции за ними нет; только в документации — описано в docs или справке, кода нет; нет — в коде нет совсем. Пометка «было: …» — статус изменился с 08.09. Пути без папки — файлы prototype/js/; css/ и index.html лежат в prototype/; docs/NN — документ с этим номером в папке docs/.

Сводка по группам

ГруппаРаботаетЧастичноТолько макетТолько в документацииВсегоСтатус изменился
Создание422081
Редактор9500140
ИИ6511131
Фото430291
Проекты и хранение420060
Экспорт и публикация602190
Аккаунты203160
Сервер и деплой250072
Справка221050
Итого392495775

Создание

ВозможностьСтатусДоказательство
Мастер карточки /app/ai/card-generator: фото и факты превращаются в серию из 3 или 6 разделов, 12 стилей
По сути не менялся: форма предзаполнена «Наушники SOFT SOUND», без своего фото подставляется headphones.png, пустые разделы получают заглушки. Проект создаётся без брифа товара, поэтому проверка качества пропускает серию: 6 страниц с демо-фото, «Мой бренд» на 6, заглушки на 3 — «Можно выпускать». На мастер ведут 3 ссылки лендинга и кнопки «Создать карточку».
работаетscreens-ai.js:3, 26 card-series.js:12, 21 scene.js:19 screens-atelier.js:4-5
Экран «Создать» с коротким брифом: название, фото и факты превращаются в серию, дальше редактор
Улучшен в F1 и F2: индикатор 4 шагов «Фото → Факты → Стиль → Серия», одна кнопка «Создать серию», черновик переживает перезагрузку, фото обязательно, пустые разделы пропускаются, каждая серия получает бриф товара, подсказки «Осталось перед созданием». Осталось: категория зашита как electronics, на карточках «Мой бренд». Новая регрессия: Kaspi, Avito и Lamoda ломают создание серии.
работаетmain-workflow.js:35-40, 59-67 create-hub.js:24, 60-63, 75-77 app.js:12
Серверная сборка карточек card-grid-v1 («Собрать на сервере»)
Сервер принимает все 10 стилей рецептов, добавлены роли текста и проверка брифа и отчёта качества на входе. Но геометрия одна на все стили — это 10 трёхцветных палитр; площадка на макет не влияет, Arial и electronics зашиты. Форма предлагает 12 стилей и 6 площадок, сервер принимает 3 площадки. Кнопка свёрнута в «Собрать в фоне».
частичноcard-layout.js:8-14, 21, 25-29, 36-41 tests/card-jobs.test.cjs:4 main-workflow.js:88-89
Составной заказ «удалить фон, затем собрать карточки»
Код почти не менялся, но в публичном контейнере фото-провайдер не настроен, а серверная партия зависимую обработку фото отклоняет. Цепочка работает только на прежнем закрытом стенде.
частично
было: работает
deploy/docker-compose.coolify.yml:12-22 scripts/serve.cjs:15 card-batches.mjs:65
Пакетный каталог из CSV или Excel: сопоставление колонок, проверка строк, пауза, повтор
Добавлен серверный путь: партия от 1 до 100 строк с уникальными артикулами, очередь не зависит от вкладки, пауза, продолжение, архив, исправление строк с историей попыток, однократный отложенный запуск. Сборка в браузере ушла в «Дополнительно». Нужен сохранённый серверный стиль; удаления фона в партии и повторяющегося расписания нет.
работаетcard-batches.mjs:60-88 batch-row-edit.js tests/api.test.cjs:304, 326, 365, 401 VERIFICATION.md:36
Шаблоны: 41 демо и собственные с полями {{name}} и {{sku}} и фото из CSV
Без изменений.
работаетrefinements.js:8-100 docs/18
Рейтинги и число использований шаблонов в галерее
Без изменений: вымышленные рейтинг и популярность.
только макетscreens-app.js:88-109
Онбординг /onboarding
Без изменений.
только макетscreens-site.js:164

Редактор

ВозможностьСтатусДоказательство
JSON-модель сцены (5 типов слоёв) и серверная проверка по списку разрешённых полей
Добавлено необязательное поле «роль» (заголовок, преимущество, текст, бренд) с проверкой в браузере и на сервере.
работаетscreens-workspace.js:144 server/api.mjs:69 tests/api.test.cjs:259
Один SVG-рендер для превью, экспорта и серверного PNG в headless Chromium
В контейнере Chromium ставится через Playwright 1.62.1; на GX10 получен PNG 900×1200.
работаетserver/headless-render.mjs:10-79 Dockerfile:21-23 VERIFICATION.md:13
Перенос текста по измерению глифов и предупреждение о переполнении
Алгоритм не менялся, интерлиньяж 1.22. Добавлены список переполненных блоков в окнах «Скачать» и «Проверка» с переходом к тексту и кнопка «Вместить в блок».
работаетlayout-engine.js:32 docs/82 docs/93
Перемещение, масштаб и поворот: угловые ручки, числовой диалог
Боковых ручек, привязок, направляющих и выделения рамкой по-прежнему нет. Добавлены «Фото крупнее» и «Фото меньше» на ±10%.
частичноtransform-controls.js:7-48 docs/83
Группы и порядок слоёв
Без изменений: «Выше/Ниже» переставляет элементы внутри группы, вложенных групп нет.
частичноscreens-editor.js
Отмена и повтор: 40 шагов, склейка ввода
Без изменений: каждый шаг — полный снимок проекта.
работаетscreens-editor.js:23-25
Простой и точный режимы инспектора
Добавлены быстрые действия «Крупнее», «Мельче», «Вместить в блок», «Фото крупнее/меньше» и выбор назначения текста.
работаетeditor-simple.js docs/82-84
Оформление всей серии: фон, цвет текста, размер ±10%, одна отмена
Добавлен фильтр по назначению текста: весь видимый, заголовок, преимущество, основной текст, бренд.
работаетeditor-series.js series-plan.js docs/85
Бренд-кит: палитра, шрифт, логотип, применение к проектам и пакету
Без изменений: 4 семейства шрифтов, Manrope в карточки не попадает, «Мой бренд» печатается на всех страницах новой серии.
работаетcard-series.js:11 app.js:12 scene-fonts.js:5
Шрифты в комплекте для измерения, SVG и экспорта
Без изменений.
работаетscene-fonts.js:5-31
Смена размера холста
Без изменений: слои растягиваются по осям, умного ресайза нет.
частичноscreens-editor.js
Показ презентации
Без изменений, полноэкранного режима нет.
работаетscreens-editor.js docs/16
Тёмная тема
Без изменений: правки CSS касаются новых экранов, токены не переделаны.
частичноcss/atelier.css css/app.css
Вёрстка на телефоне
На 375 px исправлен /app/batch. Вбок по-прежнему прокручиваются /app/projects (431 px) и /app/cloud (383 px); новые экраны библиотеки, партий, бота и выгрузок помещаются.
частичнозамер на 375 px, 01.10.2026

ИИ

ВозможностьСтатусДоказательство
Структура презентации: модель на Ollama раскладывает факты по 6 разделам
Механизм не менялся, заголовки — константы. Добавлен срок ожидания модели 30 минут, локальная презентация больше не создаёт пустых разделов. Публично модель работает, только если уже загружена: холодная загрузка запрещена.
работаетserver/local-ai.mjs:9-10 server/ai-jobs.mjs:7 screens-ai.js:36 deploy/docker-compose.coolify.yml:17-21
Проверка и правка структуры до создания слайдов, разбивка на страницы
Без изменений.
работаетoutline-review.js:6-25 outline-pagination.js:5-32
Разбор свободного текста в бриф — только дословные цитаты
Интерфейс исправлен: предложение модели появляется в тех же полях и требует подтверждения, предложенные факты блокируют экспорт до подтверждения. Качество и доступность модели в публичной версии не подтверждены.
частичноbrief-assistant.js docs/71 product-contract.js:37, 85
ИИ-правка одного объекта: предпросмотр, версия, одна отмена
Текст модели по-прежнему не сверяется с фактами. Косвенно защищает проверка качества: экспорт блокируется, если подтверждённый факт пропал со страниц.
работаетeditor-plan.js:7, 33 product-contract.js:96
Команды для всей серии обычными словами
Добавлены роли, проверка области команды, версия промпта и метрики прогонов. Последний живой прогон — 17 из 21, 95-й процентиль 74 с. Публично выключены.
частичноserver/series-plan-prompt.mjs docs/92:132, 147-158 deploy/docker-compose.coolify.yml:22
Долговечная очередь ИИ-заданий: идемпотентность, аренда, отмена, восстановление
Добавлены срок ожидания запуска 30 минут и допуск для заданий бота. Задания по-прежнему идут по порядку поступления.
работаетserver/ai-jobs.mjs:7, 39, 75
Допуск холодной загрузки модели по свободной памяти
Механизм не менялся; в публичном контейнере холодная загрузка запрещена.
работаетserver/cold-load-guard.mjs:9-24 deploy/docker-compose.coolify.yml:17-21
Общая лента заданий /app/tasks
Добавлены фильтры «Серверные каталоги», «Каталоги браузера» и быстрые результаты. Серии из браузера по-прежнему не видны: «Показано 0 из 0».
работаетtask-hub.js docs/31, 34
Проверка материала перед экспортом
Существенно улучшена: общий отчёт качества в браузере и на сервере блокирует скачивание без фото, при пропаже подтверждённого факта и неподтверждённом предложении модели; есть проверки переполнения и недоступных фото. Не сделано: правил площадок нет — у WB, Ozon и ЯМ одна версия picseller-core-2026-09-11; подробный чекер мёртв, PS.check перекрыт уже трижды; контраст, охранные зоны, целостность товара и заглушки не проверяются; серверный PNG-экспорт отчёт не читает.
частичноproduct-contract.js:10-15, 72-107 quality-ui.js:17-41 server/project-export.mjs:8-9 app.js:154
8 ИИ-инструментов: замена фона, фотосессия, увеличение разрешения, удаление объекта, SEO, видеообложка, A/B-тест, локализация
Без изменений: 12 плиток, 8 с пометкой «Концепция», у всех цены в кредитах.
только макетdata.js:155-168
Генерация сцены и фона моделями FLUX, Qwen Image Edit, Z-Image на GX10
Без изменений: сервер умеет одну операцию — удаление фона.
только в документацииdocs/24:23, 77-78 server/photo-jobs.mjs:9
Инструменты WebMCP для внешних ассистентов
Без изменений: только список проектов и шаблонная карточка с демо-фото.
частичноwebmcp.js:6-11
Telegram-бот, голосовой бриф, ночные партии, режимы «Быстро/Качественно»
Код бота написан: 8 серверных модулей (около 34 КБ), отдельный процесс с блокировкой, экраны «Подключение бота» и «Проверка доставок», 41 тест, документы 72–80. Живого канала нет: токен не подключён, процесс не установлен, публично — «Привязка бота на этом сервере ещё не подключена». Умеет только текстовую команду /presentation с подтверждением /create. Голосового брифа и режимов нет; вместо ночных партий — однократный отложенный запуск партии.
частично
было: только в документации
server/bot-*.mjs server/telegram-transport.mjs bot-orders.mjs:24, 34 server/api.mjs:132 docs/78-79

Фото

ВозможностьСтатусДоказательство
Серверное удаление фона BiRefNet через ComfyUI в очереди photo_jobs
Код не менялся и на прежнем стенде работает. В публичном контейнере фото-провайдер не настроен, и VERIFICATION.md прямо оговаривает, что он не запускался. Маска проверена на 1 товаре; JPEG 12 Мп размером 2,6 МБ отклоняется лимитом 8 МБ.
частично
было: работает
server/photo-service.mjs:38-77 scripts/serve.cjs:15 scripts/photo-pixels.py:20, 58-61
Сохранение цвета товара: цвет берётся только из исходника, от модели — только прозрачность
Без изменений; 9 из 9 тестов прошли 01.10.2026, расхождение цвета 0/0/0.
работаетscripts/photo-pixels.py:79-149 tests/python/test_photo_pixels.py
Локальное удаление фона Apple Vision
Без изменений, только macOS.
работаетnative/remove-background.swift server/background-removal.mjs:10
Применение вырезки к слою или всей серии: рамка сохраняется, одна отмена
Без изменений; оригинал хранится скрытым base64-слоем.
работаетbackground-removal.js:62-79
Замена фото в готовом макете: из файла или библиотеки, в слое или во всей серии
Без изменений.
работаетphoto-replacement.js:8-40
Восстановление фото-задания после перезагрузки
Без изменений: только по ручной кнопке «Проверить задание».
частичноphoto-server-jobs.js:16-25
Очистка файлов ComfyUI с журналом
Без изменений: в эксплуатации выключена.
частичноtests/evidence/photo-provider-cleanup.json
Пакетное удаление фона
Без изменений. Серверная партия прямо отказывает: «Партия пока принимает исходные фотографии без зависимости обработки».
только в документацииcard-batches.mjs:65 docs/91
Три модели, ластик, HEIC до 25 МБ, «4 варианта фона» — обещано в справке
Без изменений: на деле принимаются PNG, JPEG и WEBP до 8 МБ.
только в документацииdata.js:359, 422-425

Проекты и хранение

ВозможностьСтатусДоказательство
Серверные проекты: ревизии, конфликт 409, история, корзина, квота
Добавлен неизменяемый снимок брифа и отчёта качества для каждой ревизии (таблица project_contracts).
работаетdrizzle/0022 server/api.mjs:86-88, 100-109 tests/api.test.cjs:38
Приватные фото: дедупликация по владельцу, атомарная квота 100 МБ
Без изменений.
работаетserver/api.mjs tests/api.test.cjs
Автосохранение в IndexedDB с защитой от устаревшей вкладки
Без изменений: каждое сохранение пишет всё рабочее пространство вместе с фото.
работаетbrowser-storage.js:30-76
Синхронизация браузера и сервера
Частично улучшена: общая библиотека показывает проекты браузера и сервера вместе с метками, повторное «Открыть» той же ревизии продолжает локальные правки. Но сервер по-прежнему не источник истины: правки живут в браузере, на сервер — кнопкой «На сервер», открытие серверного проекта создаёт копию в браузере.
частичноunified-library.js:33-49 screens-cloud.js:44
Папки, копии, локальные версии (до 40), библиотека фото, JSON-коллекции
Без изменений: работает только в одном браузере, таблиц brands, folders и library в схеме из 27 таблиц нет.
частичноdb/schema.ts project-versions.js:10-12
Глобальный поиск по проектам, шаблонам и справке
Без изменений. Ищет только проекты этого браузера: в чистом браузере «Лагуна» и артикул «LG-350» не находятся, хотя на сервере 3 проекта.
работаетapp.js живой прогон 01.10.2026

Экспорт и публикация

ВозможностьСтатусДоказательство
PNG, JPEG, WEBP, SVG, ZIP всех слайдов, JSON проекта
Добавлены проверки перед скачиванием: отчёт качества, переполнение, декодирование фото с лимитами 5 и 30 с, закрепление страниц. Живой прогон: ZIP «Керамическая кружка Лагуна.zip» из 3 PNG 900×1200.
работаетscreens-editor.js docs/93-94
PDF
Без изменений: страницы растровые, окно скачивания теперь об этом предупреждает.
работаетpdf-export.js:12-17 docs/94:87
PPTX с настоящим текстом и фигурами
Без изменений; переносы строк зашиты в текст.
работаетpptx-export.js:11-79
Пакетный экспорт каталога: ZIP, PDF, PPTX по артикулам с описью
Добавлен ZIP редактируемых проектов серверной партии.
работаетbatch-export.js:5-40 server/batch-project-export.mjs
Серверный экспорт PNG-ZIP через очередь
Включён в контейнере. Добавлен PNG-каталог партии: опись с артикулом, позицией, попыткой и SHA-256 каждого PNG, SHA-256 всего архива с перепроверкой перед скачиванием, кэш по составу, история выгрузок с других устройств. Архивы по-прежнему лежат BLOB-ами в SQLite.
работаетDockerfile:32 batch-export-requests.mjs:21-23, 66 batch-export-artifacts.mjs:52 drizzle/0007:14, 0020:2
Файл проекта JSON с сервера по выбранной ревизии
Теперь отклоняется при ошибках отчёта качества.
работаетserver/project-export.mjs:8-9
Публикация в Wildberries, Ozon, Яндекс Маркет
Без изменений: кнопки ведут на PS.demoOnly('Публикация в маркетплейс — фаза 4'), плитка «Публикация» — на /app/create.
только макетfoundation.js:36-37 refinements.js:121
Интеграции WB, Ozon, МойСклад, Telegram и API-ключи
Без изменений: на экране «Все внешние интеграции отключены».
только макет/app/integrations, проверено в браузере
Публичный Render API
Без изменений: справка обещает POST api.picseller.ru/v1/render, маршрута нет.
только в документацииdata.js:570

Аккаунты

ВозможностьСтатусДоказательство
Вход по одноразовому приглашению, cookie __Host-, изоляция пространств, защита устаревшей вкладки
Работает публично на picseller.24oros.ru. Лимит попыток считается по сетевому источнику, за доверенным прокси — по ближайшему адресу. Код по-прежнему действует 15 минут, сессия — 8 часов.
работаетserver/login-rate-limit.mjs:12-31 server/local.mjs:37, 55 server/session-auth.mjs:15, 38 tests/session-auth.test.cjs:12
Управление аккаунтами из командной строки: list, revoke, disable, enable
При disable и enable теперь отзываются и Telegram-привязки.
работаетserver/account-admin.mjs:14-15 tests/bot-links.test.cjs:13
Экраны /login, /register, /forgot
Без изменений: «Это кликабельный прототип… Открыть демо-кабинет».
только макетscreens-atelier.js:10
Админ-панель /admin
Без изменений: данные ролями не защищены.
только макетscreens-workspace.js
Команда и роли, тарифы и оплата, аналитика
Без изменений, проверено в браузере.
только макет/app/team, /app/billing, /app/analytics
Вход через Яндекс ID, самостоятельная регистрация, восстановление доступа
Без изменений: в server/ кода OAuth нет.
только в документацииdocs/62:49

Сервер и деплой

ВозможностьСтатусДоказательство
Выкладка на GX10: было — служба за SSH-туннелем, стало — контейнер в Coolify с публичным HTTPS
picseller:container-preflight-15 в Coolify; привязка к 0.0.0.0 разрешена только с HTTPS-входом; 01.10.2026 «/» — 200, «/v1/projects» — 401. Выкладка — разовые python-скрипты: остановка, бэкап, замена тега через API Coolify, образ переносится tar-архивом с Mac; штатный gx10-deploy.sh не используется.
работает
было: частично
deploy/gx10-coolify-target.json server/local.mjs:25-28 deploy/update-f3-preflight-15-gx10.py docs/80:23
Резервная копия, проверка и восстановление SQLite и фото
Восстановление теперь отзывает и Telegram-доступ, перед каждым выпуском делались копии. Расписания нет, копии лежат на том же диске GX10.
частичноserver/backup.mjs:87, 92 tests/backup.test.cjs:48 VERIFICATION.md:14, 20, 27, 35
Миграции базы: Drizzle и собственный мигратор
Стало хуже: SQL-миграций 24, в журнале Drizzle по-прежнему 7. Проба drizzle-kit generate на копии создала файл с 18 повторными CREATE TABLE, а docs/11 по-прежнему советует эту команду.
частичноdrizzle/meta/_journal.json server/local-adapter.mjs:12-17 docs/11:30
Dockerfile, выкладка через Coolify, публичный домен, healthz, мониторинг
Есть многоэтапный Dockerfile с белым списком .dockerignore и HEALTHCHECK, сервис Coolify и домен picseller.24oros.ru. Маршрута /healthz нет: здоровье проверяется запросом /v1/projects с ожидаемым 401, публично /healthz отвечает 404. Метрик, мониторинга и автоотката нет.
частично
было: только в документации
Dockerfile:1-36 scripts/container-health.cjs:6-8
Облачная версия на OpenAI Sites: Worker, D1/R2, вход через ChatGPT
Без изменений: сборка по-прежнему собирает worker, .openai/hosting.json на месте.
частичноserver/worker.mjs:6-10 .openai/hosting.json
Автотесты Node и Python
01.10.2026: 421 из 421 за 7,06 с; Python — 15 из 15.
работаетtests/*.test.cjs tests/python
Браузерные сквозные проверки
Скриптов check-* стало 73 вместо 22, 56 из них требуют Playwright, но его по-прежнему нет в package.json — в контейнер он ставится отдельно. CI нет. Доказательства лежат в .codex/evidence (69 файлов, 15 МБ) и validation/ (в .gitignore).
частичноscripts/check-* Dockerfile:21 package.json

Справка

ВозможностьСтатусДоказательство
Центр помощи: статьи, поиск, подготовка обращения
Добавлены статьи о стилях, скачивании и каталоге; в справке 41 статья.
работаетexport-help.js workflow-help.js docs/91
Обращения в поддержку
Без изменений: «Обращение сохранено локально», никуда не отправляется.
частичноsupport-drafts.js:20-31
Карта экранов /screens и дорожная карта в интерфейсе
Без изменений: «32 точки входа», нет библиотеки, серверных партий, бота и PNG-выгрузок.
частичноscreens-help.js:46
Встроенная «Документация»
Документов стало 99, и все отдаются без входа: например, /docs/89-container-image.md отвечает 200 (47 434 байта). В 26 — детали инфраструктуры (ssh, Tailscale, IP, Coolify), в 5 — пути домашнего каталога на сервере. Это проблема безопасности, а не польза для пользователя (проблема 21).
работаетserver/local.mjs:79-84 scripts/build.cjs:5-8
Обещания в коде и данных: «600+ шрифтов», «400 000 элементов», «публикация по API», «40+ правил»
Без изменений; «Публикация по API» — и в подвале. На деле шрифтов 4 семейства.
только макетscreens-site.js:12-14 app.js:125 scene-fonts.js:5

Чего нет совсем

ВозможностьСтатусДоказательство
Сайт или витрина бренда
Ни кода, ни маршрута, ни документа, ни фазы в плане F0–F7 прошлого аудита. Слово «витрина» встречается только в требованиях площадок.
нетscreens-site.js:1-3 data.js:20, 492
Каталог товаров на сервере
Таблицы products нет, факты не переиспользуются между материалами, нет номеров карточек WB и Ozon и импорта по артикулу. Есть только бриф товара внутри каждого проекта.
нетdb/schema.ts product-contract.js:21-55
Тексты, написанные моделью: заголовки, выгоды, SEO
Заголовки разделов — константы.
нетserver/local-ai.mjs:9-10
Поддержка после выпуска: слежение за правилами площадок, ценами и фактами, заявки, состояние сайта
Правила площадок — одна версия без источника и категорий; событий «нужно обновить» нет.
нетproduct-contract.js:10-15

Новое в версии 11.09

35 возможностей, которых не было в коммите df16a68: 25 работают, 5 работают частично, 3 существуют только как макет, 2 — только в документации.

ГруппаВозможностьСтатусДоказательство
СозданиеОсновной путь F1 на /app/create: индикатор 4 шагов «Фото → Факты → Стиль → Серия», одна кнопка «Создать серию», черновик переживает перезагрузку, после редактора — возврат в общую библиотекуработаетmain-workflow.js:32-67, 105-110 docs/96
СозданиеПодсказки «Осталось перед созданием» с переходом к пустому полю; одна форма для ручного ввода и разбора текста моделью с явным подтверждениемработаетcreate-hub.js:13-29, 60-70 docs/71
СозданиеБриф товара (ProductBrief): название, площадка, артикул, факты с id, источником и статусом; неизменяемый снимок на каждую серверную ревизиюработаетproduct-contract.js:21-70 drizzle/0022 server/api.mjs:79-109
Создание«Мои стили»: локальные рецепты (до 30) и серверные с неизменяемыми версиями (10 стилей, до 100, без удаления)работаетcreate-hub.js:37-58 server/card-recipes.mjs:4, 22-28
СозданиеОбщая библиотека /app/library: проекты браузера и сервера в одном списке с метками места хранения и поискомработаетunified-library.js:1-64
СозданиеКарта будущей автоматизации #/automation-plan: переключение 4 сценариев без исполнениятолько макетautomation-plan.js:1-2 docs/92:122
РедакторБыстрые действия с текстом: «Крупнее», «Мельче», «Вместить в блок» (подбор кегля)работаетeditor-simple.js docs/82
Редактор«Фото крупнее» и «Фото меньше» от центра рамки с проверкой края страницыработаетeditor-simple.js docs/83
РедакторРоли текста (заголовок, преимущество, текст, бренд): ручное и автоматическое назначение, оформление страниц по ролиработаетscene.js:9-25 card-layout.js:36-40 docs/84-85
РедакторПроверки перед скачиванием: переполненные тексты и недоступные фото с переходом к слою, закрепление страниц, лимиты 5 и 30 сработаетscreens-editor.js docs/93-94
ИИСрок ожидания модели 30 минут с состоянием «Истекло ожидание»; запрос сохраняется в браузере до отправкиработаетserver/ai-jobs.mjs:7-8 docs/69
ИИКоманды серии с ролями, проверкой области, версией промпта и метриками прогонов; публично выключенычастичноserver/series-plan-prompt.mjs docs/92:147-161
ИИФакты от модели получают статус «предложено» и блокируют экспорт до подтверждения пользователемработаетproduct-contract.js:37, 49, 57-60, 85 quality-ui.js:24-27
ФотоНовых фото-возможностей нет; серверная партия явно отклоняет зависимое удаление фонатолько в документацииcard-batches.mjs:65 docs/91
Каталог и партииСерверная партия до 100 артикулов: артикулы обязательны и уникальны, очередь не зависит от браузера, пауза, продолжение, архив; лимит считает только активные партииработаетcard-batches.mjs:58-101 tests/api.test.cjs:304, 326, 365 docs/98
Каталог и партииИсправление ошибочной строки после серверной ошибки: новая попытка с сохранением истории и защитой от повторной отправкиработаетbatch-row-edit.js drizzle/0017
Каталог и партииОднократный отложенный запуск партии — до 30 дней, с часовым поясомработаетcard-batches.mjs:66-71 tests/api.test.cjs:401
Каталог и партииИмпорт CSV и XLSX в серверную партию с предпросмотром и проверкой строк до отправкиработаетbatch-server-submit.js:1-2 docs/91
Каталог и партииПовторяющиеся сценарии, ключ запуска, пауза сценария (F4)только макетNEXT_PHASE.md design/f4-automation-prototype
ЭкспортВоспроизводимый PNG-каталог партии: опись с артикулом, позицией, попыткой и SHA-256 каждого PNG, SHA-256 архива с перепроверкой, кэш по составу, история выгрузок, освобождение местаработаетbatch-export-requests.mjs:9-23, 66 batch-export-artifacts.mjs:6, 42-52 docs/98
ЭкспортZIP редактируемых проектов серверной партииработаетserver/batch-project-export.mjs
ЭкспортОтчёт качества как ворота экспорта: блокирует браузерное скачивание и серверный JSON, но не серверный PNGчастичноquality-ui.js:30-41 server/project-export.mjs:8-9
TelegramПривязка чата одноразовым кодом, отзыв, единый владелец пространства у сайта и бота; публично отвечает 503частичноserver/bot-links.mjs server/workspace-owner.mjs:7-9 server/api.mjs:132
TelegramЧерновик из сообщения /presentation → подтверждение /create → задание структуры презентации; только текстчастичноserver/bot-orders.mjs:20-49
TelegramДолговечные входящие и исходящие сообщения, доставка с состоянием «неизвестно» и ручным решением повторить или пропуститьчастичноserver/bot-inbox.mjs server/bot-dispatch.mjs server/bot-delivery-control.mjs
TelegramТранспорт Telegram и отдельный процесс с блокировкой: токен не подключён, служба не установленатолько в документацииserver/telegram-transport.mjs scripts/bot-worker.mjs docs/78-80
АккаунтыЛимит попыток входа по сетевому источнику с доверенным проксиработаетserver/login-rate-limit.mjs tests/session-auth.test.cjs:12
АккаунтыВосстановление копии, disable и enable отзывают и Telegram-доступработаетserver/backup.mjs:87, 92 server/account-admin.mjs:14-15
Сервер и деплойМногоэтапный ARM64 Dockerfile: node 24.20.0, Chromium через Playwright, Python с Pillow, белый список .dockerignore, HEALTHCHECK, пользователь node, том /dataработаетDockerfile:1-36 scripts/container-health.cjs
Сервер и деплойPICSELLER_HOST и PICSELLER_TRUST_PROXY: адрес 0.0.0.0 только с HTTPS-входом, доверие к X-Forwarded-For только по явному флагуработаетserver/local.mjs:25-28 scripts/serve.cjs:7-10 tests/network-binding.test.cjs
Сервер и деплойПубличный HTTPS https://picseller.24oros.ru (Coolify, Traefik, вход по приглашению), container-preflight-15работаетdeploy/gx10-coolify-target.json VERIFICATION.md:15, 34-41
Сервер и деплойСкрипты выкладки: проверка незавершённых заданий, бэкап, правка compose через API Coolify, загрузка образа с проверкой SHA-256 — разовые на каждый выпускработаетdeploy/cutover-gx10.py deploy/load-verified-image.py tests/python/test_cutover.py
Сервер и деплойДокументы состояния PROJECT_STATE, NEXT_PHASE, DECISIONS, VERIFICATION и машиночитаемый .codex/project-state.jsonработаеткорень проекта
СправкаСтатьи о скачивании, PNG-каталоге и навигации; руководство «Каталог на сервере» (частично устарело)работаетexport-help.js workflow-help.js docs/91
СправкаПубличный аудит Codex 10.09 с отчётом и кликабельным макетом на picseller-lab.24oros.ru и /demo/только макетresearch/audit-2026-09-10/site/demo

Сильные стороны, которые сохраняем

Единая модель сцены

JSON-сцена с серверной проверкой по списку разрешённых полей, теперь и с ролями слоёв — общий договор для редактора, версий, CSV-шаблонов, ИИ-правок и серверного рендера.

scene.js server/api.mjs:69

Один рендер для браузера и сервера

Один SVG-рендер для превью, экспорта и серверного PNG с комплектными шрифтами: что видно на экране, то и в файле. Основа для будущей витрины.

server/headless-render.mjs scene-fonts.js docs/58, docs/59

«Факты только от автора»

Модель копирует факты дословно, цитаты из брифа проверяются, а факты от модели теперь получают статус «предложено» и требуют подтверждения. Расширять проверкой происхождения текста, а не отменять.

server/brief-extraction.mjs:13 product-contract.js:37, 85

Контракт товара и качества

Бриф товара с источником и статусом каждого факта и общий отчёт качества для браузера и сервера. Это готовая основа для сущности «Товар» и для датированных правил площадок.

product-contract.js:21-107 tests/product-contract.test.cjs

Серверные партии

До 100 артикулов с паузой, архивом, исправлением строк и отложенным запуском; PNG-каталог с описью и контрольными суммами SHA-256, кэш по составу.

card-batches.mjs:58-101 batch-export-artifacts.mjs

Контейнер и публичный HTTPS

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

Dockerfile:1-36 server/local.mjs:25-28

Проверяемые правки ИИ

Узкие языки правок и цикл «предложение → сравнение → применение → версия → одна отмена».

editor-plan.js series-plan.js editor-assistant.js

Долговечные очереди

Ключи идемпотентности, захват и аренда задания, ограждение отмены, атомарная квота, раздельные слоты для процессора и модели. Всё покрыто тестами.

server/ai-jobs.mjs photo-jobs.mjs export-service.mjs

Цвет товара не меняется

От модели берётся только прозрачность, цвет — из исходника. Фиксированные графы ComfyUI с проверкой узлов — образец для будущих сцены, тени и увеличения разрешения.

scripts/photo-pixels.py:79-149 server/comfy-background-contract.mjs

Ревизии и изоляция владельца

Оптимистичная блокировка с ответом 409 вместо перезаписи, проверка владельца в каждом SQL-запросе, приватные фото, неизменяемый снимок брифа и отчёта на каждую ревизию.

server/api.mjs drizzle/0022

Безопасные сессии

В базе только хеши, cookie __Host- с HttpOnly и SameSite=Strict, защита устаревшей вкладки, лимит попыток входа по источнику.

server/session-auth.mjs server/login-rate-limit.mjs

Экспорт для работы

PPTX с настоящим текстом, пакетный экспорт каталога, снимок проекта перед фоновым экспортом, проверки переполнения и фото перед скачиванием.

pptx-export.js batch-export.js docs/93-94

Импорт CSV и Excel

Все строки проверяются до сборки; есть пауза, повтор и защита от ZIP-бомб, а теперь и отправка в серверную партию.

xlsx-import.js batch-server-submit.js

Результат, задания и библиотека

/app/result/:id — одна точка «посмотреть → скачать → редактировать»; общая лента заданий и общая библиотека браузера и сервера.

material-result.js server/task-feed.mjs unified-library.js

Каталог навигации

Один список разделов для меню и телефона, отметка текущего раздела, мобильное «Ещё» — основа нового короткого меню.

workspace-navigation.js

Визуальный язык

Глубокий зелёный #164d43, лаймовый акцент, шрифты Manrope и Inter — основа единой дизайн-системы; на нём построены и новые макеты.

Быстрые тесты и честные метки

421 тест примерно за 7 с, наборы оценки моделей на русских примерах и честная пометка «Концепция» у того, чего ещё нет.

tests/fixtures/*-ru.json scripts/evaluate-*

Свой ИИ на своём сервере

Ollama и ComfyUI на GX10: данные продавца не уходят наружу. Это ключевое отличие от облачных конкурентов.

Как сейчас выглядит путь пользователя

Живой прогон 01.10.2026 на локальной копии той же сборки, что на picseller.24oros.ru: список скриптов и SHA-256 ключевых файлов совпадают. Режим одного аккаунта, синтетическое фото керамической кружки «Лагуна». Время указано при автоматическом вводе.

Основной маршрут F1 из кабинета: 3 клика, 2 поля и 1 файл до серии

1Клик«Создать» в боковой панели — экран «Что создадим?» с блоком «Основной маршрут: Фото → Факты → Стиль → Серия».
2Поле«Название товара».
3Клик и файл«Загрузить фото товара» и выбор файла.
4Поле«Подтверждённые факты», 5 строк — появляется «Обязательные поля заполнены»; площадка WB и стиль eco стоят по умолчанию.
5Клик«Создать серию» — редактор, серия из 3 страниц.

До серии — около 2,6 с (с главной — 4 клика). До файла минимум 5 кликов: «Скачать» в редакторе и «Скачать файл»; с главной через экран «Готовая серия» — 7. Окно скачивания показывает отчёт качества «Можно выпускать · 0 ошибок · 0 предупреждений»; ZIP «Керамическая кружка Лагуна.zip» весит 338 879 байт, внутри 3 PNG 900×1200.

Все проверенные пути

ПутьДо серииДо файлаВремя до серииЧто получилось
Основной маршрут из кабинета3 клика, 2 поля, 1 файл5 кликов≈2,6 с3 страницы; проверка «0 ошибок · 0 предупреждений»
Главная кнопка лендинга «Создать первый дизайн» → старый мастер5 кликов, 3 поля, 1 файл8 кликов≈6,0 с6 страниц: 3 с «Добавьте подтверждённые сведения», 6-я — «Ваш новый любимый товар»; проверка «0 ошибок · 4 предупреждения»; ZIP 679 862 байта, заглушка в 04.png
Сборка в фоне после брифа4 клика—≈6 с«Карточки готовы → Открыть серию» в «Заданиях»
Каталог из таблицы в серверную партию, 2 артикула9 кликов, 1 поле, 2 файлалокально 503≈4,5 с«2 из 2 готово»; нужен заранее сохранённый стиль аккаунта; PNG-архив локально не подключён
Для сравнения: макет Codex /demo/ на учебном товаре4 клика——3 карточки; скачивание SVG и JSON вместо PNG
Что подтвердил живой прогон
  • Основной маршрут работает от брифа до ZIP; ошибки отчёта качества блокируют «Скачать файл».
  • Фоновая сборка выполняется примерно за 6 с и видна в «Заданиях»; серверный каталог из CSV собирает 2 артикула примерно за 4,5 с.
  • Общая библиотека показывает браузерные и серверные проекты с меткой места хранения.
  • На 390 px нет прокрутки вбок на 29 из 30 экранов; исключение — старый /app/projects (431 px).
  • Ошибок страницы нет; ответы 503 только у бота и PNG-выгрузки, которые в локальном режиме не подключены.
Что прогон показал плохого
  • Главная кнопка лендинга ведёт в старый мастер с демо-наушниками, а его серия с заглушками проходит проверку и скачивается.
  • Публичный адрес без приглашения показывает только неоформленное «Войдите в PicSeller»: лендинг, тарифы и справка посетителю не видны.
  • «Задания» не видят серии, собранные в браузере, а поиск не находит серверные проекты и артикулы.
  • На телефоне поле названия в брифе начинается ниже первого экрана.
  • Ошибка вёрстки .row.wrap встречается чаще: 42 места против 27.
Все 23 замечания живого прогона версии 11.09
ГдеЧто не такВажность
Главная → старый мастер screens-atelier.js:4Три входа лендинга («Создать первый дизайн», плитка «Карточка товара», «Попробовать мастер») ведут не в основной маршрут, а в старый мастер с демо-наушниками. Он собирает 6 страниц: 3 с «Добавьте подтверждённые сведения», 6-я — «Ваш новый любимый товар». Новичок попадает в худший из двух мастеров.высокая
Проверка перед экспортом для старого мастера quality-ui.js«Можно выпускать · 0 ошибок · 4 предупреждения»: заглушка засчитана как «старый факт». ZIP из 6 PNG скачан, в 04.png — надпись-заглушка.высокая
Публичный адрес picseller.24oros.ruБез сессии на любом маршруте — одна неоформленная строка «Войдите в PicSeller… Войти по приглашению». Лендинг, тарифы, справка и демо не видны; для приёмки F1 каждому новому пользователю нужен код от администратора.высокая
Сайт, витрина, публикацияКонструктора сайта или витрины нет; публикации на WB, Ozon и ЯМ нет, «Интеграции» — экран-план, публикация отнесена к фазе F7.высокая
Задания и «К заданиям» task-hub.js material-result.jsПосле «Создать серию» — «Показано 0 из 0»: видны только серверные сборки и каталоги, а экран результата всё равно отправляет туда.средняя
Бриф на телефоне 390×844Поле «Название товара» начинается на 803 px, под нижней панелью (787 px); факты — на 1116 px, кнопка «Создать серию» — на 1421 px при высоте страницы 2225 px.средняя
Глобальный поискИщет только проекты этого браузера, шаблоны и справку: «Лагуна» и «LG-350» не находятся, хотя на сервере 3 проекта.средняя
Библиотека unified-library.jsСерверная карточка свёрстана узкой колонкой, название рвётся по слогам, вместо превью значок. После «Открыть серию» тот же товар виден дважды.средняя
Каталог → серверная партияЭкрана «Серверные партии» нет в меню (подсвечивается «Студия»). Отправка требует заранее сохранённого стиля аккаунта — ещё 3 действия. Заголовок технический: «Партия · рецепт v1». Фото нужно сначала загрузить в «Фотографии» и сослаться на них из CSV; демо-товары для серверного каталога не подходят.средняя
Повторный вход в старый мастер«Создать карточку» снова открывает прошлую серию на шаге 3, а не новую форму.средняя
Вёрстка: .wrap против .row.wrapНе исправлено, мест стало 42 вместо 27. Ряды кнопок съезжают вправо на 40–64 px, в том числе в окне скачивания и в партии.средняя
Внешний вид карточек card-series.js scene-fonts.js«Мой бренд» на каждой странице, Manrope не применяется, фото ставится прямоугольником вместе с фоном. Удаление фона — только галочкой в фоновой сборке и при подключённом обработчике.средняя
Бриф после создания серииФорма не очищается: прошлый товар остаётся, легко собрать дубль.низкая
Редактор screens-editor.jsВ крошках «Карточка / cover · 1 из 3»; «Правка с ИИ» без выделения отвечает тостом; на телефоне скрыты «Серия», «Версии» и «Просмотр».низкая
Технические термины«QUALITYREPORT V1», «Правила: picseller-core-2026-09-11 · wb», «Партия · рецепт v1», «Старый источник факта».низкая
Склонения«3 страниц», «3 слайдов», «2 строк», «2 товаров», «4 предупреждений», «32 точек входа», «41 шаблонов».низкая
PNG-каталог в локальном режимеКнопка «Подготовить PNG ZIP» показывается, хотя рендер недоступен; после нажатия — «Фоновый PNG-каталог не подключён.» (503).низкая
Подключение бота«Подключение недоступно…», 503 на /v1/bot/status и /v1/bot/deliveries; заказы и доставка через Telegram — фаза F4.низкая
Карта экрановТе же 32 точки; нет Заданий, библиотеки, Готовой серии, Серверных партий, PNG-выгрузок и бота.низкая
/app/projects на телефонеШирина 431 px при экране 390 px. Экран выпал из меню, но открывается по «Смотреть все» из кабинета.низкая
ШаблоныПлашки площадки и Premium закрывают первую строку названия; на миниатюрах «Добавьте описание товара»; «41 шаблонов» против «Найдено: 36».низкая
Плавающая кнопка «Поддержка»Перекрывает элементы под собой, например «Редактировать» у третьей карточки в «Проектах».низкая
Демо-обвязка и подвал«Интерактивный прототип», «Демо», «Демо-пространство», пользователь «Дизайнер», тарифы «Концепция»; строка «Данные · Условия демо» разъезжается в столбик.низкая

Снимки актуальной версии

Снимки живого прогона 01.10.2026. Компьютер — 1440×900, длинные страницы сняты целиком, но не выше 2600 px; телефон — 390×844, только первый экран. Нажмите на снимок, чтобы открыть его целиком.

Компьютер

Главная страница PicSeller (лендинг) на компьютере
Главная (лендинг)Без изменений: «Создать первый дизайн» ведёт в старый мастер, а не в основной маршрут; кнопка сдвинута вправо (.row.wrap).
Кабинет «Творческая студия» на компьютере
Кабинет «Творческая студия»«Создать материал», «Создать», «Новый дизайн» и «Публикация» ведут в бриф, баннер «Создать карточку» — в старый мастер.
Бриф «Что создадим?» с блоком «Основной маршрут»
Бриф «Что создадим?»Новый блок «Основной маршрут: Фото → Факты → Стиль → Серия», кнопка «Создать серию»; стиль и площадка свёрнуты, фоновая сборка спрятана.
Редактор серии сразу после создания
Редактор после «Создать серию»3 страницы; фото стоит прямоугольником с фоном, «Мой бренд» на каждой карточке, в крошках служебное «cover».
Экран «Готовая серия» со всеми страницами
Готовая серияВсе страницы целиком; «К заданиям» ведёт туда, где браузерной серии нет; подпись «3 страниц».
Окно «Скачать материал» с отчётом качества
Проверка перед скачиваниемОтчёт качества «Можно выпускать · 0 ошибок · 0 предупреждений»; ошибки блокируют скачивание, предупреждения — нет; термины технические.
Старый мастер карточки с демо-товаром
Старый мастерСюда ведёт кнопка главной: демо «Наушники SOFT SOUND», 6 страниц, из них 3 с заглушкой и 6-я «Ваш новый любимый товар».
Общая библиотека «Ваши проекты» с метками места хранения
Общая библиотека «Ваши проекты»Метки «В этом браузере» и «На сервере», поиск, «Обновить сервер»; серверная карточка свёрстана узкой колонкой.
Экран «Задания» после фоновой сборки
ЗаданияПосле фоновой сборки — «Карточки готовы» и «Открыть серию»; серии из браузера сюда не попадают.
Каталог шаблонов с фильтрами
ШаблоныБез изменений: «41 шаблонов», «Найдено: 36», плашки закрывают названия; слева раскрыты 12 «Других инструментов».
Бренд-кит: палитра, шрифты, логотип
Бренд-китБез изменений: Manrope помечен «выберите поддерживаемый шрифт», карточки печатаются шрифтом Arial.
Серверная партия из двух артикулов
Серверная партия (F3)CSV на 2 артикула: «2 из 2 готово» примерно за 4,5 с, архив, ZIP проектов, PNG-каталог; экрана нет в меню.
Экран «Подключение бота»
Подключение ботаНовый пункт меню вместо «Серверных проектов»; локально «Подключение недоступно», заказы через Telegram не включены.
Центр помощи со статьями
Центр помощиНовые статьи про стиль, проверку перед скачиванием, паузу и архив каталога, PNG-каталог.
Страница тарифов с пометкой «Концепция»
ТарифыБез изменений, «Концепция»: 0 / 790 / 1990 ₽ / по запросу; платежей нет.
Карта экранов прототипа
Карта экрановНе обновлена: «32 точек входа», нет библиотеки, Готовой серии, партий и бота.

Телефон

Главная страница на телефоне, первый экран
Главная на телефонеВ шапке только «Личный кабинет», кнопка «Создать первый дизайн» сдвинута вправо примерно на 46 px.
Кабинет на телефоне с нижней панелью
Кабинет на телефонеНижняя панель «Студия / Создать / Проекты / Задания / Ещё»; прокрутки вбок нет.
Бриф на телефоне, первый экран
Бриф на телефонеПервый экран занят блоком «Основной маршрут»; поле названия начинается на 803 px, под нижней панелью.
Редактор на телефоне
Редактор на телефонеБез прокрутки вбок, холст мелкий; «Серия», «Версии» и «Просмотр» скрыты.

Публичный адрес

picseller.24oros.ru без входа: заглушка «Войдите в PicSeller»
picseller.24oros.ru без входаТолько неоформленная заглушка «Войдите в PicSeller… Войти по приглашению»; то же на #/app и #/app/library.
Форма входа по коду приглашения
Вход по приглашениюОдноразовый код от администратора действует 15 минут, сессия — до 8 часов. Вход не выполнялся.

3Диагноз: что мешает стать продуктом

Двадцать проблем первого аудита, сверенных с версией 11.09, и одиннадцать новых. Проблемы сгруппированы по видам, внутри группы — по важности. У каждой — что сейчас, что изменилось к 11.09, доказательства и способ исправления.

10
частично исправлено из 20
7
без изменений
3
стало хуже
0
исправлено полностью
11
новых проблем: 3 высокие, 6 средних, 2 низкие
Срочно: две новые проблемы

Внутренние документы с деталями инфраструктуры открыты на боевом домене без входа (проблема 21), а вся работа F0–F3 не зафиксирована в git (проблема 22). Обе решаются за дни и должны идти раньше любых новых функций.

Состояние на 11.09: стало хуже · без изменений · частично исправлено · исправлено. Важность — по первому аудиту (08.09): критическая высокая средняя низкая.

20 проблем первого аудита и их состояние

№ПроблемаВидВажность (08.09)Состояние на 11.09
1Витрины бренда нет, «Товар» — только бриф внутри проектаПродукткритическаячастично исправлено
2Публикация на маркетплейсы — заглушкаПродуктвысокаябез изменений
3ИИ почти не создаёт содержимоеПродуктвысокаябез изменений
4Восемь путей создания и два мастераИнтерфейсвысокаябез изменений
5Навигация перегружена, демо смешано с продуктомИнтерфейсвысокаябез изменений
6Редактор отстаёт от Canva и PolotnoИнтерфейсвысокаячастично исправлено
7Две дизайн-системы, тёмная тема, телефон, доступностьИнтерфейссредняябез изменений
8Три алгоритма раскладки, расхождение стилей и площадокАлгоритмывысокаячастично исправлено
9Демо-данные и заглушки попадают в файлыАлгоритмывысокаячастично исправлено
10Проверка качества без правил площадокАлгоритмывысокаячастично исправлено
11Две модели данных: браузер и серверАрхитектура и данныекритическаячастично исправлено
12Подмена функций и порядок скриптовАрхитектура и данныевысокаястало хуже
13Редактор тормозит на фото и расходует памятьАрхитектура и данныевысокаябез изменений
14ИИ-очередь без честного распределенияАрхитектура и данныесредняячастично исправлено
15Публичная версия без /healthz, мониторинга и копий вне дискаСкрипты, деплой и процесскритическаячастично исправлено
16Миграции: уже 17 вне журналаСкрипты, деплой и процесссредняястало хуже
17Инфраструктура и журналы вместо пилотаСкрипты, деплой и процесссредняястало хуже
18Фото-конвейер зависает и роняет серверНадёжность и безопасностьвысокаябез изменений
19Вход не годится для реальных пользователейНадёжность и безопасностьвысокаячастично исправлено
20Данные растут без пределаНадёжность и безопасностьсредняячастично исправлено

Продукт

критическая частично исправлено

1. Витрины бренда нет, а «Товар» существует только как бриф внутри проекта

Владелец просит продукт, который создаёт с нуля в том числе сайт или витрину, а потом публикует и поддерживает их. Витрины нет вообще: ни кода, ни маршрута, ни документа, ни фазы в плане F0–F7. Каталога товаров с повторным использованием фактов нет: каждый проект хранит свой бриф, номеров карточек WB и Ozon и импорта по артикулу нет. Конкуренты уже закрывают цикл «бренд → товары → сайт»: Canva Websites, Pomelli (с 19.05.2026), Tilda, Durable.

Что изменилось к 11.09: появился бриф товара (ProductBrief) — версионированный JSON с названием, площадкой, артикулом и фактами с id, источником и статусом. Он хранится в проекте, в неизменяемом снимке каждой ревизии и во входе строки партии; в серверной партии артикул обязателен и уникален.

Доказательства: product-contract.js:21-55 drizzle/0022_project_contracts.sql drizzle/0023 card-batches.mjs:64 db/schema.ts — 27 таблиц, products нет; поиск «витрин|storefront|сайт бренда» по коду, документам и прошлому аудиту находит только требования площадок (data.js:20, 492).

Как исправить:

  • Серверная таблица «Товар» на основе брифа: факты с id и источником, фото, артикул, номера карточек WB и Ozon. Из неё строятся серия карточек, презентация и страница витрины.
  • Витрина — отдельный тип материала из 8–12 типизированных секций в JSON: схема по образцу Puck, проверка как у validateScene; HTML собирается детерминированным рендером из тех же сцен и бренд-кита.
  • Публикация статикой на <бренд>.24oros.ru: атомарное переключение версии, откат, проверка HTTPS после выкладки.

высокая без изменений

2. Публикация на маркетплейсы — заглушка, а лендинг и подвал обещают «публикацию по API»

Кнопки публикации открывают PS.demoOnly, «Интеграции» — экран «Все внешние интеграции отключены», плитка «Публикация» ведёт в /app/create. Лендинг и подвал обещают «Публикация по API» и «40+ правил». Ни один генератор визуала в России публично не подтвердил публикацию с откатом — ниша свободна.

Что изменилось к 11.09: ничего. В плане прошлого аудита публикация отнесена к фазе F7 и требует доступа владельца к API.

Доказательства: foundation.js:36-37 refinements.js:121 screens-site.js:12-14 app.js:125 screens-atelier.js:5 NEXT_PHASE.md:22

Как исправить:

  • Сразу убрать ложные обещания из лендинга, подвала и data.js.
  • Адаптер WB по шагам, как у JAFO: ключ с правом «Контент» → привязка материала к карточке через /content/v2/get/cards/list → сравнение «было/станет» по списку медиа → подтверждение → /content/v3/media/save со ссылками на файлы серверного экспорта.
  • После отправки — чтение результата обратно, журнал и откат к прежнему списку медиа. Следом Ozon через /v1/product/pictures/import.

высокая без изменений

3. ИИ почти не создаёт содержимое: нет текстов и визуала, а 8 из 12 плиток — концепции с ценами

Генерации текстов (заголовки, выгоды, SEO) и визуала (сцена, фон) нет, хотя FLUX 2 Klein, Qwen Image Edit и Z-Image уже стоят на GX10. Все 12 плиток ИИ-инструментов несут цены в кредитах, 8 из них — «Концепция». Площадки раздают фон и описания бесплатно (Ozon, WB, ЯМ), поэтому одним удалением фона ценность не создать. В публичной версии команды серии выключены, загрузка модели запрещена, фото-провайдер не подключён.

Что изменилось к 11.09: выросла надёжность вокруг модели, а не её ценность: срок ожидания 30 минут, проверка области команды, роли в схеме ответа, статус «предложено» для фактов модели с обязательным подтверждением.

Доказательства: server/ai-jobs.mjs:7 docs/92:130-151 product-contract.js:37, 85 data.js:155 deploy/docker-compose.coolify.yml:17-22

Как исправить:

  • Текстовые слоты: заголовок до 40 символов, выгода до 60, заголовки разделов. Модель даёт 2–3 варианта, у каждого — ссылки на факты.
  • Детерминированный проверщик: числа, единицы, отрицания и бренды должны найтись в фактах; непрошедшая строка заменяется исходным фактом.
  • Операция «сцена» в очереди фото: маска BiRefNet → фон от Qwen-Image-Edit-2511 или FLUX.2 klein 4B (Apache-2.0) → исходные пиксели товара сверху с тенью → проверка целостности товара по маске.
  • До запуска убрать концепции и цены из меню.

Интерфейс

высокая без изменений

4. Восемь путей создания карточки и два мастера с разным результатом

Путей создания стало 8 (было 7): добавились серверные партии и кнопка «Новый комплект». Два мастера остались — с разными полями, черновиками (cardDraft и createBrief) и финалом. Главная кнопка лендинга ведёт в старый мастер с демо-товаром, а его адрес не стал переадресацией. Плитки «Публикация» и «Социальные сети» по-прежнему ведут в /app/create. Живой прогон: основной путь — 3 клика из кабинета до серии, старый мастер — 5 кликов, 3 поля и 6 страниц с заглушками.

Что изменилось к 11.09: экран /app/create стал понятнее — 4 шага прогресса, одна главная кнопка «Создать серию», серверная сборка свёрнута в «Собрать в фоне».

Доказательства: main-workflow.js:35-40, 59-67, 88-89 screens-atelier.js:4-5 screens-ai.js:18-19 create-hub.js:79; живой прогон 01.10.2026.

Как исправить:

  • Один маршрут создания в три шага: что создаём и исходники (фото, название, факты, вкладка «Описать словами») → оформление с живым предпросмотром → страница результата с «Скачать», «Редактировать», «Опубликовать».
  • Старый адрес мастера — переадресация с переносом черновика; лендинг ведёт в тот же маршрут; «Пустой холст / свой размер» — ссылка в первом шаге.
  • В макетах путь так и устроен: «Товар и факты» → «Площадки и стиль» → «Сборка» → «Результат» (раздел 8).

высокая без изменений

5. Навигация перегружена, демо-режим смешан с продуктом

В меню по-прежнему 21 элемент: кнопка «Создать материал», 4 основных раздела, 12 «Других инструментов» и 4 служебных. На каждом экране — лента «Интерактивный прототип»; остались фальшивые /login, /register, /forgot, демо-/admin, «Войти через ChatGPT», 8 концепций ИИ, Аналитика-калькулятор, Интеграции, Команда, Тарифы, Карта экранов. Добавилась ещё одна вывеска — #/automation-plan. Технических слов стало больше: упоминаний BiRefNet, ComfyUI, GX10, IndexedDB и Ollama в коде экранов — 31 против 24, а пользователь видит «QUALITYREPORT V1» и «Партия · рецепт v1».

Что изменилось к 11.09: «Серверные проекты» заменены на «Подключение бота», «Проекты» ведут в общую библиотеку.

Доказательства: workspace-navigation.js:6-8 app.js:133-136 foundation.js:4-7 screens-atelier.js:10 screens-cloud.js:21 automation-plan.js:1-2

Как исправить:

  • Короткое меню: в макетах — 6 разделов (Главная, Товары, Материалы, Сайт, Публикации, Бренд) и кнопка «Создать»; задания, справка и настройки — в шапке.
  • Режим «демо / аккаунт» по ответу /v1/me: в аккаунте нет ленты прототипа, демо-входа и демо-админки.
  • Концепции — за флаг или на публичную страницу «Скоро».
  • Словарь примерно из 12 терминов и тест «пункт меню совпадает с заголовком экрана».

высокая частично исправлено

6. Возможности редактора отстают от Canva и Polotno

Нет привязок и направляющих, выделения рамкой, боковых ручек и правки текста прямо на холсте: «правка на холсте» — это клик по тексту и поле в инспекторе. Нет токенов стиля и умного ресайза. Шрифтов 4, интерлиньяж и межбуквенный интервал не настраиваются, примитивов 5.

Что изменилось к 11.09: появились роли слоёв (заголовок, преимущество, текст, бренд) с ручным и автоматическим назначением и оформлением серии по роли; быстрые «Крупнее», «Мельче», «Вместить в блок», «Фото крупнее/меньше».

Доказательства: docs/82-85 editor-simple.js editor-series.js layout-engine.js:32 scene-fonts.js:5 scripts/check-f1-browser.cjs:83-85

Как исправить, по приоритету:

  • Привязки к краям и центрам холста, слоёв и безопасных полей площадки с порогом 6 px.
  • Боковые ручки: у текста меняется ширина с переносом, а не кегль. Правка текста на холсте по двойному щелчку.
  • Токены стиля поверх ролей: «применить стиль» меняет токены и не трогает геометрию.
  • Умная смена формата по ограничениям и пресеты площадок: «Создать версии для WB/Ozon/ЯМ».
  • Интерлиньяж, межбуквенный интервал, автоподбор кегля, кириллические шрифты под лицензией OFL; иконки, плашки, обводка, тень, кадрирование фото.

средняя без изменений

7. Две дизайн-системы, сломанная тёмная тема, мобильные дыры и слабая доступность

Показатели почти не изменились: role="dialog" и aria-modal в коде — 0, атрибутов style — 140, размеров шрифта меньше 12 px в atelier.css — 68, разных @media — 20. Ошибка .row.wrap встречается уже в 42 местах вместо 27, ряды кнопок съезжают. На 375 px вбок прокручиваются /app/projects (431 px) и /app/cloud (383 px). Модальные окна без управления фокусом, кликабельные div недоступны с клавиатуры.

Что изменилось к 11.09: на 375 px исправлен только /app/batch.

Доказательства: поиск role="dialog" и aria-modal по prototype/js — 0; css/atelier.css css/app.css; замер на 375 px; живой прогон 01.10.2026.

Как исправить:

  • Один файл токенов с полной тёмной темой и один файл компонентов; минимум 12 px; три ширины перестройки: 600, 900, 1200.
  • Переключатель темы спрятать до починки.
  • Модальные окна с role="dialog", aria-modal, переносом и возвратом фокуса; уведомления для экранного диктора (aria-live).
  • Проверка доступности axe-core в тестах и прогон всех маршрутов на 375 px с условием «нет прокрутки вбок».

Алгоритмы

высокая частично исправлено

8. Три алгоритма раскладки, одна геометрия на сервере и расхождение стилей и площадок

Алгоритмов раскладки по-прежнему три: ensureScene, cardSeries (обращается к слоям по номерам nodes[1] и nodes[4]) и серверный card-grid-v1. «10 детерминированных раскладок» сервера — это одна геометрия с 10 трёхцветными палитрами. Площадка на макет не влияет. Форма предлагает 12 стилей и 6 площадок: стили sky и lux сервер не знает, а Kaspi, Avito и Lamoda теперь ломают и браузерный путь. Мёртвый рендер не удалён.

Что изменилось к 11.09: сервер принимает все 10 стилей рецептов, поэтому сохранённый рецепт больше не падает на сборке (дефект прошлого аудита, исправлен в F0). Добавлены роли текста и проверка брифа и отчёта качества на входе.

Доказательства: card-layout.js:8-14, 39-41 tests/card-jobs.test.cjs:4 card-series.js:15, 24 scene.js:6-31 render.js:99, 175 product-contract.js:11-15

Как исправить:

  • Один декларативный движок макетов, общий для браузера и сервера: слоты с ролями (бренд, заголовок, подзаголовок, фото, факты, плашка, призыв), якоря и отступы в процентах, автоподбор кегля.
  • Профили площадок: размер, безопасные зоны, минимальный кегль, ограничения. Списки стилей и площадок в форме — из того же контракта, что на сервере.
  • Одна кнопка «Собрать серию»: где собирать, решается автоматически по /v1/materials/status. Мёртвый рендер удалить.

высокая частично исправлено

9. Демо-данные и заглушки попадают в готовые файлы — и проходят проверку

Главная кнопка лендинга ведёт в старый мастер, который отдаёт в ZIP демо-фото headphones.png (6 из 6 страниц), «Добавьте подтверждённые сведения», «Ваш новый любимый товар» и «Мой бренд». Проверка качества при этом показывает зелёное «Можно выпускать». «Мой бренд» печатается и в коротком брифе. Живой прогон: ZIP из 6 PNG, заглушка в 04.png, «0 ошибок · 4 предупреждения».

Что изменилось к 11.09: короткий бриф требует фото и пропускает пустые разделы; проверка качества блокирует скачивание при потере подтверждённого факта или неподтверждённом предложении модели.

Доказательства: create-hub.js:24, 75 quality-ui.js:35-41 product-contract.js:62-69, 83-91 screens-ai.js:3, 26 card-series.js:12, 21 scene.js:19 app.js:12

Как исправить:

  • Правила «текст-заглушка» и «демо-фото» в отчёте качества — ошибки, а не предупреждения.
  • Мастер — переадресация на /app/create; новые проекты всегда с брифом от пользователя; примеры — только подсказками в пустых полях.
  • Название бренда брать из бренд-кита или не выводить вовсе (см. проблему 23).

высокая частично исправлено

10. Проверка качества появилась, но правил площадок в ней нет

Правил площадок нет: ни источника, ни даты, ни категорий — у WB, Ozon и ЯМ одна версия правил picseller-core-2026-09-11. Контраст, охранные зоны, соотношение сторон, число изображений и целостность товара не проверяются, демо-заглушки не ловятся, переполнение текста — только предупреждение. Серверный PNG-экспорт отчёт не читает. Подробный чекер в app.js мёртв, PS.check перекрыт уже трижды. А правила меняются часто: WB обновил требования 28.08.2026, у Ozon новые ограничения с 15.08.2026 (по вторичным источникам).

Что изменилось к 11.09: появился общий отчёт качества для браузера и сервера с версией правил, кодами, уровнями и тестами (5 тестов, 40 синтетических товаров). Он блокирует скачивание без фото, при потере факта и неподтверждённом предложении модели; добавлены проверки переполнения и декодирования фото.

Доказательства: product-contract.js:9-15, 72-107 quality-ui.js:17-42 app.js:154 foundation.js:42 tests/product-contract.test.cjs docs/93-94, 97

Как исправить:

  • Правила по площадке, категории и типу фото — с ссылкой на источник и датой проверки, как версии того же отчёта качества.
  • Проверки: происхождение текста, контраст не ниже 4,5 по WCAG, минимальный кегль на превью, соотношение сторон и число изображений, целостность товара, заглушки.
  • Отчёт «проверено по правилам от ДД.ММ.ГГГГ» с кнопками «Исправить»; охранные зоны — слоем в редакторе; серверный экспорт читает отчёт ревизии.

Архитектура и данные

критическая частично исправлено

11. Две параллельные модели данных: работа живёт в браузере, сервер получает ручные снимки

Архитектура не изменилась: источник истины — IndexedDB, на сервер работа попадает только по кнопке «На сервер», а открытие серверной версии новой ревизии создаёт новую локальную копию. Таблиц brands, folders и library нет, автосохранения на сервер нет. Открыть работу с другого устройства по-прежнему нельзя.

Что изменилось к 11.09: общая библиотека /app/library показывает проекты браузера и версии на сервере с метками; повторное «Открыть» той же ревизии продолжает локальные правки; серверные партии пишут проекты сразу на сервер.

Доказательства: unified-library.js:33-49 — на строке 38: «При открытии создастся редактируемая копия в этом браузере»; screens-cloud.js:44 main-workflow.js:42 db/schema.ts

Как исправить:

  • Сервер — источник истины, браузер — офлайн-кэш с очередью отправки (она уже есть, docs/66).
  • Автосохранение через 1–2 с после паузы: новая ревизия с проверкой ожидаемой; подряд идущие правки склеиваются в одну автоверсию; именованные версии — метки серверных ревизий.
  • Таблицы brands, folders, library_assets; при первом входе — импорт данных из IndexedDB. Фото — отдельными файлами по хешу sha256.
  • Убрать кнопку «На сервер», оставить индикатор «Сохранено / ждёт сети».

высокая стало хуже

12. Клиент держится на подмене функций и порядке скриптов — и подмен стало больше

F1 и F2 сделаны новыми обёртками поверх старых экранов. main-workflow.js перерегистрирует /app/create (третий раз) и /app/editor/:id (пятый раз) с заменой HTML строкой; quality-ui.js в третий раз перекрывает PS.check и оборачивает действия экспорта; документы регистрируются изнутри модулей серверных карточек. PS.screen по-прежнему молча заменяет прежнюю регистрацию. Любое переименование класса молча ломает функции, а редактор нельзя переиспользовать для витрины.

Что изменилось к 11.09: регистраций маршрутов при запуске — 91 на 66 путей (было 82 на 59), повторно — 21 путь; обёрток экрана через подмену функции — 3 (было 1), замен HTML строкой — 4 (было 2); тегов script — 80 (было 65); строк длиннее 500 символов — 338 (было 293), самая длинная — 9149 символов; повторно присваиваемых действий — 12 (было 6).

Доказательства: app.js:78 main-workflow.js:58-67, 105-110 quality-ui.js:17-45 card-server-jobs.js; подсчёт по prototype/js и замер при запуске.

Как исправить:

  • Отдельным механическим коммитом — Prettier и ESLint; контроль — те же 421 тест.
  • ES-модули со сборкой esbuild (он уже в devDependencies) и реестр маршрутов: повторная регистрация бросает ошибку, тест это проверяет.
  • Удалить перекрытые экраны и обёртки; вместо них — точки расширения редактора и раскладки со слотами без замены строк.

высокая без изменений

13. Редактор тормозит на фото и расходует память

Механизм отрисовки и истории не менялся: на каждое движение и клик сцена целиком вставляется через innerHTML, история — 40 полных снимков проекта. Замер на версии 08.09: при 6 слайдах и фото 5,05 МБ кадр перетаскивания — около 14,5 мс, клик — около 116 мс, разметка редактора — 35,4 МБ; история — около 80 МБ при фото 2 МБ. Первая загрузка выросла: 79 скриптов и 2 046 893 байта JS (было 64 и 1 908 828), по-прежнему с запретом кэширования.

Что изменилось к 11.09: только рост первой загрузки.

Доказательства: screens-editor.js:23-25, 28 server/local.mjs:83

Как исправить:

  • Пошаговая отрисовка SVG: при перетаскивании меняется только transform, рамка выделения — отдельным слоем.
  • Фото хранить в памяти один раз — в общем пуле по хешу sha256 — и подставлять ссылкой; полная перерисовка — только при смене экрана.
  • История из изменений, а не копий: сдвиги стрелками склеиваются, выделение восстанавливается, лимит считается в байтах.
  • Сборка с хешами в именах и долгим кэшем; тяжёлые библиотеки — по требованию; шрифты в WOFF2.

средняя частично исправлено

14. ИИ-очередь без честного распределения и потоковой выдачи

Нет честного распределения между аккаунтами, потоковой выдачи и SSE. Синхронные запросы при занятой модели сразу получают ai_busy (429), задания идут по порядку поступления, клиенты опрашивают сервер таймерами.

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

Доказательства: server/ai-jobs.mjs:7, 39, 75 server/local-ai.mjs:97, 109 docs/69

Как исправить:

  • Одна модель «задание + шаги» с классами «интерактивное» (цель — до 15 с) и «фоновое», выбор по кругу между пространствами.
  • Синхронные запросы заменить постановкой в очередь и ожиданием через поток событий /v1/jobs/events.
  • Один автоповтор с исправляющей подсказкой; профиль моделей по операциям; прогрев модели при открытии «Создать».

Скрипты, деплой и процесс

критическая частично исправлено

15. Публичная версия есть, но без /healthz, мониторинга, копий вне диска и автоотката

Маршрута /healthz, метрик, мониторинга и автоотката нет. Резервные копии ручные и лежат на том же диске GX10, расписания нет. Playwright ставится мимо package.json. Compose в репозитории указывает preflight-14, а работает 15. Выкладка — разовые скрипты с переносом образа tar-архивом вместо gx10-deploy.sh. Код выпуска не закоммичен. Маршрут публичного трафика изменили вне репозитория: DNS отдаёт 217.199.253.218, и 01.10 первая серия HTTPS-запросов зависла.

Что изменилось к 11.09: публичная версия есть — многоэтапный ARM64 Dockerfile, переменные PICSELLER_HOST и PICSELLER_TRUST_PROXY с жёсткими условиями, сервис Coolify и домен https://picseller.24oros.ru с входом по приглашению; HEALTHCHECK контейнера, перезапуск unless-stopped, файловая система только для чтения, ручные копии перед каждым выпуском.

Доказательства: Dockerfile:1-36 server/local.mjs:25-28 deploy/docker-compose.coolify.yml:3-35 deploy/gx10-coolify-target.json VERIFICATION.md:15, 34-41 scripts/container-health.cjs:6-8; запросы 01.10.2026: «/» — 200, «/v1/projects» — 401, «/healthz» — 404.

Как исправить:

  • /healthz с версией сборки и внешний монитор доступности.
  • Копии по расписанию вне сервера: Litestream для SQLite и restic для фото, ежемесячная проверка восстановления.
  • Один параметризуемый скрипт выкладки: сборка, бэкап, миграция, короткая проверка (вход, сборка, экспорт), автооткат на прежний образ.
  • Фактический маршрут DNS → прокси → GX10 записать в RUNBOOK; решить с владельцем, остаётся ли он или приложение переезжает на sagr.

средняя стало хуже

16. Штатная генерация миграций сломает запуск сервера — уже 17 миграций вне журнала

Вне журнала Drizzle теперь 17 миграций (0007–0023) вместо одной. Проба drizzle-kit generate на копии 01.10.2026 создала файл с 18 повторными CREATE TABLE (export_jobs, все bot_*, card_*, batch_export_*, project_contracts): при старте мигратор упал бы на «table already exists». docs/11 по-прежнему советует эту команду, а мигратор применяет все .sql по алфавиту. Отката нет.

Доказательства: drizzle/meta/_journal.json (записи 0000–0006); 24 файла drizzle/*.sql; docs/11-server-storage.md:30 server/local-adapter.mjs:12-17

Как исправить:

  • Выбрать один источник истины: либо пересоздать снимки через drizzle-kit generate --custom и проверять в CI, что generate не даёт изменений; либо чистые SQL-миграции с контрольными суммами без schema.ts.
  • Резервная копия перед миграцией при старте контейнера.

средняя стало хуже

17. Силы уходят в инфраструктуру и журналы: пилота и сквозных проверок нет

За 3 дня добавлено 30 документов (docs 68 → 98, 875 КБ → 1,30 МБ) и 56 скриптов (42 → 98, check-* 22 → 73). deploy/ вырос с 5 до 1146 файлов (38,5 МБ), .codex/evidence — 69 файлов, 15 МБ. Ни одного коммита. Пилот с пользователями не проведён: продуктовая приёмка F1 заблокирована. CI и сквозных проверок в npm test нет.

Что изменилось к 11.09: всё перечисленное выросло; из хорошего — появились короткие документы состояния (PROJECT_STATE, NEXT_PHASE, DECISIONS, VERIFICATION), README обновлён 11.09. Публичная раздача внутренних документов выделена в проблему 21.

Доказательства: .codex/project-state.json (f1-five-user-study — BLOCKED); git status -uall — 1486 файлов вне коммитов; docs/91 противоречит F3.

Как исправить:

  • Закоммитить работу по фазам и заморозить новую инфраструктуру и журналы.
  • Пилот: 5 продавцов по 2 товара; метрики — время до скачанного файла, число ручных правок, доля тех, кто дошёл до конца сам.
  • @playwright/test и 5–10 сценариев основного пути в CI.

Надёжность и безопасность

высокая без изменений

18. Фото-конвейер зависает, отсекает фото с телефона и роняет весь сервер

Код фото-конвейера не менялся. Если ComfyUI потерял задание, оно навсегда занимает единственный слот всего сервера. Лимит 8 МБ на нормализованный PNG отсекает обычный 12-Мп снимок размером 2,6 МБ. Недоступность ComfyUI при старте роняет сервер. Обрабатывается 1 фото на сервер, отмена не снимает задание в ComfyUI. Партии явно отказываются от обработки фото, а в публичном контейнере фото-провайдер не настроен.

Доказательства: photo-service.mjs и photo-jobs.mjs не изменены; card-batches.mjs:65 deploy/docker-compose.coolify.yml — нет PICSELLER_COMFY_URL; scripts/photo-pixels.py:20, 58-61

Как исправить:

  • Сверять очередь и историю ComfyUI; если задание пропало 3 проверки подряд — отправить заново. Предельный срок этапа — 10 минут.
  • В модель подавать уменьшенную копию 1024–2048 px, маску масштабировать на полное разрешение.
  • Фото-сервис стартует в состоянии «недоступен», не роняя сервер; до 2–4 заданий одновременно и пакетный запрос; понятные коды ошибок.

высокая частично исправлено

19. Вход не годится для реальных пользователей

OAuth, почты и самостоятельной регистрации нет: по-прежнему код от администратора на 15 минут и сессия на 8 часов. Публичный адрес без кода показывает только неоформленное «Войдите в PicSeller» — лендинг, тарифы и справка посетителю не видны. На /v1 лимитов частоты нет. CSP, HSTS и Referrer-Policy — только на /auth. Веб-админки с ролями нет.

Что изменилось к 11.09: лимит попыток входа больше не общий — он считается по сетевому источнику, за доверенным прокси — по ближайшему адресу (дефект прошлого аудита, закрыт с тестом).

Доказательства: server/login-rate-limit.mjs:12-31 server/local.mjs:37, 46-48, 55 deploy/docker-compose.coolify.yml:16 tests/session-auth.test.cjs:12 server/session-auth.mjs:15, 38; заголовки публичной страницы 01.10.

Как исправить:

  • Вход через Яндекс ID (OAuth 2.0) и запасная ссылка на почту; сессии на 30 дней со скользящим продлением; приглашение — как допуск к бете.
  • Публичный лендинг без входа; ограничение частоты по IP и аккаунту; CSP, Referrer-Policy и HSTS для всего приложения.
  • Веб-панель администратора с ролями вместо демо-/admin.

средняя частично исправлено

20. Данные растут без предела: нет очистки фото, проектов, корзины и ревизий

Очистки фото, проектов, корзины и ревизий нет. ZIP-архивы по-прежнему лежат BLOB-ами в SQLite — теперь в двух таблицах. Рецептов — до 100 без удаления. Очистка ComfyUI выключена, экрана «Что занимает место» нет.

Что изменилось к 11.09: партии можно архивировать, отменённые и архивные не занимают лимит; PNG-каталоги удаляются с освобождением места, одинаковый состав переиспользует один ZIP; история выгрузок ограничена 100 запросами.

Доказательства: card-batches.mjs:85, 88 tests/batch-export-limits.test.cjs:80, 96 drizzle/0007:14, 0020:2 server/card-recipes.mjs:26-28; поиск «DELETE FROM assets|projects|project_revisions» по server/ — 0.

Как исправить:

  • Ежедневная очистка: корзина старше 30 дней, фото без ссылок старше 7 дней, ревизии по правилу «последние 50 + именованные + одна в день за 90 дней».
  • Экран «Что занимает место»; архивы — файлами в хранилище медиа со сроком жизни 7 дней.
  • Для ComfyUI — свои подпапки и очистка по возрасту по расписанию.

Новые проблемы версии 11.09

Одиннадцать проблем, которых не было в версии 08.09: 3 высокие, 6 средних, 2 низкие. Первыми идут две срочные.

высокая новая безопасность срочно

21. Внутренние документы с деталями инфраструктуры открыты на боевом домене

Сборка копирует все docs/*.md в prototype/docs, а контейнер отдаёт папку prototype/ без проверки сессии. На https://picseller.24oros.ru/docs/ без входа открываются 99 документов: в 26 — ssh, туннели, Tailscale, IP или Coolify, в 5 — пути домашнего каталога на сервере. Например, docs/89-container-image.md (47 КБ) содержит идентификаторы проекта и сервиса Coolify и порядок переключения.

Доказательства: scripts/build.cjs:5-8 Dockerfile:8, 13, 26 server/local.mjs:79-84; запросы 01.10.2026: /docs/89-container-image.md → 200 (47 434 байта), /docs/46-gx10-staging.md → 200, /docs/80-gx10-bot-validation.md → 200.

Как исправить:

  • Отгружать в образ только пользовательскую справку по белому списку; эксплуатационные документы — в RUNBOOK вне образа.
  • Тест сборки: в build/docs нет имён пользователей сервера, ssh, Tailscale, внутренних IP и Coolify.

высокая новая процесс срочно

22. Работа F0–F3 и сборка выпуска не зафиксированы в git

Последний коммит — по-прежнему df16a68 от 08.09.2026. Вне коммитов 1486 файлов: 71 изменённый и 1415 новых, из них 1105 — копии исходников в deploy/container-03…11. Боевой container-preflight-15 собран из рабочего дерева, и связь кода с выпуском держится только на SHA-256 файлов в образе. Папки research/ (аудит 10.09) и validation/ (148 отчётов, на которые ссылаются 37 документов) — в .gitignore. Ревью, поиск регрессии по коммитам и откат невозможны, работу легко потерять. План прошлого аудита начинался с «зафиксировать текущие изменения» — это не сделано.

Доказательства: git status --porcelain -uall в основной папке; других веток, тегов и stash с этой работой нет; .gitignore research/audit-2026-09-10/overview-and-plan.md:119

Как исправить:

  • Коммиты по фазам F0, F1, F2, F3 без deploy/container-*, .codex/evidence и артефактов; тег выпуска preflight-15.
  • SHA коммита — в метке образа и в ответе /v1/me; компактный отчёт о проверках — в репозитории, а не в игнорируемой папке.

высокая новая алгоритм

23. Проверка качества показывает «Можно выпускать» для демо-серии из мастера

Мастер /app/ai/card-generator, куда ведут три призыва лендинга, создаёт проект без брифа товара. Контракт считает его факты «старыми», а ошибки по старым фактам становятся предупреждениями. В итоге серия с демо-фото на 6 из 6 страниц, текстами-заглушками и «Мой бренд» получает зелёное «Можно выпускать», и кнопка «Скачать» активна. Новая проверка даёт ложное чувство безопасности.

Доказательства: screens-ai.js:3, 26 product-contract.js:62-69, 83-95 quality-ui.js:15, 35; живой прогон 01.10.2026.

Как исправить:

  • Правила «текст-заглушка» и «демо-фото» с уровнем ошибки.
  • Мастер — переадресация на /app/create с переносом черновика; новые проекты всегда с брифом от пользователя; бренд — из бренд-кита или пусто.

средняя новая регрессия

24. Kaspi, Avito и Lamoda в форме «Создать» ломают создание серии

Форма предлагает 6 площадок, проверка брифа их пропускает («Обязательные поля заполнены»), но контракт товара знает только WB, Ozon и ЯМ, и «Создать серию» падает с «Выберите поддерживаемую площадку.». До F2 серия для этих площадок создавалась.

Доказательства: create-hub.js:25, 81 product-contract.js:11-15; проверка в браузере: kaspi, avito, lamoda — серия не создана.

Как исправить:

  • Список площадок в форме брать из контракта товара либо добавить правила для остальных площадок.
  • Тест: каждая площадка из списка создаёт серию.

средняя новая деплой

25. Разрастание deploy/ и разовые скрипты выкладки

В git в deploy/ 5 файлов, в рабочем дереве — 1146 файлов и 38,5 МБ: 9 папок container-03…11 (четыре из них — почти полные копии server, prototype и scripts), 18 .sh, 10 .py с разовыми скриптами на каждый выпуск, 4 CHANGELOG. В каждом выпуске зашиты идентификаторы сервиса, теги и пути. Compose указывает preflight-14 при работающем 15. Штатный gx10-deploy.sh не используется: образ собирается на Mac и переносится tar-архивом.

Доказательства: deploy/ deploy/docker-compose.coolify.yml:4 deploy/update-f3-preflight-15-gx10.py:13-21 docs/80:23 VERIFICATION.md:39

Как исправить:

  • Один параметризуемый скрипт: сборка на GX10 или через registry, бэкап, миграция, проверка, откат на прежний образ.
  • Compose — из одного шаблона, папки container-* удалить из дерева.

средняя новая процесс

26. Журнальная документация растёт и расходится с кодом

За 08–11.09 добавлено 30 документов (98 файлов, 1,30 МБ), из них три плана по 47–73 КБ. Инструкция docs/91 утверждает, что архивирования партий нет и работает preflight-07, хотя F3 сделал архив, а работает preflight-15. README пишет «один из 10 стилей», а форма предлагает 12. Карта экранов показывает «32 точки входа» без новых экранов. docs/11 советует drizzle-kit generate, который ломает миграции. 148 ссылок ведут на отчёты в игнорируемой папке validation/.

Доказательства: docs/91 README.md:17 screens-help.js:46 docs/11-server-storage.md:30; 148 путей validation/ в 37 документах.

Как исправить:

  • Оставить README, ROADMAP-таблицу «возможность — статус — доказательство», ARCHITECTURE, RUNBOOK вне образа, HELP и CHANGELOG; журналы этапов свернуть.
  • Проверка ссылок и устаревших утверждений в CI.

средняя новая процесс

27. Фазы F0–F3 закрыты за один вечер минимальными срезами

Аудит Codex закончен 10.09 в 22:42. Файлы F0 датированы 23:14, F1 — 23:49–00:00, F2 — 00:19–00:24, F3 — 00:41–00:49, выкладка — 01:01–01:05: около 2,5 часа при оценке плана 21–35 рабочих дней. F1 получился индикатором шагов и библиотекой поверх старых экранов, F2 — контрактом без правил площадок. Приёмка F1 на 5 пользователях заблокирована, но документы состояния называют фазы «технически принятыми» и предлагают переходить к F4 — это создаёт ложное ощущение завершённости.

Доказательства: даты изменения файлов снимка; .codex/project-state.json research/audit-2026-09-10/overview-and-plan.md:117-126

Как исправить:

  • В документах состояния различать «срез сделан», «технически принят» и «фаза принята».
  • Не начинать F4, пока не проведён пилот F1 и не убраны дубли входов.

средняя новая продукт

28. Публичная версия без фото-провайдера и с выключенными ИИ-командами, хотя интерфейс их показывает

В compose нет PICSELLER_COMFY_URL, поэтому серверное удаление фона и заказ «фон → карточки» публично недоступны. Команды серии выключены, загрузка модели запрещена: ИИ работает, только если qwen2.5:32b уже загружена. Бот не подключён. Интерфейс эти функции показывает.

Доказательства: deploy/docker-compose.coolify.yml:12-22 scripts/serve.cjs:15 VERIFICATION.md:15 server/api.mjs:132

Как исправить:

  • Подключить провайдеры через общий шлюз допуска GX10.
  • Либо прятать недоступные функции по /v1/materials/status и честно писать «недоступно на этом сервере».

средняя новая продукт

29. Telegram-бот: большой объём кода без живого канала

8 серверных модулей (около 34 КБ), отдельный процесс с блокировкой, 2 экрана, 41 тест и 9 документов — но токена нет, служба не установлена, публично привязка отвечает 503. Бот умеет только текстовую /presentation; фото, карточки и отправка файлов не сделаны. До пилота основного пути это инфраструктура впрок.

Доказательства: server/bot-*.mjs server/telegram-transport.mjs docs/72-80 bot-orders.mjs:24, 34 bot-inbox.mjs:19-23 server/api.mjs:132

Как исправить:

  • Заморозить расширение бота.
  • Один ограниченный живой пилот «фото + факты → карточки → ссылка», и только потом сценарии F4.

низкая новая надёжность

30. Серверный PNG-экспорт не проверяет отчёт качества, хотя документация обещает

Проверка есть в браузерном скачивании, в серверном JSON-экспорте и на входе серверной сборки, но export-service.mjs и batch-export-*.mjs отчёт не читают. Проект, сохранённый на сервер с потерянным фактом, уйдёт в серверный PNG без блокировки, хотя README и docs/97 обещают проверку «перед браузерным и серверным экспортом».

Доказательства: поиск ProductContract и qualityReport по export-service.mjs, batch-export-requests.mjs, batch-export-artifacts.mjs — 0 совпадений; server/project-export.mjs:8-9 README.md:19 docs/97:9-11

Как исправить:

  • Перед постановкой экспорта читать отчёт ревизии из project_contracts и отклонять при ошибках.

низкая новая надёжность

31. Публичную доступность никто не наблюдает

01.10.2026 около 20:47 по Москве HTTPS-запросы к picseller.24oros.ru и picseller-lab.24oros.ru зависали на TLS 10–45 с, примерно через 15 минут — снова 200 за 1,1 с. DNS *.24oros.ru отдаёт 217.199.253.218, а не адрес из docs/87, то есть маршрут трафика изменили вне репозитория. /healthz нет, внешнего мониторинга нет — такие сбои никто не увидит.

Доказательства: запросы curl и dig 01.10.2026; docs/87-public-origin-preflight.md:3

Как исправить:

  • Внешний монитор доступности и /healthz с версией сборки (см. проблему 15).
  • Фактический маршрут DNS → прокси → GX10 записать в RUNBOOK.

Дополнительные цифры версии 11.09

Ещё 16 цифр, которых нет в карточках выше
ОбластьЧто измереноЗначение
КодОбъём клиента и сервераprototype/js — 75 файлов, 978 565 байт (было 60 и 840 500); server — 44 модуля, 259 398 байт (было 28 и 162 626)
КодТаблиц в схеме базы27; таблиц products, brands, folders и library нет
КодСтили и площадкиФорма — 12 стилей и 6 площадок; сервер — 10 стилей и 3 площадки; контракт товара — 3 площадки
КодРаскладок карточки на сервере1 геометрия card-grid-v1 × 10 палитр по 3 цвета
КаталогЛимиты серверной партии1–100 строк с уникальными артикулами, до 100 активных партий, отложенный запуск до 30 дней, ZIP до 30 МБ, история — 100 выгрузок
ИИПлитки ИИ-инструментов12, из них 8 «Концепция»; у всех 12 цена в кредитах
ИИПубличная конфигурацияКоманды серии выключены, загрузка модели запрещена, фото-провайдер и бот не заданы
Сборкаnpm run build в изолированной копииПроходит: build/ — 9,2 МБ, dist/ — 9,5 МБ, 99 документов в build/docs
ПроцессПоследние измененияКод продукта — 11.09.2026 01:05; 25.09 — только пересборка; 26.09 — отдельный макет интерфейса F4
ПроцессДлительность F0–F3≈2 ч 23 мин (10.09 22:42 → 11.09 01:05) при плановой оценке 21–35 рабочих дней
СправкаСтатей в центре помощи41
Фото (08.09, код не менялся)Время удаления фона BiRefNet на GX102,1–3,7 с (docs/36:42, docs/37:59)
Фото (08.09)Сквозное времяЧерез API — 20 с для 1254×1254; через интерфейс — 6 минут из-за ожидания в общей очереди ComfyUI
Фото (08.09)Доля полупрозрачных пикселей в результате34,6% (543 882 из 1 572 516): мягкая маска, риск ореола на цветном фоне
Фото (08.09)Товаров с проверенным качеством маски1 (учебные наушники)
ИИ (08.09)Структура презентации, Qwen 2.5 32B, 30 брифов120 из 120 фактов верно, медиана 1,35 с, 95-й процентиль 1,62 с; холодная загрузка модели — 7,1 с из 9,3 с

Что убрать и что упростить

Убрать или спрятать (18)

  • Закрыть /docs на боевом домене: в образ — только пользовательская справка по белому списку, эксплуатационные документы — в RUNBOOK вне образа.
  • Удалить из рабочего дерева deploy/container-03…11 (1105 копий исходников) и разовые скрипты update-f0…f3; оставить один параметризуемый скрипт и один шаблон compose.
  • Удалить перекрытые экраны и обёртки: в версии 08.09 это 19 экранов (около 56 КБ), к 11.09 повторно регистрируется уже 21 путь. Удалить мёртвый рендер renderCard/renderSlide.
  • Перенести правила площадок из мёртвого чекера (app.js:154) в отчёт качества и убрать тройное перекрытие PS.check.
  • Убрать из меню 8 ИИ-концепций с ценами, «Аналитику»-калькулятор, «Интеграции», «Команду», «Тарифы», «Карту экранов», #/automation-plan и внутреннюю документацию — за флаг или на страницу «Скоро».
  • Спрятать «Опубликовать», плитки «Публикация» и «Социальные сети», пока нет настоящей интеграции.
  • Прятать функции, недоступные на этом сервере, — удаление фона, команды серии, бот, PNG-каталог — по /v1/materials/status, с честной надписью.
  • В режиме аккаунта скрыть ленту «Интерактивный прототип», плашку «Демо», фальшивые /login, /register, /forgot и кнопку «Войти через ChatGPT».
  • Удалить второй вариант хостинга: server/worker.mjs и .openai/hosting.json.
  • Убрать ложные обещания: «600+ шрифтов», «400 000 элементов», «40+ правил», «публикация по API» в лендинге и подвале, таблицу COMPETITORS, статью про Render API, «умный ресайз», HEIC до 25 МБ, «три модели» и ластик, вымышленные рейтинги шаблонов.
  • Заморозить расширение Telegram-бота до пилота основного пути.
  • Apple Vision оставить только для разработки; в продукте — один серверный движок удаления фона.
  • Сложную цепочку аудита очистки ComfyUI заменить своими подпапками и очисткой по возрасту.
  • Убрать prototype/docs из git; восемь юридических заглушек свести в одну страницу «О сервисе».
  • Спрятать переключатель тёмной темы до её починки.
  • 73 разовых скрипта check-* заменить набором Playwright в CI и одной проверкой после выкладки; не хранить доказательства в игнорируемых .codex/evidence и validation/.
  • После перехода на серверный источник истины убрать кнопку «На сервер» и старые экраны /app/projects и /app/cloud.
  • Убрать технические слова из интерфейса: BiRefNet, ComfyUI, GX10, Ollama, IndexedDB, «cover», «QUALITYREPORT V1», «picseller-core-2026-09-11», «Партия · рецепт v1», «Старый источник факта».

Упростить (12)

  • Один путь создания вместо 8: старый мастер — переадресация на /app/create с переносом черновика, лендинг ведёт туда же.
  • Одна кнопка «Собрать серию» и один движок раскладки со слотами, ролями и профилями площадок вместо ensureScene, cardSeries и card-grid-v1; списки стилей и площадок — из одного контракта.
  • Короткое меню вместо 21 пункта (в макетах — 6 разделов); задания, справка и настройки — в шапке.
  • Общая библиотека уже показывает браузер и сервер вместе; следующий шаг — сервер как источник истины и одна история: ревизии с метками вместо отмены, локальных версий, серверных ревизий и «Истории ИИ».
  • Шапка редактора из пяти действий вместо 9 + 4 кнопок; мини-панель над выделением вместо режимов «Простой/Точный».
  • Один реестр схемы сцены и шрифтов, общий для браузера и сервера, с номером версии схемы — вместо 10 копий списка шрифтов.
  • Одна модель «задание + шаги» с потоком событий вместо опросов таймерами; синхронные ИИ-запросы — через очередь с ожиданием.
  • Детерминированный код до модели: словарь команд оформления, площадки, стиля и категории; нарезка брифа на фрагменты с номерами.
  • Фото-исполнитель на трёх статусах с безопасным повтором и кэшем по хешу входа вместо девяти этапов.
  • Один набор дизайн-токенов, минимум 12 px, три ширины перестройки, без атрибутов style; утилиту .row.wrap починить сразу в 42 местах.
  • Пресеты экспорта «Для WB / Ozon / ЯМ / Презентация / Печать» вместо списка из 7 форматов; имена файлов — с артикулом, а не 01.png.
  • Один способ выкладки вместо разовых скриптов и документация из README, ROADMAP, ARCHITECTURE, RUNBOOK, HELP и CHANGELOG вместо 98 журналов; в документах состояния различать «срез сделан» и «фаза принята».

4Сравнение с аналогами

Мы разобрали 41 продукт в трёх рыночных сегментах и 24 позиции открытого ПО в 14 карточках, которые можно взять в основу. Вместе это 55 карточек аналогов в 4 сегментах. Данные собраны по публичным страницам без входа в кабинеты и без платных генераций.

14
российских сервисов карточек и встроенных ИИ площадок
13
мировых ИИ-инструментов товарного визуала
14
конструкторов сайтов полного цикла
24
позиции open-source: брать, брать идею или нет
0
сервисов для селлеров, которые делают сайт-витрину
0
генераторов визуала в РФ с подтверждённой публикацией в кабинет

Актуальность: российские сервисы — 30.09.2026; мировые инструменты и конструкторы сайтов — 30.09–01.10.2026; открытые проекты — GitHub API и реестр npm на 30.09.2026. Цены в долларах у Photoroom, Claid, Canva, Adobe и Replit, часть цен Fabula и данные о встроенном ИИ площадок взяты из сторонних обзоров и помечены «вторично». «Заявлено» — слова самого сервиса, которые мы не проверяли. Можно ли оплатить западные сервисы из России, не проверялось.

Вывод по рынку
  • Площадки сами бесплатно раздают базовый ИИ. Ozon генерирует фон и улучшает фото (около 40 изображений в день на функцию) и пишет аннотации (OzonGenerator, до 200 в месяц). WB даёт 20 описаний в месяц и базовый фоторедактор, а «Фотостудия», «Видеообложки» и «Анализ внимания» — по подписке «Джем» от 22 990 ₽ за 30 дней. Яндекс Маркет пишет тексты и характеристики через YandexGPT (по обзору selsup.ru, вторично).
  • Поэтому удаление фона и SEO-описание перестали быть преимуществом: отличаться нужно серией в едином стиле, работой на несколько площадок и точностью фактов.
  • Главный сценарий у ИИ-сервисов сжался до 2–4 шагов: «фото и бриф → серия из 5 слайдов → правка → скачать» (Fabula, ItemCard, SUPA Magic, MPCard).
  • У визуальных генераторов в РФ нет связки «генерация + проверка по правилам с датой + публикация с откатом». Публикацию в кабинет публично не подтвердил ни один, а безопасную схему «чтение → подтверждение → журнал → откат» из найденных сервисов использует только агент JAFO, который не делает визуал.
  • Никто из сервисов для селлеров не делает сайт-витрину из тех же данных; ближе всех Flyvi с публикацией по ссылке. Сайт бренда «в пару кликов» есть у Canva и Google Pomelli, но они не знают правил маркетплейсов, а Pomelli в России недоступен.
  • Конструкторы сайтов делятся на «генерацию кода» (Lovable, Bolt, v0, Replit, Base44, «Поехали!») с «петлёй отладки» и непредсказуемыми кредитами и на «генерацию в родные блоки» (Wix Harmony, Framer, Webflow, Tilda, Craftum, Durable), где правка одной секции не ломает остальные. Нам подходит второе: сайт — набор типизированных секций, модель на своём сервере возвращает данные по схеме, как уже работают команды серий.
  • Главный источник негатива в отзывах — биллинг (SUPA, Flyvi, Fabula), поэтому честная цена операции — тоже преимущество.

Главная матрица возможностей

Семь самых близких аналогов против текущего PicSeller и целевой версии 2.0. Колонка «PicSeller сейчас» — по актуальной версии: рабочее дерево от 11.09.2026, развёрнутое как container-preflight-15 на picseller.24oros.ru (вход по приглашению), а не только коммит df16a68. «н/д» — нет данных в открытых источниках, «н/п» — неприменимо.

ВозможностьPicSeller сейчасSUPAFabula AIFlyviCanvaPhotoroomLovableTildaPicSeller 2.0 (цель)
Серия карточек из фото и брифа за один запускчастично: 4 шага «Фото → Факты → Стиль → Серия», по шаблону, без генерациида: SUPA Magic, 50–90 сда: 5 слайдов, ~60 с (заявлено)частично: генератор по полямчастично: Canva AI 2.0, исследовательская версиянет: одиночные кадрынетнетцель: 3 шага, план серии до сборки
Результат ИИ — редактируемые слоида: сцена со слоями и ролями текстадада: слоидадачастично: шаблонычастично: код и визуальная правкада: блокицель: слои, правка на холсте и словами
Защита от выдуманных фактовда: ProductBrief с происхождением фактов; неподтверждённое блокирует экспортне заявленонет: ИИ подбирает преимущества самне заявленоне заявленон/пн/пне заявленоцель: каждая строка — со ссылкой на факт
Удаление фоначастично: BiRefNet по одному фото; публично не подключено, в партии нетдадада (Pro)платно (Pro)да: пакет до 250нетнетцель: при загрузке и пакетом
Генерация фона и сцены товаранет: концепциячастично: ИИ-кредитыда: фотосессии и фоныда: ИИ-мастерскаяплатнода: фоны, тени, светнетчастично: картинки ограниченыцель: сцены, товар без изменений
Правка словамичастично: 1 объект; команды серии в публичной версии выключеныдачастично: промпт на слайдчастичнода: Canva AI 2.0да: Edit with AIда: чат и выбор элементовчастично: вайб-блокцель: «укажи и скажи», «было/станет»
Презентации PPTX/PDFда: PPTX с текстом, PDF растровыйчастично: PDFнетдаданетнетнетцель: PDF и PowerPoint для оптовиков
Пакет по каталогуда: серверная партия до 100 артикулов — пауза, архив, отложенный запуск, PNG-ZIP с SHA-256; плюс CSV/Excel в браузеречастично: Render API по шаблонузаявлено: до 10 000, 1С и МойСкладнетда: Bulk Create до 300 строкда: до 250 фото с ИИнетда: каталог CSV/YMLцель: партии, рецепты и сценарии по расписанию
Бренд-кит на все материалычастично: 4 цвета, логотип, 4 шрифтада: командные шрифты (Премиум)н/дда: брендбук (Pro)да: Brand Kit и блокировкида: и свои моделинетчастично: стили сайтацель: роли цветов, тон, стиль по ссылке
Умная смена форматанет: растяжение по осямчастично: шаблоны размеровн/дчастично: «изменить размер»платно: Magic Switchчастично: ресайз и расширение в APIн/пн/пцель: перекладка по ролям
Проверка требований площадкичастично: единый QualityReport, без правил площадок с датой и источникомнетчастично: охранные зонынетнетнет: Listing Score «скоро»н/пн/пцель: правила с датой, «Исправить»
Публикация в кабинет WB/Ozonнет: заглушка (фаза F7 не начата)нетзаявлено, не подтвержденонетнетчастично: eBay, Mercari, Shopify; не РФнетчастично: YML для Маркетацель: «было/станет», журнал, откат
Telegram-бот: заказ из чатачастично: код и 41 тест, живой канал не подключён; умеет только текстовую презентациюн/дн/дн/дн/дн/дн/дн/дцель: второй вход — фото в чат, файлы и заявки в чат
Сайт или витрина бренданет — ни в коде, ни в плане F0–F7нетнетчастично: ссылка и web-storiesда: Canva Websitesнетда: с нуля по промптуда: страница по промпту и блокицель: сайт из каталога
Свой домен и SSL автоматическинет для сайтов клиентов; сам сервис — на picseller.24oros.ru с HTTPSнетнетнетда: до 5 доменовнетда: авто-DNS и SSL (платно)да: домен в подарокцель: <бренд>.24oros.ru или свой домен
Версии и откатчастично: до 40 версий в браузере, на сервер — по кнопкен/дн/дн/д: жалобы на потерю правокдан/дда: автоверсии, закладки, diffн/дцель: версия на каждое изменение
Команда и ролинет: макетда: 5 участниковн/дн/ддан/дда: Businessн/дцель: 4 роли, есть контент-редактор
Открытый APIнет: статья справки без кодада: Render API v2заявлено (HTTP 402)нетда: Autofill APIда: песочница с водяным знакомнетчастично: экспорт кода (Business)цель: в макете 2.0 не предусмотрен
Мобильный сценарийчастично: нижнее меню, 2 экрана шире телефонан/дда: приложение в RuStoreн/дда: приложенияда: iOS и Androidн/дн/дцель: нижняя панель, 390 px
Приватный ИИ на своём сервереда: Ollama и ComfyUI на GX10; публично — с ограниченияминетнетнетнетнетнетнетцель: да
Цена входаоплаты нет, вход по приглашению0 / 415 ₽/месот 490 ₽/нед (вторично)0 / 599 ₽/месFree / Pro ~$15 (вторично)Pro ~$12.99 (вторично)Free / $250 / 500–1250 ₽цель: 0 / 990 / 2 490 ₽ (пример)
Российский рынок и рублида: интерфейс; оплаты нетдададаоплата из РФ не проверяласьнетоплата из РФ не проверяласьдацель: да, рубли, Яндекс ID

Оговорки к колонке «сейчас»: старый мастер с демо-товаром «Наушники SOFT SOUND» по-прежнему получает в QualityReport «Можно выпускать»; Kaspi, Avito и Lamoda из списка площадок ломают создание серии; в публичной версии выключены команды серии и холодная загрузка модели, обработка фото не подключена. Путей создать карточку стало 8 (было 7).

Российские сервисы карточек

Шаблонные конструкторы, новые ИИ-сервисы и встроенный ИИ самих площадок. Если тип не указан — коммерческий сервис. Срез 30.09.2026. Рейтинги на vc.ru с WILDA, 24AI и «Сахарком» похожи на SEO-материалы; у WILDA не нашлось официального сайта, поэтому в обзор она не вошла.

ПродуктТип и ценаГлавный сценарийСильные стороныСлабые стороныЧто берём
SUPA + SUPA Magic 0 ₽ / Премиум 415 ₽/мес, −40% при годовой (01.10.2026; в срезе 05.09 было 990 ₽ — перепроверить) Фраза + до 8 фото → редактируемая серия за 50–90 с (заявлено) → правка руками или словами → JPG/PNG/PDF/MP4 ИИ отдаёт дизайн со слоями, а не картинку; серии за один запрос; документированный Render API Нет выгрузки в кабинеты и проверки правил; в отзывах — подвисания, потеря правок, трудно отписаться Принцип «ИИ отдаёт редактируемую сцену»; шаблон с именованными слотами для пакета
WonderCard Старт бесплатно, 1 490 ₽/мес; услуга дизайнера 7 970 ₽ за товар (срез 05.09, не перепроверено) Шаблон → замена фото, текста, иконок → экспорт «за 5 минут»; или заказ дизайнеру Простой путь от шаблона; гибрид «сам или дизайнер» с передачей исходника ИИ не заявлен; нет пакета и публикации Платную услугу дизайнера с исходником в формате PicSeller
Flyvi Free 0 ₽ (5 ИИ-токенов), Pro 599 ₽/мес, Business 3 600 ₽/мес Шаблон → фото с удалением фона → правка → скачать или опубликовать по ссылке; 5–10 минут Генератор инфографики по полям формы, без промпта; брендбук; публикация по ссылке и web-stories — ближе всех к витрине По обзорам подтормаживает и теряет правки; списания после пробного периода; нет пакета, публикации, проверки Ввод по полям как основной вход (помощник брифа); брендбук на все серии
Fabula AI Цены только после входа; по вторичным данным 490 ₽ за 7 дней, 1 390 ₽ за 30 дней Фото → обложка и серия из 5 слайдов в едином стиле (заявлено 60 с) → редактор со слоями Серия из 5 слайдов как единица результата; охранные зоны; заявлены 1С, МойСклад и до 10 000 товаров Однотипная инфографика (отзывы); еженедельные списания; публикация не подтверждена; API ответил HTTP 402 Серию 5–6 слайдов по умолчанию; охранные зоны видимым слоем
MPCard.AI 890 / 3 490 / 8 990 ₽/мес, дешевле при годовой Фото → фон убран → шаблон → вариант ИИ-фона; около 30 с (заявлено); размеры под 8 площадок Короткий путь; заявлены массовая правка до 100 товаров и загрузка в WB/Ozon по API Однотипные фоны; 10 карточек на младшем тарифе; контракт API не опубликован Массовую правку общего элемента (логотип, плашка); адаптацию под несколько площадок одной командой
WBCard PRO без автопродления: 650 ₽ за месяц; фон 5,0–8,7 ₽, инфографика 12,5–21,7 ₽ за операцию Фото и удаление фона (3 модели) → фон или ИИ-фон → иконки → текст → PNG/JPG, в кабинет вручную Цена каждой операции в рублях; без автопродления; пакетный генератор в одном стиле Среднее качество ИИ и слабый поиск шаблонов (обзоры); нет публикации; Free не сохраняет проекты Честный биллинг: цена операции до запуска, без автопродления
SellerDen AI Пробный 0 ₽ на 7 дней, Старт 599 ₽/мес (до 4 карточек), Стандарт 3 690 ₽, Бизнес 11 990 ₽ Фото → анализ и советы по пересъёмке → фотосессия, инфографика, видео, описание → A/B-тест фото Аудит существующей карточки; совет по пересъёмке; A/B-тест Около 150 ₽ за карточку на «Старте»; лимиты по карточкам, а не операциям; нет публикации Вход «Улучшить мою карточку по артикулу»; совет по фото при загрузке
MagVi 0 ₽ (5 генераций, 3 скачивания), 490 / 990 / 1 990 ₽/мес Фото → шаблон (36+) → ИИ меняет фон → правка → сохранить свой шаблон Простая лестница тарифов; свои шаблоны без ограничений Мало шаблонов (36); нет пакета, публикации и проверки «Сохранить как мой шаблон» в один клик
ItemCard Новый сервис. Пакеты без подписки, цены со страницы извлечь не удалось; возврат 14 дней, жалоба на брак 10 дней Фото + описание (+ до 3 образцов стиля) → серия: обложка, преимущества, детали, применение, финал → скачать 3:4 или 1:1 Самый короткий путь до серии; стиль по образцу; гарантия и перегенерация брака Слоёв нет: правка только перегенерацией за деньги; нет пакета, API, публикации и проверки Стиль из 1–3 образцов; план серии до генерации; бесплатную перегенерацию брака
WildAI Новый сервис. Пакеты кредитов: от 260 ₽ за 40 (26 ₽ за генерацию) до 4 500 ₽ за 900 (20 ₽) 7 шагов от регистрации до скачивания; загрузка на площадку вручную Цена генерации в рублях; примерка одежды, сцены в интерьере Длинный сценарий; нет публикации и API; реквизиты не опубликованы Цену одной генерации рядом с кнопкой запуска
JAFO Ранняя стадия. Цены противоречивы: Start 4 900 ₽/мес или бесплатный тест — не подтверждено Ключи WB и Ozon Seller API (можно только чтение) → задача в чате → подтверждение → журнал с откатом Единственный в сегменте пишет в кабинет через официальные API; модель «чтение → подтверждение → журнал → откат» Не делает визуал; выдача ключей кабинета стороннему агенту — риск для продавца Шаблон безопасной публикации карточек
Wildberries: встроенный ИИ Площадка. Бесплатно 20 описаний в месяц и базовый фоторедактор; остальное — «Джем» 22 990 / 42 990 ₽ за 30 дней (вторично) В карточке: фото → аватар и фон → генерация в фоне → фото сразу в карточке Результат сразу в карточке; «Анализ внимания» (с 21.08.2026) Только WB; основное — за «Джем»; нет серий и бренд-кита; «Фотостудия» — для одежды «Карту внимания» как оценку перед экспортом с пометкой «не решение модерации»
Ozon: ИИ-редактор фото и OzonGenerator Площадка. Бесплатно, около 40 изображений в день на функцию; 200 аннотаций в месяц (вторично) Шаг «Медиа» → фоторедактор → «AI-эффекты» → «Сгенерировать фон»; аннотация через OzonGenerator Бесплатно и прямо в карточке: фон, дорисовка краёв, качество, аннотация Нет инфографики, серий и бренд-стиля; только Ozon; суточные лимиты Вывод: фон — не главная ценность; правила Ozon — в версионируемые правила
Яндекс Маркет: YandexGPT Площадка. Встроено в кабинет, отдельной цены нет В карточке YandexGPT пишет название, описание и заполняет характеристики из текста Характеристики из неструктурированного текста; бесплатно Только тексты; данных о визуале на 2026 год нет; цифре «93% без правок» уже 3 года Извлечение характеристик из свободного текста с цитатой-источником

Паттерны сегмента и как применим у нас

Фото и бриф → сразу серия из 5–6 слайдов

Fabula, ItemCard, SUPA Magic, SellerDen, MPCard

У нас: путь «фото + бриф → план серии → серия» — главный в «Создать». План показываем до сборки, чтобы продавец подтвердил структуру.

Публикация прямо в карточку площадки

Встроенный ИИ WB и Ozon, JAFO; MPCard заявляет, но без документации

У нас: сначала WB — ключ с правом «Контент», привязка к артикулу, «было/станет», подтверждение, загрузка, чтение обратно, журнал и откат. Затем Ozon.

Проверка по правилам с версией, источником и датой

Как проверяемую функцию не делает никто: у WBCard «безопасные зоны», у Fabula охранные зоны, у SellerDen аудит

У нас: один движок правил; у каждого правила площадка, категория, тип фото, ссылка-источник и дата. Отчёт «проверено по правилам от ДД.ММ.ГГГГ».

Честный и предсказуемый биллинг

WBCard, ItemCard, WildAI, MPCard

У нас: цена в рублях на кнопке запуска, без автопродления по умолчанию, бесплатная перегенерация брака, без повторного списания после сбоя.

Встроенный ИИ площадок забирает базовые операции

Ozon, WB, Яндекс Маркет

У нас: ценность — серия в бренд-стиле, несколько площадок из одного товара, презентации, приватный ИИ и защита от выдуманных фактов. Фон — вспомогательная операция.

Аудит существующей карточки как вход

SellerDen, «Анализ внимания» WB

У нас: вход «Улучшить карточку по артикулу» — чтение карточки, проверка, план правок, серия, публикация с откатом. A/B — только как сравнение версий, без обещаний роста CTR.

Мировые инструменты товарного визуала

Если тип не указан — коммерческий сервис. Срез 30.09–01.10.2026. Официальные страницы Canva и справка Adobe отвечали 403 или не загружались — их данные взяты из выдачи поиска по официальным доменам. Число пользователей — заявления самих компаний.

ПродуктТип и ценаГлавный сценарийСильные стороныСлабые стороныЧто берём
Photoroom Pro / Max / Ultra / Enterprise; в долларах официально не показаны, по обзору $12.99–99 в месяц (вторично); API с бесплатной песочницей Фото → фон вырезается сам → шаблон, ИИ-фон или ИИ-модель → скачать; ИИ-инструменты в пакете до 250 фото (с 31.03.2026) Самый короткий путь на телефоне и в вебе; пакет с порядком, своими фонами и переименованием под артикул; API-конструктор операций Цены видны только в пробном периоде; нет российских площадок, инфографики и серий; Listing Score — «coming soon» Пакет по папке фото; «Сохранить результат как рецепт»; сравнение «до/после» при удалении фона
Claid.ai B2B-API. Кредиты: ИИ-фон 3, удаление фона 2, генеративный ресайз 2; веб-тарифы $9–35 в месяц (вторично) Веб: фото → инструмент → генерация → скачать. API: один JSON-запрос с цепочкой операций; пакет по папке в облаке Цена каждой операции на странице; цепочка операций одним запросом; генеративный ресайз и апскейл Готовых рецептов под площадки нет; слоёв нет — на выходе растр; веб- и API-кредиты на разных счетах Профиль площадки как рецепт операций; цену до запуска без списания за неудачу; генеративное расширение фото
Pebblely Lite $9, Basic $19, Pro $39 в месяц; есть API Фото → фон убран → тема (40+) → генерация Тема вместо промпта; одно фото → материалы для разных каналов; недорогой вход Только фоны и сцены: нет текста, инфографики, серий; в API база 512×512 Галерею тем фона на русском; «цвет стиля» из бренд-кита
Pixelcut Free; Pro $10, Business $30 в месяц; API $0.01 за кредит Пакет: папка (в том числе из Dropbox) → инструмент → параметры один раз → ZIP; до 10 000 изображений Самый крупный пакет; места в команде без доплаты; логотип и водяной знак на весь пакет Одна операция за проход; шаблоны западных площадок; нет инфографики и серий Импорт папки фото как вход в пакет; логотип на весь пакет как шаг рецепта
Flair.ai Free; Pro $8, Pro+ $26, Scale $38 Холст: товар и реквизит → промпт с подсказками → генерация, варианты, апскейл Композиция задаётся до генерации, результат предсказуемее; совместная работа Мало изображений на младших тарифах; холст сложнее пути «фото и тема»; нет инфографики Сохранять слои (товар, тень, фон, текст) при ИИ-замене фона
Mokker AI Free — 20 фото; Starter $13 в месяц; Team $29 за пользователя 3 шага: фото (фон убирается сам) → шаблон → готовое фото Предельно короткий путь; безлимит на командном тарифе Только фоны; API — «coming soon»; скромный масштаб «Создать» в 3 шага, тонкие настройки — в раскрывающемся блоке
Canva Free / Pro / Business / Enterprise; Pro около $15 в месяц (вторично) Шаблон или промпт → правка → Magic Switch → скачать или опубликовать; Bulk Create до 300 строк; сайт на my.canva.site или своём домене Шаблоны с данными и блокировками бренда; Magic Switch; Canva AI 2.0 даёт многослойный дизайн; сайт из того же редактора Нет правил и проверки российских площадок; ключевой ИИ — на платных тарифах; Canva AI 2.0 — исследовательская версия Свои поля и блокировки в шаблонах; умный ресайз; сайт бренда на поддомене
Adobe Express и Firefly Express Free / Premium (около $9.99 в месяц, вторично); Firefly Bulk Create и Services — корпоративные Express: шаблон → правка → One-click Resize. Firefly Bulk: до 10 000 фото → фон → ресайз с фокусной точкой → скачать Ресайз с фокусной точкой и генеративным расширением — товар не обрезается; матрица «товар × промпт × размер × язык» Массовые функции корпоративные; в Express до 99 вариантов и свой CSV не загрузить Фокусную точку товара при смене формата; матрицу «площадка × стиль» одной задачей
Kittl Free; Pro $19, Expert $49 в месяц Шаблон или ИИ → правка на холсте; мокапы: принт один раз → много изделий → пакет Массовые мокапы; сильная типографика; Brand Studio Заточен под принты и мерч, а не карточки; токены сгорают; API для каталога нет «Одно фото — вся серия» с выбором типов слайдов; «Открыть в редакторе» у каждого результата пакета
Picsart Pro $10.5 в месяц при годовой; Ultra €32.75; API и SDK по договору Фото → ИИ-инструменты или пакет 50–100 фото → бренд-кит; Flow — сценарий из узлов с перезапуском на новом товаре Сценарий собирается один раз и перезапускается; агенты для типовых задач; мобильные приложения Маленький пакет на потребительских тарифах; разрозненные продукты; цены в разных валютах «Рецепт» — сохранённую цепочку от фото до экспорта с перезапуском на новом артикуле
Microsoft Designer и Copilot Create Designer бесплатен, но только для личного некоммерческого использования; генеративные функции — по подписке Microsoft 365 Промпт → выбор дизайна → правка → размер под соцсеть; в Create: формат, бренд, цвет Бренд-кит организации влияет на каждую генерацию; ИИ генерирует бренд-кит, включая голос бренда Личный Designer нельзя использовать в коммерции; один бренд-кит; нет пакета и каталога Голос бренда (тон, запрещённые слова) в бренд-ките; бренд по умолчанию для команды
Google Pomelli Бесплатный эксперимент Google Labs; бета в США, Канаде, Австралии, Новой Зеландии, ЕЭЗ, Великобритании и Швейцарии — в России недоступен Адрес сайта → Business DNA (до 8 минут) → каталог товаров → фотосессия или кампания → сайт «в пару кликов» (с 19.05.2026) Бренд собирается по ссылке; каталог как постоянная сущность; фото, кампании и сайт из одних данных Недоступен в России; нет правил маркетплейсов и пакетной обработки; анализ сайта до 8 минут «Бренд по ссылке» с подтверждением; сущность «Товар»; сайт из тех же данных
Amazon Ads Creative Studio Встроенный инструмент площадки. Бесплатно для рекламодателей Amazon Ads в 15 странах Выбрать товар из каталога → лайфстайл-изображения по данным товара → уточнить → в рекламу Данные товара уже на площадке, ничего не нужно загружать; бесплатно Только Amazon и только реклама, файлов для других площадок нет Импорт товара по артикулу WB/Ozon как первый шаг; сезонные темы как пресеты стиля. Риск: WB и Ozon могут сделать так же

Паттерны сегмента и как применим у нас

Сначала фото: 3–4 шага до результата

Photoroom, Pebblely, Mokker, Pomelli, Pixelcut

У нас: три шага до серии, фон убирается автоматически при загрузке (удаление фона на своём сервере уже работает). Тонкие настройки — после первого результата.

Пакет по папке фото, а не по таблице

Pixelcut и Firefly Bulk (до 10 000), Photoroom, Picsart

У нас: вход «папка фото», артикул берётся из имени файла. Excel остаётся для фактов. Сейчас партия собирается только из CSV/XLSX — в браузере или на сервере, до 100 строк.

Рецепт — сохранённая цепочка операций

Picsart Flow, пакетные шаблоны Photoroom, Firefly, Claid

У нас: «Сохранить как рецепт» на результате — площадки, бренд, шаблон, операции с фото и экспорт; перезапуск на новом товаре. Основа уже в коде: «Мои стили» — серверные рецепты с неизменяемыми версиями.

Умная смена формата

Canva Magic Switch, Adobe One-click Resize, Firefly, Claid

У нас: перекладка слайда по ролям слоёв, фокусная точка фото, расширение фото на своём сервере. Сейчас размер меняется растяжением, а справка обещает «умный ресайз» — обещание убрать сразу.

Бренд как источник правды, который применяется сам

Canva Brand Kit, Photoroom, Pomelli Business DNA, Microsoft 365 Copilot

У нас: голос бренда и запрещённые слова, бренд по ссылке с подтверждением, бренд по умолчанию для приглашённой команды.

Каталог и сайт из одних данных

Pomelli, Canva Websites, Amazon Creative Studio, Canva Autofill

У нас: «Товар» — сущность, от которой строятся серия, презентация и сайт; сайт обновляется, когда меняются товары.

Конструкторы сайтов полного цикла

Если тип не указан — коммерческий сервис. Срез 30.09–01.10.2026. Официальные страницы Replit (403) и часть справки Base44 и Durable не открылись — цифры из вторичных обзоров. Webflow, same.new, Flexbe и Nethouse отдельными карточками не вошли: по ним только вторичные данные.

ПродуктТип и ценаГлавный сценарийСильные стороныСлабые стороныЧто берём
Lovable Free — 5 кредитов в день; Pro от $25, Business от $50 в месяц; свой домен — только на платных Промпт → живой предпросмотр → правка чатом или выбором элементов → автоверсия → публикация в 2 клика на *.lovable.app → свой домен с авто-DNS и SSL «Чат + предпросмотр»; мультивыбор и бесплатная правка текста на месте (до 100 в сутки); автоистория, закладки, diff, метка опубликованной версии Генерирует код — «петля отладки», кредиты за ошибки ИИ не возвращаются; цена запроса не видна заранее Метку «опубликовано» в версиях; закладки; проверку одной строкой в окне публикации; мультивыбор
Bolt.new + bolt.diy Смешанный. Free; Pro $25, Teams $30 в месяц; открытая версия bolt.diy — MIT Промпт → код и предпросмотр → клик по элементу и правка → версии с предпросмотром → публикация на *.bolt.host или свой домен Визуальные правки бесплатны до сохранения; выбор среди перекрывающихся слоёв; версии с закладками Откат не трогает базу данных; расход токенов трудно предсказать Пакет ручных правок с одним шагом отмены; предупреждение «опубликованное и заявки не откатываются»
v0 (Vercel) Free — 7 сообщений в день; Plus $30, Business $100 в месяц Промпт → React/Next.js и предпросмотр → Design mode: панель свойств и запрос к выделенному со скриншотом → Apply = версия → деплой Панель свойств держится дизайн-системы; к правке прикладывается скриншот выделения Для разработчиков; простые правки теперь тратят кредиты — жалобы на форуме Vercel Панель свойств только из токенов бренда; снимок выделения как контекст; антиурок: ручные правки не делать платными
Replit Agent Core около $20–25, Pro около $95–100 в месяц (вторично) Промпт и план → агент строит приложение → Visual Editor → чекпоинты → откат в один клик → деплой Простая правка пишется без агента и кредитов, сложная уходит агенту; чекпоинт хранит и историю чата Откат базы по умолчанию выключен; в одном описанном случае $206 сверх подписки Правило «прямая правка или задача модели»; версия хранит команду и ответ модели; 2–3 варианта рядом
Base44 (Wix) Free; Starter $16, Builder $40, Pro $80, Elite $160 в месяц при годовой Промпт или план → приложение с базой и входом → доработка чатом, режим Discuss → тест под ролями → публикация с настройкой видимости «Обсудить» отделено от «сделать»; откат из ленты чата; видимость «только по приглашению» Привязка к платформе — бэкенд и данные не экспортируются (обзоры); кредиты сгорают помесячно Режим «Спросить» рядом с «Предложить»; предпросмотр глазами покупателя и ссылку для согласования
Framer Free; Basic $10, Pro $30 в месяц; доплаты за редакторов и языки Промпт → редактируемые секции на холсте → выделенные слои в чат → аудит перед публикацией → публикация, CMS, аналитика ИИ создаёт родные элементы холста, а не код; аудит (контраст, опечатки, alt, SEO); роль «контент-редактор» Экспорта кода нет; слабая коммерция; неожиданные доплаты Аудит сайта перед публикацией; роль «контент-редактор»; товары как источник страниц
Wix Harmony Входит во все планы Wix; Light $17, Core $29 в месяц при годовой Разговор с агентом Aria → сайт или секции → ручная доводка перетаскиванием → Aria ведёт сайт дальше → публикация Гибрид ИИ и ручной раскладки; правка секции не ломает другие (заявление Wix); ИИ работает и после запуска По обзорам нет классической CMS и каталога; ИИ иногда сообщает о правке, которой нет; экспорта нет Изоляцию секций; проверку «изменение реально выполнено» после команды
Durable Free — поддомен *.durable.site и 10 сообщений ИИ; Launch $22, Grow $41 в месяц при годовой Три поля (тип бизнеса, название, город) → сайт примерно за 30 с → перегенерация секции или ручная правка → публикация → CRM и заявки Минимальный бриф; заявки, CRM, отзывы и SEO в одном месте; перегенерация отдельной секции Блоки только переставляются; поля формы не добавить; однотипный контент Старт сайта из уже введённых фактов без новых вопросов; «Перегенерировать секцию» с предпросмотром; ленту заявок
Hostinger AI Builder От $2,99 в месяц при оплате за 48 месяцев, продление от $10,99 (вторично) Агентный или ручной режим → первая версия → правка диалогом или визуально → публикация → хостинг, домен, почта Два способа правки в одном проекте; текст и картинки правятся без кредитов; домен и хостинг в пакете Низкая цена только при длинной предоплате, продление в 3–4 раза дороже Пакет «сайт + поддомен + HTTPS» без отдельной настройки
Readdy Free — без публикации; Starter $15 (1 сайт, до 1 000 заявок), Pro $24 в месяц при годовой Описание, шаблон, картинка-референс или URL → сайт → клик по элементу или команда → публикация в 1 клик → формы, заявки, SEO Старт с картинки-референса; заявки и уведомления; автонастройка SEO Жалобы на поддержку и биллинг; однотипный контент; экспорт кода — от $119 Стиль сайта по готовым карточкам продавца; sitemap и robots, подсказку про Яндекс Вебмастер; лимит заявок как единицу тарифа
Tilda Free — 1 сайт; Personal 500 ₽/мес при годовой (750 ₽ помесячно); Business 1 000 / 1 250 ₽ Страница по промпту → блочный редактор → «вайб-блок» по описанию → публикация на свой домен → формы, CRM, каталог CSV/YML Рубли и российский рынок; ИИ встроен в блоки; каталог с импортом CSV/YML и связкой с Маркетом ИИ не ведёт сайт целиком; жёсткие лимиты вайб-блока на Free; связки ИИ-правок с версиями не нашли Ценовой ориентир 500–1 250 ₽; «вайб-блок» как секцию по схеме; выгрузку YML на Маркет из фактов
Craftum От 149 ₽/мес при оплате за 2 года; 10 дней бесплатно Описание, тип сайта и стиль текста → лендинг примерно за 3 минуты → блочный редактор → домен, магазин до 50 000 товаров Очень низкая цена; каталог из CSV; заявки в Telegram ИИ минимальный — тексты и лендинг (vc.ru); ведение сайта через ИИ не заявлено Заявки сразу в Telegram; нижнюю границу цены — сайт как недорогое дополнение к карточкам
«Поехали!» Оценка вместо тарифа: лендинг около 700 ₽ (от 500 до 2 000 ₽) плюс опции; запросы к ИИ — за «энергию» Описать идею ассистенту «Юра» → сайт собирается в браузере → правка → публикация в облако в один клик Русскоязычный цикл «описал → сайт → опубликовал»; заявлены инфраструктура в РФ и оплата российскими картами (не проверено) Мало публичных данных о версиях, откате и лимитах; генерирует код Цену «за результат» вместо кредитов; главный российский конкурент для пользовательских тестов
Dyad Open-source: Apache-2.0, каталог src/pro — FSL-1.1. Бесплатно со своей моделью; Pro $20 в месяц Настольное приложение → модель облачная или локальная (Ollama) → промпт → код и предпросмотр → деплой Локально и приватно; работает с локальными моделями; проверки безопасности перед публикацией Приложение для одного пользователя; генерирует код Next.js; деплой на Vercel и GitHub Подтверждение, что «чат + предпросмотр» работает на локальных моделях; выбор профиля модели «Быстро / Качественно»

Паттерны сегмента и как применим у нас

Лента команд + живой предпросмотр

Lovable, Bolt, v0, Replit, Base44, Readdy, Hostinger, «Поехали!»

У нас: конструктор сайта — секции и помощник слева, предпросмотр в центре. Контракт «Предложить → сравнить → Применить → одна отмена»; свободный чат, который сразу меняет сайт, не нужен.

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

Replit, Lovable, Bolt, Hostinger; антипример — v0

У нас: текст, цвет и фото меняются в инспекторе сразу и бесплатно; модель нужна только для перестройки секций и текстов. Цену или время ожидания показываем до отправки.

Автоверсия, закладки, метка «опубликовано»

Lovable, Bolt, Replit, Base44

У нас: версии на сервере с метками «опубликовано: WB / Ozon / сайт». При откате предупреждаем, что опубликованное и заявки не откатываются.

Сначала бесплатный поддомен, свой домен потом

Lovable, Bolt, Base44, Hostinger, Durable, Tilda

У нас: <бренд>.24oros.ru одной кнопкой — wildcard-домен, Traefik и Let's Encrypt уже работают. Свой домен — по инструкции с TXT-проверкой; покупку домена на старте не делаем.

Генерация в типизированные секции, а не в код

Webflow, Framer, Wix Harmony, вайб-блок Tilda; антипримеры — Lovable, Base44

У нас: 8–12 типов секций; модель возвращает данные по схеме, HTML собирает детерминированный рендер. Произвольный код от модели запрещён.

Ведение после запуска

Durable, Readdy, Lovable, Framer, Tilda, Craftum

У нас: форма заявок с уведомлением в Telegram, счётчик переходов на маркетплейсы, SEO-подсказки перед повторной публикацией.

Open-source основы

Готового открытого продукта «карточки + серии + презентации + сайт бренда + публикация», который можно взять за основу, нет. Есть сильные компоненты, но лицензия и стек подходят PicSeller (чистый JS во фронтенде, Node на сервере, ARM64) только у части из них. Звёзды, лицензии и даты — GitHub API и npm на 30.09.2026; страницы прочитаны 30.09–01.10.2026. Цены Polotno Studio, Puck AI и WebContainers публично не найдены.

брать брать с оговоркой брать идею, не код не брать или не в MVP

ПроектЛицензияДля чегоРешение
GrapesJS (ядро)BSD-3-ClauseРучная правка сайта бренда на чистом JS: блоки PicSeller, проект на сервере, экспорт HTML/CSSкандидат Сначала прототип на двух секциях против расширения своей сцены. Studio SDK не брать: платный, облачные сессии
PuckMITСхема «страница = набор разрешённых секций» и режим сборки для ИИидея Брать формат, не код: только React; Puck AI облачный
Webstudio, SilexAGPL-3.0; у Webstudio часть пакетов проприетарнаяОбразец цепочки «редактор → статический генератор → хостинг»идея Код не встраивать из-за AGPL, брать только архитектуру
Payload CMS, StrapiMIT; у Strapi каталог ee/ — EnterpriseЧерновики, версии, локализация контентане в MVP Данные товаров уже есть; вернуться при каталоге на сотни товаров
Polotno SDKКоммерческая; ключ нужен и для серверного polotno-nodeГотовый редактор в духе Canvaне брать Платно, React и MobX, чужая модель данных сломает связку «сцена → рендер → правки ИИ». Взять только раскладку боковой панели
Fabric.jsMITПоведение рамки: Shift, поворот с шагом 15°, выделение рамкой, текст на холстеидея Движок не заменять, переносить поведение; экспорт остаётся на своём SVG
KonvaMITАлгоритм направляющих и правка текста поверх холстаалгоритмы Весь движок — только если свой SVG не справится, но тогда и экспорт переводить на Konva
tldrawСвоя: ключ в продакшене, хобби-лицензия некоммерческаяХолст-доскане брать
ExcalidrawMITСцена, встроенная в PNG и SVGидея Код не нужен
Penpot, miniPaint, GraphiteMPL-2.0 / MIT / Apache-2.0 или MITМодель дизайн-токенов (Penpot), окно ретуши (miniPaint)идея Penpot — идея токенов; miniPaint — по желанию для ретуши; Graphite не брать (alpha)
bolt.diy, LlamaCoder, gpt-engineerMIT; bolt.diy требует лицензии WebContainers для коммерции; gpt-engineer архивированОбразец интерфейса «чат + предпросмотр + деплой»код не брать Генерация произвольного кода селлеру не нужна, активность низкая
Dyad, Onlook, open-lovableApache-2.0 + FSL-1.1 в src/pro / Apache-2.0 / MITВерсия на каждое изменение ИИ, ветки вариантов, выбор элемента в предпросмотреидея Брать образцы интерфейса; open-lovable не брать: облачный Firecrawl, риск копирования чужих сайтов
OpenHandsMIT; каталог enterprise/ — PolyFormФоновая поддержка сайта в изолированном контейнере с diff и подтверждениемне в MVP Вернуться на этапе поддержки сайтов
CoolifyApache-2.0Развёртывание самого PicSeller и сайтов с бэкендом через APIбрать Уже работает на GX10: через него развёрнут сам PicSeller на picseller.24oros.ru. Статические сайты раздаёт сервер PicSeller по wildcard-домену, без отдельного приложения на каждый. Dokploy, CapRover, Dokku не нужны
ComfyUIGPL-3.0Исполнитель графов обработки изображенийотдельным сервисом Вызывать по HTTP, код не встраивать (наш вывод, не юридическое заключение)
BiRefNetMITМаска товара для удаления фонабрать Уже работает; сравнить с BiRefNet-HR на наборе из 30–50 товаров
Qwen-Image-Edit-2511, FLUX.2 klein 4BApache-2.0Сцена и фон с сохранением товарабрать Но FLUX.2 klein 9B и FLUX.1 Kontext dev — некоммерческие; лицензию Z-Image Turbo проверить до использования
rembgMIT, но модель по умолчанию bria-rmbg — по платному соглашениюЗапасной путь удаления фона на процессорес оговоркой Только с моделью birefnet-general, никогда с bria-rmbg
IC-LightApache-2.0, но внутри BRIA RMBG 1.4 с некоммерческими ограничениямиСогласование света товара и фонас оговоркой Только в связке с BiRefNet вместо BRIA
LaMa / IOPaintApache-2.0 / Apache-2.0, архивированУдаление лишних объектов с фотоLaMa через узлы ComfyUI; IOPaint не брать
Real-ESRGANBSD-3-ClauseУвеличение разрешенияможно Не развивается с 2024 года; предпочесть узлы апскейла ComfyUI
LitestreamApache-2.0Непрерывная копия базы SQLite во внешнее хранилищебрать Для бэкапов с потерей не более нескольких минут
Шрифты Inter, Manrope, Montserrat, Rubik, PT Sans/Serif, Golos Text, Onest, UnboundedSIL OFL 1.1Каталог кириллических шрифтов в комплектебрать Поставлять локально в WOFF2, регистрировать в одном реестре
esbuild, Playwright, ImmerMIT / Apache-2.0 / MITСборка модулей, сквозные тесты в CI, история изменений на патчахбрать esbuild уже подключён
Лицензионные ловушки — проверить до платного запуска
  • Polotno SDK — коммерческая лицензия: бесплатно только 30 дней на dev-сервере, исходники — только в Enterprise с условием неконкуренции, серверный polotno-node тоже требует ключ.
  • tldraw — с SDK 4.0 (сентябрь 2025) в продакшене нужен ключ; бесплатная хобби-лицензия некоммерческая и с водяным знаком.
  • Webstudio и Silex — AGPL-3.0: если изменённый код работает как сетевой сервис, исходники изменений нужно открыть пользователям. В закрытый SaaS не встраивать.
  • FLUX.2 klein 9B и FLUX.1 Kontext dev — некоммерческая лицензия; в платный продакшен только после покупки лицензии BFL. Обе модели уже лежат на сервере GX10 — нужен запрет на уровне сервера.
  • rembg — сам MIT, но модель по умолчанию bria-rmbg требует платного соглашения; IC-Light тянет BRIA RMBG 1.4 с некоммерческими ограничениями.
  • ComfyUI — GPL-3.0: держать отдельным процессом и вызывать по HTTP, код не встраивать. GPL, в отличие от AGPL, срабатывает при распространении, а не при работе по сети — это наш вывод, не юридическое заключение.
  • Open-core: каталоги Strapi ee/, Dokploy proprietary/, Dyad src/pro (FSL-1.1), OpenHands enterprise/ (PolyForm) — под отдельными лицензиями; bolt.diy требует лицензии WebContainers; лицензию Z-Image Turbo мы не проверяли.

Решение: завести перечень сторонних компонентов и моделей с лицензией и флагом «коммерческое использование», копировать код только из открытых каталогов, а сервер должен отказываться запускать некоммерческие модели в рабочем режиме.

Паттерны open-source и как применим у нас

Одна схема документа для редактора, рендера и экспорта

Polotno, Puck, GrapesJS, Excalidraw

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

ИИ собирает только из разрешённых блоков

Puck AI (режим сборки) — в противоположность bolt.diy, open-lovable и LlamaCoder, которые пишут код

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

Каждое изменение ИИ — версия; ветки вариантов

Dyad, Onlook, Payload

У нас: перед каждой операцией ИИ — автоматическая именованная версия с описанием; режим «2–3 варианта рядом» для серии и сайта.

Open-core: проверять каталоги и лицензии моделей

Strapi, Dokploy, Dyad, OpenHands, Webstudio, tldraw, rembg, FLUX

У нас: реестр компонентов и моделей с флагом «коммерческое использование»; риск всплывает при запуске платных тарифов, поэтому проверка — до него.

Что заимствуем

Двадцать идей из исследования с адресом в целевом продукте. Мелким шрифтом — где это место в текущем коде.

ИдеяОткудаКуда в PicSeller 2.0
Серия из 5–6 слайдов из фото и брифа как главный путь; структуру показывать планом до генерацииFabula AI, ItemCard, SUPA Magic«Создать» → шаг 2 «Площадки и стиль» с планом серии → «Результат»
сейчас: create-hub.js, outline-review.js, card-series.js
«Укажи и скажи»: выбрать несколько объектов или секцию; к команде автоматически прикладывается снимок выделенияLovable, v0 Design Mode, FramerИИ-помощник в редакторе и вкладка «Помощник» в конструкторе сайта
сейчас: editor-assistant.js, editor-plan.js — только один объект
Простые правки (текст, цвет, фото) выполняются без модели и бесплатно; модель только для перестройкиReplit Visual Editor, Bolt, LovableИнспектор редактора и конструктора сайта меняет материал сразу
сейчас: series-plan.js — словарный разбор до модели
Автоверсия на каждое изменение ИИ, закладки, предпросмотр до отката, метка «опубликовано: WB / Ozon / сайт»Lovable, Bolt, Dyad«Версии» в редакторе и конструкторе сайта
сейчас: project-versions.js в браузере, серверные ревизии api.mjs
Проверка одной строкой в окне «Опубликовать»: правила площадки для карточек; SEO, alt и контраст для сайтаFramer, LovableШаг «Проверка» в «Публикации в WB» и «Публикации сайта»
сейчас: общий QualityReport в окне «Скачать» (quality-ui.js), правил площадок нет
Версионируемые правила площадки с источником и датой; охранные зоны видимым слоемПробел рынка; частично Fabula (охранные зоны), WBCard (безопасные зоны)Панель «Проверка» и переключатель «Безопасные зоны» в редакторе
сейчас: одна версия правил picseller-core-2026-09-11 на все площадки, официальных правил нет
Публикация: только чтение → «было/станет» → подтверждение → журнал → откат одним кликомJAFO (Seller API WB и Ozon)«Публикация в Wildberries», журнал в «Публикациях»
сейчас: заглушка ed-publish (foundation.js:36)
Пакет по папке фото без таблицы: плитки, порядок, имена {артикул}_{номер}, «сохранить как рецепт»Photoroom, Pixelcut, Picsart Flow«Сборка для нескольких товаров» и «Фото-студия»
сейчас: партия только из CSV/XLSX — в браузере или на сервере до 100 артикулов; серверные рецепты с версиями («Мои стили») уже есть
Свои поля данных и блокировки слоёв в шаблоне; автоуменьшение текста вместо ошибкиCanva Bulk Create, Brand Template Locks«Шаблоны»: поля шаблона и замки
сейчас: неизвестные поля шаблона отклоняются
Умная смена формата: фокусная точка фото, генеративное расширение, «версии для всех площадок» одним действиемCanva Magic Switch, Adobe Firefly Bulk, Claid«Размер» в редакторе → «Создать версию»
сейчас: пропорциональное масштабирование (screens-editor.js:147-148)
Бренд-кит из ссылки или 1–3 образцов карточек: палитра, шрифты, сетка, тон — с подтверждениемGoogle Pomelli (Business DNA), ItemCard«Подтянуть стиль по ссылке» в первом запуске и в «Бренд-ките»
сейчас: brand-management.js
«Товар» как сущность, от которой строятся карточки, презентации и сайтPomelli Catalog, Amazon Creative Studio, Canva Autofill«Товары», шаг 1 «Товар и факты», «Импорт товаров»
сейчас: ProductBrief у каждой серии, но отдельной сущности «Товар» в базе нет
Сайт бренда из тех же данных, публикация на поддомен в один кликCanva Websites, Pomelli, Durable«Мастер сайта» и «Публикация сайта» на <бренд>.24oros.ru
сейчас: нет ни в коде, ни в плане F0–F7; нужен wildcard-маршрут Traefik
Режим «Обсудить» рядом с «Предложить»: ответ модели без изменения материалаBase44 (Discuss mode)Режим «Спросить» в помощнике редактора и конструктора
сейчас: editor-assistant.js
Заявки с сайта сразу в Telegram; счётчик переходов на WB, Ozon, ЯМ с UTM-меткамиCraftum, Durable, Readdy«Заявки» и «Аналитика и здоровье сайта»
сейчас: Telegram-бот написан (41 тест), живой канал не подключён; заявок нет
Честный биллинг: цена операции в рублях на кнопке, без автопродления по умолчанию, бесплатная перегенерация бракаWBCard, ItemCard, Claid«Тарифы», «Настройки → Тариф», оценка на кнопке «Собрать»
сейчас: только данные прототипа (data.js:185-186)
Данные проекта внутри экспортируемых PNG и PDF — файл снова открывается как проектExcalidraw«Скачать» → пресеты
сейчас: scene.js:46, export-service.mjs
Боковая панель: Шаблоны, Фото товара, Элементы, Текст, Фон, Слои, Размер; «Размер» — форматы площадок одним кликомPolotnoЛевая рейка редактора
сейчас: одна вкладка слоёв (screens-editor.js:4)
Привязка к направляющим (края и центры, порог около 5 px) и правка текста прямо на холстеKonva (демо Objects Snapping и Editable Text)Холст редактора
сейчас: привязки и правки на холсте нет (transform-controls.js)
Совет по пересъёмке при загрузке фото и вход «Улучшить мою карточку по артикулу»SellerDen AI, «Анализ внимания» WBШаг 1 «Товар и факты»: совет по фото, «По артикулу WB/Ozon»
план: чтение карточки через WB /content/v2/get/cards/list

Наша ниша

Бренд-студия продавца, а не ещё один генератор картинок
  1. Одна правда о товаре. Факты, фото и артикулы вводятся один раз, из них строятся карточки WB, Ozon и ЯМ, презентация и сайт. Так устроены Pomelli и Amazon Creative Studio; у российских сервисов карточек путь обычно начинается с загрузки фото.
  2. ИИ не выдумывает. Каждая строка текста ссылается на подтверждённый факт. Fabula, наоборот, подбирает преимущества сама, у остальных аналогов из матрицы защита не заявлена. В коде основа уже есть: ProductBrief хранит источник и статус каждого факта, а предложения модели не попадут в экспорт без подтверждения.
  3. Проверка с датой и безопасная публикация. Правила площадок версионируются с источником и датой, у каждого замечания есть «Исправить». Публикация идёт через «было/станет», подтверждение, журнал и откат одним кликом. У генераторов визуала такой связки нет ни у кого. Сейчас в коде есть общий QualityReport, но правил площадок с датой нет, а публикация — заглушка.
  4. Сайт бренда из тех же данных. Витрина на <бренд>.24oros.ru с кнопками «Купить на WB/Ozon» и заявками в Telegram. Ни один сервис для селлеров этого не делает, а Canva и Pomelli не знают маркетплейсов.
  5. Приватный ИИ на своём сервере. Данные продавца не уходят в облако, стоимость предсказуема. В матрице выше это «нет» у всех семи аналогов.
  6. Работа без открытой вкладки: Telegram и расписание. Telegram-бот — второй вход в тот же заказ: фото и описание в чат, готовые файлы и заявки с сайта — обратно в чат. Сценарии по расписанию («каждый понедельник 9:00 — новые товары из WB») собирают карточки сами. Основа уже в коде: бот (8 серверных модулей, 41 тест, привязка одноразовым кодом) и серверная партия с паузой и однократным отложенным запуском. Живой канал и повторяющиеся сценарии — фаза F4, она не начата.
Три рассмотренных направления и почему выбрана «Бренд-студия из каталога»

1. Бренд-студия из каталога рекомендуем

Селлер один раз заводит товары: Excel, ссылка на WB/Ozon или бриф с фото. Из «Товара» с проверенными фактами PicSeller собирает серии карточек под WB, Ozon и ЯМ, презентацию для оптовиков и сайт бренда на <бренд>.24oros.ru с кнопками «Купить на WB/Ozon» и формой заявок. Когда факты меняются, сервис предлагает обновить все материалы сразу. Публикация одна на все каналы: проверка, журнал и откат.

Плюсы

  • Полностью закрывает запрос владельца: создать с нуля, направленно править, поддерживать и публиковать
  • Незанятая ниша в РФ: ни один сервис для селлеров не делает витрину; Canva и Pomelli делают, но не для маркетплейсов, а Pomelli недоступен в России
  • Переиспользует готовое: сцену, SVG-рендер, серверные задания, проверку фактов, бренд-кит, wildcard *.24oros.ru и Coolify
  • Одна правда о товаре усиливает главное отличие — «ИИ не выдумывает»
  • Удержание после запуска: заявки, переходы на маркетплейсы, повторная публикация

Минусы

  • Самый большой объём: по оценке 5–7 месяцев для команды из 2–3 человек (раздел 9); сначала нужны публичный запуск, серверная модель данных и вход
  • Риск распыления на три продукта; нужна жёсткая очерёдность этапов
  • Хостинг чужих сайтов — ответственность за доступность и сертификаты; лимит Let's Encrypt (50 сертификатов в неделю) требует wildcard-сертификата через DNS-01
  • Формы заявок — это персональные данные (152-ФЗ): нужны оферта и политика
  • Зависит от маршрута публичного трафика: порты 80/443 теперь ведут на сервер sagr, а боевой адрес работает через другой путь, который нигде не записан

2. Карточки под ключ с проверкой и публикацией

Только маркетплейсы: фото и бриф → серия в стиле бренда → проверка по версионируемым правилам → публикация в кабинет WB, затем Ozon, с «было/станет» и откатом. Плюс пакет по папке фото, сцены с сохранением товара, умный ресайз. Сайта нет.

Плюсы

  • Самый короткий путь к платящим пользователям: опирается на уже проверенное ядро
  • Связка «генерация + проверка + публикация с откатом» у генераторов визуала не подтверждена ни у кого
  • Меньше инфраструктурных рисков, чем у хостинга сайтов
  • Хорошо измеряется пилотом: время до опубликованной карточки, отказы модерации

Минусы

  • Прямая конкуренция с бесплатным ИИ площадок: фон в Ozon, «Джем» в WB
  • API маркетплейсов меняются — адаптеры нужно постоянно поддерживать
  • Ключи кабинета продавца — вопрос доверия и безопасности
  • Не выполняет запрос владельца о сайте

3. Приватный контент-конвейер для брендов и агентств (B2B)

PicSeller как «фабрика контента» на своём железе: Render API с токенами и песочницей, пакет из каталога или МойСклада, сохранённые рецепты, услуга дизайнера с редактируемым исходником. Данные клиента не покидают сервер; сайт — один из шаблонов вывода.

Плюсы

  • Локальный ИИ становится продаваемым преимуществом: приватность и предсказуемая стоимость
  • Крупные каталоги дают выручку, услуга дизайнера приносит деньги сразу
  • Серверный рендер, очереди и пакетный экспорт уже есть
  • Меньше требований к массовому интерфейсу на старте

Минусы

  • Длинные продажи; нужны SLA, API-ключи, биллинг и поддержка
  • Один сервер GX10 — узкое место: один слот модели и одно фото за раз
  • Ручной труд дизайнеров плохо масштабируется
  • Меньше охват; запрос «сделать проще для селлера» решается хуже
Почему рекомендуем «Бренд-студию из каталога»

Это единственное направление, которое закрывает запрос владельца целиком — создать, править, опубликовать и поддерживать, включая сайт бренда. Ниша свободна, а многое для неё уже написано: сцена со слоями, SVG-рендер, серверные задания, проверка фактов, бренд-кит. Направление 2 при этом не отбрасывается: проверка и публикация карточек — ядро бренд-студии. Главный риск — объём и распыление, поэтому этапы идут строго по очереди (см. раздел 9 «План по фазам»). B2B-конвейер можно надстроить позже на той же основе.

Актуальная версия этот выбор подтверждает: первый этап — публичный запуск — в основном пройден (см. раздел 0). Аудит Codex от 10.09 предлагал позиционирование «студия проверяемого товарного контента» и план F0–F7, в котором нет сайта. Бренд-студия сохраняет его ядро и добавляет сайт, публикацию и поддержку. Впереди — один путь создания с сервером как источником истины, затем сайт и публикация в WB.

5Целевой продукт: PicSeller 2.0

PicSeller — бренд-студия продавца. Селлер один раз заводит товар (фото, факты, артикулы WB и Ozon) и бренд. Из этих данных PicSeller создаёт с нуля серии карточек для Wildberries, Ozon и Яндекс Маркета, презентацию для оптовиков и сайт-витрину бренда.

Всё это можно направленно править — руками на холсте или словами («укажи и скажи»), с предпросмотром «было/станет» и версией на каждое изменение. Потом PicSeller публикует в один клик (кабинет WB или Ozon, сайт на поддомене <бренд>.24oros.ru или своём домене) и поддерживает: следит за изменениями правил площадок, цен и фактов, предлагает обновить все затронутые материалы, собирает заявки с сайта, показывает переходы на маркетплейсы и состояние сайта. ИИ работает на собственном сервере и не выдумывает факты: каждая строка текста ссылается на подтверждённый факт товара.

6
пунктов меню вместо 21, плюс кнопка «Создать»
3
шага до первой серии карточек
1
запись «Товар» на все материалы и сайт
1 клик
откат любой публикации
33
экрана в кликабельном макете

Жизненный цикл: Создать → Править → Опубликовать → Поддерживать

Жизненный цикл PicSeller 2.0 Четыре этапа слева направо: Создать, Править, Опубликовать, Поддерживать. События «Нужно внимание» — правила изменились, цена изменилась, новая заявка — возвращают от поддержки к правке. 1 Создать Товар и факты один раз Карточки за 3 шага Презентация и сайт 2 Править Руками на холсте Словами: укажи и скажи Было/станет → версия 3 Опубликовать Проверка по правилам WB, Ozon, ЯМ, сайт Журнал и откат 4 Поддерживать Правила, цены, факты Заявки и переходы Здоровье сайта правила изменились цена изменилась новая заявка События «Нужно внимание» возвращают к правке: обновить все затронутые материалы

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

Сущности и связи

СущностьЧто этоКлючевые поля
ТоварИсточник правды о товареназвание, категория, артикулы WB/Ozon/ЯМ, цена, фото (исходники, вырезки, сцены), факты (текст, источник, подтверждён)
БрендБренд-китлоготип, палитра с ролями, шрифты, тон текста, образцы
МатериалТо, что создаём из товаратип (карточки, презентация, баннер), товар, площадки, слайды-сцены, версии, статус, проверка
СайтВитрина брендаадрес, страницы, секции (типизированный JSON), версии, публикации, заявки, статистика, здоровье
КаналКуда публикуемWB, Ozon, ЯМ, сайт, Telegram; статус подключения, права ключа
ПубликацияФакт выкладкичто, куда, версия, кто, когда, результат, снимок «было» для отката
ЗаданиеФоновая работашаги, прогресс, место в очереди, ошибки с действием
Событие «Нужно внимание»Повод поддержкитип (правила, цена, факт, заявка, фото, сертификат), затронутые материалы, действие
Схема связей сущностей PicSeller 2.0 Бренд и Товар питают Материалы (карточки, презентация, баннер) и Сайт. Материалы и Сайт выкладываются в Каналы: Wildberries, Ozon, Яндекс Маркет, сайт бренда, Telegram. Каждая выкладка — Публикация со снимком для отката. Снизу: события «Нужно внимание» указывают на товар и материалы, Задания выполняют сборку и выкладку. Бренд логотип, палитра, шрифты, тон текста Товар источник правды факты с источником фото, артикулы, цена Материалы Карточки WB, Ozon, ЯМ Презентация Баннер и пост версии и проверка Сайт страницы и секции заявки, статистика Каналы Wildberries Ozon Яндекс Маркет Сайт бренда Telegram Публикации что и куда версия, кто, когда результат снимок «было» откат одним кликом Нужно внимание правила, цена, факт, заявка, фото, сертификат Задания сборка, фото, выкладка: шаги, прогресс, очередь

Товар и бренд — источники. Материалы и сайт строятся из них, публикация фиксирует выкладку в канал со снимком «было» для отката. «Нужно внимание» указывает, какие товары и материалы затронуты; «Задания» выполняют сборку, обработку фото и выкладку в фоне.

Навигация: было → стало

Меню собрано вокруг сущностей, а не инструментов. Пункты-заглушки и артефакты разработки из рабочей навигации уходят. Слева — точный состав меню актуальной версии (рабочее дерево от 11.09, проверено в браузере). Число пунктов с df16a68 не изменилось, но «Проекты» теперь ведут в единую библиотеку «браузер + сервер», а вместо «Серверных проектов» появилось «Подключение бота».

Сейчас: 21 пункт

Кнопка + 4 основных + 12 в свёрнутых «Других инструментах» + 4 служебных

Кнопка над меню
Создать материал

Основные
Создать Проекты Задания Бренд

Другие инструменты
Каталоги Фотографии Шаблоны Презентации ИИ-инструменты Все форматы Аналитика Интеграции Подключение бота Команда Тарифы Карта экранов

Служебные
Студия Помощь Документация Настройки

Янтарным — работает частично: 8 из 12 ИИ-инструментов помечены «Концепция», бот написан, но на сервере не подключён. Фиолетовым — заглушки и артефакты разработки: калькулятор вместо аналитики, интеграции-макеты, 99 внутренних документов в открытом доступе. Путей создать карточку — 8.

Станет: «Создать» + 6 пунктов

+ Создать

Главная Товары Материалы Сайт Публикации Бренд

В шапке: поиск, «Задания» с числом активных, колокольчик «Нужно внимание», «?» — справка, меню пользователя: Настройки, Тариф, Команда, Пульт оператора (только владелец сервиса), Выйти.

На телефоне: нижняя панель — Главная, Товары, «+», Материалы, Ещё (Сайт, Публикации, Бренд, Задания, Справка, Настройки).

Без меню: редактор и конструктор сайта открываются на весь экран.

Прошлый UX-прототип Codex (picseller-lab.24oros.ru/demo/, аудит от 10.09.2026) уже предлагал меню из 6 разделов — Рабочий стол, Создать, Мои карточки, Проверка, Автоматизация, Помощь — и мастер в 3 шага «Фото товара → Проверка фактов → Ваш стиль» с обязательным подтверждением фактов. Но только для карточек: сайта и публикации в нём нет, а в плане F0–F7 нет и витрины. PicSeller 2.0 развивает эту идею: в центре — Товар как источник правды, к нему добавлены Сайт, Публикации и поддержка через «Нужно внимание». Из прототипа в актуальную версию уже перешли индикатор «Фото → Факты → Стиль → Серия», проверка фактов перед скачиванием, сохранённые стили и серверные партии с паузой. Пока не перешли линейные шаги, поля фактов с источником, крупный выбор стиля, быстрый редактор, отдельный экран «Проверка» и сценарии автоматизации.

Рабочий стол UX-прототипа Codex: меню из 6 пунктов и заголовок «От исходника к серии. В три понятных шага.»
UX-прототип Codex /demo/ от 10.09.2026: рабочий стол и меню из 6 пунктов. Данные учебные и хранятся в браузере, без API и ИИ; основной продукт макет не меняет.
Куда переезжает каждый из 21 пункта
БылоСтанет
Создать материал (кнопка) и Создать (пункт)Одна кнопка «Создать» и строка «Что создаём?» на главной вместо 8 путей создания
Проекты — сейчас единая библиотека «браузер + сервер»Материалы: тот же список, но сервер — источник истины, без копий в браузере
ЗаданияИндикатор «Задания» в шапке
БрендБренд
Каталоги — внутри и серверные партии с PNG-выгрузкамиТовары → «Импорт» и «Сборка для нескольких товаров» с рецептами, партиями и вкладкой «Сценарии»
ФотографииВкладка «Фото» у товара и «Фото-студия»
ШаблоныСтиль на шаге «Площадки и стиль», рейка редактора, экран «Шаблоны»
Презентации«Создать» → «Презентация или КП»; готовые — в «Материалах»
ИИ-инструментыДействия на месте: «Убрать фон» и «Сцена» в «Фото-студии», помощник в редакторе; концепции — с пометкой «Скоро», вне меню
Все форматы«Создать» → «Пустой холст»; «Размер» в редакторе
Аналитика«Сайт» → «Аналитика и здоровье»: реальные посещения, переходы и заявки
Интеграции«Публикации» → каналы и «Подключение канала»
Подключение бота«Публикации» → канал «Telegram»; привязка одноразовым кодом в «Подключении канала»
КомандаМеню пользователя → Настройки → Команда
ТарифыМеню пользователя → Тариф
Карта экрановТолько в макете, не в продукте
СтудияГлавная
Помощь«?» в шапке → «Справка и помощник»
ДокументацияУбрана из продукта: внутренние документы не для пользователя
НастройкиМеню пользователя

«Серверные проекты» из меню уже убраны: экран остался псевдонимом «Проектов».

Принципы простоты

1 Один вход в создание. Кнопка «Создать» и строка «Что создаём?» на главной — вместо нынешних 8 путей создания и 2 мастеров карточки.

2 Шесть пунктов меню вместо 21. Главная, Товары, Материалы, Сайт, Публикации, Бренд. Задания, справка и настройки — в шапке.

3 Товар — источник правды. Факты и фото вводятся один раз и переиспользуются во всех материалах.

4 Три шага до результата. «Товар и факты» → «Площадки и стиль» → «Сборка». В полях нет демо-данных, только подсказки-примеры.

5 Сервер — источник истины. Сохранение автоматическое, статус «Сохранено · версия N». Кнопки «На сервер» нет.

6 Правка ИИ — это предложение. «Было/станет» → «Применить» → версия → одна отмена.

7 Проверка с датой и источником. Правила площадки показаны с датой и ссылкой на источник, у замечаний — кнопки «Исправить».

8 Безопасная публикация. Сравнение «было/станет», подтверждение, журнал, откат одним кликом.

9 Поддержка — поток событий. Не отдельный раздел, а «Нужно внимание» с готовыми действиями.

10 Никаких технических терминов. В интерфейсе нет BiRefNet, ComfyUI, GX10, Ollama, IndexedDB, JSON, nmID. Технические детали — только в «Пульте оператора».

11 Не обещаем того, чего нет. Будущие функции помечены «Скоро» и не продаются.

Ключевые сценарии

Три сценария покрывают весь цикл. Под каждым — ссылки на экраны кликабельного макета; данные в нём — демо-бренд «Мох» (авторская керамика, имена вымышленные).

Сценарий 1. Первая серия карточек за 3 шага 3 шага

1Товар и фактыФото (фон убирается автоматически), название, факты с источником. Можно описать товар словами — PicSeller найдёт факты и подсветит цитаты.
2Площадки и стильWB, Ozon, ЯМ; стиль бренда; план серии — какие слайды и какие факты в них попадут. Время и кредиты видны до запуска.
3СборкаЖивые шаги: фото, сцены, заголовки из фактов, раскладка, проверка по правилам WB от 28.08.2026 и Ozon. Вкладку можно закрыть.

Вход — кнопка «Создать» или строка «Что создаём?» на главной. Финал — экран «Результат»: оценки проверки по площадкам, 3 варианта заголовка с фактами-источниками, «Опубликовать в WB», «Скачать», «Редактировать».

Экраны макета: Создать · Шаг 1 · Шаг 2 · Шаг 3 · Результат · Редактор

Сценарий 2. Сайт бренда из каталога за 2 минуты и публикация на поддомен 5 шагов

1Тип сайтаВитрина бренда, страница одного товара или сайт для оптовиков.
2Товары и страницыТовары из каталога; Главная, Каталог, О бренде, Контакты, Оптовикам; стиль из бренда.
3СборкаСекции из фактов, фото из готовых серий, тексты со ссылками на факты, проверка SEO.
4ПравкаКонструктор: секции, помощник «укажи и скажи», предпросмотр на компьютере и телефоне.
5ПубликацияПроверка → изменения → адрес moh.24oros.ru или свой домен → выкладка без простоя → «Откатить».

«2 минуты» — обещание экрана «Сайт» в макете: «Создадим сайт из ваших товаров за 2 минуты». Сайта в коде пока нет, поэтому время на реальном сервере не измерялось. После сборки мастер открывает конструктор, публикация — кнопкой «Опубликовать» в нём.

Экраны макета: Мастер сайта · Конструктор · Публикация сайта · Обзор сайта · Заявки · Аналитика и здоровье

Сценарий 3. Поддержка: событие → обновить → опубликовать

Поддержка начинается с события в блоке «Нужно внимание» на главной или в колокольчике, а часть работы идёт сама — по расписанию. Три типичных случая:

3а. Цена изменилась 4 шага

1СобытиеЦена тарелки «Туман» изменилась 30.09: 990 → 1 090 ₽. Затронуто: сайт и презентация для оптовиков (слайд 7 с оптовыми ценами). Карточек WB это не касается: цены на фото WB нет.
2Что изменитсяСравнение «было/станет» по каждому затронутому материалу.
3Обновить всёНовые версии сайта и презентации с новой ценой — одним действием.
4ОпубликоватьСайт: проверка и выкладка версии 8 — в неё входят новая цена, новый вопрос и фото мастерской; кнопка «Откатить на версию 7».

Экраны макета: Главная — «Нужно внимание» · Товар «Туман» · Публикация сайта · Материалы

3б. Правила WB изменились 5 шагов

1СобытиеWB обновил требования 28.08.2026 — 2 карточки проверить: кружка «Мох» и тарелка «Туман». Тарелка поэтому помечена «Нужно обновить» — из-за правил, а не из-за цены.
2ПроверкаПравила WB от 28.08.2026 со ссылкой на источник; пункты ✓ и ⚠.
3ИсправитьКнопка меняет слайд и пересчитывает оценку; правка — новая версия.
4Было/станет«Сейчас на WB / Станет» по каждому товару; текущие фото WB сохраняются для отката.
5ОпубликоватьПодтверждение → отправка → чтение обратно и сверка → «2 из 2 опубликованы», «Откатить».

Экраны макета: Публикации и каналы · Редактор — панель «Проверка» · Публикация в Wildberries · Подключение WB

3в. Новые товары — по расписанию, заказы — из Telegram 4 шага

1СценарийРецепт + источник товаров + расписание: «каждый понедельник 9:00 — новые товары из WB».
2ПартияДо 100 товаров за раз; прогресс по каждому, ошибка с причиной и «Повторить», пауза сценария.
3Журнал запусковЧто и когда собрано; ZIP с артикулами в именах и контрольными суммами.
4Опубликовать готовыеПереход к публикации в WB с «было/станет» и откатом.

Telegram — второй вход в тот же заказ: продавец присылает фото и описание в чат → черновик → подтверждение → готовые файлы приходят в чат; туда же — уведомления о заявках с сайта. Бот привязывается одноразовым кодом (/start КОД), связь отзывается одной кнопкой.

В коде уже есть серверная партия с однократным отложенным запуском и бот без живого канала (см. «Наша ниша» выше). Повторяющиеся сценарии, пауза сценария и защита от повторного запуска — фаза F4 у Codex, она не начата; у нас это Фаза 6.

Экраны макета: Сборка для нескольких товаров — вкладка «Сценарии» · Задания · Публикации — канал Telegram · Подключение Telegram

Правила площадок в макете — иллюстрация

У каждого набора правил указаны дата и источник, но конкретные числа нужно сверить с официальными документами WB, Ozon и Яндекс Маркета перед реализацией. Цены тарифов в макете — пример для обсуждения.

Словарь: один термин — одно понятие

Сейчас одно понятие называется по-разному: «Каталоги» = «Пакетная сборка» = «Каталог из таблицы», «Фотографии» = «Ваши материалы» = «Загрузки». В версии 2.0 — один термин на понятие, и в интерфейсе, и в справке.

ТерминЧто означает
ТоварИсточник правды: название, категория, артикулы WB/Ozon/ЯМ, цена, фото, факты
ФактПодтверждённое сведение о товаре, например «объём 350 мл»; ИИ пишет тексты только из фактов
Источник фактаОткуда факт: «из карточки WB», «введено вами», «из Excel»
МатериалТо, что создаём из товара: карточки, презентация, баннер
КарточкиСерия слайдов для площадки
СлайдОдин кадр серии или презентации
ПрезентацияМатериал для оптовиков или КП; скачивается в PDF и PowerPoint
СайтВитрина бренда на поддомене <бренд>.24oros.ru или своём домене
СтраницаСтраница сайта: Главная, Каталог, О бренде, Контакты, Оптовикам
СекцияБлок страницы: первый экран, преимущества, товары, форма заявки
ПлощадкаМаркетплейс: WB, Ozon, ЯМ
КаналКуда публикуем: WB, Ozon, ЯМ, сайт, Telegram
ПубликацияФакт выкладки: что, куда, какая версия, кто, когда, результат, снимок «было» для отката
ПроверкаСверка с правилами площадки (с датой и источником) или проверка сайта перед публикацией
ВерсияСохранённое состояние материала или сайта; создаётся на каждое изменение, к ней можно вернуться
ЗаданиеФоновая работа: шаги, прогресс, место в очереди, ошибки с действием
БрендБренд-кит: логотип, палитра с ролями, шрифты, тон текста
ШаблонГотовая раскладка карточек, презентации, секции сайта или баннера
РецептСохранённые настройки сборки: стиль, площадки, число слайдов, обработка фото, пресет экспорта
СценарийРецепт + источник товаров + расписание; ставится на паузу, ведёт журнал запусков
ЗаявкаОбращение покупателя или оптовика через форму на сайте
«Нужно внимание»Событие с готовым действием: изменились правила, цена или факт, новая заявка, тёмное фото, срок сертификата
Не используем в интерфейсе

«Дизайн»; «проект» в значении материала; «каталог из таблицы»; «пакетная сборка» — вместо неё «Сборка для нескольких товаров»; SKU — в интерфейсе «артикул». Технические названия (BiRefNet, ComfyUI, GX10, Ollama, IndexedDB, JSON, nmID) — только в «Пульте оператора».

6Алгоритмы: как должно работать

Десять механизмов, на которых держится PicSeller 2.0: от раскладки карточки до публикации и поддержки. Для каждого механизма описано, как он устроен сейчас (со ссылками на код), каким станет алгоритм по шагам, почему выбран такой путь и как проверить результат. Общий принцип: сначала простой предсказуемый код, а модель подключается только там, где нужен смысл.

Какую версию описывает раздел

Блоки «Сейчас» описывают рабочее дерево от 11.09 — именно оно развёрнуто как container-preflight-15 на https://picseller.24oros.ru. Ссылки вида файл:строка относятся к нему. Эта работа не закоммичена: в git последний коммит — df16a68 от 08.09. Публичные ответы и DNS сверены 02.10.

Что оставляем как фундамент: это уже работает и покрыто тестами (421 тест Node и 15 Python)
  • Единая сцена. Проект состоит из слайдов, слайд — из слоёв, всё хранится в одном JSON. Сервер принимает только разрешённые поля и значения (server/api.mjs:43-81). На этом контракте стоят редактор, версии, CSV-шаблоны, правки ИИ и серверный рендер.
  • Один SVG-рендер для превью, экспорта и серверного PNG в headless Chromium (prototype/js/scene.js:33-47, server/headless-render.mjs). Что пользователь видит на экране, то и получает в файле.
  • Факты только от автора. Модель раскладывает и цитирует, но не пишет утверждений о товаре (server/local-ai.mjs:35-37, server/brief-extraction.mjs). Этот принцип расширяем проверкой происхождения, а не отменяем.
  • ProductBrief и QualityReport — один общий модуль для браузера и сервера (prototype/js/product-contract.js). У каждого факта есть id, источник (пользователь, импорт, модель, старый проект) и статус. На каждую серверную ревизию сохраняется неизменяемый снимок описания товара и отчёта (server/api.mjs:109).
  • Долговечные очереди. Ключ безопасного повтора (Idempotency-Key), захват задания с токеном, аренда, ограждение отмены, атомарная квота (server/ai-jobs.mjs, server/photo-jobs.mjs, server/export-service.mjs).
  • Серверная партия до 100 артикулов с паузой, архивом и отложенным запуском. PNG-каталог воспроизводим: в манифесте SHA-256 каждого файла и всего ZIP (server/card-batches.mjs:58-88, server/batch-export-artifacts.mjs).
  • Сохранение цвета товара. От модели берётся только маска, цвет — из исходного снимка. На GX10 расхождение RGB 0/0/0 (scripts/photo-pixels.py:117-149).
  • Ревизии с конфликтом 409. Сохранение идёт «поверх версии N». Если на сервере уже N+1, запись отклоняется и ничьи правки не теряются (server/api.mjs:97-112).
№МеханизмСейчасСрок оценка
6.1Один движок раскладки3 алгоритма «10 стилей» сервера — одна геометрия, Kaspi, Avito и Lamoda ломают создание3–4 нед. вместе с единым путём создания
6.2Тексты ИИ с проверкой происхождениянет модель тексты не пишет; у фактов уже есть id и источник2–3 нед.
6.3Сцена товара без искажения товараконцепция только удаление фона, публично не подключено3–4 нед.
6.4Фото-конвейерчастично код не менялся, публично провайдер не задан2–3 нед.
6.5Проверка по правилам площадокчастично есть QualityReport, но без правил площадок2 нед.
6.6Правки «укажи и скажи»частично 1 объект или 3 операции серии, публично выключенооколо 2 нед.
6.7Данные и версиичастично общая библиотека есть, правки живут в браузере3–4 нед.
6.8Очередь заданийчастично один замок модели, опросы, очередей стало больше2 нед.
6.9Сайт-витринанет4–6 нед. на первую версию
6.10Публикация в маркетплейс и поддержказаглушка3–4 нед. на каждую площадку

Сроки — оценка трудоёмкости механизма для команды из 2–3 человек; в разделе 9 они сведены в сроки фаз. После пилота их нужно уточнить.

6.1. Один движок раскладки вместо трёх

Сейчас 3 алгоритма высокая

Карточку по-прежнему строят три независимых алгоритма.

  • ensureScene раскладывает слои по долям холста. При этом подставляет демо-фото наушников и готовые заголовки вроде «Ваш новый любимый товар» (scene.js:11, scene.js:19).
  • Браузерный cardSeries вызывает её, а потом правит слои по номеру в массиве (nodes[1], nodes[4]) и переставляет их в абсолютные координаты под 900×1200 (card-series.js:11, :15, :24-26). Этот файл после 08.09 не менялся.
  • Серверный card-grid-v1 теперь принимает 10 стилей, и сохранённый рецепт больше не падает на сборке. Но «10 серверных стилей» — это одна геометрия в абсолютных координатах с 10 трёхцветными палитрами, шрифт Arial, категория всегда «электроника» (card-layout.js:8-14, :36-41). Площадку сервер только проверяет, на макет она не влияет (:21).

Форма «Создать» предлагает 12 стилей и все 6 площадок из DATA.MARKETPLACES и пропускает их проверкой (create-hub.js:25, :81). Но контракт товара знает только wb, ozon и ym (product-contract.js:11-15). Поэтому для Kaspi, Avito и Lamoda «Создать серию» падает с ошибкой «Выберите поддерживаемую площадку» (product-contract.js:25). До контракта товара серия для них создавалась. Смена формата по-прежнему растягивает слои по осям: круг 720×720 становится эллипсом 960×720 (screens-editor.js:147-148).

Проблема. Карточка из мастера и карточка из серверной очереди выглядят по-разному. Любое изменение ensureScene тихо ломает cardSeries. Старый мастер, куда ведут три кнопки лендинга, кладёт в ZIP пустые разделы с заглушкой «Добавьте подтверждённые сведения» (card-series.js:21). Мёртвый рендер render.js:98-201 на месте.

На что опереться: у слоёв уже есть роли текста title, benefit, body, brand. Их назначают вручную, а новые шаблоны и серверная сборка ставят автоматически (card-layout.js:36-40, docs/84–85). Функция измерения текста PS.textLayout одна для превью и экспорта (layout-engine.js:12-35), а быстрая кнопка «Вместить в блок» уже подбирает кегль двоичным поиском (docs/82).

Станет

Макет описывается данными, а не кодом: это набор слотов с ролями. Сборкой занимается один движок в общем модуле, который работает и в браузере, и на сервере (так уже устроен card-layout.js). Из макета, данных товара и профиля площадки он собирает готовую сцену. Мастер, серверная очередь, сборка из таблицы и предпросмотр вызывают одну и ту же функцию.

Макет   = { id, version, kind: 'card', slots: [Слот…], variants: ['photo-right', 'photo-bottom'] }
Слот    = { role: 'brand' | 'title' | 'subtitle' | 'photo' | 'facts' | 'badge' | 'cta',
            box:  { anchorX: 'left'|'center'|'right'|'stretch', anchorY: 'top'|'middle'|'bottom'|'stretch',
                    x: 0.00, y: 0.10, w: 1.00, h: 0.16 },        // доли БЕЗОПАСНОЙ зоны, не пиксели
            text:  { style: 'h1', min: 28, max: 72, autoFit: 'shrink', maxLines: 3, maxChars: 40 },
            photo: { fit: 'contain', keepAspect: true, focus: 'auto' },
            repeat:{ max: 4, gap: 0.03 },                           // для facts[]: сколько поместится
            optional: true }                                        // пустой слот не рисуется
Профиль = { id: 'wb', size: [900, 1200], safe: { top: .04, right: .04, bottom: .06, left: .04 },
            preview: { width: 300, minFontPx: 9 }, maxImages: 30, source: 'URL правил', checkedAt: 'ДД.ММ.ГГГГ' }
1ПрофильПлощадка задаёт размер холста и безопасную зону.
2РамкиДоли слота переводятся в пиксели относительно безопасной зоны и якорей.
3Данные по ролямtitle ← выбранный заголовок, facts[] ← факты по их id, photo ← вырезка или сцена. Пустые необязательные слоты пропускаются.
4autoFitКегль подбирается бинарным поиском между min и max той же функцией PS.textLayout, что и в экспорте. Сейчас кегль уменьшается по 1 px за шаг (card-series.js:14).
5ПагинацияФакты делятся по вместимости слота, а не «по 3 на слайд». Если не влезает и минимальный кегль, лишняя строка уходит на следующий слайд.
6Роли в сценеКаждый слой получает role и slotId. Обращение к слою — по роли, никогда по номеру.
7СамопроверкаВсе слои в безопасной зоне, переполнения нет, кегль не меньше минимума профиля.

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

Пересборка по ролям вместо растяжения Макет для WB · 3:4 brand title · autoFit photo · пропорции facts[] · по вместимости cta по ролям Тот же макет · 1:1 (Ozon) brand title · autoFit facts[] cta photo Сейчас: растяжение круг → эллипс x и ширина × kx, y и высота × ky 720×720 → 960×720 безопасная зона Слоты заданы в долях безопасной зоны Фото справа, текст слева, пропорции целы

Почему так

Новые шаблоны добавляются данными, а не кодом, и выглядят одинаково из мастера, очереди и таблицы. Роли дают смысл командам («все заголовки крупнее») и смене стиля. Пересборка по ролям не искажает фото и круги.

Как проверить
  • Один и тот же бриф подаётся в мастер, в серверную очередь и в сборку из таблицы. JSON сцен совпадает полностью.
  • Поиск в CI не находит обращений к слоям по номеру (nodes[1], nodes[4]).
  • Цепочка ресайзов 900×1200 → 1200×1200 → 900×1200: у фото и кругов соотношение сторон отклоняется меньше чем на 1%, все слои в безопасной зоне, переполнений нет.
  • Раздел без фактов не создаёт слайд. В ZIP-экспорте нет ни одной строки-заглушки (тест по архиву).
  • Каждая площадка в форме «Создать» либо создаёт серию, либо не показывается: список берётся из контракта товара (тест перебирает все пункты выбора).
  • Удалён мёртвый старый рендер render.js:98-201.

6.2. Тексты ИИ с проверкой происхождения

Сейчас тексты не пишет высокая

Модель по-прежнему не пишет тексты. Заголовки разделов презентации — константы «Знакомство», «О продукте» и т. д. (server/local-ai.mjs:9-10). На слайдах карточек стоят «О товаре» и «Преимущества» (card-layout.js:40, card-series.js:5). В коде прямо записано, что предложения о товаре от модели в материал не попадают (local-ai.mjs:35-36). Разбор брифа проверяет, что каждая цитата дословно есть в исходном тексте (brief-extraction.mjs:13).

Основа для проверки происхождения уже появилась. ProductBrief даёт каждому факту id (fact_1, fact_2…), источник и статус (product-contract.js:16-17, :53). Факт от модели получает статус «предложен» и блокирует скачивание, пока пользователь явно его не подтвердит (product-contract.js:37, :85).

Проблема. Продающих заголовков и коротких выгод нет, а это и есть видимая ценность ИИ. Единственный путь, по которому текст модели попадает в материал, — правка объекта. Там поле text до 4000 символов проверяется только по длине (editor-plan.js:7, :33). Этот файл после 08.09 не менялся.

Станет

Модель пишет только короткие строки в заранее заданные текстовые слоты. К каждой строке она обязана приложить номера фактов, из которых строка выведена. Затем строку проверяет обычный код, без второй модели.

1Задание слота{slot:'cover.title', maxChars:40, tone, facts:[{id, text}]}. В задание попадают только подтверждённые факты из ProductBrief с их нынешними id.
22–3 вариантаМодель возвращает JSON по схеме: [{text, fact_ids:['fact_3','fact_7']}].
3ВерификаторКаждая строка проверяется детерминированно (ниже).
4ЗаменаНепрошедшая строка заменяется исходным фактом, причина записывается в отчёт проверки.
5Показ источникаВарианты показываются с чипами фактов. Наведение на строку подсвечивает её источник.
6ЗаписьВ слой сохраняется node.source = {fact_ids, variant, model, prompt_version}.
verify(line, facts[fact_ids]) → pass | fail(причины)
  1. Длина ≤ maxChars слота; без переносов, ссылок, контактов и эмодзи.
  2. fact_ids не пусты и принадлежат этому товару.
  3. Числа: каждое число строки («350», «0,5», «1 200») встречается в указанных фактах.
  4. Единицы: «мл, г, кг, см, мм, Вт, мАч, %, °C, шт…» стоят при том же числе, что в факте.
  5. Отрицания: каждое «не / без / нет» из строки есть в факте. И обратно: если факт содержит
     отрицание при слове, которое строка повторяет («нельзя мыть»), строка его сохраняет.
  6. Бренды и латиница: каждое слово латиницей или имя собственное есть в фактах или в бренд-ките.
  7. Запретные заявления площадки («лучший», «№1», цены, скидки) — по набору правил из 6.5.
Нормализация перед сравнением: регистр, ё→е, неразрывные пробелы, «1 200» = «1200».

Тот же верификатор применяется к правке объекта. Если правка меняет text, новые числа, единицы, отрицания и бренды подсвечиваются в сравнении «было/станет». Применить такую правку можно только явным подтверждением «добавляю новое утверждение». Важная оговорка (она уже записана в коде, brief-extraction.mjs:1-3): проверка доказывает происхождение строки, а не её правдивость. Поэтому источник всегда виден пользователю.

Почему так

Модель пишет только формулировки, а утверждения о товаре по-прежнему исходят от автора. Главное отличие «ИИ не выдумывает» сохраняется, и при этом появляется ценность. Проверка обычным кодом надёжнее модели-судьи: она не ошибается так же, как первая модель, и работает за миллисекунды.

Как проверить
  • Набор ловушек из 30+ строк: выдуманные числа, чужие единицы, снятое отрицание («можно мыть» при факте «нельзя мыть»), чужой бренд. Верификатор отклоняет 100%.
  • Набор из 30 реальных брифов (по образцу tests/fixtures/outline-evaluation-ru.json). Считаем долю вариантов, прошедших проверку, и долю, выбранную продавцами в пилоте. Цель — от 70% оценка.
  • В экспорте нет текстового слоя, созданного моделью, без source.fact_ids (тест по сцене).
  • 3 варианта заголовка на прогретой модели готовы не дольше чем за 10 с оценка. Ориентир — медиана правки объекта 3 с (docs/27).

6.3. Сцена товара без искажения товара

Сейчас концепция высокая

С фото умеем только одно — удалять фон (server/photo-jobs.mjs:9, operation:'remove_background'). «Заменить фон» и «ИИ-фотосессия» — плитки-концепции, у которых уже указаны цены в кредитах (data.js:157-161, screens-ai.js:18). Веса FLUX.2 Klein, Qwen Image Edit и Z-Image есть в инвентаре GX10 (docs/24:23), но адаптера к ним нет.

База для этой работы сильная. Контракт цвета: от модели берётся только альфа-канал, RGB — из нормализованного исходника, alpha = floor(src × model / 255), пустая маска отклоняется (photo-pixels.py:117-149). Граф ComfyUI фиксированный, его узлы и типы проверяются, внешние API-узлы запрещены (server/comfy-background-contract.mjs).

Проблема. Нет главной платной функции рынка — фона и сцены. Площадки уже бесплатно раздают простое удаление фона. В публичной версии нет даже его: фото-провайдер не задан (6.4). Восемь из двенадцати ИИ-плиток по-прежнему «Концепция», и у всех двенадцати указана цена в кредитах.

Станет

Цепочка строится по образцу контракта удаления фона: генеративная модель рисует только фон, а товар всегда кладётся сверху из исходного снимка.

1МаскаBiRefNet на уменьшенной копии (6.4), затем маска масштабируется до полного размера.
2Новый фонQwen-Image-Edit-2511 (правка по тексту: «деревянный стол, утренний свет») или FLUX.2 klein 4B (генерация фона по тексту и референсу).
3Товар поверхИсходные пиксели товара накладываются по маске, как в нынешнем compose. Мягкая альфа остаётся только на кромке.
4ТеньКонтактная тень строится из маски (сжатие, размытие, смещение, прозрачность) обычным кодом на Pillow.
5Проверка целостностиВнутри ядра маски пиксели результата равны исходным. Площадь и положение маски совпадают. Иначе вариант отбрасывается.
62–4 вариантаПользователь выбирает. Брак перегенерируется бесплатно. В слое хранятся ссылки src, original и mask, а не копии base64.

Как именно получить фон — перерисовать весь кадр и потом наложить товар или перерисовать только область вне маски — решается сравнением на эталонном наборе сверить на эталонном наборе. Товар в обоих случаях берётся из исходника, поэтому модель не может изменить надписи и форму.

КомпонентНазначениеЛицензияВ платном продукте
BiRefNetмаска товараMITможно
Qwen-Image-Edit-2511правка и фон по текстуApache-2.0можно
FLUX.2 klein 4Bгенерация фонаApache-2.0можно
FLUX.2 klein 9B, FLUX.1 Kontext dev—некоммерческая лицензия FLUXнельзя без покупки лицензии BFL
Z-Image Turbo—не проверенапосле проверки лицензии
IC-Lightсогласование светаApache-2.0, но в демо используется BRIA RMBG 1.4 с некоммерческими ограничениямитолько с BiRefNet вместо BRIA
ComfyUIисполнитель графовGPL-3.0как отдельный сервис по HTTP (вывод исследования, не юридическое заключение)

Модели заносятся в реестр с полями license и commercial. В рабочем профиле сервер отказывается запускать модель с commercial:false. Генерация сцены может идти дольше 150-секундной аренды задания (ai-jobs.mjs:62), поэтому аренду нужно продлевать во время работы (6.8).

Почему так

Генеративная модель меняет мелкие детали товара: надписи, форму, цвет. Для маркетплейса это несоответствие товару и риск отказа модерации. Исходные пиксели поверх фона и проверка по маске гарантируют обещание экрана «Фото-студия»: товар не изменён, меняется только фон.

Как проверить
  • Тест целостности: внутри ядра маски 0 отличающихся пикселей, как сейчас 0/0/0 для удаления фона.
  • Эталонный набор из 30–50 товаров: стекло, мех, провода, белое на белом, этикетки. Доля вариантов без брака — от 80% оценка, цель пилота.
  • Время одного варианта на GX10 замеряется и показывается до запуска. Цель — 30–60 с оценка, замерить.
  • Попытка запустить в рабочем профиле модель с commercial:false завершается отказом (тест).

6.4. Фото-конвейер для каталога

Сейчас одно фото на сервер высокая

Путь «загрузка → нормализация в sRGB → BiRefNet в ComfyUI → альфа на исходный цвет» работает в тестах: 40 Node и 9 Python. После 08.09 код фото-конвейера не менялся: photo-service.mjs, photo-jobs.mjs и photo-pixels.py совпадают с прежними. В публичной версии он выключен: в compose нет PICSELLER_COMFY_URL (deploy/docker-compose.coolify.yml:12-22), а без него фото-сервис не создаётся (scripts/serve.cjs:15). Серверная партия зависимую обработку фото не принимает (card-batches.mjs:65). Четыре дыры остались, две из них аудит воспроизвёл.

  • Зависание. Если ComfyUI потерял задание (у него история хранится в памяти), исполнитель ждёт 1 с и повторяет запрос без предела (photo-service.mjs:61-63). Новое задание захватывается, только если на всём сервере нет других выполняющихся (photo-jobs.mjs:66). Одно потерянное задание останавливает фото всех пользователей.
  • Лимит 8 МБ на нормализованный PNG (photo-pixels.py:20, :58-61). Обычный снимок телефона на 12 Мп (JPEG 2,6 МБ) отклоняется, хотя интерфейс обещает до 32 Мп.
  • Падение сервера. Если ComfyUI или Python недоступны при старте, не запускается весь сервер (local.mjs:33, photo-service.mjs:16). Если подключить провайдер к публичному контейнеру в нынешнем виде, перезапуск ComfyUI будет останавливать весь сайт.
  • Нет пакета и понятных ошибок. Одно фото на сервер, 9 этапов и состояние «attention». Все ошибки сводятся к трём текстам (photo-jobs.mjs:50, :83). Отмена не убирает задание из очереди ComfyUI (photo-jobs.mjs:43-44).

Станет

1КэшКлюч = sha256 канонического входа + providerKey (модель, граф, версия). Оба уже вычисляются (photo-service.mjs:18, :49). Если результат с таким ключом есть, он возвращается сразу, без GPU.
2Уменьшенная копияВ модель уходит копия с длинной стороной 1024–2048 px. Полный кадр остаётся для итогового результата.
32–4 параллельноВ ComfyUI одновременно до K=2–4 заданий, вход и выход — в собственных подпапках picseller.
4НаблюдениеОдин общий цикл опрашивает /history. Если записи нет — /queue. Если задания нет нигде 3 проверки подряд — переотправка или код provider_lost. Общий дедлайн этапа — 10 мин.
5Маска на полный размерМаска масштабируется бикубически со сглаживанием края. Цвет берётся из полноразмерного исходника. Лимит результата — 32–48 МБ или сразу размер площадки.
6ПресетыОбрезка по маске, поля, белый или брендовый фон, контактная тень, размер WB или Ozon. Всё это обычный код на Pillow.
7ПакетPOST /v1/images/jobs:batch с N фото и одним ключом идемпотентности. Прогресс приходит потоком событий (6.8).
Статусы:  queued → running → succeeded | failed | cancelled      (вместо 9 этапов и «attention»)
Повтор:   до 3 попыток «хотя бы один раз» — безопасно, операция чистая: тот же вход → тот же результат
Отмена:   POST /queue {"delete": [promptId]} в ComfyUI для ожидающего задания (не глобальный /interrupt)
Старт:    фото-сервис стартует в состоянии «недоступен» и проверяет ComfyUI каждые 30–60 с;
          карточки, редактор и экспорт работают независимо
Ошибки:   too_large · unsupported_format · quota_exceeded · provider_unavailable · provider_lost ·
          empty_mask · timeout — у каждой текст «что сделать»; квота проверяется ДО отправки в модель

Почему так

Удаление фона — чистая функция: 2,1–3,7 с GPU на GX10 (docs/36, docs/37) и никаких побочных эффектов. Безопасный повтор с кэшем дешевле, чем сложная защита от повтора. По данным аудита, BiRefNet всё равно работает в 1024×1024 сверить для узла ComfyUI, поэтому уменьшенная копия ничего не теряет и снимает лимит для фото с телефона.

Как проверить
  • Тест «потерянное задание» на основе tests/photo-service.test.cjs: не позже чем через 3 цикла задание переотправлено или завершено с кодом, следующее не стоит в очереди.
  • JPEG 4032×3024 проходит. Результат того же размера, RGB внутри маски совпадает 0/0/0.
  • Пакет из 50 фото: все завершены, ни одно не висит дольше 10 мин. Повтор того же пакета берётся из кэша без обращений к GPU.
  • ComfyUI остановлен: сервер стартует, карточки и экспорт работают, фото-задания ждут и продолжаются после восстановления.

6.5. Проверка по правилам площадок

Сейчас QualityReport без правил площадок высокая

Появился единый QualityReport — общий модуль для браузера и сервера (product-contract.js:72-107). Ошибкой он считает четыре вещи:

  • факт от модели не подтверждён;
  • подтверждённый факт пропал со страниц;
  • в проекте нет фото;
  • название или площадка проекта расходятся с описанием товара, либо холст меньше 300 px.

Контакты и рекламные слова дают только предупреждения (product-contract.js:84-99). При ошибках окно скачивания блокирует кнопку «Скачать файл» (quality-ui.js:29-41). Тот же отчёт проверяется на входе серверной сборки (card-layout.js:28-29) и при выгрузке файла проекта (project-export.mjs:8-9). Тесты на отчёт есть.

Правил площадок в отчёте нет. Версия правил одна на все три площадки — picseller-core-2026-09-11, без источника, даты сверки и категорий (product-contract.js:10-15). Сама проверка выпуска это признаёт: «Официальные правила площадок не заявлены» (VERIFICATION.md:22). Не проверяются соотношение сторон, число изображений, контраст, безопасные зоны и целостность товара. Переполнение текста — только предупреждение. Подробный чекер с соотношением сторон и стоп-словами по-прежнему мёртв (app.js:154-175), а PS.check перекрыт уже в третий раз (quality-ui.js:17-22).

Проблема: отчёт даёт ложное чувство безопасности. Старый мастер, куда ведут три кнопки лендинга, создаёт проект без ProductBrief. Контракт достраивает факты из текста страниц со статусом «старый», и у такого проекта ошибки понижаются до предупреждений (product-contract.js:62-69, :83, :91-95). Поэтому демо-серия с фото наушников и заглушкой «Добавьте подтверждённые сведения» получает зелёное «Можно выпускать» (quality-ui.js:15). Я повторил это прогоном на копии: 0 ошибок, 2 предупреждения.

Серверный PNG-экспорт отчёт при постановке в очередь не читает (export-service.mjs, batch-export-*.mjs). Проверка срабатывает позже, в исполнителе: он строит файл через exportProjectFile, и тот отклоняет проект с потерянным фактом кодом 422 (export-service.mjs:49, project-export.mjs:8-9; проверено прогоном). Демо-серия проходит и там. Правила площадок при этом меняются: по вторичным источникам, WB обновил требования 28.08.2026, а у Ozon новые ограничения с 15.08.2026.

Станет

Строим поверх нынешнего QualityReport: его коды, уровни и общий модуль остаются. В модуль добавляются версионируемые наборы правил площадок и недостающие проверки.

RuleSet = { marketplace: 'wb', category: '*', photoType: 'main' | 'extra' | 'rich',
            version: '2026-08-28', source: 'URL официальной страницы', checkedAt: 'дата сверки',
            rules: [ { id: 'wb.ratio',   check: 'ratio',          params: { ratio: '3:4', tolerance: 0.01 }, level: 'error' },
                     { id: 'wb.size',    check: 'minSize',        params: { w: 900, h: 1200 },              level: 'error' },
                     { id: 'wb.main',    check: 'mainPhotoClean',                                           level: 'warn'  },
                     { id: 'wb.words',   check: 'bannedClaims',   params: { list: 'wb-2026-08' },           level: 'warn'  } ] }
Находка  = { rule: 'wb.contrast', node: 'n7', level: 'warn', message: 'Контраст 3,1:1 — нужно ≥ 4,5:1',
             fix: { op: 'set', target: { node: 'n7' }, params: { color: '@ink' } } }   // готовая команда из 6.6
1Заглушки и демоТексты-заглушки («Добавьте подтверждённые сведения», «Ваш новый любимый товар», «Мой бренд») и демо-файлы (headphones.png) — ошибка для любого проекта, включая старые.
2ПроисхождениеУ каждой строки есть fact_ids, и строка проходит верификатор из 6.2.
3ПереполнениеPS.textLayout(...).overflow — та же функция, что в экспорте. При выпуске это ошибка, а не предупреждение.
4Контраст ≥ 4,5:1Сравнивается цвет текста и фона под его рамкой: цвет подложки или медиана пикселей фото по сетке.
5Кегль на телефонеsize × ширина превью / ширина холста не меньше порога профиля. Сейчас порог — 9 px при превью 300 px.
6ФорматПропорции, размер, число изображений не больше maxImages, вес файла при экспорте.
7Товар целДля сцен (6.3) — флаг проверки целостности и совпадение маски.
8Отчёт везде«Проверено по правилам WB от 28.08.2026 (источник)». Пункты со статусами ✓, ⚠, ✕ и общий счёт. Тот же отчёт проверяется уже при постановке серверного экспорта и публикации, а не только в исполнителе.

Кнопка «Исправить» запускает тот же цикл, что и любая правка: предпросмотр, затем применение, версия и одна отмена. Безопасные зоны показываются слоем в редакторе по переключателю. Наборы правил — это данные с версией. При выходе новой версии все материалы этой площадки перепроверяются, а непрошедшие попадают в «Нужно внимание» (6.10). Числа в нынешних правилах (data.js:7-32) перед переносом нужно сверить с официальными документами площадок сверить с документацией.

Почему так

Каждая проверка — отдельная функция «сцена → находки». Её легко протестировать и легко обновить вместе с правилами. «Исправить» как готовая команда использует уже проверенный механизм правок и отмены, а не отдельную логику.

Как проверить
  • Тест не пропускает набор правил без source и checkedAt.
  • Демо-серия из старого мастера получает «Нужно исправить перед выпуском». Её не пропускают ни браузерное скачивание, ни постановка серверного экспорта (e2e по нынешнему сценарию лендинга).
  • Тестовые сцены с заведомыми нарушениями: неверное соотношение, контраст 3:1, кегль 6 px на превью, 31 изображение, «хит продаж» на обложке. Каждое нарушение находится. «Исправить» его устраняет, повторная проверка проходит чисто, одна отмена возвращает исходное.
  • Контраст считается по формуле WCAG. Пример: #777777 на белом даёт 4,48:1 и не проходит, #767676 даёт 4,54:1 и проходит.

6.6. Правки «укажи и скажи»

Сейчас 1 объект / 3 операции средняя

Правка с ИИ работает с одним объектом: до 8 изменений, запрос до 800 символов (editor-plan.js, docs/26). Оформление серии — по-прежнему 3 операции (фон, цвет текста, размер ±10%) на странице или во всей серии (series-plan.js:5). Добавились три вещи:

  • фильтр по роли текста: title, benefit, body, brand (series-plan.js:15);
  • составной план до 8 операций (:35-40);
  • проверка области регулярками без модели, checkScope: если модель выбрала не ту область, план отклоняется (:23-32).

Без модели работают быстрые кнопки «Крупнее», «Мельче», «Вместить в блок», «Фото крупнее/меньше» (editor-simple.js, docs/82–83). Даже «сделай фон белым» словами идёт через большую модель: обычно 3–7 с, один раз около 70 с, 11 из 12 верно (docs/67). В публичной версии текстовые команды серии выключены (PICSELLER_SERIES_COMMANDS: '0', deploy/docker-compose.coolify.yml:22). Это по-прежнему два разных языка команд в двух окнах, и изображение модель не видит.

Многое уже сделано хорошо: сравнение «Сейчас / После», версия «Перед правкой с ИИ», одна отмена, пересчёт перед применением и отказ, если сцена изменилась (docs/26, docs/67).

Станет

1Выделение → контекстОдин или несколько слоёв, слайд, серия или секция сайта. Над полем команды виден чип контекста. В запрос идут роли, тексты и рамки выделенного.
2Словарь без моделиЦвета словами и HEX, «на N%», «крупнее», «вся серия / эта страница», «заголовки / факты / цены», «по центру», «убери фон». Если фраза распознана, план готов мгновенно.
3Модель для сложногоТолько для нераспознанного. Модель отвечает планом в том же узком языке. Если план не прошёл проверку, делается один автоповтор с текстом ошибки.
4«Было/станет»Список операций и превью затронутых слайдов. До применения — проверки из 6.5.
5ПрименитьПлан применяется атомарно. Создаётся серверная ревизия с меткой «ИИ: …», откат — одной отменой.
6«Спросить»Ответ-совет без операций. Проект не меняется.
Операция = { op: 'set' | 'scale' | 'align' | 'move' | 'resize' | 'setStyle' | 'replacePhoto'
                 | 'removeBackground' | 'reorder' | 'hide' | 'show',
             target: { node: id } | { nodes: [id…] } | { role: 'title' | 'facts' | 'price' | …, scope: 'page' | 'series' }
                   | { page: n } | { series: true } | { section: id },              // section — для сайта (6.9)
             params: { … } }      // диапазоны и типы — из единой схемы сцены; цвета — из палитры бренда
План     = { ops: [Операция, … не больше 20], explain: 'коротко по-русски' }
Текст (op:'set', text) — только через верификатор 6.2; новое утверждение требует явного подтверждения.

Почему так

Частые правки (цвет, размер, выравнивание) должны быть мгновенными и бесплатными: так делают Replit, Lovable и Bolt. Модель нужна там, где нужен смысл. Один язык для слоя, роли, страницы, серии и секции сайта вместо двух — это меньше кода и одна история правок.

Как проверить
  • Набор из 50 русских команд (расширение tests/fixtures/series-commands-ru.json): от 70% разбирается словарём быстрее 50 мс оценка. Остальные модель решает не хуже нынешних 11 из 12.
  • До «Применить» проект не меняется (тест, как сейчас для правки объекта).
  • Одна отмена откатывает весь план. Ревизия с меткой «ИИ: …» видна в «Версиях».
  • Режим «Спросить» никогда не создаёт ревизию.

6.7. Данные и версии: сервер — источник истины

Сейчас работа в браузере критично

Сделан шаг навстречу: общая библиотека «Проекты» показывает браузерные проекты и серверные версии в одном списке, с меткой места хранения (unified-library.js:33-49). Повторное «Открыть» той же серверной ревизии продолжает локальные правки, а не плодит копию (screens-cloud.js:42-45). Серверные партии пишут проекты сразу на сервер. На каждую серверную ревизию сохраняется неизменяемый снимок ProductBrief и QualityReport (api.mjs:109, drizzle/0022).

Архитектура при этом не изменилась. Работа хранится одной записью workspace в IndexedDB браузера (browser-storage.js:36-42, файл не менялся). PS.save() каждый раз упаковывает состояние целиком (foundation.js:15). Сам интерфейс честно пишет: «Редактор хранит текущие правки в браузере; кнопка „На сервер“ создаёт отдельную версию» (unified-library.js:45). Открытие более новой серверной ревизии создаёт новую локальную копию (screens-cloud.js:54, id:uid('p')). Таблиц товаров, брендов, папок и библиотеки фото нет: в db/schema.ts 27 таблиц, но не эти. Версий по-прежнему три вида: отмена (40 полных копий, около 80 МБ при фото 2 МБ), локальные версии (до 40) и серверные ревизии. Требование «открыть с другого устройства» не выполняется.

При этом сервер уже умеет главное. Есть PUT /v1/projects/:id/revisions с expected_revision и ответом 409 (api.mjs:97-112, :308-316). У ревизии есть метка label (schema.ts:16-20). Восстановление создаёт новую ревизию «Восстановлена версия N» (api.mjs:317-319). PS.flushStorage() ждёт подтверждения записи перед отправкой задания (docs/66).

Станет

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

при правке(проект):
  применить в памяти → пометить «есть несохранённое»
  ждать 1,5 с паузы (сразу — при уходе со страницы, сворачивании, перед заданием или экспортом)
  outbox.put({projectId, baseRevision, scene, at})     // IndexedDB; ждём подтверждения записи, как flushStorage
  PUT /v1/projects/:id/revisions {project: scene, expected_revision: baseRevision, mode: 'auto'}
    200   → baseRevision = ответ.revision; outbox.delete; статус «Сохранено · версия N»
    409   → загрузить серверную версию; если поверх неё нет локальных правок — тихо обновить;
            иначе выбор: «Оставить мою» (новая ревизия поверх) / «Взять с сервера» / «Сохранить копией»
    сеть  → статус «Ждёт сети», повтор с нарастающей паузой; outbox цел после перезагрузки

склейка на сервере (одна транзакция):
  если последняя ревизия — автоверсия того же сеанса, моложе 10 мин, без метки и без ссылок
  из экспорта или публикации → переписать её содержимое и увеличить номер на 1
  (одна строка в истории, проверка 409 работает как раньше); иначе — новая строка
  • Именованная версия — это метка label на существующей ревизии. Поле уже есть. Метки «опубликовано: WB / Ozon / сайт» ставит публикация (6.9, 6.10).
  • Фото по хешу. В IndexedDB фото хранятся как Blob по sha256 в отдельном хранилище. На сервер сначала уходит вопрос «такой файл есть?» по хешу содержимого (соль владельца сервер добавляет сам). Тело отправляется, только если файла нет. Сейчас байты уходят заново при каждом сохранении (screens-cloud.js:35).
  • Новые таблицы: products, brands, folders, library_assets. В products переезжает нынешний ProductBrief: факты с id, источником и статусом уже есть, добавляются артикулы WB и Ozon. Сейчас бриф живёт внутри каждого проекта отдельно. Материалы ссылаются на product_id и fact_ids, и на этих ссылках держится поддержка из 6.10.
  • Перенос при первом входе. Прочитать запись workspace, по каждому проекту создать серверный (повтор не создаёт дублей, ключ — локальный id), фото — по хешу, затем бренды и папки. После этого поставить отметку «перенесено» и хранить локальную копию 30 дней как резерв.
  • Отмена на патчах {op, path, before, after} (Immer): вместо фото в патче хранится id файла, серия нажатий стрелок склеивается в один шаг, лимит считается в байтах, выделение восстанавливается.

Почему так

Требование «открыть с другого устройства» выполняется само собой. Вместо трёх историй остаётся одна. Фото не пересылаются повторно. Оптимистичная блокировка (сохранение «поверх версии N» с отказом 409) уже есть и проверена тестами на настоящей SQLite.

Как проверить
  • Два устройства: правка на первом видна на втором после обновления не позже чем через 3 с. Одновременная правка даёт 409 и понятный выбор, правки не теряются (e2e).
  • Сеть выключена, сделано 20 правок, вкладка перезагружена, сеть включена: все правки на сервере, дублей нет.
  • Повторное «Открыть» не меняет число проектов.
  • Час непрерывной правки оставляет в истории порядка 6 автоверсий, а не сотни оценка, зависит от окна склейки.
  • История отмены: 40 шагов при фото 5 МБ занимают меньше 5 МБ памяти. Сейчас около 80 МБ при фото 2 МБ.

6.8. Очередь заданий: одна модель и живой прогресс

Сейчас замок, опросы, больше очередей средняя

Машин состояний стало больше. К ai_jobs, photo_jobs и export_jobs добавились партии (card_batches, card_batch_rows, card_batch_attempts), выгрузки каталогов (batch_export_*) и почта бота (bot_inbox, bot_dispatch, bot_outbox) — всего 27 таблиц в db/schema.ts. Каждая из этих таблиц повторяет захват, аренду и отмену.

На весь процесс один замок модели (local-ai.mjs:65). Пока модель занята, разбор брифа, команды серии и синхронная правка сразу получают 429 ai_busy (local-ai.mjs:84, 97, 109, 123). Задания модели выбираются в порядке поступления по всем аккаунтам (ai-jobs.mjs:75). Партии частично защищены: диспетчер за один проход берёт не больше 10 строк на аккаунт (card-batches.mjs:96). Ожидание модели теперь ограничено 30 минутами и показывается пользователю (ai-jobs.mjs:7).

Клиенты опрашивают сервер каждые 2, 3 и 5 с (editor-server-jobs.js:36, local-ai.js:49, task-hub.js:74), а прогресс пишется в базу (ai-jobs.mjs:98). После сбоя модельное задание получает статус «Повторите вручную» (ai-jobs.mjs:68). keep_alive передаётся только при холодной загрузке (local-ai.mjs:88). Хорошее тоже есть: допуск холодной загрузки по свободной памяти с возвратом того же задания в очередь (cold-load-guard.mjs, ai-jobs.mjs:105-110).

Telegram-бот: 8 серверных модулей (server/bot-*.mjs, telegram-transport.mjs) и 41 тест, но живого канала нет. PICSELLER_BOT_ID не задан (scripts/serve.cjs:17), поэтому привязка публично отвечает 503 (api.mjs:132). Бот умеет только текстовую презентацию.

Станет

jobs      (id, workspace_id, kind, class: 'interactive' | 'background', status, input, result_ref,
           idempotency_key, attempts, claim_token, lease_until, created_at, updated_at)
job_steps (job_id, n, kind: 'brief' | 'plan' | 'text' | 'image' | 'layout' | 'check' | 'export' | 'publish',
           resource: 'cpu' | 'model' | 'gpu-image' | 'net', status, attempts, result_ref, error_code)

для каждой полосы ресурса (cpu, model, gpu-image, net):
  кандидаты = готовые шаги этой полосы (зависимости выполнены)
  1. сначала class = interactive, затем background
  2. внутри класса — по кругу между аккаунтами: аккаунт, который дольше всех не обслуживался,
     и у него — самый старый шаг
  3. лимиты: 1 активный interactive и N фоновых на аккаунт
  4. полоса model: допуск по памяти ДО отправки; при отказе — назад в очередь с тем же id (как сейчас)
  захват: UPDATE … SET claim_token, lease_until WHERE status = 'queued'        // как сейчас
  длинный шаг: продление аренды каждые 20–30 с (сцена из 6.3 идёт дольше 150 с)
1Поток событийGET /v1/jobs/events (SSE — сервер сам присылает события). Один поток на вкладку: статус, шаг, прогресс, частичный результат вроде готового слайда. Опрос остаётся только запасным путём при обрыве.
2Без 429Синхронные brief-proposal, series-proposal и editor-proposal ставятся в очередь interactive, а ответ ждут по потоку с тайм-аутом.
3АвтоповторОдин повтор с исправляющим промптом при неверном JSON. При тайм-ауте — повтор после прогрева.
4ПрогревКогда пользователь открывает «Создать» или редактор, уходит фоновый запрос с keep_alive через тот же допуск по памяти.
5Профиль моделейДля каждой операции заданы модель, контекст, keep_alive, тайм-аут, версия промпта и ссылка на прогон оценки. Режим «любая загруженная модель» (local-ai.mjs:71) остаётся только для разработки.

Ограничение уже проявилось в публичной версии. Допуск по памяти работает только на Linux-хосте самого Ollama с адресом 127.0.0.1:11434 (cold-load-guard.mjs:21). Контейнер обращается к модели по адресу http://ollama:11434, поэтому в compose загрузка модели выключена (PICSELLER_OLLAMA_ALLOW_LOAD: '0') с пометкой «до появления общего шлюза допуска» (deploy/docker-compose.coolify.yml:17-21). ИИ публично работает, только если qwen2.5:32b уже загружена. Нужен небольшой агент ресурсов на GX10, который отдаёт MemAvailable по внутренней сети.

Почему так

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

Как проверить
  • Нагрузочный тест: аккаунт A ставит 10 фоновых заданий, аккаунт B — одно интерактивное. Задание B стартует в ближайший цикл и отвечает не дольше чем за 15 с на прогретой модели.
  • Три пользователя работают одновременно — ни одного ответа 429 ai_busy (e2e).
  • Поток событий обрывается, клиент восстанавливается по Last-Event-ID и не пропускает статусы.
  • Процесс падает посреди шага. После перезапуска шаг повторён один раз или завершён с кодом. Повторных платных вызовов нет.

6.9. Сайт-витрина бренда

Сейчас нет критично

Витрины нет ни в коде, ни в документах, ни в плане фаз F0–F7. Слово «витрина» встречается только в требованиях площадок (data.js). screens-site.js — это маркетинговый сайт самого PicSeller.

Опора уже есть:

  • приложение работает публично на https://picseller.24oros.ru из контейнера, с входом по приглашению;
  • адрес, на котором слушает сервер, настраивается (local.mjs:22, :25-28, :87);
  • wildcard DNS *.24oros.ru существует, Traefik и Let's Encrypt работают;
  • Telegram-транспорт для уведомлений о заявках написан (telegram-transport.mjs), но не подключён.

Мешают две вещи. Сервер отвечает 403 на любой заголовок Host, кроме своего (local.mjs:42). А статику он отдаёт без проверки сессии (local.mjs:79-84) — именно так публично открылась папка /docs/ (раздел 7).

Станет: модель страницы

Страница — это JSON из типизированных секций по образцу Puck: {type, props} только разрешённых типов. Сервер проверяет его так же строго, как сцену (validateScene). Двенадцать типов: header, hero, benefits, products (каталог), product (галерея из серии и характеристики), gallery, story («О бренде» из презентации), reviews, faq, marketplaces (кнопки WB, Ozon, ЯМ), lead-form, footer. В reviews попадают только отзывы, которые селлер вставил сам или импортировал со ссылкой на источник. Модель отзывы не пишет.

{ "type": "hero",
  "props": { "title":    { "text": "Кружка «Мох» 350 мл", "fact_ids": ["fact_1"] },
             "subtitle": { "text": "Ручная формовка, глазурь без свинца", "fact_ids": ["fact_2", "fact_3"] },
             "image":    "asset:<sha256>",
             "cta":      { "label": "Купить на WB", "href": "/go/p-mug/wb" } } }

Рендер детерминированный: HTML и CSS из шаблонов секций, бренд-кит превращается в CSS-переменные. Изображения — WebP, отрисованные тем же серверным рендером из сцен. Пользовательского JS нет. Генерируются sitemap.xml, robots.txt, мета-теги и описания фото. Простые правки (текст, фото, цвет) делаются в инспекторе без модели. Перестройка секций идёт через язык операций из 6.6 с target:{section}.

Станет: публикация и откат

Поток публикации витрины 1. Проверка SEO, описания фото, ссылки, контраст, согласие в форме 2. Сборка версии N HTML и WebP из сцен и бренд-кита 3. Загрузка sites/slug/vN/ + манифест sha256 4. Переключение published_version = N одной транзакцией 5. Проверка HTTPS 200, X-Site-Version = N, сертификат ≥ 14 дней да нет Опубликовано версия N, метка в истории Автооткат назад на версию N−1 + «Нужно внимание» Ручной откат переключить указатель назад, без пересборки Покупатель moh.24oros.ru Traefik *.24oros.ru, приоритет 1 сертификат через DNS-01 PicSeller: маршрут по Host slug → published_version без cookies, строгий CSP Файлы версии sites/moh/v8/index.html *.webp · sitemap.xml Раздача витрины
  • Атомарное переключение. Сборка пишется во временный каталог и переименовывается в sites/<slug>/v<N>/. Указатель sites.published_version меняется в одной транзакции с записью в журнал site_publications. Хранятся 10 последних версий. Откат — это переключение указателя назад: мгновенно и без простоя.
  • Раздача тем же сервером PicSeller. Если Host равен <slug>.24oros.ru или подтверждённому своему домену, файл отдаётся из каталога опубликованной версии. Эта ветка стоит до проверки сессии, без cookies приложения, со строгим CSP. Отдельное приложение Coolify на каждый сайт не нужно.
  • Traefik. Один маршрут HostRegexp для *.24oros.ru с минимальным приоритетом. Так он не перехватит поддомены других приложений Coolify (например, pipetest.24oros.ru). Служебные имена (app, api, www, ops, picseller и уже занятые поддомены) нельзя взять как адрес витрины. Публичный трафик сейчас приходит через 217.199.253.218 (раздел 7). Где именно завершается HTTPS — на этом узле или на Traefik GX10, — в репозитории не описано, а от этого зависит, где настраивать маршрут и сертификат сверить.
  • Сертификат *.24oros.ru выпускается через DNS-01: Let's Encrypt выдаёт wildcard только так. Без него у каждого поддомена будет свой сертификат, а лимит — 50 сертификатов на домен в неделю. Для DNS-01 нужен API у DNS-провайдера зоны (NS Timeweb) или делегирование _acme-challenge через CNAME на acme-dns сверить с документацией Traefik/lego и Timeweb.
  • Свой домен. Селлер добавляет CNAME shop.brand.ru → <slug>.24oros.ru и TXT _picseller.shop.brand.ru с токеном. PicSeller проверяет обе записи, добавляет домен в маршрут (файловый провайдер Traefik или API Coolify сверить), получает сертификат через HTTP-01 и проверяет HTTPS. Для корневого домена (brand.ru) CNAME на корень нельзя, поэтому нужна A-запись на публичный адрес входа. Сейчас это 217.199.253.218; адрес нужно сверить после решения по sagr.
  • Заявки. Форма отправляет POST /f/<site>/lead. Заявка ложится в таблицу leads (сайт, имя, контакт, сообщение, время согласия, страница, статус), селлеру уходит уведомление в Telegram. В сообщении минимум данных, полный контакт — в кабинете. Защита от спама: скрытое поле и лимит по IP. Срок хранения и согласие на обработку персональных данных (152-ФЗ) нужно согласовать с юристом.
  • Клики. Кнопка «Купить на WB» ведёт на /go/<товар>/<площадка>. Клик записывается, затем следует редирект 302 на карточку площадки с utm_source=picseller&utm_medium=site&utm_campaign=<slug>. Наш счётчик работает независимо; учитывает ли UTM аналитика самой площадки, нужно проверить сверить.
Набросок меток Traefik для маршрута витрин
# Набросок для Traefik v3 (сверить с версией прокси в Coolify). Метки контейнера PicSeller:
traefik.http.routers.ps-sites.rule=HostRegexp(`^[a-z0-9-]+\.24oros\.ru$`)
traefik.http.routers.ps-sites.priority=1                       # ниже любых Host(`x.24oros.ru`) других приложений
traefik.http.routers.ps-sites.entrypoints=https
traefik.http.routers.ps-sites.tls.certresolver=<резолвер с DNS-01>
traefik.http.routers.ps-sites.tls.domains[0].main=24oros.ru
traefik.http.routers.ps-sites.tls.domains[0].sans=*.24oros.ru
traefik.http.services.ps-sites.loadbalancer.server.port=4332   # порт контейнера (Dockerfile:34)

Почему так

Витрина собирается из тех же данных — товар, факты, серия, бренд, — поэтому второго источника правды нет. Статика быстрая, дешёвая и безопасная. Атомарное переключение даёт откат без простоя. Один wildcard-маршрут заменяет отдельное приложение на каждого клиента.

Как проверить
  • e2e публикует версию 2, затем откатывает на 1. HTTPS-ответ и X-Site-Version меняются не дольше чем за 5 с. Непрерывный опрос во время переключения не видит ни одной ошибки.
  • Мобильная главная: Lighthouse от 90 по скорости и доступности, вес до 1 МБ оценка, цель.
  • Заявка с формы появляется в leads и в Telegram не дольше чем за 10 с. Без согласия форма не отправляется.
  • «Купить на WB» даёт 302 на правильный артикул с UTM, клик засчитан.
  • После включения wildcard-маршрута pipetest.24oros.ru и другие приложения Coolify отвечают со своими сертификатами.

6.10. Публикация в маркетплейс и поддержка

Сейчас заглушка высокая

Без изменений с 08.09. Кнопки публикации открывают PS.demoOnly('Публикация в маркетплейс — фаза 4') (foundation.js:36-37). Экран интеграций не сохраняет ключ и просто ставит статус «подключено» (screens-app.js:208-212). При этом тарифы в data.js и подвал сайта (app.js:125) обещают «публикацию по API». Серверного кода публикации нет: в плане аудита Codex это фаза F7, и она не начата.

Опора для привязки появилась. В ProductBrief есть артикул продавца (product-contract.js:41-42). В серверной партии артикул обязателен и уникален (card-batches.mjs:64), а PNG-каталог хранит SHA-256 каждого файла. Артикулов WB и Ozon (nmID и product_id) в данных нет. По данным исследования, ни один генератор визуала в России публично не подтвердил публикацию с откатом, так что ниша свободна.

Станет: Wildberries, затем Ozon

1КлючТокен WB с категорией «Контент». Для привязки хватит режима «только чтение», для записи он не подойдёт. Токен проверяется при подключении и хранится в базе зашифрованным (6.7). На экране видны только последние символы.
2ПривязкаPOST /content/v2/get/cards/list возвращает карточки продавца. Материал сопоставляется с карточкой по артикулу продавца, сомнительные пары подтверждаются вручную.
3«Было/станет»Нынешний список фото карточки сравнивается с файлами серверного экспорта утверждённой ревизии. Проверка 6.5 должна пройти.
4Снимок для откатаТекущие фото WB скачиваются в наше хранилище.
5ПодтверждениеПользователь явно нажимает «Опубликовать».
6ОтправкаPOST /content/v3/media/save с публичными HTTPS-ссылками на файлы экспорта (подписанные, срок жизни около суток). По нашим данным, метод заменяет весь список фото карточки.
7Чтение обратноПовторное чтение карточки с паузами, пока WB обработает. Сверяются число и порядок фото, ошибки читаются из списка ошибок карточек.
8ЖурналЗапись в publications: канал, материал, ревизия, карточка, снимки «было» и «стало», статус, request_id, кто и когда. На ревизии появляется метка «опубликовано: WB».
9ОткатТот же media/save со ссылками на сохранённый снимок «было».

Ozon подключается по той же схеме: POST /v1/product/pictures/import с заголовками Client-Id и Api-Key, первое изображение становится главным. Статус импорта проверяется отдельным методом. Эндпоинты, версии методов, лимиты частоты и то, что media/save перезаписывает список, взяты из исследования и диагноза. Перед реализацией их нужно сверить с официальной документацией WB и Ozon сверить с документацией. Публичный адрес для шага 6 уже есть (picseller.24oros.ru). Не хватает двух вещей. Первая — маршрут, который отдаёт отдельный файл слайда по подписанной ссылке без входа. Вторая — хранение экспорта файлами вне SQLite: сейчас PNG лежат внутри ZIP-архивов в базе (раздел 7).

Станет: поддержка через события

События поддержки Правила площадки обновились новая версия набора правил Цена или факт изменились товар — источник правды Сертификат истекает или сайт не отвечает Новая заявка с сайта форма → таблица leads Нужно внимание колокольчик и блок на главной + действия Найти затронутое по fact_id, площадке, сайту → предложения Сравнить было/станет по всем, выбрать нужные Применить новые ревизии → WB · Ozon · сайт журнал и откат Заявка: Telegram селлеру + список «Заявки» статус: новая / в работе / закрыта Сертификат Traefik продлевает сам; событие — только если продление не удалось.
  • Правила обновились. Все материалы этой площадки перепроверяются (6.5), непрошедшие попадают в событие: «WB обновил требования 28.08.2026 — 2 карточки проверить».
  • Цена или факт изменились. Материалы и секции сайта ссылаются на fact_ids и поля товара (6.7). Поэтому изменение одного факта точно находит всё затронутое: «Цена изменилась 990 → 1 090 ₽. Затронуто: сайт, презентация».
  • Пакетное обновление идёт через тот же поток «предложение → сравнение → применение». Для каждого материала создаётся отдельная ревизия и отдельная отмена. Повторная публикация идёт с журналом и откатом.
  • Уведомления о заявках и событиях можно отправлять через уже написанный транспорт бота с долговечной очередью доставки (bot-dispatch.mjs, bot-delivery-control.mjs). Включать это стоит только после ограниченного живого пилота: токена и рабочей службы сейчас нет.

Почему так

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

Как проверить
  • Тестовая карточка: публикация двух товаров, чтение обратно совпадает по числу и порядку фото. Откат возвращает исходный список (сверка по хешам скачанных фото).
  • Токен без категории «Контент» даёт понятную ошибку до отправки.
  • Обрыв сети на шаге отправки: повтор по ключу без дубля, в журнале есть request_id.
  • Изменение цены создаёт событие ровно с затронутыми материалами (тест по fact_id). Пакетное обновление создаёт ревизии с одной отменой на материал.

7Скрипты и инфраструктура: что упростить

Публичная версия уже работает: https://picseller.24oros.ru, контейнер container-preflight-15 в Coolify на GX10, вход по приглашению. Держится она на незакоммиченном коде, разовых скриптах выкладки и ручных бэкапах на том же диске, а внутренние документы открыты всем. Ниже — что закрыть срочно, что упростить, как выкладка устроена сейчас и какой она должна стать.

Срочно: внутренние документы открыты без входа

Цепочка из трёх шагов:

  • сборка копирует все docs/*.md в prototype/docs (scripts/build.cjs:5-8);
  • Dockerfile запускает эту сборку и кладёт папку в образ (Dockerfile:8, :13, :26);
  • сервер отдаёт prototype/ без проверки сессии (server/local.mjs:79-84).

В итоге на боевом домене без входа доступны 99 документов, в 26 из них — детали инфраструктуры (подробнее — проблема 21). Проверено 02.10: /docs/89-container-image.md отвечает 200.

Мера на сегодня — закрыть /docs/ правилом прокси или сервера. В следующем образе внутренних документов быть не должно (ниже, «Что доработать в существующем Dockerfile»).

Риски, которые не видны снаружи
  • Код не в git. Последний коммит — df16a68 от 08.09. Работа фаз F0–F3 — это 316 записей git status, или 1486 файлов, из них 1105 — копии исходников в deploy/container-*. Dockerfile тоже не закоммичен. Связь выпуска с кодом держится только на SHA-256 файлов в образе.
  • Маршрут трафика не описан. DNS *.24oros.ru сейчас указывает на 217.199.253.218 (проверено 02.10), а в docs/87 записан 95.105.82.3. По правилу владельца от 24.09 публичный вход должен идти через сервер sagr; доступ к нему открыт 01.10, но приложение туда не переносилось. Как трафик с 217.199.253.218 попадает на GX10, в репозитории не описано.
  • Сбои никто не видит. 01.10 HTTPS-запросы около 15 минут зависали. Внешнего мониторинга нет, а /healthz отвечает 404.
ЧтоСейчасСтанетЗачем
Деплой Есть двухэтапный Dockerfile под ARM64: node 24.20.0, Python с Pillow, Playwright 1.62.1 и Chromium (Dockerfile:1-36). Есть приложение Coolify на picseller.24oros.ru; в compose заданы restart: unless-stopped, init, read_only (deploy/docker-compose.coolify.yml:3-35). Адрес настраивается (PICSELLER_HOST), доверие к X-Forwarded-For — только по флагу PICSELLER_TRUST_PROXY (local.mjs:25-28). Нет /healthz, мониторинга и автоотката. Образ собирается на Mac и переносится tar-архивом. Compose указывает preflight-14, а работает 15 (docker-compose.coolify.yml:4). Образ собирается на сервере или в CI и попадает в registry с тегом коммита. Выкладка — Gitea → вебхук → Coolify или один скрипт с параметрами. /healthz с версией, smoke-проверка по публичному адресу, автооткат на прежний образ, запись в ~/ai/CHANGELOG.md. Выкладка повторяема и проверяема. Сбой виден сразу, откат делается одной командой.
Фиксация в git HEAD — df16a68 от 08.09. Вне коммитов 1486 файлов: 71 изменённый и 1415 новых. Dockerfile, compose, ProductBrief, партии и бот есть только в рабочем дереве. validation/ и research/ в .gitignore, хотя документы ссылаются на них 148 раз. Коммиты по фазам F0, F1, F2, F3 без deploy/container-* и артефактов. Тег выпуска preflight-15. SHA коммита — в метке образа и в /v1/me. Становятся возможны ревью, поиск регрессии и откат по коммиту. Работа не пропадёт вместе с диском одной машины.
deploy/ и скрипты выкладки В deploy/ 1146 файлов (38,5 МБ): 41 файл верхнего уровня (18 .sh, 10 .py) и 9 папок container-03…11 с копиями исходников. В git из них только 5 файлов. Каждый выпуск — свой разовый скрипт update-f0…f3-preflight-12…15-gx10.py с зашитыми идентификаторами и путями. Штатный gx10-deploy.sh не используется. Один скрипт с параметрами: сборка, бэкап, миграция, smoke, откат. Compose из одного шаблона. Папки container-* удалить. Меньше ручных шагов и расхождений вида «compose говорит 14, работает 15».
Резервные копии Перед каждым выпуском делаются ручные online- и stopped-копии, и они проходят проверку. Но лежат они в ~/ai/picseller-app рядом с рабочей базой, на том же диске GX10 (VERIFICATION.md:41). Рабочая база смонтирована в контейнер прямо с этого диска (docker-compose.coolify.yml:23-30). Расписания и копии вне сервера нет. Litestream (Apache-2.0) непрерывно реплицирует SQLite в S3-совместимое хранилище вне сервера; режим WAL уже включён (local-adapter.mjs:8). restic раз в час копирует фото. Ежедневный createBackup с ротацией 7 + 4. Раз в месяц — автоматическое восстановление с проверкой и smoke-запуском. Потеря данных ограничена минутами. Копия переживает отказ диска. Проверенное восстановление — единственное доказательство, что бэкап рабочий.
Проверки Скриптов 98, из них check-* — 73. Больше 50 запускают Playwright, которого нет в package.json. npm test — 421 тест без настоящего браузера. CI нет. Доказательства — 64 JSON в tests/evidence и 69 файлов (15 МБ) в .codex/evidence. @playwright/test в devDependencies. 5–10 сценариев «золотого пути» в CI на каждый пуш, включая ширину 390 px. Smoke после выкладки: /healthz, вход тестовым аккаунтом, сохранение, экспорт. Доказательства — артефакты CI. Проверка воспроизводима и не устаревает, ручные шаги релиза исчезают. Для Gitea Actions нужен раннер на GX10 сверить, есть ли.
Миграции SQL-миграций 24, в журнале Drizzle 7 (0000–0006), остальные 17 вне журнала. Проба drizzle-kit generate на копии создала новый файл 0007 с 18 повторными CREATE TABLE. Мигратор применил бы его по алфавиту и упал (local-adapter.mjs:12-18). docs/11 по-прежнему советует эту команду. Один источник истины. Вариант А: Drizzle — пересоздать снимки, в CI проверять, что generate ничего не меняет. Вариант Б: чистые SQL-миграции с контрольными суммами, schema.ts удалить. Бэкап перед миграцией при старте. Изменения только расширяющие. Штатная команда не ломает запуск. Откат образа не требует отката базы.
Очистка данных Партии архивируются, PNG-каталоги удаляются с освобождением места, история выгрузок ограничена 100 (card-batches.mjs:85, docs/98). Но удалений фото, проектов, ревизий и корзины по-прежнему нет. ZIP лежат BLOB-ами в SQLite, теперь в двух таблицах (drizzle/0007, 0020), и раздувают каждую копию. Рецептов можно сохранить до 100, удалить их нельзя. Ежедневная очистка: корзина старше 30 дней, фото без ссылок старше 7 дней, ревизии «последние 50 + именованные + одна в день за 90 дней». Архивы и файлы слайдов — в /data/media со сроком жизни. Экран «Что занимает место». Квота не упирается навсегда, бэкап не раздувается. Файлы слайдов можно отдавать площадкам по ссылке (6.10).
Клиентский код При первой загрузке 79 скриптов, около 2 МБ, всё с no-store (local.mjs:83). Регистраций экранов 89 на 64 пути, 21 путь — повторно; /app/editor/:id перерегистрирован 5 раз. html.replace — в 4 местах, PS.check перекрыт 3 раза. Строк длиннее 500 символов — 338, самая длинная — 9149. Сначала отдельный механический коммит Prettier и ESLint (страховка — 421 тест). Затем ES-модули и esbuild с хешами в именах файлов. Манифест маршрутов: повторная регистрация — ошибка. Слоты вместо .replace. Тяжёлые библиотеки загружаются лениво. Код можно ревьюить, первая загрузка легче в разы. Редактор можно переиспользовать в конструкторе сайта.
Документация 98 документов (1,3 МБ), за 08–11.09 добавлено 30, из них три плана по 47–73 КБ. Все отдаются публично (см. выше). Появились короткие документы состояния: PROJECT_STATE, NEXT_PHASE, DECISIONS, VERIFICATION. Но docs/91 противоречит коду: пишет, что архивирования партий нет, хотя оно есть. README, ROADMAP (таблица «возможность — статус — доказательство»), ARCHITECTURE, RUNBOOK вне образа, HELP по белому списку, CHANGELOG. Документы состояния оставить. Журналы этапов свернуть. Проверка ссылок и устаревших утверждений — в CI. Один источник статуса. Внутренние сведения не публикуются.
Второй хостинг server/worker.mjs для OpenAI Sites на месте. Dockerfile при каждой сборке собирает его через build-worker.cjs (Dockerfile:13), хотя в образ он не попадает. Кнопка «Войти через ChatGPT» осталась (screens-cloud.js:21). Удалить worker.mjs, .openai/hosting.json и build-worker.cjs. Сборка — только клиента. Каждое изменение API не нужно держать совместимым с двумя средами.
Apple Vision Локальное удаление фона работает только на macOS (server/background-removal.mjs:10). В контейнере на Linux оно всегда недоступно, интерфейс держит две ветки. Оставить только в режиме разработки (по флагу). В продукте — один серверный движок. Одинаковый результат у всех пользователей, минус одна ветка интерфейса.

Выкладка: как сейчас и как станет

Выкладка PicSeller: как сейчас и как станет Запросы — как сейчас (02.10) Интернет селлеры и покупатели DNS *.24oros.ru → 217.199.253.218 проверено 02.10 217.199.253.218 внешний узел; как трафик идёт на GX10, в репозитории не описано GX10: Coolify Traefik, Let's Encrypt picseller.24oros.ru Контейнер container-preflight-15 порт 4332, вход по приглашению проверка здоровья: /v1/projects → 401 /healthz → 404, мониторинга нет Рядом с контейнером — как сейчас Резервные копии ручные online и stopped перед выпуском лежат на том же диске GX10 /docs/ без входа 99 документов, 26 — с инфраструктурой Ollama (сеть ai) только загруженная модель, команды выкл. ComfyUI не подключён: фона на сервере нет Telegram-бот 41 тест, канал не подключён Выкладка — как сейчас Сборка на Mac код не в git, Dockerfile тоже tar-архив образа перенос файлом, сверка SHA-256 Разовый скрипт выпуска update-f3-preflight-15-gx10.py идентификаторы зашиты Coolify API замена образа; compose: preflight-14 Проверка вручную браузер и API, автоотката нет Выкладка — как станет git push Gitea + вебхук, коммиты по фазам CI npm test + Playwright Образ :коммит в registry, не tar; arm64 + amd64 Старт бэкап вне диска → миграции /healthz + smoke по публичному адресу Провал → откат прежний образ, запись в CHANGELOG Копии вне сервера: Litestream (SQLite, минуты) и restic (фото, раз в час); раз в месяц — автоматическое восстановление с проверкой работает работает с риском нет или открыто публично нужно сделать

Решение владельца: где должен быть публичный вход. Сейчас он идёт через 217.199.253.218, а по правилу от 24.09 должен идти через sagr (x86_64; доступ к нему открыт 01.10). Образ стоит собирать сразу под две архитектуры, тогда он подойдёт для любого варианта. Фактический маршрут «DNS → узел → GX10» нужно записать в RUNBOOK.

Порядок выкладки с автооткатом

1ПушGitea получает коммит и вызывает вебхук. Сейчас кода в git нет, поэтому первым шагом нужны коммиты.
2CInpm test (421 тест) и сценарии Playwright. Если что-то упало, выкладки нет.
3ОбразТег — коммит. Образ лежит в registry, а не в tar-архиве. Хранятся 5 последних образов.
4ЗаменаСтарый контейнер останавливается, новый стартует: два процесса на одной базе SQLite одновременно не работают. Так требует и нынешний compose (docker-compose.coolify.yml:1) сверить режим обновления в Coolify.
5Бэкап и миграцииСейчас бэкап делает разовый скрипт до переключения. Станет: при старте контейнера, если есть новые миграции, сначала копия вне рабочего диска, затем миграции.
6Healthcheck/healthz должен стать зелёным за 60 с.
7SmokeПо публичному адресу: вход тестовым аккаунтом, сохранение, экспорт PNG.
8ИтогПровал — выкладка прежнего образа (миграции расширяющие, базу откатывать не нужно). Результат записывается в ~/ai/CHANGELOG.md.
GET /healthz          (без входа и без персональных данных)
200 {"ok":true,"version":"<коммит>","db":"ok","disk_free_pct":41,
     "queues":{"oldest_queued_s":12},"models":{"ollama":"up","comfy":"off"}}
503 — база не отвечает на SELECT 1 или на /data свободно меньше 5%
Модели на статус не влияют: недоступный GX10 не должен перезапускать приложение.
Обрабатывать ДО проверки Host (server/local.mjs:42). Сейчас внутренняя проверка обходит её,
подставляя Host из PICSELLER_AUTH_ORIGIN (scripts/container-health.cjs:5-6).

Что доработать в существующем Dockerfile

Dockerfile уже сделан аккуратно: две стадии, пользователь node, .dockerignore по белому списку. В compose заданы init, read_only и tmpfs. Доработки — точечные:

ГдеСейчасДоработать
Dockerfile:8, :13, :26 P0COPY docs и build-worker.cjs кладут все внутренние документы в prototype/docs, а оттуда — в образ.Не копировать docs/. Пользовательскую справку отбирать по белому списку. Тест сборки: в образе нет «orosalex», «ssh », «Tailscale», «coolify».
Dockerfile:35, container-health.cjs:5-8HEALTHCHECK ходит на /v1/projects и считает здоровым ответ 401. Это «сервер отвечает и требует вход», а не здоровье базы, диска и очередей.Добавить /healthz (база, диск, возраст очереди, версия) до проверки Host. Скрипт проверки перевести на него, внешний мониторинг — тоже.
Dockerfile:13build-worker.cjs при каждой сборке собирает ещё и Worker для OpenAI Sites, хотя в образ он не попадает.Отдельная сборка только клиента. Worker удалить.
Dockerfile:21-23Playwright 1.62.1 ставится в /opt/render мимо package-lock.json.Закрепить версию в lock-файле или вынести рендер в отдельный образ-воркер. Иначе сборка не воспроизводима.
Dockerfile:3, :15Базовый образ задан тегом node:24.20.0-bookworm-slim.Закрепить по digest и обновлять осознанно.
нетСвязь образа с кодом — только SHA-256 файлов.ARG GIT_SHA → метка org.opencontainers.image.revision и переменная PICSELLER_GIT_SHA для /healthz и /v1/me.
local.mjs:31Миграции применяются при старте без бэкапа.Перед новыми миграциями — копия вне рабочего диска, после — quick_check.
сборкаТолько ARM64, на Mac, перенос tar-архивом.docker buildx на GX10 или в CI под linux/arm64 и linux/amd64, push в registry.
# Набросок правок — не собирался и не проверялся
# 1. Внутренние документы — не в образ (Dockerfile:8, :13)
-COPY docs ./docs
+COPY docs/help ./docs/help                        # белый список справки; папку завести
-RUN node scripts/build-worker.cjs && npm prune --omit=dev
+RUN node scripts/build-client.cjs && npm prune --omit=dev   # новый скрипт: без Worker и без внутренних docs
# 2. Связь образа с коммитом
+ARG GIT_SHA=unknown
+LABEL org.opencontainers.image.revision=$GIT_SHA
+ENV PICSELLER_GIT_SHA=$GIT_SHA
# 3. Проверка здоровья по собственному маршруту
#    scripts/container-health.cjs:6 — path:'/v1/projects' → path:'/healthz', ждать 200 и {"ok":true}

Переменные окружения

набросок Обычные значения задаются в переменных приложения Coolify, секреты — только в секретах Coolify. Секреты не попадают в git и в логи.

# Задано сейчас (Dockerfile:32 и deploy/docker-compose.coolify.yml:12-22)
PICSELLER_HOST=0.0.0.0                       # допустимо только вместе с HTTPS-входом (local.mjs:25-28)
PICSELLER_PORT=4332
PICSELLER_DATA_DIR=/data                     # bind на рабочую базу GX10 (compose:23-30)
PICSELLER_EXPORTS=1                          # серверный PNG через Chromium
PICSELLER_IMAGE_PYTHON=/opt/pixels/bin/python
PICSELLER_AUTH_ORIGIN=https://picseller.24oros.ru
PICSELLER_TRUST_PROXY=1                      # X-Forwarded-For принимается только за Traefik
PICSELLER_OLLAMA_URL=http://ollama:11434
PICSELLER_OLLAMA_MODEL=qwen2.5:32b
PICSELLER_OLLAMA_ALLOW_LOAD=0                # допуск по памяти не работает с Docker-адресом
PICSELLER_SERIES_COMMANDS=0

# Есть в коде, но публично не задано
PICSELLER_COMFY_URL                          # без него нет удаления фона на сервере (serve.cjs:15)
PICSELLER_BOT_ID, PICSELLER_BOT_TOKEN_FILE   # без них привязка бота отвечает 503 (serve.cjs:17, api.mjs:132)
PICSELLER_COLD_LOAD_MIN_AVAILABLE_GIB        # работает только на хосте Ollama 127.0.0.1:11434

# Новые (предложение; требуют правок кода)
PICSELLER_GIT_SHA=<коммит>                   # версия в /healthz и /v1/me, имя бэкапа pre-<коммит>
PICSELLER_ADMISSION_URL=http://<агент ресурсов GX10>   # допуск загрузки модели из контейнера (6.8)
PICSELLER_SITES_DOMAIN=24oros.ru             # витрины <slug>.24oros.ru (6.9)
PICSELLER_RESERVED_SLUGS=app,api,www,ops,picseller

# Секреты (только в секретах Coolify)
PICSELLER_SECRETS_KEY=…                      # шифрование токенов WB, Ozon и Telegram в базе
YANDEX_OAUTH_CLIENT_ID=…  YANDEX_OAUTH_CLIENT_SECRET=…
LITESTREAM_REPLICA_URL=s3://…  + ключи доступа к хранилищу копий

Что заморозить и что удалить первым делом

Заморозить до пилота до пилота с 5 продавцами

  • Фазу F4 из NEXT_PHASE.md — повторяющиеся сценарии и Telegram как второй вход. Сначала пилот основного маршрута, уборка дублей входов, затем витрина и публикация. Бот не расширять, позже — один ограниченный живой пилот.
  • Новые разовые скрипты выкладки и папки deploy/container-*. Только один скрипт с параметрами.
  • Новые документы-планы и журналы: за 08–11.09 их добавлено 30. Плюс коммиты вида «Record/Verify» и рост .codex/evidence. Доказательства — только артефактами CI.
  • Развитие цепочки очистки файлов ComfyUI (server/photo-provider-*.mjs).
  • Второй хостинг (worker.mjs) и новые ИИ-концепции в каталоге.

Исключение — то, без чего нельзя безопасно работать публично: закрыть /docs/, закоммитить работу, /healthz и мониторинг, бэкап вне диска, Playwright в CI.

Удалить или сделать первым делом

  • P0 Закрыть /docs/ на публичном домене сегодня. В следующем образе — без внутренних документов (Dockerfile:8, :13, :26).
  • P0 Закоммитить F0–F3 по фазам без deploy/container-* и артефактов. Dockerfile и compose — в git, тег preflight-15.
  • P0 Старый мастер /app/ai/card-generator превратить в редирект на /app/create, а заглушки и демо-файлы сделать ошибками QualityReport. Сейчас именно через него демо-серия получает «Можно выпускать».
  • P0 Ложные обещания: «Публикация по API» в подвале (app.js:125) и тарифах, «600+ шрифтов», «400 000 элементов», таблица COMPETITORS, вымышленные рейтинги, HEIC до 25 МБ. Кнопка «Войти через ChatGPT» (screens-cloud.js:21).
  • P1 Kaspi, Avito и Lamoda убрать из формы «Создать», пока для них нет правил (create-hub.js:25, :81).
  • P1 deploy/container-03…11 (1105 файлов копий), разовые update-*.py и check-container-*.sh — после перехода на один скрипт.
  • P1 server/worker.mjs, .openai/hosting.json, scripts/build-worker.cjs, который сейчас вызывается в Dockerfile.
  • P1 Мёртвый renderCard и renderSlide (render.js:98-201), перекрытые экраны и лишние слои PS.check. Оставить один QualityReport.
  • P2 Apple Vision из продукта (оставить флаг разработки). Неиспользуемый drizzle-orm или schema.ts — по выбранному варианту миграций. Unit-файлы systemd и env-примеры старых loopback-стендов.
  • P2 73 скрипта check-* после переноса сценариев в Playwright. tests/evidence и .codex/evidence — вне git.

8Макеты всех экранов

Целевой продукт собран в кликабельный макет: 33 экрана, через которые проходит весь цикл «Создать → Править → Опубликовать → Поддерживать». Ниже по каждому экрану: снимки на компьютере и телефоне, назначение, главные элементы, что из этого уже есть в актуальной версии PicSeller и что нужно сделать.

Открыть карту макетов Открыть кабинет «Мох» Открыть лендинг

Статусы сверены с актуальной версией PicSeller

Это рабочее дерево от 11.09: последний коммит df16a68 плюс незакоммиченные фазы F0–F3 из плана Codex. Оно развёрнуто как container-preflight-15 на picseller.24oros.ru с входом по приглашению. Ссылки на файлы даны по копии этого дерева от 01.10.2026, файлы без папки лежат в prototype/js/. Снимки этой версии для сравнения — в assets/now/.

Макет — это не продукт

Все данные демонстрационные: бренд «Мох» (авторская керамика), 6 товаров, 8 материалов (последний — карточки набора пиал «Роса», собранные Telegram-ботом), сайт moh.24oros.ru, команда из трёх человек — всё вымышленное. Макет ничего не отправляет на сервер: изменения хранятся только в вашем браузере. Правила площадок в макете — иллюстрация. У каждого набора правил есть дата и источник, но цифры нужно сверить с официальными документами WB и Ozon перед разработкой.

Как пользоваться

  • Меню. На компьютере слева кнопка «Создать» и шесть разделов: Главная, Товары, Материалы, Сайт, Публикации, Бренд. На телефоне внизу панель: Главная, Товары, «+», Материалы, «Ещё».
  • ⌘K (на Windows — Ctrl+K) открывает поиск в шапке: можно найти товар, материал или экран.
  • «Нужно внимание». Колокольчик в шапке и блок на главной показывают события: правила WB изменились, цена тарелки выросла, пришли заявки, фото тёмное. У каждого события есть кнопка действия.
  • «Сбросить демо» в меню пользователя возвращает исходные данные, если вы что-то поменяли.
  • Макет работает на телефоне (ширина 390 px без прокрутки вбок). Есть полная тёмная тема.

Как читать статусы «В коде сейчас»

  • Правило строгое. есть — экран целиком работает в актуальной версии.
  • частично — работает заметная часть экрана, но не весь экран, или работает иначе, чем в макете.
  • нет — заметной части нет, делаем с нуля. Макет-заглушка без логики — тоже «нет».
  • Каждый статус подтверждён ссылкой вида create-hub.js:24 на файл и строки или снимком из assets/now/.
  • Метка Фаза N показывает, в какой фазе плана (раздел 9) делается пункт.
33
экрана в 10 группах, включая служебную «Карту макетов»
12
дополнительных состояний (ИИ, проверка, версии, «было/станет»…)
0
экранов готово целиком в актуальной версии
20
с заметной рабочей частью
13
делаем с нуля: сайт, публикации, товары, пульт

Что изменила актуальная версия. По сравнению с коммитом df16a68 заметно продвинулись пять экранов. «Сборка для нескольких товаров» получила серверную партию до 100 артикулов с паузой, архивом и ZIP с SHA-256. «Шаг 1» получил ProductBrief с источником и статусом каждого факта. В редакторе и на экране результата появилась общая проверка качества (QualityReport). «Материалы» стали общей библиотекой проектов браузера и сервера. Для «Подключения канала» появился экран привязки Telegram-бота, но без живого канала, поэтому статус «нет» сменился на «частично». «Пульт оператора» по строгому правилу отмечен «нет»: командная строка без веб-экрана заметной частью экрана не считается. Целиком готовых экранов по-прежнему нет.

Снимки: компьютер 1440×900, телефон 390×844, файлы в assets/new/. Нажмите на снимок, чтобы открыть его целиком.

Публичная часть

Лендинг на компьютере: обещание «карточки, презентация и сайт из одного описания» и три результата из одного товара Лендинг на телефоне: первый экран с кнопкой «Начать бесплатно»

1. Лендинг

#/ · Открыть в макете

Одно обещание и одно действие: из одного описания товара получаются карточки, презентация и сайт бренда. Ведёт либо к входу, либо к готовому примеру.

  • Первый экран: «Начать бесплатно» ведёт ко входу, «Посмотреть пример» — к готовому результату.
  • Визуал «товар → три результата»: карточка WB, слайд презентации, сайт на телефоне.
  • Блоки «Как это работает» и «Один товар — все материалы» с живым переключением вкладок.
  • «ИИ не выдумывает»: строка текста с подсветкой факта, из которого она взята.
  • Проверка по правилам площадок с датой, «данные на вашем сервере», короткие тарифы, частые вопросы. Без вымышленных отзывов и рейтингов.

В коде сейчас: частично Лендинг в коде есть, но на боевом адресе посетитель без приглашения его не видит: на любом маршруте показывается только строка «Войдите в PicSeller». Главная кнопка «Создать первый дизайн» по-прежнему ведёт в старый мастер с демо-товаром, а не в новый основной маршрут. В подвале и перекрытом коде остались обещания «Публикация по API», «600+ шрифтов», «40+ правил». screens-atelier.js:4 screens-site.js:12-14 app.js:125 assets/now/01-home.png assets/now/ref-public-01-first.png

Что сделать:

  • Фаза 0 Главная кнопка ведёт в основной маршрут. Удалить ложные обещания, таблицу конкурентов и вымышленные рейтинги.
  • Фаза 1 Публичная страница для посетителей без приглашения: лендинг, тарифы, справка и вход.
  • Фаза 4 Блок про сайт бренда показывать как работающую функцию только после запуска витрин. До этого — с пометкой «Скоро».
Вход на компьютере: Яндекс ID, ссылка на почту и код приглашения Вход на телефоне

2. Вход

#/login · Открыть в макете

Вход без пароля и без участия администратора: Яндекс ID, ссылка на почту или код приглашения для беты.

  • «Войти с Яндекс ID» — главный способ.
  • «Получить ссылку на почту»: поле адреса, затем состояние «Письмо отправлено».
  • «Есть код приглашения» — поле кода для закрытой беты.
  • Ссылки на условия и политику обработки данных.

В коде сейчас: частично Вход по одноразовому коду приглашения работает на боевом адресе: аккуратная форма на /auth/sign-in, код живёт 15 минут, сессия — 8 часов. Лимит попыток теперь считается по адресу клиента за доверенным прокси, а не на всех сразу (закрыто с тестом). Яндекс ID и входа по ссылке на почту нет, фальшивые экраны /login, /register и /forgot остались. server/login-rate-limit.mjs:12-31 tests/session-auth.test.cjs:12 server/session-auth.mjs:15, 38 screens-atelier.js:10 assets/now/ref-public-03-signin.png

Что сделать:

  • Фаза 0 Фальшивые экраны входа перенаправить на настоящий вход.
  • Фаза 1 Яндекс ID (OAuth 2.0) и ссылка на почту, сессии на 30 дней с продлением. Заголовки безопасности и лимиты запросов — для всего приложения, а не только для входа.
Первый запуск на компьютере: шаги «Где продаёте», «Ваш бренд», «Первый товар» Первый запуск на телефоне

3. Первый запуск

#/onboarding · Открыть в макете

За три шага узнать, где продаёт селлер, собрать бренд и завести первый товар, а затем сразу перейти к первым карточкам.

  • «Где продаёте?»: WB, Ozon, ЯМ, свой сайт; категория; сколько товаров.
  • «Ваш бренд»: название, логотип, «Подтянуть стиль по ссылке» на магазин или сайт. Палитру, шрифты и тон предлагаем по пунктам, каждый можно принять. Шаг можно пропустить.
  • «Первый товар»: по артикулу WB, по фото и описанию или из файла Excel.
  • Финал — «Создать первые карточки».

В коде сейчас: нет Без изменений: есть только экран-макет без логики. На него ведёт лишь карта экранов: действие регистрации, которое должно его открывать, нигде не вызывается. Сбора стиля по ссылке и первого товара по артикулу нет. screens-site.js:164

Что сделать:

  • Фаза 1 Показывать после первого входа: площадки, категория, профиль.
  • Фаза 2 Шаг «Первый товар» — в таблицу товаров: импорт Excel и по артикулу.
  • «Подтянуть стиль по ссылке» — после пилота, с подтверждением каждого пункта.
Тарифы на компьютере: Старт, Селлер, Бренд, Агентство и таблица сравнения Тарифы на телефоне

4. Тарифы

#/pricing · Открыть в макете

Понятная цена до покупки. В макете: Старт 0 ₽, Селлер 990 ₽/мес, Бренд 2 490 ₽/мес (сайт и публикации), Агентство — по запросу. Это пример для обсуждения, а не решение.

  • Четыре тарифа и таблица сравнения.
  • Цена операции видна на кнопке до запуска.
  • Автопродление выключено по умолчанию. Брак перегенерируем бесплатно.
  • Пометка «Цены — пример для обсуждения».

В коде сейчас: нет Без изменений: страница-концепция с ценами 0 / 790 / 1 990 ₽ и кнопками «Посмотреть сценарий». «Тариф и использование» в кабинете — тоже макет, баланс — заглушка на 316 кредитов. Оплаты в коде нет. У конкурентов биллинг — главный источник жалоб в отзывах: сложно отписаться, ночные и еженедельные списания (SUPA, Flyvi, Fabula). assets/now/15-pricing.png screens-workspace.js:448-449 app.js:11

Что сделать:

  • Фаза 0 До запуска оплаты писать прямо: «Оплата появится позже».
  • Фаза 6 ЮKassa или CloudPayments, таблицы планов, подписок и журнала расходов. Цена операции видна до запуска.

Создание

Главная кабинета на компьютере: строка «Что создаём?», блок «Нужно внимание», каналы и задания Главная кабинета на телефоне с нижней панелью навигации

5. Главная

#/app · Открыть в макете

Рабочий стол селлера: одна строка «Что создаём?» и всё, что требует внимания. Вместо 21 пункта меню — шесть разделов.

  • Строка «Что создаём?» понимает запрос вроде «Карточки для Ozon для чайника „Лес“». Под ней чипы быстрых действий.
  • «Нужно внимание»: 4 события с готовыми кнопками действий.
  • «Продолжить работу» — последние материалы.
  • Сводка каналов (WB, Ozon, сайт, Telegram) и активные задания с живым прогрессом.
  • Мини-превью сайта со статистикой за неделю.

В коде сейчас: частично Кабинет «Творческая студия» почти не изменился. В меню по-прежнему 21 пункт, 8 из 12 ИИ-плиток помечены «Концепция» и показаны с ценами, баннер «Создать карточку» ведёт в старый мастер. Ленты «Нужно внимание», сводки каналов и сайта нет. Нижняя панель на телефоне работает. workspace-navigation.js:6-8 data.js:155 assets/now/02-studio.png

Что сделать:

  • Фаза 0 Убрать из меню концепции и служебные разделы: спрятать за флаг или вынести на страницу «Скоро».
  • Фаза 2 Меню из шести пунктов. Строку «Что создаём?» разбирать сначала словарём (площадка, тип, товар) и только потом моделью.
  • Фаза 6 Поток событий «Нужно внимание».
Экран «Создать» на компьютере: что создаём и для какого товара Экран «Создать» на телефоне

6. Создать

#/create · Открыть в макете

Единственный вход в создание: что делаем и для какого товара. Он заменяет 8 путей создания, 2 мастера и 3 алгоритма раскладки.

  • «Что создаём?»: карточки для маркетплейса (по умолчанию), презентация или КП, сайт-витрина, баннер и пост, пустой холст.
  • «Для какого товара?»: выбрать из списка, новый товар, по артикулу WB или Ozon, описать словами.
  • Одна кнопка «Далее».

В коде сейчас: частично Экран /app/create стал «основным маршрутом»: индикатор «Фото → Факты → Стиль → Серия», одна кнопка «Создать серию», черновик переживает перезагрузку. Но рядом остались старый мастер и ещё 6 путей создания — всего 8. Выбрать товар из каталога нельзя. Новая ошибка: из 6 площадок в форме Kaspi, Avito и Lamoda ломают создание серии, потому что контракт знает только WB, Ozon и ЯМ. main-workflow.js:35-40, 59-67 create-hub.js:25, 81 product-contract.js:11-15 assets/now/03-create-brief.png

Что сделать:

  • Фаза 0 Починить площадки: список в форме брать из контракта, тест «каждая площадка создаёт серию».
  • Фаза 2 Один путь создания вместо 8. Старый мастер — перенаправление с переносом черновика, «Пустой холст» — ссылка на первом шаге.
Шаг 1 «Товар и факты» на компьютере: фото, факты с источниками и превью обложки Шаг 1 на телефоне

7. Шаг 1. Товар и факты

#/create/source · Открыть в макете

Собрать исходники один раз: фото и подтверждённые факты с источником. Из них потом строятся все материалы.

  • Фото: выбор основного, «Убрать фон автоматически» и совет по съёмке («Фото 3 тёмное — лучше переснять при дневном свете»).
  • Факты: текст, чип источника («из карточки WB», «введено вами», «из Excel»), отметка «подтверждён».
  • Вкладка «Описать словами»: свободный текст, затем «Найти факты» с подсветкой цитат.
  • Живое превью обложки. В полях нет демо-данных, только подсказки-примеры.

В коде сейчас: частично Появился ProductBrief: у каждого факта есть номер, источник (введено вами, импорт, модель) и статус. Факты, предложенные моделью, блокируют скачивание, пока их не подтвердишь. Фото обязательно, пустые разделы пропускаются, есть подсказки «Осталось перед созданием». Нет общей таблицы товаров (бриф живёт в каждом проекте отдельно), удаления фона в основном пути, совета по фото и живого превью обложки. На телефоне поле названия начинается ниже первого экрана. product-contract.js:21-70 product-contract.js:37, 85 create-hub.js:24, 60-63, 75 assets/now/03-create-brief-m.png

Что сделать:

  • Фаза 0 Старый мастер с демо-товаром перенаправить в этот маршрут.
  • Фаза 2 Факты из брифа перенести в общую таблицу товаров, показать источник каждого факта. Форма — на первом экране телефона.
  • Фаза 3 Удаление фона — в основной путь.
Шаг 2 «Площадки и стиль» на компьютере: площадки, стиль и план серии с фактами Шаг 2 на телефоне

8. Шаг 2. Площадки и стиль

#/create/design · Открыть в макете

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

  • Выбор нескольких площадок (WB, Ozon, ЯМ) с профилем размера.
  • Стиль «как бренд „Мох“» и 6 стилей шаблонов; 4, 6 или 8 слайдов.
  • План серии: у каждого слайда роли и список фактов, порядок можно менять. «Пропускать разделы без фактов» включено, для пустого раздела есть предупреждение.
  • «Заголовки: 3 варианта из ваших фактов».
  • Оценка «≈ 40 секунд · 12 слайдов · 12 кредитов» и кнопка «Собрать».

В коде сейчас: частично Появились «Мои стили»: сохранённое оформление в браузере (до 30) и в аккаунте с неизменяемыми версиями (10 стилей). Площадка и стиль спрятаны в свёрнутый блок. Плана серии с фактами по слайдам, вариантов заголовка и оценки времени и цены нет. Форма предлагает 12 стилей и 6 площадок, сервер знает 10 стилей и 3 площадки. create-hub.js:37-58 server/card-recipes.mjs:4, 22-28 card-layout.js:8-14, 21

Что сделать:

  • Фаза 2 Один движок раскладки со слотами, ролями и профилями площадок (размер, безопасные зоны, минимальный кегль). План серии, пропуск пустых разделов по умолчанию.
  • Фаза 2 2–3 варианта заголовка, у каждого — ссылки на факты-источники.
Шаг 3 «Сборка» на компьютере: живые шаги и слайды по мере готовности Шаг 3 на телефоне

9. Шаг 3. Сборка

#/create/run · Открыть в макете

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

  • Шаги: подготовка фото и фона → сцена «товар без изменений» → заголовки из фактов → раскладка под WB и Ozon → проверка по правилам с датой.
  • Слайды появляются по мере готовности.
  • «Можно закрыть вкладку — пришлём уведомление».
  • Финал — «Открыть результат».

В коде сейчас: частично В браузере серия собирается за секунды, без живых шагов, и сразу открывается в редакторе. «Собрать на сервере» спрятано в блок «Нужно закрыть вкладку? Собрать в фоне»: задание выполняется примерно за 6 с и появляется в «Заданиях» с кнопкой «Открыть серию». Сцены, генерации текстов и проверки по официальным правилам площадок с датой нет. main-workflow.js:88-89 card-server-jobs.js:22-38 product-contract.js:10 assets/now/09-tasks.png

Что сделать:

  • Фаза 2 Одна кнопка «Собрать»: исполнитель выбирается автоматически, живые шаги берутся из ленты заданий.
  • Фаза 3 Сцена с сохранением товара. Честная очередь с прогрессом через SSE вместо опросов.
Результат на компьютере: оценки проверки, слайды WB и Ozon, варианты заголовка с фактами Результат на телефоне

10. Результат

#/result/:id · Открыть в макете

Экран решения после сборки: посмотреть, выбрать заголовок, скачать, отредактировать или опубликовать.

  • Оценки проверки по каждой площадке (в макете: WB 98 и Ozon 92, по одному замечанию), вкладки WB и Ozon, сетка слайдов.
  • «Варианты заголовка»: 3 варианта, у каждого чипы фактов-источников. Выбор сразу меняет обложку.
  • Главные действия: «Опубликовать в WB», «Скачать» с пресетами, «Редактировать».
  • Вторичные: «Сделать презентацию», «Добавить на сайт».
  • Замечания проверки с кнопками «Исправить».

В коде сейчас: частично Экран «Готовая серия» есть: просмотр, редактирование, скачивание. В окне скачивания показывается отчёт проверки качества (QualityReport), ошибки блокируют кнопку. Но проверка пропускает серию из старого мастера с демо-фото и заглушками: «Можно выпускать», файл скачивается. Вариантов заголовка нет, «Опубликовать» ведёт на заглушку. material-result.js quality-ui.js:30-41 product-contract.js:62-69, 83-95 assets/now/05-result.png assets/now/06-export-check.png

Что сделать:

  • Фаза 0 Правила «текст-заглушка» и «демо-фото» — ошибки, а не предупреждения.
  • Фаза 2 Варианты заголовка с источниками, замечания проверки с кнопками «Исправить».
  • Фаза 5 «Опубликовать в WB» подключить к настоящей публикации.

Редактор

Редактор материала на компьютере: левая рейка, холст с направляющими, лента слайдов и инспектор Редактор материала на телефоне

11. Редактор материала

#/editor/:id · Открыть в макете

Направленная правка руками на холсте или словами. Каждое изменение проверяется по правилам площадки и сохраняется версией.

  • Шапка: «Сохранено · версия 5», переключатель WB или Ozon, отмена и повтор, значок «Проверка 96», «Скачать» и главная кнопка «Опубликовать».
  • Левая рейка: шаблоны, фото товара, текст, элементы, фон, слои, размер.
  • Холст: привязки к центру, краям и безопасным полям, текст правится двойным щелчком, переключатель «Безопасные зоны». Внизу лента слайдов.
  • Контекстный инспектор: шрифт бренда, цвет из палитры, роль «Заголовок», «Применить ко всей серии». Для фото: заменить, убрать фон, сцена, кадрирование.

В коде сейчас: частично Ядро прежнее: одна модель сцены и один SVG-рендер, отмена на 40 шагов, ИИ-правка одного объекта. Добавлены роли текста (заголовок, преимущество, основной текст, бренд), быстрые «Крупнее», «Мельче», «Вместить в блок», «Фото крупнее/меньше» и проверки перед скачиванием. Нет привязок, боковых ручек, правки текста прямо на холсте, токенов стиля и умной смены размера. Скорость не менялась: сцена перерисовывается целиком, история хранит полные копии проекта. scene.js:9-25 server/api.mjs:69 editor-simple.js screens-editor.js:23-28 docs/82-85 assets/now/04-editor.png

Что сделать:

  • Фаза 1 Статус «Сохранено · версия N» на сервере вместо кнопки «На сервер».
  • Фаза 3 Перерисовывать только изменённое, историю хранить изменениями. Привязки, боковые ручки, правка текста на холсте, токены стиля поверх ролей, умная смена размера, кириллические шрифты.
Редактор, состояние «ИИ-помощник»: поле команды, план «было/станет» и кнопка «Применить»
ИИ-помощникПоле «Скажите, что изменить», чип выделения, план «было/станет», «Применить» создаёт версию, режим «Спросить» ничего не меняет.
частично Правка одного объекта работает (20 из 20 контрольных команд). Команды серии получили роли и проверку области, последний живой прогон — 17 из 21, но на боевом адресе они выключены. Текст модели не сверяется с фактами, режима «Спросить» нет. editor-plan.js:7, 33 docs/92:132 deploy/docker-compose.coolify.yml:22
Редактор, состояние «Проверка»: правила WB с датой и кнопки «Исправить»
ПроверкаПравила WB от 28.08.2026 с источником. Пункты ✓ и ⚠, кнопка «Исправить» меняет сцену и счёт.
частично Появился общий отчёт проверки качества: он блокирует скачивание без фото, при пропаже подтверждённого факта и при неподтверждённом предложении модели. Правил площадок нет — одна версия «picseller-core-2026-09-11» для WB, Ozon и ЯМ. Демо-фото и заглушки не ловятся, контраст не считается. product-contract.js:72-107 quality-ui.js:17-42
Редактор, состояние «Версии»: список версий с метками и кнопкой «Вернуть»
ВерсииМетки «создано», «ИИ», «опубликовано в WB», «ручная правка» и кнопка «Вернуть».
частично До 40 версий в браузере. У каждой серверной ревизии теперь есть неизменяемый снимок брифа и отчёта качества, но на сервер работа попадает только кнопкой. drizzle/0022_project_contracts.sql server/api.mjs:86-88 project-versions.js:10-12
Редактор, состояние «Размер»: пресеты площадок и «Создать версию»
РазмерПресеты WB, Ozon, ЯМ, сторис, баннер. «Создать версию» перекладывает элементы по ролям, без растяжения.
нет Без изменений: смена размера растягивает по осям, круг 720×720 становится эллипсом 960×720. screens-editor.js:147-148
Редактор, состояние «Скачать»: пресеты для WB, Ozon, ЯМ, PDF и PowerPoint
СкачатьПресеты «Для WB», «Для Ozon», «Для ЯМ», PDF, PowerPoint, исходник. Имена файлов вида {артикул}_{номер}.jpg.
частично Работают PNG, JPEG, WEBP, SVG, ZIP, PDF и PowerPoint. Перед скачиванием проверяются переполнение текста и доступность фото, архив называется по товару. Пресетов площадок нет, файлы внутри — 01.png…, PDF состоит из картинок (окно об этом предупреждает). screens-editor.js docs/93-94 pptx-export.js:11-79

Товары и фото

Товары на компьютере: таблица с фото, артикулами, ценой, фактами и материалами по каналам Товары на телефоне в виде карточек

12. Товары

#/products · Открыть в макете

Каталог товаров — источник правды: фото, артикулы, цена, подтверждённые факты и где уже есть материалы.

  • Поиск, фильтры, «Импорт», «+ Товар».
  • Таблица: фото, название, артикул, цена, факты (сколько подтверждено), материалы по каналам (WB ✓, Ozon ✎, сайт ✓), значок проблем.
  • Выбор строк открывает действия «Создать карточки (N)», «Обновить сайт», «Скачать».
  • На телефоне вместо таблицы — карточки.

В коде сейчас: нет Экрана нет. «Товар» появился только как бриф внутри каждого проекта (ProductBrief). Общей таблицы товаров в базе нет: в схеме 27 таблиц, products среди них нет. Нет ни цены, ни материалов по каналам, ни идентификаторов карточек WB и Ozon. В серверной партии артикул обязателен и уникален, но это строки партии, а не каталог. db/schema.ts product-contract.js:21-55 server/card-batches.mjs:64

Что сделать:

  • Фаза 2 Серверная таблица товаров на основе ProductBrief: факты, фото, цена, артикулы, идентификаторы карточек WB и Ozon. Действия над выбранными строками.
Карточка товара на компьютере: факты с источниками, фото, материалы и каналы Карточка товара на телефоне

13. Товар

#/products/:id · Открыть в макете · товар с изменившейся ценой

Всё об одном товаре в одном месте: факты, фото, материалы и каналы. Если меняется цена или факт, экран показывает, что затронуто, и предлагает «Обновить всё».

  • Шапка: фото, артикулы, цена, «Создать материал ▾», «Открыть на WB ↗».
  • Баннер изменения цены (в макете тарелка «Туман»: 990 → 1 090 ₽, затронуты сайт и презентация) с кнопками «Обновить всё» и «Что изменится».
  • Вкладка фактов: источник, подтверждение, «используется в N материалах», правка на месте.
  • Вкладки фото (исходники, вырезки, сцены), материалов, каналов и истории.

В коде сейчас: нет Экрана товара нет. Факты с источником хранятся в брифе каждого проекта отдельно, поэтому изменение цены или факта не связано с материалами. product-contract.js:21-55 drizzle/0022_project_contracts.sql

Что сделать:

  • Фаза 2 Экран товара на новой таблице: вкладки фактов, фото и материалов.
  • Фаза 6 Событие «изменилась цена или факт» и пакетное обновление затронутых материалов.
Импорт товаров на компьютере: файл Excel, сопоставление колонок, проверка строк Импорт товаров на телефоне

14. Импорт товаров

#/products/import · Открыть в макете

Завести каталог за минуты: из Excel или CSV, по артикулам WB и Ozon или по ссылке на магазин.

  • «Excel или CSV»: файл → сопоставление колонок → строки с отметками ✓ и ⚠.
  • «По артикулам WB/Ozon»: поле для артикулов и предпросмотр найденного.
  • «Магазин WB по ссылке».
  • Итог «12 готовы, 2 с замечаниями» и кнопка «Импортировать».

В коде сейчас: частично Таблицу CSV или Excel теперь можно отправить в серверную партию: предпросмотр, проверка строк до отправки, обязательный и уникальный артикул, до 100 строк. Но фото нужно заранее загрузить и сослаться на него колонкой image, а результатом становятся карточки, а не товары. Импорта по артикулу WB или Ozon и из магазина по ссылке нет. batch-server-submit.js xlsx-import.js:4-30 server/card-batches.mjs:60-64 docs/91-server-catalog-guide.md

Что сделать:

  • Фаза 2 Импортировать в таблицу товаров. Импорт по артикулу WB — через API контента с ключом продавца.
  • «Магазин по ссылке» — после пилота.
Сборка для нескольких товаров на компьютере: товары, рецепт и прогресс по каждому товару Сборка для нескольких товаров на телефоне

15. Сборка для нескольких товаров

#/batch · Открыть в макете

Серии для десятков товаров одним запуском по сохранённому рецепту. Прогресс виден по каждому товару, ошибки можно повторить.

  • Товары (до 100 за раз) × рецепт: стиль, площадки, число слайдов, обработка фото, пресет экспорта. Кнопка «Сохранить как рецепт».
  • Оценка времени и кредитов, кнопка «Собрать».
  • Прогресс по каждому товару: «готово», «в работе» или ошибка с причиной и «Повторить». Партию можно поставить на паузу.
  • «Скачать всё» (ZIP с артикулами в именах файлов и контрольными суммами), «Опубликовать готовые».
  • Вкладка «Сценарии»: рецепт, источник товаров и расписание, журнал запусков.

В коде сейчас: частично Серверная партия работает, в том числе на боевом адресе. До 100 артикулов, очередь не зависит от вкладки, есть пауза, продолжение, архив, исправление ошибочной строки с историей попыток и однократный отложенный запуск до 30 дней. Выгрузки: ZIP редактируемых проектов и PNG-каталог с описью (артикул, позиция, попытка, SHA-256 каждого файла) и SHA-256 всего архива. Нет удаления фона в партии (сервер прямо отказывает), оценки времени и цены, «Опубликовать готовые» и повторяющихся сценариев. Экрана нет в меню, а для отправки нужен заранее сохранённый стиль. server/card-batches.mjs:58-101 server/card-batches.mjs:65 server/batch-export-requests.mjs:21-23 server/batch-export-artifacts.mjs:52 tests/api.test.cjs:326 VERIFICATION.md:36 assets/now/12-server-batch.png

Что сделать:

  • Фаза 2 Строки партии брать из таблицы товаров, сборка — тем же движком раскладки.
  • Фаза 3 Удаление фона в партии и пакет по папке фото.
  • Фаза 5 «Опубликовать готовые».
  • Фаза 6 Повторяющиеся сценарии с расписанием и журналом (F4 у Codex).
Фото-студия на компьютере: сравнение «до/после» со шторкой и операции с фото Фото-студия на телефоне

16. Фото-студия

#/photos · Открыть в макете

Подготовить фото для всех материалов: фон, тень, сцена, качество, кадр под площадку. Гарантия: сам товар не меняется.

  • Библиотека фото по товарам, в центре сравнение «до/после» со шторкой.
  • Операции: убрать фон, белый фон, тень, сцена (пресеты «Кухня утром», «Деревянный стол», «Минимализм» или своё описание), улучшить качество, кадрировать под площадку.
  • «Применить к 12 фото».
  • Знак «Товар не изменён — меняется только фон» после проверки целостности.

В коде сейчас: частично Код удаления фона не менялся: BiRefNet сохраняет цвет товара без искажений (расхождение 0/0/0), результат применяется к слою или серии. Но на боевом адресе фото-провайдер не подключён, поэтому серверное удаление фона и заказ «фон → карточки» там недоступны. Сцены и нового фона нет, сервер обрабатывает одно фото за раз, снимок с телефона (12 Мп) отклоняется лимитом 8 МБ, потерянное задание зависает. deploy/docker-compose.coolify.yml:12-22 scripts/serve.cjs:15 scripts/photo-pixels.py:79-149 server/photo-jobs.mjs:66

Что сделать:

  • Фаза 3 Восстанавливать потерянные задания, подавать модели уменьшенную копию, 2–4 фото параллельно, пакет.
  • Фаза 3 Сцена: маска товара → новый фон (Qwen-Image-Edit-2511 или FLUX.2 klein 4B) → исходные пиксели товара поверх → проверка целостности. Провайдер на боевом стенде — по решению владельца.

Сайт: создание

Мастер сайта на компьютере: тип сайта, товары из каталога и страницы Мастер сайта на телефоне

17. Мастер сайта

#/site/new · Открыть в макете

Собрать сайт-витрину бренда за три шага из уже заведённых товаров и бренда.

  • Тип: витрина бренда, страница одного товара или сайт для оптовиков.
  • Товары из каталога, страницы (Главная, Каталог, О бренде, Контакты, Оптовикам), стиль из бренда, «Опишите словами (необязательно)».
  • Сборка: секции из фактов, фото из готовых серий, тексты со ссылками на факты, проверка SEO. Затем «Открыть конструктор».

В коде сейчас: нет Витрины нет ни в коде, ни в плане Codex F0–F7: слово «витрина» встречается только в требованиях площадок. data.js:20 research/audit-2026-09-10/overview-and-plan.md:117-126

Что сделать:

  • Фаза 4 Сайт как документ из типизированных секций (до 12 типов) со строгой проверкой на сервере. Сборка без случайности: из товаров и бренд-кита.
  • Фаза 4 Тексты — по правилу карточек: каждая строка ссылается на факт из брифа.
Конструктор сайта на компьютере: список секций, живой предпросмотр и инспектор секции Конструктор сайта на телефоне

18. Конструктор сайта

#/site/builder · Открыть в макете

Править сайт так же просто, как в Canva или Tilda: щёлкнуть секцию и поправить руками или сказать словами. План изменений виден до применения.

  • Шапка: выбор страницы, устройство (компьютер, планшет, телефон), отмена и повтор, «Версии», «Опубликовать».
  • Слева вкладка «Секции»: порядок, скрытие, «+ Секция» из 12 типов.
  • Слева вкладка «Помощник»: запрос → план операций → «Применить» или «Отменить». Режим «Спросить» ничего не меняет.
  • Живой предпросмотр: наведение подсвечивает секцию, щелчок открывает мини-панель (вверх, вниз, копия, скрыть, «Спросить ИИ»).
  • Инспектор секции: заголовок, текст, кнопка и ссылка, фон, источник товаров «из каталога: 6», варианты раскладки миниатюрами.

В коде сейчас: нет Конструктора нет. Что можно взять: цикл «предложение → сравнение → применение → версия → одна отмена» и узкий язык правок ИИ из редактора карточек, один SVG-рендер, а теперь и ProductBrief — тексты витрины смогут ссылаться на факты. editor-plan.js series-plan.js product-contract.js

Что сделать:

  • Фаза 4 Экран «чат + предпросмотр» с «укажи и скажи». Простые правки (текст, цвет, фото) — без модели, модель — только для перестройки секций.
  • Фаза 4 Сначала прототип на двух секциях: своя сцена против ядра GrapesJS (BSD-3-Clause).
Конструктор сайта, вкладка «Помощник»: лента команд и план операций
ПомощникЛента команд: запрос → план операций → «Применить» или «Отменить». Режим «Спросить» ничего не меняет.
нет Есть только образец цикла правок в редакторе карточек. editor-assistant.js:15-35
Конструктор сайта в режиме предпросмотра на телефоне
Предпросмотр на телефонеТот же сайт на ширине телефона. Правки в инспекторе сразу меняют предпросмотр.
нет Делаем вместе с конструктором.

Сайт: публикация и поддержка

Обзор сайта на компьютере: адрес, версия, показатели недели и здоровье сайта Обзор сайта на телефоне

19. Сайт: обзор и поддержка

#/site · Открыть в макете

Всё о сайте на одном экране: адрес, версия, неопубликованные изменения, показатели недели и здоровье.

  • Адрес moh.24oros.ru (копировать, открыть), статус «Опубликован · версия 7 · 29.09».
  • «Редактировать» и «Опубликовать изменения (3)»: в макете это новая цена тарелки «Туман», новый вопрос в «Частых вопросах» и фото мастерской.
  • Превью на компьютере и телефоне. Показатели за 7 дней: посещения, переходы на WB и Ozon, заявки.
  • Здоровье: HTTPS и срок сертификата, доступность, скорость, резервная копия.
  • Пустое состояние «Создадим сайт из ваших товаров за 2 минуты».

В коде сейчас: нет Экрана нет. Публичный адрес у продукта уже есть: picseller.24oros.ru открывается через 217.199.253.218 (так сейчас отвечает DNS для *.24oros.ru), Traefik выпускает сертификаты. Но маршрут изменён вне репозитория и не описан, а 01.10 около 15 минут HTTPS не отвечал, и мониторинг этого не заметил бы — его нет. docs/87-public-origin-preflight.md:3

Что сделать:

  • Фаза 1 Описать фактический маршрут трафика, завести /healthz и внешний монитор.
  • Фаза 4 Обзор сайта с версией и здоровьем: HTTPS проверяется после каждой выкладки, резервная копия — по расписанию.
  • Фаза 6 Показатели недели и события сайта в «Нужно внимание».
Публикация сайта на компьютере: проверка, изменения, адрес и выкладка Публикация сайта на телефоне

20. Публикация сайта

#/site/publish · Открыть в макете

Безопасная выкладка: проверка, что изменилось, адрес, выкладка без простоя и откат одним кликом.

  • Проверка: SEO-заголовки, описания фото, ссылки на WB и Ozon, контраст, согласие на обработку данных в форме, вес страницы. Есть кнопка «Исправить автоматически».
  • Изменения с прошлой версии — те же три: цена тарелки, новый вопрос, фото мастерской.
  • Адрес: бесплатный поддомен или свой домен с инструкцией по DNS и статусом проверки.
  • Выкладка: собираем страницы, загружаем, переключаем версию без простоя, проверяем HTTPS.
  • Готово: версия 8, ссылка, «Откатить на версию 7». До этого задание «Публикация сайта · версия 8» в «Заданиях» ждёт подтверждения: выкладка запускается только с этого экрана.

В коде сейчас: нет Публикации сайтов нет. Для самого приложения уже есть многоэтапный Dockerfile, сервис Coolify и публичный HTTPS. Но выкладка идёт разовыми скриптами под каждый выпуск, а /healthz отвечает 404: здоровье проверяется запросом /v1/projects с ожиданием ответа 401. Dockerfile:1-36 scripts/container-health.cjs:6-8 deploy/update-f3-preflight-15-gx10.py

Что сделать:

  • Фаза 1 Один скрипт выкладки с проверкой после деплоя и автооткатом, /healthz.
  • Фаза 4 Статические страницы на <бренд>.24oros.ru, атомарное переключение версии, откат за ≤ 10 с, один сертификат на все поддомены (wildcard через DNS-01). Свой домен клиента — позже.
Публикация сайта завершена: версия 8, ссылка и кнопка отката на версию 7
Готово и откатВерсия 8 на адресе, ссылка на сайт, «Откатить на версию 7».
нет Журнала выкладок и отката для сайтов нет.
Заявки с сайта на компьютере: список, статусы и панель деталей Заявки с сайта на телефоне

21. Заявки

#/site/leads · Открыть в макете

Заявки с сайта не теряются: список со статусами, ответ в Telegram, уведомления.

  • Список: дата, имя, контакт (частично скрыт), сообщение, источник, статус (новая, в работе, закрыта).
  • Панель деталей: «Ответить в Telegram ↗», смена статуса.
  • Настройка уведомлений в Telegram, выгрузка CSV, срок хранения данных.

В коде сейчас: нет Экрана нет. Для Telegram есть привязка чата к аккаунту, но живого бота нет, а уведомлять о заявках бот не умеет. server/bot-links.mjs server/api.mjs:132

Что сделать:

  • Фаза 4 Таблица заявок, уведомления в Telegram, согласие на обработку персональных данных в форме, срок хранения.
  • Юридические документы (политика обработки данных по 152-ФЗ) — до выкладки первой формы (см. раздел 10).
Аналитика и здоровье сайта на компьютере: посещения, переходы на маркетплейсы, доступность Аналитика сайта на телефоне

22. Аналитика и здоровье сайта

#/site/stats · Открыть в макете

Показать, что сайт работает и приводит покупателей на маркетплейсы.

  • График посещений за 30 дней, источники трафика.
  • Переходы на маркетплейсы по каждому товару, популярные страницы.
  • Доступность по дням, сертификат, скорость, резервные копии.
  • SEO-задачи с кнопкой «Исправить».

В коде сейчас: нет Экрана нет. «Аналитика» в кабинете — калькулятор CTR, данные площадок в него не поступают. screens-workspace.js:452

Что сделать:

  • Фаза 4 Ссылки на WB и Ozon с UTM-метками и счётчик переходов, проверка HTTPS и доступности.
  • Фаза 6 Графики, источники трафика, SEO-задачи.

Публикации

Публикации и каналы на компьютере: карточки каналов, готовое к публикации и журнал Публикации и каналы на телефоне

23. Публикации и каналы

#/publish · Открыть в макете

Куда и что опубликовано: каналы, материалы, готовые к выкладке, журнал с откатом.

  • Карточки каналов: WB (права «Контент»), Ozon, ЯМ (не подключён → «Подключить»), сайт.
  • Telegram-бот как второй вход в продукт: фото и описание в чат → черновик → подтверждение → готовые файлы приходят в чат. Плюс уведомления о заявках.
  • «Готово к публикации» с кнопками.
  • Журнал: когда, что, куда, кто и с каким результатом (успешно, отклонено с причиной, откат). Кнопка «Откатить».
  • Блок «Изменились правила WB 28.08.2026 — 2 карточки проверить».

В коде сейчас: нет Публикации нет: кнопки ведут на заглушку «Публикация в маркетплейс — фаза 4», экран интеграций подписан «Все внешние интеграции отключены». В плане Codex публикация — фаза F7, она не начата. Telegram-бот написан (8 серверных модулей, 41 тест), но живой канал не подключён, а умеет бот только текстовую команду презентации. foundation.js:36-37 server/bot-orders.mjs:24, 34 NEXT_PHASE.md:22

Что сделать:

  • Фаза 0 Спрятать «Опубликовать», пока нет настоящей интеграции.
  • Фаза 5 Журнал публикаций со снимком «было» для отката.
  • Фаза 6 Ограниченный живой пилот бота: «фото + факты → карточки → ссылка».
Публикация в Wildberries на компьютере: выбор материалов и артикулов WB Публикация в Wildberries на телефоне

24. Публикация в Wildberries

#/publish/wb · Открыть в макете

Выложить фото в кабинет WB так, чтобы было видно, что изменится, и можно было вернуть как было.

  • Выбор: какой материал к какому артикулу WB (найдено автоматически или выбрать вручную).
  • Сравнение «Сейчас на WB / Станет» по каждому товару и отметка «Сохраним текущие фото WB для отката».
  • Подтверждение.
  • Отправка: загружаем файлы, ждём обработку, читаем обратно из кабинета и сверяем.
  • Готово: «2 из 2 опубликованы», «Открыть на WB ↗», «Откатить».

В коде сейчас: нет Вместо публикации — заглушка, старое окно с жёстко заданным «n из n» перекрыто другим кодом. Фаза F7 у Codex не начата и требует доступа владельца к API. Среди сервисов для селлеров публикацию с откатом через API продавца публично подтвердил только агент JAFO, и он не делает визуал. foundation.js:36 screens-app.js:183 NEXT_PHASE.md:22

Что сделать:

  • Фаза 5 Подключение к WB по шагам: ключ с правом «Контент» → привязка к карточке → «было/станет» → подтверждение → загрузка фото по ссылкам на серверный экспорт → чтение обратно → журнал и откат.
  • Фаза 5 Затем Ozon тем же путём.
Публикация в WB: сравнение «Сейчас на WB / Станет» по каждому товару
Сравнение «было/станет»Миниатюры «сейчас» и «станет», сводка изменений и проверка. Текущие фото сохраняются для отката.
нет Нет ни чтения карточек из кабинета, ни сравнения.
Публикация в WB завершена: 2 из 2 опубликованы, ссылка на WB и откат
Готово и откат«2 из 2 опубликованы» после сверки с кабинетом, «Открыть на WB ↗», «Откатить».
нет Есть только перекрытое окно с жёстко заданным «n из n». screens-app.js:183
Подключение канала WB на компьютере: где взять токен, какие права нужны и проверка Подключение канала на телефоне

25. Подключение канала

#/channels/connect · Открыть в макете

Подключить кабинет с минимальными правами и сразу проверить, что ключ работает.

  • Для WB: где создать токен, какие права нужны (только «Контент»), скрытое поле токена.
  • «Проверить» → «Токен работает: магазин „Мох“, 18 товаров, права: Контент ✓». Примечание о безопасности и об отзыве ключа.
  • Ozon — Client-Id и ключ; ЯМ — вход через Яндекс.
  • Telegram — привязка бота одноразовым кодом (/start КОД), отзыв связи одной кнопкой. Свой домен — DNS-записи.

В коде сейчас: частично Появился экран «Подключение бота»: привязка чата одноразовым кодом, отзыв, единый владелец пространства для сайта и бота, журнал доставок с ручным решением «повторить или пропустить» (41 тест). Живого канала нет: на боевом адресе привязка отвечает «Привязка бота на этом сервере ещё не подключена». Подключений WB, Ozon, ЯМ и своего домена нет, экран интеграций — макет. bot-settings.js:17 server/bot-links.mjs server/workspace-owner.mjs:7-9 server/api.mjs:132 screens-workspace.js:442 assets/now/13-telegram-bot.png

Что сделать:

  • Фаза 2 Подключение WB для импорта товаров по артикулу.
  • Фаза 5 Проверка прав ключа, хранение ключей в зашифрованном виде, отзыв одной кнопкой, журнал действий.
  • Фаза 6 Живой Telegram: токен владельца и ограниченный пилот.

Библиотека

Материалы на компьютере: фильтры, сетка карточек материалов со статусами и каналами Материалы на телефоне

26. Материалы

#/materials · Открыть в макете

Всё, что создано из товаров: карточки, презентации, баннеры. Для каждого виден статус и каналы.

  • Фильтры: тип, товар, статус (черновик, опубликовано, нужно обновить), канал. Вид сеткой или списком.
  • Карточка материала: превью, название, товар, значки каналов, версия, дата, статус.
  • Массовые действия: «Обновить из фактов», «Скачать», «В корзину». Вкладка «Корзина».

В коде сейчас: частично Появилась общая библиотека «Проекты»: проекты браузера и версии на сервере в одном списке, с метками места хранения и поиском. Повторное открытие той же серверной версии больше не плодит копию. Но источник истины по-прежнему браузер: на сервер работа попадает только кнопкой «На сервер», а открытие серверного проекта создаёт копию в браузере. Фильтров по статусу и каналам нет, таблиц папок и библиотеки на сервере тоже. unified-library.js:33-49 unified-library.js:38, 45 screens-cloud.js:44 assets/now/08-library.png

Что сделать:

  • Фаза 1 Сервер — источник истины: автосохранение, браузер только кэш и очередь отправки. Кнопка «На сервер» уходит.
  • Фаза 6 «Обновить из фактов» для материалов со статусом «нужно обновить».
Бренд-кит на компьютере: логотип, цвета с ролями, шрифты, тон и живые образцы Бренд-кит на телефоне

27. Бренд-кит

#/brand · Открыть в макете

Бренд настраивается один раз и применяется во всех материалах и на сайте: логотип, цвета с ролями, шрифты, тон.

  • Логотип в светлом и тёмном вариантах.
  • Цвета с ролями и проверкой контраста.
  • Шрифты: заголовки Lora, текст Golos Text, каталог кириллических шрифтов. Тон текста с примерами.
  • Живые образцы: карточка, первый экран сайта, слайд.
  • «Подтянуть стиль по ссылке или образцам» и «Применить ко всем материалам (14)».

В коде сейчас: частично Без изменений. Палитра, шрифт, логотип и применение к проектам работают, но шрифтов 4 «офисных» семейства, Manrope в карточки не попадает, на каждой карточке печатается «Мой бренд». Хранится всё только в браузере. scene-fonts.js:5 card-series.js:11 app.js:12 assets/now/11-brand.png

Что сделать:

  • Фаза 0 Убрать «Мой бренд» по умолчанию.
  • Фаза 1 Хранить бренды на сервере.
  • Фаза 3 Роли цветов и токены стиля, кириллические шрифты со свободной лицензией OFL, проверка контраста.
Шаблоны на компьютере: фильтры по площадке и типу, миниатюры без рейтингов Шаблоны на телефоне

28. Шаблоны

#/templates · Открыть в макете

Готовые раскладки для карточек, презентаций, секций сайта и баннеров: с полями и замками, без рейтингов.

  • Фильтры: площадка, тип (карточки, презентации, секции сайта, баннеры), категория, «Мои».
  • Миниатюра, название, поля шаблона, замки.
  • Окно шаблона: слайды, «Использовать», «Сделать моим».

В коде сейчас: частично Без изменений. 41 демо-шаблон и собственные шаблоны с полями работают, но рейтинги и популярность вымышлены, а на миниатюрах видна заглушка «Добавьте описание товара». refinements.js:8-100 screens-app.js:88-109 assets/now/10-templates.png

Что сделать:

  • Фаза 0 Убрать рейтинги и «использования».
  • Фаза 3 Шаблоны на ролях слоёв с замками. Длинный текст уменьшать, а не выдавать ошибку.
  • Фаза 4 Секции сайта как отдельный тип шаблона.

Система

Задания на компьютере: вкладки «В работе», «Готово», «С ошибками» и шаги каждого задания Задания на телефоне

29. Задания

#/jobs · Открыть в макете

Все фоновые работы в одном месте: что идёт, сколько осталось, что сломалось и что с этим делать.

  • Вкладки: «В работе», «Готово», «С ошибками».
  • Задание: товар, шаги с состояниями, место в очереди, оставшееся время, «Отменить», «Открыть результат».
  • Ошибка описана человеческими словами и сопровождается действием.
  • Живой прогресс.

В коде сейчас: частично Лента показывает серверные сборки карточек с кнопкой «Открыть серию» и фильтры по серверным и браузерным каталогам. У ожидания модели появился срок — 30 минут. Серии, собранные в браузере, по-прежнему не видны («Показано 0 из 0»). Задания идут в порядке поступления, без честной очереди между аккаунтами, прогресс приходит опросом. task-hub.js server/ai-jobs.mjs:7, 39, 75 assets/now/09-tasks.png

Что сделать:

  • Фаза 1 Все задания на сервере, вместе с переходом на серверное хранение.
  • Фаза 3 Одна модель «задание + шаги», очереди «срочная» и «фоновая», задания разных аккаунтов по очереди, прогресс через SSE, у каждой ошибки — код и действие.
Настройки на компьютере: профиль, команда, тариф, ключи, хранилище и данные Настройки на телефоне

30. Настройки

#/settings · Открыть в макете

Профиль, команда, тариф, ключи, хранилище и данные в одном месте, без технических терминов.

  • Профиль и уведомления.
  • Команда: роли «владелец», «дизайнер», «контент-редактор», «наблюдатель»; приглашение.
  • Тариф и оплата: план, расход за месяц, журнал операций с ценой, автопродление выключено.
  • Ключи и интеграции. Хранилище: «Что занимает место», очистка неиспользуемых фото.
  • Данные: выгрузка всего, удаление аккаунта.

В коде сейчас: частично Настройки хранятся в браузере; команда, тариф и оплата — макеты. Освободить место можно только для PNG-выгрузок партий. Очистки фото, проектов и корзины нет, архивы лежат в базе. Есть выгрузка проекта по ревизии (теперь с проверкой качества) и управление аккаунтами из командной строки. screens-workspace.js:444-449 tests/batch-export-limits.test.cjs:80 server/project-export.mjs:8-9 server/account-admin.mjs:14-15

Что сделать:

  • Фаза 1 Профиль и выгрузка данных.
  • Фаза 6 Команда и роли, тариф и журнал расходов. Хранилище с ежедневной очисткой: корзина старше 30 дней, фото без ссылок старше 7 дней.
Настройки, вкладка «Тариф и оплата»: план, расход за месяц и журнал операций с ценой
Тариф и оплатаПлан, расход за месяц, журнал операций с ценой каждой, автопродление выключено.
нет Оплаты нет, «Тариф и использование» в кабинете — макет, баланс — заглушка на 316 кредитов. app.js:11
Настройки, вкладка «Хранилище»: что занимает место и очистка неиспользуемых фото
Хранилище«Что занимает место» и очистка неиспользуемых фото.
нет Экрана нет. Освободить место можно только для PNG-выгрузок партий, а ZIP-архивы хранятся в базе SQLite, теперь уже в двух таблицах. tests/batch-export-limits.test.cjs:80 drizzle/0007, 0020
Справка и помощник на компьютере: поиск, популярные статьи, обращение в поддержку Справка на телефоне

31. Справка и помощник

#/help · Открыть в макете

Ответ на вопрос без письма в поддержку. Если не помогло — обращение с приложенным контекстом.

  • Поиск, популярные статьи, разделы.
  • Помощник отвечает по статьям справки.
  • «Написать в поддержку» с приложенным контекстом.
  • Статус сервиса.

В коде сейчас: частично Центр помощи работает и пополнился статьями о стилях, проверке перед скачиванием и каталоге. Обращения по-прежнему «сохраняются локально». Главное: на боевом адресе без входа открываются 99 внутренних документов, в 26 из них — детали инфраструктуры (ssh, Tailscale, адреса, Coolify). support-drafts.js:20-31 server/local.mjs:79-84 scripts/build.cjs:5-8 assets/now/14-help.png

Что сделать:

  • Фаза 0 Срочно закрыть /docs/: в образ — только пользовательская справка по белому списку, тест сборки на запрещённые слова.
  • Фаза 1 Обращения сохранять на сервере и уведомлять о них владельца.
  • Помощник по справке — после пилота.
Пульт оператора на компьютере: сервер ИИ, модели, очереди, сайты клиентов, бэкапы Пульт оператора на телефоне

32. Пульт оператора

#/ops · Открыть в макете

Экран владельца сервиса: сервер ИИ, модели, очереди, сайты клиентов, бэкапы, аккаунты и ошибки. Только здесь допустимы технические термины.

  • Сервер ИИ: загрузка GPU и памяти.
  • Модели для текста, изображений и фона: загружена или «холодная».
  • Очереди: срочная и фоновая.
  • Сайты клиентов, резервные копии и проверка восстановления.
  • Аккаунты и приглашения, журнал ошибок.

В коде сейчас: нет Веб-пульта нет, а демо-админка /admin «не защищает данные ролями». Есть только серверные механизмы без экрана: управление аккаунтами из командной строки (теперь с отзывом Telegram-доступа), ручные бэкапы перед выпуском на том же диске, допуск загрузки модели по свободной памяти. Мониторинга, метрик и /healthz нет. screens-workspace.js:456 server/account-admin.mjs:4-23 server/backup.mjs:87, 92 scripts/container-health.cjs:6-8

Что сделать:

  • Фаза 1 /healthz, внешний монитор, бэкапы по расписанию вне диска с проверкой восстановления.
  • Фаза 6 Веб-пульт с ролями вместо демо-админки: модели, очереди, сайты клиентов, журнал ошибок.
Карта макетов на компьютере: все экраны по группам со статусом «В коде сейчас» Карта макетов на телефоне

33. Карта макетов

#/screens · Открыть в макете

Служебный экран макета: все 33 экрана по группам со ссылками, назначением и статусом «в коде сейчас». С него удобно начинать просмотр.

  • Экраны по группам: название, ссылка, назначение.
  • Статус «В коде сейчас» (есть, частично, нет) с пояснением.
  • Ссылка на этот отчёт.

В коде сейчас: частично В прототипе есть карта экранов с уровнями готовности, но она не обновлялась: «32 точки входа», нет «Заданий», общей библиотеки, «Готовой серии», серверных партий и «Подключения бота». Продавцам этот экран не нужен. screens-help.js:46 assets/now/16-screens-map.png

Что сделать:

  • Фаза 0 Убрать карту экранов и дорожную карту из пользовательского меню. Карта остаётся в макете — для команды.

9План по фазам

План начинается от актуальной версии PicSeller (рабочее дерево от 11.09 на боевом адресе) и ведёт к бренд-студии из каталога за семь фаз. Каждая фаза связана с планом Codex F0–F7 из прошлого аудита. Общая оценка — 5–7 месяцев работы команды из 2–3 человек, если часть фаз идёт параллельно. Это оценка, а не обязательство.

7
фаз: от фиксации кода до поддержки и оплаты
26–34
нед., если делать строго по очереди (только WB, оценка)
29–38
нед. вместе с Ozon, строго по очереди (оценка)
5–7
месяцев при частичном параллелизме (оценка)
Стартовая точка: что уже сделано

Есть публичный адрес picseller.24oros.ru с входом по приглашению, многоэтапный ARM64 Dockerfile и сервис в Coolify. Работают ProductBrief с источниками фактов, общий отчёт проверки качества (QualityReport) и серверная партия до 100 артикулов с паузой, архивом и ZIP с SHA-256. Проходят 421 тест Node и 15 тестов Python. По плану Codex фазы F0, F2 и F3 выполнены технически, F1 в работе (проверка на пяти новых пользователях не проведена), F4–F7 не начаты. Витрины бренда в плане Codex нет.

Правило приёмки каждой фазы

Фаза закрыта, только когда результат закоммичен, выложен на сервер и проверен онлайн: на публичном адресе, живыми запросами и в браузере, в том числе на ширине телефона. Локальные тесты — лишь предварительная проверка. Урок F0–F3: эти фазы закрыли примерно за 2,5 часа при оценке 21–35 рабочих дней. Поэтому в статусе фазы различаем три уровня: «срез реализован», «технически принят» и «фаза принята». Последний требует продуктовой проверки на пользователях.

Фазы 0–2 — фундамент: всё остальное опирается на сохранённый в git код, серверное хранение и сущность «Товар». Фазы 3–5 можно двигать. Если важнее быстрые деньги на карточках, Фаза 5 (публикация в WB) идёт сразу после Фазы 2, а сайт — следом. Фаза 3 (редактор, фото и качество ИИ) может идти параллельно с Фазой 4 (сайт), если в команде два разработчика.

ФазаСрок (оценка)Главный результатСоответствие плану CodexЗависит от
0. Зафиксировать и обезопасить1–2 нед.Код F0–F3 в git, одна линия разработки, /docs/ закрыт, проверка качества не пропускает демо-серииДоделывает F0 (фиксация изменений) и исправляет регрессии F2Решение об одной ветке
1. Надёжный запуск и одна модель данных3–4 нед./healthz, монитор, автооткат, бэкапы вне диска, CI, сервер — источник истины, вход через Яндекс IDЭксплуатационный gate из аудита; «состояния сохранения» из F1; self-service вход из F6Фаза 0; фиксация маршрута трафика
2. Один путь создания и Товар4–5 нед.Один путь вместо 8, таблица товаров, правила площадок с датой, тексты со ссылкой на факт, пилот на 5 пользователяхДоводит F1 и расширяет F2Фаза 1
3. Редактор и фото6–7 нед.Плавный редактор с привязками, сцена товара, пакет фото, измеримое качество ИИВключает F5 «Качество ИИ»Фаза 2; лицензии моделей; можно параллельно с Фазой 4
4. Сайт-витрина (MVP)4–6 нед.Сайт бренда на поддомене с откатом, заявками и переходами на маркетплейсыНовая: в F0–F7 её нетФазы 1 и 2; юридические документы (152-ФЗ)
5. Публикация в маркетплейсы3–4 нед. на площадкуWB, затем Ozon: «было/станет», подтверждение, сверка, откатF7Фазы 1 и 2; доступ владельца к API площадок
6. Поддержка, сценарии, Telegram, оплата, команда5–6 нед.«Нужно внимание», сценарии по расписанию, живой бот, оплата, роли, пультF4 и F6Фазы 4 и 5; токен бота, платёжный провайдер, оферта

Фаза 0 · Зафиксировать и обезопасить

1–2 недели · оценка · доделывает F0

Цель. Работа F0–F3 сохранена в git, у неё одна линия разработки, боевой адрес не раздаёт внутренние документы, а проверка качества не пропускает демо-серии и заглушки.

Состав работ

  • Закоммитить F0–F3 по фазам. Сейчас вне коммитов 1486 файлов, HEAD всё ещё df16a68 от 08.09. Каталоги deploy/container-*, .codex/evidence и артефакты в коммиты не брать. Поставить тег выпуска preflight-15, добавить git SHA в метку образа и в /v1/me. Выбрать одну линию разработки.
  • Закрыть /docs/ на боевом домене. Сейчас без входа доступны 99 внутренних документов, в 26 — детали инфраструктуры. В образ отгружать только пользовательскую справку по белому списку, эксплуатационные документы держать в RUNBOOK вне образа. Тест сборки проверяет, что в справке нет запрещённых слов.
  • Починить QualityReport, который пропускает демо-серии. Правила «текст-заглушка» и «демо-фото» — с уровнем «ошибка». Старый мастер /app/ai/card-generator перенаправлять на основной маршрут с переносом черновика, новые проекты всегда создавать с ProductBrief. Заодно включить проверку отчёта в серверный PNG-экспорт.
  • Починить регрессию Kaspi, Avito и Lamoda: список площадок в форме брать из контракта. Тест: каждая площадка в форме создаёт серию.
  • Убрать демо-обвязку и заглушки: ленту «Интерактивный прототип», плашку «Демо», фальшивые /login, /register и /forgot, «Войти через ChatGPT», «Мой бренд», «Публикация по API» в подвале, «600+ шрифтов», «40+ правил», вымышленные рейтинги шаблонов, концепции ИИ с ценами, технические термины в интерфейсе.
  • Вычистить deploy/: 1146 файлов и 38,5 МБ, в том числе 9 папок container-03…11 с копиями исходников и разовые скрипты под каждый выпуск. Вместо них — один параметризуемый скрипт выкладки и compose из одного шаблона.
  • Отдельным механическим коммитом прогнать Prettier и ESLint. Завести манифест маршрутов, в котором повторная регистрация пути — ошибка.

Приёмка

  • HEAD содержит F0–F3, выпуск preflight-15 сопоставлен с тегом, разработка идёт в одной ветке.
  • Внутренние документы на боевом адресе не открываются, тест сборки зелёный.
  • Серия с демо-фото или текстом-заглушкой не скачивается; каждая площадка из формы создаёт серию.
  • 0 повторных регистраций маршрутов. Сейчас 21 путь регистрируется повторно: /app/create — 3 раза, /app/editor/:id — 5 раз.
  • В режиме аккаунта нет «Демо» и «Интерактивного прототипа».
  • 421+ тест Node и 15/15 Python зелёные; выложено и проверено онлайн.

Какие экраны макета закрывает

#/ лендинг (без ложных обещаний) · #/create (все площадки работают) · #/result (проверка ловит заглушки) · #/help (без внутренних документов) · #/templates (без рейтингов)

Что переиспользуем из кода

  • QualityReport и ProductBrief: product-contract.js:21-107, quality-ui.js.
  • Пропуск пустых разделов и обязательное фото в брифе: create-hub.js:24, 75.
  • Выкладку через Coolify с проверкой SHA-256 образа, 421 тест.

Фаза 1 · Надёжный запуск и одна модель данных

3–4 недели · оценка

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

Уже есть: публичный адрес и HTTPS через Coolify, многоэтапный Dockerfile с HEALTHCHECK, привязка к 0.0.0.0 только за HTTPS, лимит входа по адресу клиента, ручные бэкапы перед каждым выпуском, общая библиотека проектов. Dockerfile:1-36 server/local.mjs:25-28 server/login-rate-limit.mjs unified-library.js

Состав работ

  • Маршрут /healthz с версией сборки: сейчас он отвечает 404, а здоровье проверяется запросом /v1/projects с ожиданием 401. Внешний монитор доступности и метрики. 01.10 HTTPS не отвечал около 15 минут, и никто бы этого не заметил.
  • Выкладка одним скриптом: сборка, бэкап, миграция, быстрая проверка после деплоя, автооткат на прежний образ. Фактический маршрут трафика записать в RUNBOOK.
  • Бэкапы по расписанию вне диска GX10: Litestream для базы SQLite, restic для фото, регулярная проверка восстановления. ZIP-архивы — из базы в файловое хранилище.
  • Миграции: один источник истины. Сейчас 24 SQL-миграции, а в журнале Drizzle только 7, и штатная генерация создаёт 18 повторных CREATE TABLE.
  • CI с Playwright: 5–10 сценариев основного пути. Playwright — в package.json.
  • Сервер — источник истины. Автосохранение через очередь отправки, без кнопки «На сервер», без копий при открытии. Таблицы брендов, папок и библиотеки (сейчас их нет). Импорт из браузера при первом входе.
  • Вход через Яндекс ID и ссылку на почту, сессии на 30 дней. Публичная страница для посетителей без приглашения: сейчас они видят только «Войдите в PicSeller». CSP, HSTS и Referrer-Policy для всего приложения, лимиты частоты на /v1.

Приёмка

  • Проект, созданный на компьютере, открывается с телефона без ручных действий и без копий.
  • /healthz отвечает на публичном адресе, монитор сообщает о простое, намеренно сломанный образ откатывается автоматически.
  • Восстановление из копии вне GX10 проверено на чистом каталоге.
  • Новый пользователь входит через Яндекс ID без кода от администратора.

Какие экраны макета закрывает

#/login · #/onboarding (первые шаги) · #/materials (одна библиотека на сервере) · #/editor (статус «Сохранено · версия N») · #/settings (профиль, данные) · #/jobs (все задания на сервере)

Что переиспользуем из кода

  • Dockerfile, сервис Coolify и скрипты переключения с проверкой SHA-256 образа: deploy/cutover-gx10.py, deploy/load-verified-image.py.
  • Ревизии с защитой от конфликтов и снимки брифа на каждую ревизию: server/api.mjs:73-109, drizzle/0022.
  • Общую библиотеку (unified-library.js) и подтверждённое сохранение перед отправкой (docs/66-outbox-storage.md).
  • Бэкап с отзывом сессий и Telegram-доступа при восстановлении: server/backup.mjs:87, 92.

Фаза 2 · Один путь создания и Товар

4–5 недель · оценка · доводит F1 и расширяет F2

Цель. Один путь создания вместо восьми. «Товар» — общий источник фактов для всех материалов. Тексты ссылаются на факты, проверка идёт по правилам площадки с датой и источником.

Состав работ

  • Довести F1: убрать дубли входов (8 путей создания → 1). Лендинг ведёт в основной маршрут, меню — из шести пунктов вместо 21. Форма брифа помещается на первом экране телефона: сейчас поле названия начинается на 803 px при высоте экрана 844 px.
  • Пилот F1: 5 новых пользователей, минимум 4 должны самостоятельно дойти до скачивания. Это открытый критерий Codex, сейчас он заблокирован.
  • Расширить F2: серверная таблица товаров на основе ProductBrief (факты с номером, источником и статусом уже есть), плюс цена, фото и идентификаторы карточек WB и Ozon. Импорт по артикулу WB через API контента. Строки партий берутся из таблицы товаров.
  • Один движок раскладки вместо трёх (сейчас ensureScene, cardSeries и card-grid-v1, а «10 серверных раскладок» — это одна геометрия с 10 палитрами). Профили площадок: размер, безопасные зоны, минимальный кегль.
  • Правила площадок с источником и датой вместо одной версии picseller-core-2026-09-11 без официальных правил. Проверки контраста, соотношения сторон и числа изображений, кнопки «Исправить».
  • ИИ-тексты с проверкой происхождения: заголовок и выгоды со ссылками на факты, проверка без ИИ (числа, единицы, отрицания, бренды). Варианты заголовка на экране результата.

Приёмка

  • Первая серия не дольше 4 кликов, без демо-данных. В меню и на лендинге ровно один путь создания.
  • Пилот: минимум 4 из 5 новых пользователей сами скачали серию. Время до файла и число ручных правок записаны.
  • 0 непроверенных строк в материалах. Отчёт качества с правилами площадки (источник, дата) проверяет и браузерный, и серверный экспорт.

Какие экраны макета закрывает

#/app · #/create · #/create/source · #/create/design · #/create/run · #/result · #/products · #/products/:id · #/products/import · #/editor (проверка)

Что переиспользуем из кода

  • ProductBrief, QualityReport и снимки на каждую ревизию: product-contract.js, drizzle/0022.
  • Основной маршрут с индикатором шагов (main-workflow.js) и подтверждение предложений модели (brief-assistant.js, docs/71).
  • «Мои стили» и серверные рецепты с версиями (server/card-recipes.mjs), импорт CSV и Excel с предпросмотром (batch-server-submit.js).
  • Правила из перекрытого подробного чекера: app.js:154.

Фаза 3 · Редактор и фото

6–7 недель · оценка · включает F5 «Качество ИИ» · можно параллельно с Фазой 4

Цель. Редактор не тормозит и умеет то, чего ждут после Canva. Фото с телефона проходят, сцена меняет только фон, не товар. Качество ИИ измеряется на отложенных примерах, а не на глаз.

Состав работ: редактор

  • Перерисовывать только изменённое: при перетаскивании меняется лишь положение элемента, рамка выделения рисуется отдельным слоем. История отмены хранит изменения, а не полные копии проекта. Сборка с долгим кэшем, тяжёлые библиотеки экспорта грузятся по требованию.
  • Привязки и направляющие (порог около 6 px), боковые ручки, правка текста прямо на холсте.
  • Токены стиля поверх уже готовых ролей текста (заголовок, преимущество, основной текст, бренд). Умная смена размера по ролям: «Создать версии для WB, Ozon, ЯМ». Кириллические шрифты со свободной лицензией OFL.

Состав работ: фото, очередь и F5

  • Фото-конвейер: восстановление потерянных заданий, уменьшенная копия для модели (снимает отказ на снимках 12 Мп), 2–4 фото параллельно, удаление фона в серверной партии (сейчас сервер прямо отказывает), пакет по папке фото.
  • Сцена: маска товара → фон (Qwen-Image-Edit-2511 или FLUX.2 klein 4B) → исходные пиксели товара поверх с тенью → проверка целостности. Подключить фото-провайдер на боевом стенде — по решению владельца.
  • F5 «Качество ИИ»: зафиксированные профили модели и промпта, отложенный набор примеров (он подготовлен, но не запускался), проверка фактов и товара, ресурсные пределы GX10. Решение о включении команд серии на боевом стенде: последний живой прогон — 17 из 21, сейчас они выключены.
  • Честная очередь: задания с шагами, очереди «срочная» и «фоновая», задания разных аккаунтов берутся по очереди, прогресс через SSE.

Приёмка

  • Перетаскивание плавное на серии из 6 слайдов с фото 5 МБ. Цель — кадр ≤ 8 мс (оценка; сейчас ≈ 14,5 мс).
  • Сцена проходит проверку целостности товара; снимок с телефона 12 Мп обрабатывается.
  • Задание, потерянное в ComfyUI, не блокирует очередь.
  • Воспроизводимый отчёт качества ИИ на отложенных примерах с согласованным порогом ошибок. Без ИИ редактор работает как обычно.

Какие экраны макета закрывает

#/editor (все состояния: ИИ-помощник, проверка, версии, размер, скачать) · #/photos · #/brand · #/templates · #/batch (фото в партии) · #/jobs

Что переиспользуем из кода

  • Роли текста и фильтр оформления серии по роли: scene.js:9-25, editor-series.js. Быстрые действия: editor-simple.js. Проверки перед скачиванием: docs/93-94.
  • Версионированный промпт и метрики прогонов: server/series-plan-prompt.mjs, scripts/series-benchmark-metrics.mjs. Срок ожидания модели: server/ai-jobs.mjs:7.
  • Сохранение цвета товара (scripts/photo-pixels.py) и графы ComfyUI с проверкой узлов (server/comfy-background-contract.mjs).
  • Алгоритмы привязок и правки текста на холсте из демо Konva (MIT).

Фаза 4 · Сайт-витрина

4–6 недель на MVP · оценка · новая, в F0–F7 её нет

Цель. Из каталога и бренда за пару минут получается сайт бренда на <бренд>.24oros.ru с переходами на WB и Ozon и заявками в Telegram. Это главный запрос владельца, которого нет ни в коде, ни в плане Codex.

Состав работ

  • Сайт как документ из типизированных секций (до 12 типов) со строгой проверкой на сервере. На главной в макете 9 секций: шапка, первый экран, преимущества, товары, история бренда, отзывы, вопросы, форма заявки, подвал.
  • Мастер сайта из каталога: тексты со ссылками на факты из брифа, фото из готовых серий.
  • Конструктор «чат + предпросмотр» с «укажи и скажи». Простые правки — без модели, модель — только для перестройки секций. План операций виден до применения, есть режим «Спросить».
  • Статические страницы собираются из тех же данных и бренд-кита. Публикация на <бренд>.24oros.ru с атомарным переключением версии, журнал версий и откат.
  • Заявки: таблица, уведомления в Telegram, срок хранения. Ссылки на WB и Ozon с UTM-метками и счётчик переходов.
  • Проверка перед выкладкой: SEO-заголовки, описания фото, контраст, согласие на обработку персональных данных в форме, вес страницы. Один сертификат на все поддомены (wildcard через DNS-01).

Приёмка

  • Сайт из каталога собирается не дольше 2 минут.
  • Откат на прошлую версию занимает ≤ 10 с.
  • HTTPS проверяется автоматически после каждой выкладки.
  • Форма заявки не публикуется без согласия на обработку данных и ссылки на политику.

Какие экраны макета закрывает

#/site/new · #/site/builder · #/site · #/site/publish · #/site/leads · #/site/stats (переходы и здоровье)

Что переиспользуем из кода

  • Модель сцены и предсказуемый рендер — основа витрины. Бренд-кит. ProductBrief — источник текстов со ссылками на факты.
  • Цикл «предложение → сравнение → применение → версия → одна отмена». Серверный рендер для снимка выделенной секции.
  • Coolify, Traefik и поддомены *.24oros.ru. Привязку Telegram (server/bot-links.mjs) — для уведомлений о заявках.
  • Кандидат на редактор секций — ядро GrapesJS (BSD-3-Clause), решение после прототипа на двух секциях. Схема «страница = набор разрешённых секций» — по образцу Puck (MIT): берём идею, не код.

Фаза 5 · Публикация в маркетплейсы

3–4 недели на площадку · оценка · это F7

Цель. Готовые карточки уходят в кабинет WB, а затем Ozon: с предпросмотром «было/станет», подтверждением, сверкой и откатом. У Codex это фаза F7: она не начата и требует доступа владельца к API.

Состав работ

  • WB по шагам. Ключ с правом «Контент» → привязка материала к карточке через чтение списка карточек (/content/v2/get/cards/list) → «было/станет» по списку фото → подтверждение → загрузка фото по ссылкам на файлы серверного экспорта (/content/v3/media/save) → чтение обратно и сверка → журнал и откат к прежнему набору.
  • Ключи кабинетов: только нужные права, ключ не показывается после сохранения, хранится в зашифрованном виде, отзывается одной кнопкой, все действия в журнале.
  • Ozon — тем же путём через загрузку изображений товара (/v1/product/pictures/import). Яндекс Маркет — позже.
  • Пакетная публикация готовых серий из серверной партии.

Приёмка

  • Публикация подтверждена чтением из кабинета.
  • Откат возвращает прежний набор фото.
  • Повтор после сбоя или неизвестного исхода не создаёт дублей.

Какие экраны макета закрывает

#/publish · #/publish/wb (выбор, «было/станет», готово) · #/channels/connect (WB, Ozon) · #/result («Опубликовать в WB») · #/batch («Опубликовать готовые»)

Что переиспользуем из кода

  • Воспроизводимый PNG-каталог партии с описью и SHA-256: server/batch-export-requests.mjs, server/batch-export-artifacts.mjs.
  • Ключи идемпотентности и аренду заданий: server/ai-jobs.mjs. Ревизии — для снимка «было».
  • Долговечную очередь доставки с состоянием «неизвестно» из модулей бота: server/bot-dispatch.mjs, server/bot-delivery-control.mjs.
  • Движок правил из Фазы 2. Образец процесса — агент JAFO: чтение → подтверждение → журнал с откатом.

Фаза 6 · Поддержка, сценарии, Telegram, оплата, команда

5–6 недель · оценка · это F4 и F6

Цель. PicSeller сам подсказывает, что обновить, повторяет работу по расписанию, принимает заказы из Telegram, честно берёт деньги и пускает в работу команду.

Состав работ

  • Сценарии (F4): версия сценария (рецепт, источник товаров, расписание, часовой пояс, лимит, получатель), повторяющееся расписание с устойчивым ключом запуска и журналом, пауза сценария, восстановление без повторной генерации. Сейчас есть только однократный отложенный запуск партии и UX-макет F4 без API.
  • Живой Telegram (F4): токен владельца, служба бота, ограниченный пилот «фото + факты → карточки → ссылка». Сейчас написаны 8 модулей и 41 тест, но токена нет, а бот умеет только текстовую команду презентации.
  • Поток «Нужно внимание» и пакетное обновление затронутых материалов из фактов. Аналитика сайта.
  • Оплата (F6): ЮKassa или CloudPayments, тарифы и журнал расходов, цена операции до запуска, без автопродления по умолчанию.
  • Команда и роли (F6): владелец, дизайнер, контент-редактор, наблюдатель. Проверка роли на сервере, согласование.
  • Пульт оператора: веб-панель вместо командной строки и демо-админки. Хранилище: ежедневная очистка и экран «Что занимает место».

Приёмка

  • После изменения цены товара сайт и презентация обновляются не больше чем за 3 действия.
  • Пользователь видит цену операции до запуска.
  • После паузы сценария не появляется ни одного нового запуска; повтор события возвращает тот же запуск и не создаёт вторую партию (критерии F4 из NEXT_PHASE.md).
  • Отзыв Telegram-связи сразу запрещает новые заказы и доставки, история сохраняется. Наблюдатель не может менять материалы — проверено тестом.

Какие экраны макета закрывает

#/app («Нужно внимание») · #/products/:id (изменение цены) · #/materials («Обновить из фактов») · #/batch (сценарии) · #/publish (бот как второй вход) · #/channels/connect (Telegram) · #/site/stats · #/pricing · #/settings: тариф · #/settings: команда · #/settings: хранилище · #/ops

Что переиспользуем из кода

  • Модули бота: привязка, заказ, отправка, доставка (server/bot-links.mjs, server/bot-orders.mjs, server/bot-dispatch.mjs; 41 тест).
  • Однократный отложенный запуск партии с часовым поясом — основа расписания: server/card-batches.mjs:66-71.
  • Управление аккаунтами и бэкапы: server/account-admin.mjs, server/backup.mjs. Атомарная квота на фото — основа учёта расходов: server/api.mjs:177-206.
  • UX-макет F4 design/f4-automation-prototype: сценарий, пауза, ключ запуска, черновик в Telegram.

Сроки фаз — оценка для команды из 2–3 человек, без учёта ожидания решений владельца. Они сведены из оценок трудоёмкости по каждой возможности. Для сравнения, у Codex оценки даны в рабочих днях одного разработчика: F4 — 7–12, F5 — 5–10, F6 — 10–20, F7 — после доступа к API.

10Решения владельца и риски

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

Срочно: внутренние документы открыты всем

На picseller.24oros.ru/docs/ без входа доступны 99 внутренних документов, в 26 из них — детали инфраструктуры. Подробности и доказательства — в проблеме 21; решение — пункт 1 ниже.

Публичный адрес работает, но маршрут не описан

Прежний блокер «нет публичного адреса» снят: picseller.24oros.ru открывается публично через 217.199.253.218 — так сейчас отвечает DNS для *.24oros.ru. За ним Traefik и контейнер container-preflight-15 в Coolify на GX10, вход по приглашению. Но маршрут изменили вне репозитория: в документе проекта записан прежний адрес, а правило владельца от 24.09 направляет публичные порты на сервер sagr (доступ к нему открыт 01.10, приложение туда не переносилось). 01.10 HTTPS не отвечал около 15 минут, а внешнего мониторинга нет. docs/87-public-origin-preflight.md:3 deploy/gx10-coolify-target.json

Что решить

Что решитьВариантыНаша рекомендацияК какому сроку
1. Закрыть /docs/ на боевом адресе а) Пересобрать образ: только пользовательская справка по белому списку, эксплуатационные документы — в RUNBOOK вне образа.
б) Временно закрыть /docs/ правилом в Traefik, затем сделать «а».
срочно «б» сегодня, «а» — в Фазе 0. Добавить тест сборки на запрещённые слова (ssh, Tailscale, внутренние адреса, Coolify). Немедленно
2. Одна ветка разработки Сейчас линий две. Первая — коммиты Claude до df16a68 от 08.09 (и ветка этого анализа). Вторая — незакоммиченная работа Codex F0–F3 в основной копии: 1486 файлов, из них 1105 — копии исходников в deploy/container-*. Варианты: а) закоммитить работу Codex по фазам поверх df16a68 и дальше вести всё в одной ветке; б) вернуться к df16a68 и переносить изменения выборочно. срочно Вариант «а»: production собран из этой работы, а терять её нельзя. Дальше — одна основная ветка, короткие ветки на задачу и никакой работы вне коммитов. Тег выпуска preflight-15. Сейчас, первым делом Фазы 0
3. Маршрут трафика и сервер для выкладки а) Закрепить работающий маршрут (DNS → 217.199.253.218 → Traefik → GX10), записать его в RUNBOOK и поставить внешний монитор.
б) Перенести приложение на sagr, как требует правило от 24.09: доступ открыт 01.10, нужен образ под x86_64.
в) Вернуть публичные порты на GX10.
«а» сейчас: это ничего не ломает и даёт наблюдаемость. Перенос на sagr («б») — отдельным решением, если правило от 24.09 в силе. До конца Фазы 0
4. Фото-провайдер и ИИ-команды на боевом стенде Сейчас выключены: не задан адрес фото-провайдера, команды серии выключены, загрузка модели запрещена (deploy/docker-compose.coolify.yml:12-22). Интерфейс эти функции при этом показывает. а) Включить для закрытой беты с лимитами; б) оставить выключенными и честно скрыть. «б» до Фазы 3: скрыть недоступные функции и писать «недоступно на этом сервере». Включать по одной в Фазе 3, с лимитами, мониторингом и отчётом качества на отложенных примерах. Скрыть — в Фазе 0; включать — в Фазе 3
5. Живой Telegram-бот Код бота готов (8 модулей, 41 тест), но живого канала нет: нужен токен владельца и установка службы. Бот умеет только текстовую команду презентации. а) Ограниченный живой пилот сейчас; б) после пилота основного пути. «б»: заморозить расширение бота. Один ограниченный пилот «фото + факты → карточки → ссылка» в Фазе 6, токен и служба — от владельца. Решение — к Фазе 6
6. Домен продукта и товарный знак Сейчас picseller.24oros.ru; собственный домен; отдельная зона для витрин клиентов. Справка прототипа уже упоминает api.picseller.ru (data.js:570), но чей это домен, мы не проверяли. Пилот — на 24oros.ru. Параллельно проверить название «PicSeller» по реестру товарных знаков и выбрать домен до платного запуска. До конца Фазы 2
7. Приложение Яндекс ID Зарегистрировать приложение для входа (OAuth) на юрлицо или ИП владельца с адресом возврата на домене продукта. Резервный вход — ссылка на почту (нужен сервис отправки писем). Регистрировать сразу после выбора домена: без этого Фазу 1 не закрыть. Середина Фазы 1
8. Платёжный провайдер ЮKassa или CloudPayments. Подойдёт любой из двух — выбирать по условиям подключения и комиссии. Обязательно для продукта: цена операции видна до запуска, без автопродления по умолчанию, понятный возврат. До начала Фазы 6
9. Юридические документы Оферта, политика обработки персональных данных, согласие в формах заявок на сайтах клиентов (152-ФЗ). Готовые шаблоны с проверкой юристом или документы с нуля. Заказать у юриста комплект: оферта, политика, порядок хранения заявок посетителей с сайтов клиентов (кто оператор данных, срок хранения). Оферта и политика — до открытого входа (Фаза 1); формы заявок — до Фазы 4
10. Лицензии моделей Под Apache-2.0 и можно в продакшен: FLUX.2 klein 4B, Qwen-Image-Edit-2511. Некоммерческие, только с лицензией BFL: FLUX.2 klein 9B, FLUX.1 Kontext dev. Лицензию Z-Image Turbo проверить до использования. rembg — только с моделью birefnet-general (модель по умолчанию bria-rmbg требует платного соглашения). В продакшен — только модели под Apache-2.0 и MIT, с реестром лицензий в пульте оператора. Некоммерческие — только для экспериментов. До Фазы 3 (сцена товара)
11. Направление продукта «Бренд-студия из каталога»: карточки, презентация, витрина, публикация. «Карточки под ключ с проверкой и публикацией» — без витрины. «Приватный контент-конвейер для брендов и агентств» (B2B). План Codex F0–F7 фактически ведёт ко второму варианту: витрины в нём нет. рекомендуем «Бренд-студию из каталога»: она закрывает запрос владельца и незанятую нишу. Витрину не делает ни один российский сервис для селлеров, а Pomelli в России недоступен. Витрину добавить в план отдельной фазой (Фаза 4). Сейчас: от этого зависит порядок Фаз 3–5
12. Пилот с 5 продавцами Открытый критерий F1 у Codex: 5 новых пользователей, минимум 4 доходят до скачивания. Сейчас он заблокирован. Провести сразу, на текущей версии, или после Фазы 2, когда останется один путь создания. После Фазы 2: 5 продавцов, по 2 товара из разных категорий. Метрики: время до скачанного файла, число ручных правок, доля самостоятельного завершения. Участников набирать во время Фазы 1. До пилота не начинать сценарии F4. Набор — в Фазе 1, пилот — в конце Фазы 2
13. Заморозка новой инфраструктуры до пилота Заморозить всё, кроме нужного для надёжного запуска, или продолжать параллельно. За 08–11.09 добавлено 30 документов, 56 скриптов и 1146 файлов в deploy/, а бот вырос до 8 модулей без живого канала. Заморозить. Из 166 коммитов до df16a68 на ядро создания и редактирования пришлось 31%, а 49% изменённых строк — документы и журналы проверок. После этого перекос только вырос. Сейчас

Главные риски

РискВероятностьВлияниеЧто делаем
Потеря работы вне git. 1486 файлов F0–F3 не закоммичены, production собран из рабочего дерева, связь кода с выпуском держится только на SHA-256 файлов в образе. Ревью и откат по коммиту невозможны. высокая критическое Коммиты по фазам и тег выпуска в первый же день Фазы 0, одна ветка разработки, git SHA в метке образа.
Утечка внутренних документов. 99 документов на боевом адресе без входа, в 26 — детали инфраструктуры. уже происходит высокое Закрыть /docs/ немедленно, затем белый список справки в образе и тест сборки.
Ложное чувство готовности. Фазы F0–F3 закрыты примерно за 2,5 часа при оценке 21–35 рабочих дней, приёмка F1 на пользователях не проведена. Отчёт качества ставит «Можно выпускать» серии с демо-фото и заглушками. высокая высокое Различать «срез реализован», «технически принят» и «фаза принята». Заглушки и демо-фото — ошибки проверки. Пилот после Фазы 2 — ворота для следующих фаз.
Публичная доступность не наблюдается. Маршрут трафика менялся вне репозитория, /healthz отвечает 404, 01.10 HTTPS не отвечал около 15 минут. средняя высокое /healthz с версией сборки, внешний монитор, маршрут в RUNBOOK, автооткат (Фаза 1).
Один сервер ИИ и один модельный слот. На процесс приходится один слот модели, фото обрабатывается одно на весь сервер, задания идут по порядку поступления. Один аккаунт с 10 заданиями по 120 с задержит остальных до 20 минут. На боевом стенде фото-провайдер не подключён, ИИ-команды выключены. высокая высокое Очереди «срочная» и «фоновая», задания разных аккаунтов по очереди (Фаза 3). Простые правки — без модели. Включать ИИ на стенде по одной функции, с лимитами и метриками. Второй ИИ-узел — решение по метрикам после пилота.
Изменения API и правил WB и Ozon. По вторичным источникам, WB обновил требования к фото 28.08.2026, у Ozon новые ограничения с 15.08.2026. В актуальной версии правил площадок нет: одна внутренняя версия на все три. высокая среднее Правила с датой и источником (Фаза 2). Тонкий модуль подключения для каждой площадки, тесты на записанных ответах, чтение обратно после публикации, журнал и откат (Фаза 5). Яндекс Маркет — позже.
Лимиты Let's Encrypt. Не больше 50 сертификатов в неделю: при быстром росте числа витрин новые сайты могут остаться без HTTPS. средняя высокое Один сертификат на все *.24oros.ru через DNS-01. Для этого нужен API-доступ к DNS-зоне 24oros.ru, она сейчас у Timeweb. Для своих доменов клиентов — отдельные сертификаты в очереди с проверкой.
Ответственность за доступность чужих сайтов. Простой или просроченный сертификат бьёт по продажам клиента и по нашей репутации. средняя высокое Статические страницы (меньше движущихся частей), проверка HTTPS и доступности после каждой выкладки и по расписанию, бэкапы, откат ≤ 10 с. Честные условия доступности в оферте.
Хранение ключей кабинетов и Telegram-токена. Утечка ключа — это доступ к кабинету продавца на маркетплейсе или к его чату. средняя критическое Только право «Контент». Ключи хранятся в зашифрованном виде и не показываются после сохранения, отзыв — одной кнопкой, все действия в журнале. Отзыв Telegram-доступа при восстановлении и отключении аккаунта уже есть (server/backup.mjs:87, server/account-admin.mjs:14-15).
Распыление на три продукта: карточки, презентации и сайт одновременно, плюс бот и сценарии. высокая высокое Жёсткая очерёдность фаз. Пилот после Фазы 2 — ворота для следующих фаз. Новая инфраструктура и расширение бота заморожены. Фаза закрывается только выкладкой онлайн.
Конкуренция с бесплатным ИИ площадок. Ozon бесплатно меняет фон (около 40 изображений в день на функцию). WB бесплатно даёт 20 описаний в месяц, а «Фотостудию» и видеообложки — по подписке «Джем». В Яндекс Маркете YandexGPT пишет названия и описания. высокая среднее Не продавать удаление фона и описания как главную ценность. Отличаться серией в стиле бренда, проверкой по правилам с датой, публикацией с откатом, витриной и правилом «ИИ не выдумывает». Модели работают на своём сервере, и данные селлера не уходят наружу.

Вероятность и влияние — экспертная оценка по итогам анализа, не измерение.

11Источники и методика

Анализ сделан 30 сентября — 1 октября 2026 года. Первые аудиты шли по закоммиченной версии df16a68, затем все выводы досверены с актуальной версией: рабочим деревом от 11.09, развёрнутым на picseller.24oros.ru. Статусы в разделе 8 и план в разделе 9 даны по актуальной версии. Оценки сроков помечены словом «оценка».

6
аудитов кода и досверка по актуальной версии
421/421
тестов Node в актуальной версии (было 299 в df16a68), Python 15/15
2
живых прогона: df16a68 и актуальная версия с публичным адресом
55
карточек аналогов в 4 сегментах
256
уникальных внешних ссылок

Как делался анализ

1Шесть аудитов кодаИИ и очереди; сервер, данные и выкладка; фото-конвейер; редактор; документация и качество; интерфейс и навигация. По коммиту df16a68.
2Живой прогонПрототип df16a68 на локальном сервере без ключей: оба пути создания до файла, 18 снимков.
3Аналоги4 сегмента: российские сервисы карточек, мировые ИИ-инструменты визуала, ИИ-конструкторы сайтов, открытые компоненты.
4СводкаЧто готово (77 возможностей), 20 главных проблем, разрыв до продукта по 18 возможностям, три направления.
5ДосверкаКаждый вывод сверен с актуальной версией и прошлым аудитом Codex: статусы, проблемы, новые возможности, план F0–F7.
6Прогон актуальной версииТа же сборка, что на боевом адресе: 4 проверенных пути до серии, около 40 экранов, 29 снимков, проверка публичного адреса.
Что именно проверял каждый аудит
  • ИИ и автоматизация: локальные модели на GX10, очереди заданий, помощники брифа, структуры и редактора. 49 из 49 тестов ИИ-части прошли. Качество структуры презентации — 120 из 120 фактов на синтетическом наборе, правка объекта — 20 из 20 контрольных команд, команды серии — 11 из 12 (в актуальной версии последний прогон — 17 из 21).
  • Сервер, данные и выкладка: server/*.mjs, схема базы и миграции, браузерное хранилище, стенд GX10. Пробный запуск штатной генерации миграций на копии показал повторные CREATE TABLE: в df16a68 — одну, в актуальной версии — 18.
  • Фото-конвейер: удаление фона, очередь фото, сохранение цвета, очистка файлов. 40 тестов Node и 9 тестов Python прошли. Зависание при потере задания воспроизведено.
  • Редактор и графическое ядро: модель сцены, раскладка, отмена, трансформации, шрифты, экспорт, серверный рендер. 178 из 178 тестов области прошли. Скорость редактора замерена в Chromium на Mac: 6 слайдов, фото 5 МБ.
  • Документация, план и качество: README, docs/01–68, фазовые планы, история 166 коммитов, обещания интерфейса против кода.
  • Интерфейс и навигация: маршруты, меню, мастера, стили, вёрстка на 375 px. 170 из 170 тестов интерфейса прошли, весь путь до скачанного ZIP пройден в браузере.

Метод досверки по актуальной версии

  • Статика. Поиск и чтение кода в копии рабочего дерева от 11.09, сравнение с df16a68 и git diff HEAD — только на чтение.
  • Тесты и сборка. npm test — 421/421 за 7,06 с, Python — 15/15, npm run build прошёл в изолированной копии.
  • Рантайм. Изолированная копия со своей базой и портом, Playwright, счётчик регистраций маршрутов. Так найдены регрессия Kaspi, Avito и Lamoda и пропуск демо-серии проверкой качества.
  • Публичный адрес (01.10.2026, без входа): / 200, /auth/sign-in 200, /v1/projects 401, /healthz 404. SHA-256 10 из 10 сверенных файлов клиента совпали с копией.
  • Живой прогон. 29 снимков в studio-v2/assets/now/: 16 для компьютера, 4 для телефона, 9 справочных (публичный адрес, лаборатория Codex).
  • Основная копия PicSeller и сервер GX10 не менялись, вход в аккаунты не выполнялся.

Правила сбора данных и где лежат материалы

  • Аналоги изучались только по публичным страницам: без входа в аккаунты и без платных генераций. Цифры из сторонних обзоров помечены в исследованиях как вторичные.
  • Звёзды, лицензии и даты обновлений открытых проектов взяты из GitHub REST API и реестра npm на 30.09.2026.
  • Спецификация продукта и экранов: studio-v2/DESIGN.md. Кликабельный макет: studio-v2/app/, снимки макета: studio-v2/assets/new/.
  • Снимки прототипа: assets/current/ — версия df16a68, assets/now/ — актуальная версия.

Прошлый аудит Codex и документы состояния

  • research/audit-2026-09-10/REPORT.md — полный аудит Codex от 10.09.2026: обзор и план F0–F7, техническая часть, рынок и открытые компоненты
  • research/audit-2026-09-10/overview-and-plan.md — план F0–F7 с критериями приёмки и оценками в рабочих днях (строки 117–126)
  • research/audit-2026-09-10/technical.md, market-and-open-source.md — технический разбор и рынок; витрины бренда в них нет
  • picseller-lab.24oros.ru — публичная версия аудита Codex; /demo/ — его кликабельный макет «будущей студии»
  • PROJECT_STATE.md — состояние на 10.09: F3 «технически принят», container-preflight-15 на GX10
  • NEXT_PHASE.md — следующий этап F4 «Сценарии и Telegram», открытый критерий F1, публикация — фаза F7
  • VERIFICATION.md — журнал проверок F0–F3: тесты, образы, бэкапы, публичные браузерные прогоны
  • DECISIONS.md и .codex/project-state.json — решения F0 и машиночитаемое состояние фаз (пилот F1 заблокирован)
  • deploy/docker-compose.coolify.yml, deploy/gx10-coolify-target.json — конфигурация боевого стенда

Документы проекта

Новые документы docs/69–98 из актуальной версии.

  • docs/69–71 — срок ожидания модели, простой план автоматизации, единый разбор брифа
  • docs/72–80 — Telegram-бот: входящие, привязка, заказ, отправка, восстановление доставки, служба, транспорт, запуск, проверка на GX10
  • docs/81, docs/90, docs/92 — планы: продукт автоматизации, выполнение помощника, упрощение и GX10
  • docs/82–86 — быстрые действия с текстом и фото, роли текста, фильтр серии по роли, выпуск ролей
  • docs/87–89 — проверка публичного адреса, сетевой слушатель и образ контейнера
  • docs/91 — руководство «Каталог на сервере» (частично устарело: «архивирование не реализовано», «preflight-07»)
  • docs/93–94 — проверки текста и фото перед экспортом
  • docs/95–98 — фазы F0–F3: надёжность, основной маршрут, качество товара, воспроизводимые каталоги

Прежние документы docs/01–68, на которые опирались первые аудиты.

  • README.md — что можно сделать сейчас (обновлён 11.09)
  • docs/01-research-competitors.md — прежний срез конкурентов (05.09.2026, 4 сервиса)
  • docs/02-product-requirements.md — требования P0–P2 и пилот с 5 продавцами
  • docs/05-architecture.md, docs/07-roadmap-phases.md — архитектура и прежний план по фазам
  • docs/10-validation.md, docs/11-server-storage.md, docs/12-backup-recovery.md — проверка, серверное хранение, бэкап
  • docs/13-local-ai.md, docs/25, docs/26, docs/27, docs/64, docs/65, docs/67, docs/68 — локальный ИИ, оценки моделей, ИИ-правки, разбор брифа, допуск по памяти
  • docs/15-background-removal.md, docs/16-photo-editing.md — удаление фона и замена фото
  • docs/17, docs/18, docs/22, docs/23 — каталоги из CSV и Excel, собственные шаблоны, бренд-кит
  • docs/24-gx10-automation-plan.md, docs/46, docs/50, docs/52 — модели на GX10, стенды, планы автоматизации
  • docs/53, docs/58, docs/59, docs/60, docs/61, docs/62, docs/66 — экран результата, серверный рендер и экспорт, управление аккаунтами, сохранение перед отправкой

Внешние источники

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

Российские сервисы карточек и ИИ самих площадок — 14 продуктов, 48 ссылок; срез 30.09.2026, только публичные страницы

Мировые ИИ-инструменты товарного визуала — 13 продуктов, 67 ссылок; страницы проверены 30.09–01.10.2026

ИИ-конструкторы сайтов полного цикла — 14 продуктов, 69 ссылок; срез 30.09–01.10.2026

Открытые компоненты, деплой и модели изображений — 14 карточек, 74 ссылки; GitHub REST API и npm на 30.09.2026

Оговорки

Что стоит учитывать при чтении
  • Актуальная версия не закоммичена: досверка шла по копии рабочего дерева на 01.10.2026. Если дерево изменится до фиксации в git, номера строк в ссылках могут сдвинуться.
  • Боевой адрес проверен без входа: вход по приглашению не выполнялся. Функции за входом проверены на той же сборке локально, в режиме одного аккаунта.
  • Часть цен западных сервисов взята из вторичных обзоров. Страницы Canva и справки Adobe отвечали ошибкой 403, их данные взяты из поисковой выдачи по официальным доменам. Официальные страницы Replit (403) и same.new (429) не открылись. Можно ли оплатить западные сервисы из России, не проверялось.
  • Даты изменения правил площадок (WB — 28.08.2026, Ozon — 15.08.2026) взяты из вторичных источников. Правила в макете — иллюстрация: цифры нужно сверить с официальными документами.
  • Число маршрутов зависит от способа подсчёта. В актуальной версии — 89 регистраций на 64 пути по исходникам и 91 на 66 при запуске, 21 путь повторно.
  • Качество маски при удалении фона проверено на одном товаре. Оценки моделей сделаны в основном на синтетических наборах, а не на реальных пользователях.
  • При замерах редактора один вызов, вероятно, выполнился во вкладке другой сессии (127.0.0.1:4391). Временный проект оттуда удалён, но координата одного фото в памяти той вкладки могла сдвинуться на 1 px без сохранения. Тот проект стоит проверить.
  • Сроки и трудоёмкость — оценки для команды из 2–3 человек, без учёта ожидания решений владельца. Оценки Codex даны в рабочих днях одного разработчика, поэтому напрямую не сравниваются.
  • Данные в макете вымышлены: бренд «Мох», товары, цифры сайта, имена команды.

PicSeller 2.0 · анализ и макеты · 1 октября 2026 · рабочая копия claude/algorithm-interface-analysis-904b4a