PicSeller 2.0: анализ, сравнение с аналогами и макеты готового продукта
Что уже работает в актуальной версии PicSeller — рабочем дереве от 11 сентября, развёрнутом на https://picseller.24oros.ru, — что мешает ему стать продуктом и как устроены аналоги. На этой основе описан целевой продукт полного цикла «Создать → Править → Опубликовать → Поддерживать», собраны кликабельные макеты всех его экранов и план по фазам. Выводы опираются на код, тесты и живые прогоны, а не на описания в документах проекта.
1 октября 2026Версия: рабочее дерево от 11.09 — последний коммит df16a68 плюс 1486 незакоммиченных файлов166 коммитов, 98 документовТесты: 421/421 Node и 15/15 Python6 аудитов подсистем и сверка с актуальной версией2 живых прогона: версии от 08.09 и от 11.0955 аналогов в 4 сегментах: 14 российских сервисов карточек, 13 мировых ИИ-инструментов, 14 конструкторов сайтов, 14 открытых проектов
файлов работы 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 рабочих дней, а внутренние документы с деталями инфраструктуры открыты на боевом домене без входа. Первый этап рекомендованного пути — публичный запуск — в основном пройден; впереди один путь создания, серверный источник истины, витрина и публикация.
Локально: файл 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) и цены тарифов.
Глубоко разобрать 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 и ЯМ.
Сценарии и Telegram: сохранённый сценарий, расписание, журнал, пауза, бот через общий заказ
не начато
Есть заготовки бота без живого канала, однократный отложенный запуск партии и отдельный макет интерфейса от 26.09.
F5
Качество ИИ: профили модели и промпта, отложенная выборка, проверка фактов и товара
не начато
Отложенная выборка подготовлена, но не запускалась; последний прогон команд серии — 17 из 21.
F6
Команды и коммерческий пилот: роли, самостоятельный вход, тарифы, платежи, поддержка
не начато
Команда и тарифы — макеты, OAuth и платежей в коде нет.
F7
Площадки и масштабирование: официальный адаптер маркетплейса с предпросмотром публикации
не начато
Публикация — заглушка PS.demoOnly.
Сайта-витрины в плане нет ни в одной фазе: слово «витрина» встречается только как витрина Яндекс Маркета в требованиях к изображениям. Наш отчёт продолжает этот аудит. Мы принимаем его контракты и сделанное в F0–F3, закрываем хвосты — фиксацию в git, безопасность, один путь создания, проверку на пользователях — и добавляем то, чего в плане нет: витрину бренда, сервер как единственный источник истины и поддержку после выпуска.
Прошлый макет интерфейса 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/.
Мастер карточки /app/ai/card-generator: фото и факты превращаются в серию из 3 или 6 разделов, 12 стилей По сути не менялся: форма предзаполнена «Наушники SOFT SOUND», без своего фото подставляется headphones.png, пустые разделы получают заглушки. Проект создаётся без брифа товара, поэтому проверка качества пропускает серию: 6 страниц с демо-фото, «Мой бренд» на 6, заглушки на 3 — «Можно выпускать». На мастер ведут 3 ссылки лендинга и кнопки «Создать карточку».
Экран «Создать» с коротким брифом: название, фото и факты превращаются в серию, дальше редактор Улучшен в F1 и F2: индикатор 4 шагов «Фото → Факты → Стиль → Серия», одна кнопка «Создать серию», черновик переживает перезагрузку, фото обязательно, пустые разделы пропускаются, каждая серия получает бриф товара, подсказки «Осталось перед созданием». Осталось: категория зашита как electronics, на карточках «Мой бренд». Новая регрессия: Kaspi, Avito и Lamoda ломают создание серии.
Серверная сборка карточек card-grid-v1 («Собрать на сервере») Сервер принимает все 10 стилей рецептов, добавлены роли текста и проверка брифа и отчёта качества на входе. Но геометрия одна на все стили — это 10 трёхцветных палитр; площадка на макет не влияет, Arial и electronics зашиты. Форма предлагает 12 стилей и 6 площадок, сервер принимает 3 площадки. Кнопка свёрнута в «Собрать в фоне».
Составной заказ «удалить фон, затем собрать карточки» Код почти не менялся, но в публичном контейнере фото-провайдер не настроен, а серверная партия зависимую обработку фото отклоняет. Цепочка работает только на прежнем закрытом стенде.
Пакетный каталог из CSV или Excel: сопоставление колонок, проверка строк, пауза, повтор Добавлен серверный путь: партия от 1 до 100 строк с уникальными артикулами, очередь не зависит от вкладки, пауза, продолжение, архив, исправление строк с историей попыток, однократный отложенный запуск. Сборка в браузере ушла в «Дополнительно». Нужен сохранённый серверный стиль; удаления фона в партии и повторяющегося расписания нет.
Шаблоны: 41 демо и собственные с полями {{name}} и {{sku}} и фото из CSV Без изменений.
работает
refinements.js:8-100docs/18
Рейтинги и число использований шаблонов в галерее Без изменений: вымышленные рейтинг и популярность.
только макет
screens-app.js:88-109
Онбординг /onboarding Без изменений.
только макет
screens-site.js:164
Редактор
Возможность
Статус
Доказательство
JSON-модель сцены (5 типов слоёв) и серверная проверка по списку разрешённых полей Добавлено необязательное поле «роль» (заголовок, преимущество, текст, бренд) с проверкой в браузере и на сервере.
Один SVG-рендер для превью, экспорта и серверного PNG в headless Chromium В контейнере Chromium ставится через Playwright 1.62.1; на GX10 получен PNG 900×1200.
Перенос текста по измерению глифов и предупреждение о переполнении Алгоритм не менялся, интерлиньяж 1.22. Добавлены список переполненных блоков в окнах «Скачать» и «Проверка» с переходом к тексту и кнопка «Вместить в блок».
работает
layout-engine.js:32docs/82docs/93
Перемещение, масштаб и поворот: угловые ручки, числовой диалог Боковых ручек, привязок, направляющих и выделения рамкой по-прежнему нет. Добавлены «Фото крупнее» и «Фото меньше» на ±10%.
частично
transform-controls.js:7-48docs/83
Группы и порядок слоёв Без изменений: «Выше/Ниже» переставляет элементы внутри группы, вложенных групп нет.
частично
screens-editor.js
Отмена и повтор: 40 шагов, склейка ввода Без изменений: каждый шаг — полный снимок проекта.
работает
screens-editor.js:23-25
Простой и точный режимы инспектора Добавлены быстрые действия «Крупнее», «Мельче», «Вместить в блок», «Фото крупнее/меньше» и выбор назначения текста.
работает
editor-simple.jsdocs/82-84
Оформление всей серии: фон, цвет текста, размер ±10%, одна отмена Добавлен фильтр по назначению текста: весь видимый, заголовок, преимущество, основной текст, бренд.
работает
editor-series.jsseries-plan.jsdocs/85
Бренд-кит: палитра, шрифт, логотип, применение к проектам и пакету Без изменений: 4 семейства шрифтов, Manrope в карточки не попадает, «Мой бренд» печатается на всех страницах новой серии.
работает
card-series.js:11app.js:12scene-fonts.js:5
Шрифты в комплекте для измерения, SVG и экспорта Без изменений.
работает
scene-fonts.js:5-31
Смена размера холста Без изменений: слои растягиваются по осям, умного ресайза нет.
частично
screens-editor.js
Показ презентации Без изменений, полноэкранного режима нет.
работает
screens-editor.jsdocs/16
Тёмная тема Без изменений: правки CSS касаются новых экранов, токены не переделаны.
частично
css/atelier.csscss/app.css
Вёрстка на телефоне На 375 px исправлен /app/batch. Вбок по-прежнему прокручиваются /app/projects (431 px) и /app/cloud (383 px); новые экраны библиотеки, партий, бота и выгрузок помещаются.
частично
замер на 375 px, 01.10.2026
ИИ
Возможность
Статус
Доказательство
Структура презентации: модель на Ollama раскладывает факты по 6 разделам Механизм не менялся, заголовки — константы. Добавлен срок ожидания модели 30 минут, локальная презентация больше не создаёт пустых разделов. Публично модель работает, только если уже загружена: холодная загрузка запрещена.
Проверка и правка структуры до создания слайдов, разбивка на страницы Без изменений.
работает
outline-review.js:6-25outline-pagination.js:5-32
Разбор свободного текста в бриф — только дословные цитаты Интерфейс исправлен: предложение модели появляется в тех же полях и требует подтверждения, предложенные факты блокируют экспорт до подтверждения. Качество и доступность модели в публичной версии не подтверждены.
ИИ-правка одного объекта: предпросмотр, версия, одна отмена Текст модели по-прежнему не сверяется с фактами. Косвенно защищает проверка качества: экспорт блокируется, если подтверждённый факт пропал со страниц.
работает
editor-plan.js:7, 33product-contract.js:96
Команды для всей серии обычными словами Добавлены роли, проверка области команды, версия промпта и метрики прогонов. Последний живой прогон — 17 из 21, 95-й процентиль 74 с. Публично выключены.
Долговечная очередь ИИ-заданий: идемпотентность, аренда, отмена, восстановление Добавлены срок ожидания запуска 30 минут и допуск для заданий бота. Задания по-прежнему идут по порядку поступления.
работает
server/ai-jobs.mjs:7, 39, 75
Допуск холодной загрузки модели по свободной памяти Механизм не менялся; в публичном контейнере холодная загрузка запрещена.
Общая лента заданий /app/tasks Добавлены фильтры «Серверные каталоги», «Каталоги браузера» и быстрые результаты. Серии из браузера по-прежнему не видны: «Показано 0 из 0».
работает
task-hub.jsdocs/31, 34
Проверка материала перед экспортом Существенно улучшена: общий отчёт качества в браузере и на сервере блокирует скачивание без фото, при пропаже подтверждённого факта и неподтверждённом предложении модели; есть проверки переполнения и недоступных фото. Не сделано: правил площадок нет — у WB, Ozon и ЯМ одна версия picseller-core-2026-09-11; подробный чекер мёртв, PS.check перекрыт уже трижды; контраст, охранные зоны, целостность товара и заглушки не проверяются; серверный PNG-экспорт отчёт не читает.
8 ИИ-инструментов: замена фона, фотосессия, увеличение разрешения, удаление объекта, SEO, видеообложка, A/B-тест, локализация Без изменений: 12 плиток, 8 с пометкой «Концепция», у всех цены в кредитах.
только макет
data.js:155-168
Генерация сцены и фона моделями FLUX, Qwen Image Edit, Z-Image на GX10 Без изменений: сервер умеет одну операцию — удаление фона.
только в документации
docs/24:23, 77-78server/photo-jobs.mjs:9
Инструменты WebMCP для внешних ассистентов Без изменений: только список проектов и шаблонная карточка с демо-фото.
частично
webmcp.js:6-11
Telegram-бот, голосовой бриф, ночные партии, режимы «Быстро/Качественно» Код бота написан: 8 серверных модулей (около 34 КБ), отдельный процесс с блокировкой, экраны «Подключение бота» и «Проверка доставок», 41 тест, документы 72–80. Живого канала нет: токен не подключён, процесс не установлен, публично — «Привязка бота на этом сервере ещё не подключена». Умеет только текстовую команду /presentation с подтверждением /create. Голосового брифа и режимов нет; вместо ночных партий — однократный отложенный запуск партии.
Серверное удаление фона BiRefNet через ComfyUI в очереди photo_jobs Код не менялся и на прежнем стенде работает. В публичном контейнере фото-провайдер не настроен, и VERIFICATION.md прямо оговаривает, что он не запускался. Маска проверена на 1 товаре; JPEG 12 Мп размером 2,6 МБ отклоняется лимитом 8 МБ.
Сохранение цвета товара: цвет берётся только из исходника, от модели — только прозрачность Без изменений; 9 из 9 тестов прошли 01.10.2026, расхождение цвета 0/0/0.
Применение вырезки к слою или всей серии: рамка сохраняется, одна отмена Без изменений; оригинал хранится скрытым 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:65docs/91
Три модели, ластик, HEIC до 25 МБ, «4 варианта фона» — обещано в справке Без изменений: на деле принимаются PNG, JPEG и WEBP до 8 МБ.
только в документации
data.js:359, 422-425
Проекты и хранение
Возможность
Статус
Доказательство
Серверные проекты: ревизии, конфликт 409, история, корзина, квота Добавлен неизменяемый снимок брифа и отчёта качества для каждой ревизии (таблица project_contracts).
Приватные фото: дедупликация по владельцу, атомарная квота 100 МБ Без изменений.
работает
server/api.mjstests/api.test.cjs
Автосохранение в IndexedDB с защитой от устаревшей вкладки Без изменений: каждое сохранение пишет всё рабочее пространство вместе с фото.
работает
browser-storage.js:30-76
Синхронизация браузера и сервера Частично улучшена: общая библиотека показывает проекты браузера и сервера вместе с метками, повторное «Открыть» той же ревизии продолжает локальные правки. Но сервер по-прежнему не источник истины: правки живут в браузере, на сервер — кнопкой «На сервер», открытие серверного проекта создаёт копию в браузере.
частично
unified-library.js:33-49screens-cloud.js:44
Папки, копии, локальные версии (до 40), библиотека фото, JSON-коллекции Без изменений: работает только в одном браузере, таблиц brands, folders и library в схеме из 27 таблиц нет.
частично
db/schema.tsproject-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.jsdocs/93-94
PDF Без изменений: страницы растровые, окно скачивания теперь об этом предупреждает.
работает
pdf-export.js:12-17docs/94:87
PPTX с настоящим текстом и фигурами Без изменений; переносы строк зашиты в текст.
работает
pptx-export.js:11-79
Пакетный экспорт каталога: ZIP, PDF, PPTX по артикулам с описью Добавлен ZIP редактируемых проектов серверной партии.
Серверный экспорт PNG-ZIP через очередь Включён в контейнере. Добавлен PNG-каталог партии: опись с артикулом, позицией, попыткой и SHA-256 каждого PNG, SHA-256 всего архива с перепроверкой перед скачиванием, кэш по составу, история выгрузок с других устройств. Архивы по-прежнему лежат BLOB-ами в SQLite.
Файл проекта JSON с сервера по выбранной ревизии Теперь отклоняется при ошибках отчёта качества.
работает
server/project-export.mjs:8-9
Публикация в Wildberries, Ozon, Яндекс Маркет Без изменений: кнопки ведут на PS.demoOnly('Публикация в маркетплейс — фаза 4'), плитка «Публикация» — на /app/create.
только макет
foundation.js:36-37refinements.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 часов.
Админ-панель /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 не используется.
Резервная копия, проверка и восстановление SQLite и фото Восстановление теперь отзывает и Telegram-доступ, перед каждым выпуском делались копии. Расписания нет, копии лежат на том же диске GX10.
Миграции базы: Drizzle и собственный мигратор Стало хуже: SQL-миграций 24, в журнале Drizzle по-прежнему 7. Проба drizzle-kit generate на копии создала файл с 18 повторными CREATE TABLE, а docs/11 по-прежнему советует эту команду.
Dockerfile, выкладка через Coolify, публичный домен, healthz, мониторинг Есть многоэтапный Dockerfile с белым списком .dockerignore и HEALTHCHECK, сервис Coolify и домен picseller.24oros.ru. Маршрута /healthz нет: здоровье проверяется запросом /v1/projects с ожидаемым 401, публично /healthz отвечает 404. Метрик, мониторинга и автоотката нет.
частично было: только в документации
Dockerfile:1-36scripts/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.cjstests/python
Браузерные сквозные проверки Скриптов check-* стало 73 вместо 22, 56 из них требуют Playwright, но его по-прежнему нет в package.json — в контейнер он ставится отдельно. CI нет. Доказательства лежат в .codex/evidence (69 файлов, 15 МБ) и validation/ (в .gitignore).
частично
scripts/check-*Dockerfile:21package.json
Справка
Возможность
Статус
Доказательство
Центр помощи: статьи, поиск, подготовка обращения Добавлены статьи о стилях, скачивании и каталоге; в справке 41 статья.
работает
export-help.jsworkflow-help.jsdocs/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-84scripts/build.cjs:5-8
Обещания в коде и данных: «600+ шрифтов», «400 000 элементов», «публикация по API», «40+ правил» Без изменений; «Публикация по API» — и в подвале. На деле шрифтов 4 семейства.
только макет
screens-site.js:12-14app.js:125scene-fonts.js:5
Чего нет совсем
Возможность
Статус
Доказательство
Сайт или витрина бренда Ни кода, ни маршрута, ни документа, ни фазы в плане F0–F7 прошлого аудита. Слово «витрина» встречается только в требованиях площадок.
нет
screens-site.js:1-3data.js:20, 492
Каталог товаров на сервере Таблицы products нет, факты не переиспользуются между материалами, нет номеров карточек WB и Ozon и импорта по артикулу. Есть только бриф товара внутри каждого проекта.
нет
db/schema.tsproduct-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-110docs/96
Создание
Подсказки «Осталось перед созданием» с переходом к пустому полю; одна форма для ручного ввода и разбора текста моделью с явным подтверждением
работает
create-hub.js:13-29, 60-70docs/71
Создание
Бриф товара (ProductBrief): название, площадка, артикул, факты с id, источником и статусом; неизменяемый снимок на каждую серверную ревизию
Новых фото-возможностей нет; серверная партия явно отклоняет зависимое удаление фона
только в документации
card-batches.mjs:65docs/91
Каталог и партии
Серверная партия до 100 артикулов: артикулы обязательны и уникальны, очередь не зависит от браузера, пауза, продолжение, архив; лимит считает только активные партии
Воспроизводимый PNG-каталог партии: опись с артикулом, позицией, попыткой и SHA-256 каждого PNG, SHA-256 архива с перепроверкой, кэш по составу, история выгрузок, освобождение места
Многоэтапный ARM64 Dockerfile: node 24.20.0, Chromium через Playwright, Python с Pillow, белый список .dockerignore, HEALTHCHECK, пользователь node, том /data
работает
Dockerfile:1-36scripts/container-health.cjs
Сервер и деплой
PICSELLER_HOST и PICSELLER_TRUST_PROXY: адрес 0.0.0.0 только с HTTPS-входом, доверие к X-Forwarded-For только по явному флагу
Скрипты выкладки: проверка незавершённых заданий, бэкап, правка compose через API Coolify, загрузка образа с проверкой SHA-256 — разовые на каждый выпуск
Документы состояния PROJECT_STATE, NEXT_PHASE, DECISIONS, VERIFICATION и машиночитаемый .codex/project-state.json
работает
корень проекта
Справка
Статьи о скачивании, PNG-каталоге и навигации; руководство «Каталог на сервере» (частично устарело)
работает
export-help.jsworkflow-help.jsdocs/91
Справка
Публичный аудит Codex 10.09 с отчётом и кликабельным макетом на picseller-lab.24oros.ru и /demo/
только макет
research/audit-2026-09-10/site/demo
Сильные стороны, которые сохраняем
Единая модель сцены
JSON-сцена с серверной проверкой по списку разрешённых полей, теперь и с ролями слоёв — общий договор для редактора, версий, CSV-шаблонов, ИИ-правок и серверного рендера.
scene.jsserver/api.mjs:69
Один рендер для браузера и сервера
Один SVG-рендер для превью, экспорта и серверного PNG с комплектными шрифтами: что видно на экране, то и в файле. Основа для будущей витрины.
Модель копирует факты дословно, цитаты из брифа проверяются, а факты от модели теперь получают статус «предложено» и требуют подтверждения. Расширять проверкой происхождения текста, а не отменять.
Бриф товара с источником и статусом каждого факта и общий отчёт качества для браузера и сервера. Это готовая основа для сущности «Товар» и для датированных правил площадок.
От модели берётся только прозрачность, цвет — из исходника. Фиксированные графы ComfyUI с проверкой узлов — образец для будущих сцены, тени и увеличения разрешения.
Оптимистичная блокировка с ответом 409 вместо перезаписи, проверка владельца в каждом SQL-запросе, приватные фото, неизменяемый снимок брифа и отчёта на каждую ревизию.
server/api.mjsdrizzle/0022
Безопасные сессии
В базе только хеши, cookie __Host- с HttpOnly и SameSite=Strict, защита устаревшей вкладки, лимит попыток входа по источнику.
Один список разделов для меню и телефона, отметка текущего раздела, мобильное «Ещё» — основа нового короткого меню.
workspace-navigation.js
Визуальный язык
Глубокий зелёный #164d43, лаймовый акцент, шрифты Manrope и Inter — основа единой дизайн-системы; на нём построены и новые макеты.
Быстрые тесты и честные метки
421 тест примерно за 7 с, наборы оценки моделей на русских примерах и честная пометка «Концепция» у того, чего ещё нет.
tests/fixtures/*-ru.jsonscripts/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.
Главная кнопка лендинга «Создать первый дизайн» → старый мастер
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.jsmaterial-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.jsscene-fonts.js
«Мой бренд» на каждой странице, Manrope не применяется, фото ставится прямоугольником вместе с фоном. Удаление фона — только галочкой в фоновой сборке и при подключённом обработчике.
средняя
Бриф после создания серии
Форма не очищается: прошлый товар остаётся, легко собрать дубль.
низкая
Редактор screens-editor.js
В крошках «Карточка / cover · 1 из 3»; «Правка с ИИ» без выделения отвечает тостом; на телефоне скрыты «Серия», «Версии» и «Просмотр».
Кнопка «Подготовить 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, только первый экран. Нажмите на снимок, чтобы открыть его целиком.
Компьютер
Главная (лендинг)Без изменений: «Создать первый дизайн» ведёт в старый мастер, а не в основной маршрут; кнопка сдвинута вправо (.row.wrap).
Кабинет «Творческая студия»«Создать материал», «Создать», «Новый дизайн» и «Публикация» ведут в бриф, баннер «Создать карточку» — в старый мастер.
Бриф «Что создадим?»Новый блок «Основной маршрут: Фото → Факты → Стиль → Серия», кнопка «Создать серию»; стиль и площадка свёрнуты, фоновая сборка спрятана.
Редактор после «Создать серию»3 страницы; фото стоит прямоугольником с фоном, «Мой бренд» на каждой карточке, в крошках служебное «cover».
Готовая серияВсе страницы целиком; «К заданиям» ведёт туда, где браузерной серии нет; подпись «3 страниц».
Проверка перед скачиваниемОтчёт качества «Можно выпускать · 0 ошибок · 0 предупреждений»; ошибки блокируют скачивание, предупреждения — нет; термины технические.
Старый мастерСюда ведёт кнопка главной: демо «Наушники SOFT SOUND», 6 страниц, из них 3 с заглушкой и 6-я «Ваш новый любимый товар».
Общая библиотека «Ваши проекты»Метки «В этом браузере» и «На сервере», поиск, «Обновить сервер»; серверная карточка свёрстана узкой колонкой.
ЗаданияПосле фоновой сборки — «Карточки готовы» и «Открыть серию»; серии из браузера сюда не попадают.
Серверная партия (F3)CSV на 2 артикула: «2 из 2 готово» примерно за 4,5 с, архив, ZIP проектов, PNG-каталог; экрана нет в меню.
Подключение ботаНовый пункт меню вместо «Серверных проектов»; локально «Подключение недоступно», заказы через Telegram не включены.
Центр помощиНовые статьи про стиль, проверку перед скачиванием, паузу и архив каталога, PNG-каталог.
ТарифыБез изменений, «Концепция»: 0 / 790 / 1990 ₽ / по запросу; платежей нет.
Карта экрановНе обновлена: «32 точек входа», нет библиотеки, Готовой серии, партий и бота.
Телефон
Главная на телефонеВ шапке только «Личный кабинет», кнопка «Создать первый дизайн» сдвинута вправо примерно на 46 px.
Кабинет на телефонеНижняя панель «Студия / Создать / Проекты / Задания / Ещё»; прокрутки вбок нет.
Бриф на телефонеПервый экран занят блоком «Основной маршрут»; поле названия начинается на 803 px, под нижней панелью.
Редактор на телефонеБез прокрутки вбок, холст мелкий; «Серия», «Версии» и «Просмотр» скрыты.
Публичный адрес
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): критическаявысокаясредняянизкая.
1. Витрины бренда нет, а «Товар» существует только как бриф внутри проекта
Владелец просит продукт, который создаёт с нуля в том числе сайт или витрину, а потом публикует и поддерживает их. Витрины нет вообще: ни кода, ни маршрута, ни документа, ни фазы в плане F0–F7. Каталога товаров с повторным использованием фактов нет: каждый проект хранит свой бриф, номеров карточек WB и Ozon и импорта по артикулу нет. Конкуренты уже закрывают цикл «бренд → товары → сайт»: Canva Websites, Pomelli (с 19.05.2026), Tilda, Durable.
Что изменилось к 11.09: появился бриф товара (ProductBrief) — версионированный JSON с названием, площадкой, артикулом и фактами с id, источником и статусом. Он хранится в проекте, в неизменяемом снимке каждой ревизии и во входе строки партии; в серверной партии артикул обязателен и уникален.
Доказательства:product-contract.js:21-55drizzle/0022_project_contracts.sqldrizzle/0023card-batches.mjs:64db/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.
Сразу убрать ложные обещания из лендинга, подвала и 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 минут, проверка области команды, роли в схеме ответа, статус «предложено» для фактов модели с обязательным подтверждением.
Текстовые слоты: заголовок до 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-89screens-atelier.js:4-5screens-ai.js:18-19create-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: «Серверные проекты» заменены на «Подключение бота», «Проекты» ведут в общую библиотеку.
Короткое меню: в макетах — 6 разделов (Главная, Товары, Материалы, Сайт, Публикации, Бренд) и кнопка «Создать»; задания, справка и настройки — в шапке.
Режим «демо / аккаунт» по ответу /v1/me: в аккаунте нет ленты прототипа, демо-входа и демо-админки.
Концепции — за флаг или на публичную страницу «Скоро».
Словарь примерно из 12 терминов и тест «пункт меню совпадает с заголовком экрана».
высокаячастично исправлено
6. Возможности редактора отстают от Canva и Polotno
Нет привязок и направляющих, выделения рамкой, боковых ручек и правки текста прямо на холсте: «правка на холсте» — это клик по тексту и поле в инспекторе. Нет токенов стиля и умного ресайза. Шрифтов 4, интерлиньяж и межбуквенный интервал не настраиваются, примитивов 5.
Что изменилось к 11.09: появились роли слоёв (заголовок, преимущество, текст, бренд) с ручным и автоматическим назначением и оформлением серии по роли; быстрые «Крупнее», «Мельче», «Вместить в блок», «Фото крупнее/меньше».
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.csscss/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). Добавлены роли текста и проверка брифа и отчёта качества на входе.
Один декларативный движок макетов, общий для браузера и сервера: слоты с ролями (бренд, заголовок, подзаголовок, фото, факты, плашка, призыв), якоря и отступы в процентах, автоподбор кегля.
Профили площадок: размер, безопасные зоны, минимальный кегль, ограничения. Списки стилей и площадок в форме — из того же контракта, что на сервере.
Одна кнопка «Собрать серию»: где собирать, решается автоматически по /v1/materials/status. Мёртвый рендер удалить.
высокаячастично исправлено
9. Демо-данные и заглушки попадают в готовые файлы — и проходят проверку
Главная кнопка лендинга ведёт в старый мастер, который отдаёт в ZIP демо-фото headphones.png (6 из 6 страниц), «Добавьте подтверждённые сведения», «Ваш новый любимый товар» и «Мой бренд». Проверка качества при этом показывает зелёное «Можно выпускать». «Мой бренд» печатается и в коротком брифе. Живой прогон: ZIP из 6 PNG, заглушка в 04.png, «0 ошибок · 4 предупреждения».
Что изменилось к 11.09: короткий бриф требует фото и пропускает пустые разделы; проверка качества блокирует скачивание при потере подтверждённого факта или неподтверждённом предложении модели.
Правила «текст-заглушка» и «демо-фото» в отчёте качества — ошибки, а не предупреждения.
Мастер — переадресация на /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 синтетических товаров). Он блокирует скачивание без фото, при потере факта и неподтверждённом предложении модели; добавлены проверки переполнения и декодирования фото.
Правила по площадке, категории и типу фото — с ссылкой на источник и датой проверки, как версии того же отчёта качества.
Проверки: происхождение текста, контраст не ниже 4,5 по WCAG, минимальный кегль на превью, соотношение сторон и число изображений, целостность товара, заглушки.
Отчёт «проверено по правилам от ДД.ММ.ГГГГ» с кнопками «Исправить»; охранные зоны — слоем в редакторе; серверный экспорт читает отчёт ревизии.
Архитектура и данные
критическаячастично исправлено
11. Две параллельные модели данных: работа живёт в браузере, сервер получает ручные снимки
Архитектура не изменилась: источник истины — IndexedDB, на сервер работа попадает только по кнопке «На сервер», а открытие серверной версии новой ревизии создаёт новую локальную копию. Таблиц brands, folders и library нет, автосохранения на сервер нет. Открыть работу с другого устройства по-прежнему нельзя.
Что изменилось к 11.09: общая библиотека /app/library показывает проекты браузера и версии на сервере с метками; повторное «Открыть» той же ревизии продолжает локальные правки; серверные партии пишут проекты сразу на сервер.
Доказательства:unified-library.js:33-49 — на строке 38: «При открытии создастся редактируемая копия в этом браузере»; screens-cloud.js:44main-workflow.js:42db/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:78main-workflow.js:58-67, 105-110quality-ui.js:17-45card-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: только рост первой загрузки.
Пошаговая отрисовка SVG: при перетаскивании меняется только transform, рамка выделения — отдельным слоем.
Фото хранить в памяти один раз — в общем пуле по хешу sha256 — и подставлять ссылкой; полная перерисовка — только при смене экрана.
История из изменений, а не копий: сдвиги стрелками склеиваются, выделение восстанавливается, лимит считается в байтах.
Сборка с хешами в именах и долгим кэшем; тяжёлые библиотеки — по требованию; шрифты в WOFF2.
средняячастично исправлено
14. ИИ-очередь без честного распределения и потоковой выдачи
Нет честного распределения между аккаунтами, потоковой выдачи и SSE. Синхронные запросы при занятой модели сразу получают ai_busy (429), задания идут по порядку поступления, клиенты опрашивают сервер таймерами.
Что изменилось к 11.09: ожидание модели ограничено 30 минутами от приёма заказа и показывается пользователю; для заданий бота добавлен атомарный допуск.
Одна модель «задание + шаги» с классами «интерактивное» (цель — до 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, файловая система только для чтения, ручные копии перед каждым выпуском.
/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-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:65deploy/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: лимит попыток входа больше не общий — он считается по сетевому источнику, за доверенным прокси — по ближайшему адресу (дефект прошлого аудита, закрыт с тестом).
Вход через Яндекс 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, 88tests/batch-export-limits.test.cjs:80, 96drizzle/0007:14, 0020:2server/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 и порядок переключения.
Отгружать в образ только пользовательскую справку по белому списку; эксплуатационные документы — в 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 с этой работой нет; .gitignoreresearch/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, 26product-contract.js:62-69, 83-95quality-ui.js:15, 35; живой прогон 01.10.2026.
Как исправить:
Правила «текст-заглушка» и «демо-фото» с уровнем ошибки.
Мастер — переадресация на /app/create с переносом черновика; новые проекты всегда с брифом от пользователя; бренд — из бренд-кита или пусто.
средняяноваярегрессия
24. Kaspi, Avito и Lamoda в форме «Создать» ломают создание серии
Форма предлагает 6 площадок, проверка брифа их пропускает («Обязательные поля заполнены»), но контракт товара знает только WB, Ozon и ЯМ, и «Создать серию» падает с «Выберите поддерживаемую площадку.». До F2 серия для этих площадок создавалась.
Доказательства:create-hub.js:25, 81product-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-архивом.
Один параметризуемый скрипт: сборка на 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/91README.md:17screens-help.js:46docs/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.jsonresearch/audit-2026-09-10/overview-and-plan.md:117-126
Как исправить:
В документах состояния различать «срез сделан», «технически принят» и «фаза принята».
Не начинать F4, пока не проведён пилот F1 и не убраны дубли входов.
средняяноваяпродукт
28. Публичная версия без фото-провайдера и с выключенными ИИ-командами, хотя интерфейс их показывает
В compose нет PICSELLER_COMFY_URL, поэтому серверное удаление фона и заказ «фон → карточки» публично недоступны. Команды серии выключены, загрузка модели запрещена: ИИ работает, только если qwen2.5:32b уже загружена. Бот не подключён. Интерфейс эти функции показывает.
Подключить провайдеры через общий шлюз допуска GX10.
Либо прятать недоступные функции по /v1/materials/status и честно писать «недоступно на этом сервере».
средняяноваяпродукт
29. Telegram-бот: большой объём кода без живого канала
8 серверных модулей (около 34 КБ), отдельный процесс с блокировкой, 2 экрана, 41 тест и 9 документов — но токена нет, служба не установлена, публично привязка отвечает 503. Бот умеет только текстовую /presentation; фото, карточки и отправка файлов не сделаны. До пилота основного пути это инфраструктура впрок.
Один ограниченный живой пилот «фото + факты → карточки → ссылка», и только потом сценарии 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-9README.md:19docs/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 на GX10
2,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 сейчас
SUPA
Fabula AI
Flyvi
Canva
Photoroom
Lovable
Tilda
PicSeller 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 / $25
0 / 500–1250 ₽
цель: 0 / 990 / 2 490 ₽ (пример)
Российский рынок и рубли
да: интерфейс; оплаты нет
да
да
да
оплата из РФ не проверялась
нет
оплата из РФ не проверялась
да
цель: да, рубли, Яндекс ID
Оговорки к колонке «сейчас»: старый мастер с демо-товаром «Наушники SOFT SOUND» по-прежнему получает в QualityReport «Можно выпускать»; Kaspi, Avito и Lamoda из списка площадок ломают создание серии; в публичной версии выключены команды серии и холодная загрузка модели, обработка фото не подключена. Путей создать карточку стало 8 (было 7).
Российские сервисы карточек
Шаблонные конструкторы, новые ИИ-сервисы и встроенный ИИ самих площадок. Если тип не указан — коммерческий сервис. Срез 30.09.2026. Рейтинги на vc.ru с WILDA, 24AI и «Сахарком» похожи на SEO-материалы; у WILDA не нашлось официального сайта, поэтому в обзор она не вошла.
В карточке 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 или не загружались — их данные взяты из выдачи поиска по официальным доменам. Число пользователей — заявления самих компаний.
Встроенный инструмент площадки. Бесплатно для рекламодателей 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 строк.
У нас: «Сохранить как рецепт» на результате — площадки, бренд, шаблон, операции с фото и экспорт; перезапуск на новом товаре. Основа уже в коде: «Мои стили» — серверные рецепты с неизменяемыми версиями.
У нас: перекладка слайда по ролям слоёв, фокусная точка фото, расширение фото на своём сервере. Сейчас размер меняется растяжением, а справка обещает «умный ресайз» — обещание убрать сразу.
Бренд как источник правды, который применяется сам
Canva Brand Kit, Photoroom, Pomelli Business DNA, Microsoft 365 Copilot
У нас: голос бренда и запрещённые слова, бренд по ссылке с подтверждением, бренд по умолчанию для приглашённой команды.
У нас: «Товар» — сущность, от которой строятся серия, презентация и сайт; сайт обновляется, когда меняются товары.
Конструкторы сайтов полного цикла
Если тип не указан — коммерческий сервис. Срез 30.09–01.10.2026. Официальные страницы Replit (403) и часть справки Base44 и Durable не открылись — цифры из вторичных обзоров. Webflow, same.new, Flexbe и Nethouse отдельными карточками не вошли: по ним только вторичные данные.
У нас: конструктор сайта — секции и помощник слева, предпросмотр в центре. Контракт «Предложить → сравнить → Применить → одна отмена»; свободный чат, который сразу меняет сайт, не нужен.
Простая правка без модели
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-проверкой; покупку домена на старте не делаем.
У нас: 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
Развёртывание самого PicSeller и сайтов с бэкендом через API
брать Уже работает на GX10: через него развёрнут сам PicSeller на picseller.24oros.ru. Статические сайты раздаёт сервер PicSeller по wildcard-домену, без отдельного приложения на каждый. Dokploy, CapRover, Dokku не нужны
Сборка модулей, сквозные тесты в 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 варианта рядом» для серии и сайта.
У нас: реестр компонентов и моделей с флагом «коммерческое использование»; риск всплывает при запуске платных тарифов, поэтому проверка — до него.
Что заимствуем
Двадцать идей из исследования с адресом в целевом продукте. Мелким шрифтом — где это место в текущем коде.
Идея
Откуда
Куда в 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
«Товар» как сущность, от которой строятся карточки, презентации и сайт
Левая рейка редактора сейчас: одна вкладка слоёв (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
Наша ниша
Бренд-студия продавца, а не ещё один генератор картинок
Одна правда о товаре. Факты, фото и артикулы вводятся один раз, из них строятся карточки WB, Ozon и ЯМ, презентация и сайт. Так устроены Pomelli и Amazon Creative Studio; у российских сервисов карточек путь обычно начинается с загрузки фото.
ИИ не выдумывает. Каждая строка текста ссылается на подтверждённый факт. Fabula, наоборот, подбирает преимущества сама, у остальных аналогов из матрицы защита не заявлена. В коде основа уже есть: ProductBrief хранит источник и статус каждого факта, а предложения модели не попадут в экспорт без подтверждения.
Проверка с датой и безопасная публикация. Правила площадок версионируются с источником и датой, у каждого замечания есть «Исправить». Публикация идёт через «было/станет», подтверждение, журнал и откат одним кликом. У генераторов визуала такой связки нет ни у кого. Сейчас в коде есть общий QualityReport, но правил площадок с датой нет, а публикация — заглушка.
Сайт бренда из тех же данных. Витрина на <бренд>.24oros.ru с кнопками «Купить на WB/Ozon» и заявками в Telegram. Ни один сервис для селлеров этого не делает, а Canva и Pomelli не знают маркетплейсов.
Приватный ИИ на своём сервере. Данные продавца не уходят в облако, стоимость предсказуема. В матрице выше это «нет» у всех семи аналогов.
Работа без открытой вкладки: Telegram и расписание. Telegram-бот — второй вход в тот же заказ: фото и описание в чат, готовые файлы и заявки с сайта — обратно в чат. Сценарии по расписанию («каждый понедельник 9:00 — новые товары из WB») собирают карточки сами. Основа уже в коде: бот (8 серверных модулей, 41 тест, привязка одноразовым кодом) и серверная партия с паузой и однократным отложенным запуском. Живой канал и повторяющиеся сценарии — фаза F4, она не начата.
Три рассмотренных направления и почему выбрана «Бренд-студия из каталога»
1. Бренд-студия из каталога рекомендуем
Селлер один раз заводит товары: Excel, ссылка на WB/Ozon или бриф с фото. Из «Товара» с проверенными фактами PicSeller собирает серии карточек под WB, Ozon и ЯМ, презентацию для оптовиков и сайт бренда на <бренд>.24oros.ru с кнопками «Купить на WB/Ozon» и формой заявок. Когда факты меняются, сервис предлагает обновить все материалы сразу. Публикация одна на все каналы: проверка, журнал и откат.
Плюсы
Полностью закрывает запрос владельца: создать с нуля, направленно править, поддерживать и публиковать
Незанятая ниша в РФ: ни один сервис для селлеров не делает витрину; Canva и Pomelli делают, но не для маркетплейсов, а Pomelli недоступен в России
Одна правда о товаре усиливает главное отличие — «ИИ не выдумывает»
Удержание после запуска: заявки, переходы на маркетплейсы, повторная публикация
Минусы
Самый большой объём: по оценке 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
экрана в кликабельном макете
Жизненный цикл: Создать → Править → Опубликовать → Поддерживать
Поддержка — не отдельный раздел, а поток событий. Каждое событие ведёт к готовому действию: показать, что изменится, обновить материалы, опубликовать с откатом.
логотип, палитра с ролями, шрифты, тон текста, образцы
Материал
То, что создаём из товара
тип (карточки, презентация, баннер), товар, площадки, слайды-сцены, версии, статус, проверка
Сайт
Витрина бренда
адрес, страницы, секции (типизированный JSON), версии, публикации, заявки, статистика, здоровье
Канал
Куда публикуем
WB, 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 /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», «Скачать», «Редактировать».
Сценарий 2. Сайт бренда из каталога за 2 минуты и публикация на поддомен 5 шагов
1Тип сайтаВитрина бренда, страница одного товара или сайт для оптовиков.
2Товары и страницыТовары из каталога; Главная, Каталог, О бренде, Контакты, Оптовикам; стиль из бренда.
3СборкаСекции из фактов, фото из готовых серий, тексты со ссылками на факты, проверка SEO.
4ПравкаКонструктор: секции, помощник «укажи и скажи», предпросмотр на компьютере и телефоне.
5ПубликацияПроверка → изменения → адрес moh.24oros.ru или свой домен → выкладка без простоя → «Откатить».
«2 минуты» — обещание экрана «Сайт» в макете: «Создадим сайт из ваших товаров за 2 минуты». Сайта в коде пока нет, поэтому время на реальном сервере не измерялось. После сборки мастер открывает конструктор, публикация — кнопкой «Опубликовать» в нём.
Поддержка начинается с события в блоке «Нужно внимание» на главной или в колокольчике, а часть работы идёт сама — по расписанию. Три типичных случая:
3а. Цена изменилась4 шага
1СобытиеЦена тарелки «Туман» изменилась 30.09: 990 → 1 090 ₽. Затронуто: сайт и презентация для оптовиков (слайд 7 с оптовыми ценами). Карточек WB это не касается: цены на фото WB нет.
2Что изменитсяСравнение «было/станет» по каждому затронутому материалу.
3Обновить всёНовые версии сайта и презентации с новой ценой — одним действием.
4ОпубликоватьСайт: проверка и выкладка версии 8 — в неё входят новая цена, новый вопрос и фото мастерской; кнопка «Откатить на версию 7».
1СобытиеWB обновил требования 28.08.2026 — 2 карточки проверить: кружка «Мох» и тарелка «Туман». Тарелка поэтому помечена «Нужно обновить» — из-за правил, а не из-за цены.
2ПроверкаПравила WB от 28.08.2026 со ссылкой на источник; пункты ✓ и ⚠.
3ИсправитьКнопка меняет слайд и пересчитывает оценку; правка — новая версия.
4Было/станет«Сейчас на WB / Станет» по каждому товару; текущие фото WB сохраняются для отката.
5ОпубликоватьПодтверждение → отправка → чтение обратно и сверка → «2 из 2 опубликованы», «Откатить».
3в. Новые товары — по расписанию, заказы — из Telegram4 шага
1СценарийРецепт + источник товаров + расписание: «каждый понедельник 9:00 — новые товары из WB».
2ПартияДо 100 товаров за раз; прогресс по каждому, ошибка с причиной и «Повторить», пауза сценария.
3Журнал запусковЧто и когда собрано; ZIP с артикулами в именах и контрольными суммами.
4Опубликовать готовыеПереход к публикации в WB с «было/станет» и откатом.
Telegram — второй вход в тот же заказ: продавец присылает фото и описание в чат → черновик → подтверждение → готовые файлы приходят в чат; туда же — уведомления о заявках с сайта. Бот привязывается одноразовым кодом (/start КОД), связь отзывается одной кнопкой.
В коде уже есть серверная партия с однократным отложенным запуском и бот без живого канала (см. «Наша ниша» выше). Повторяющиеся сценарии, пауза сценария и защита от повторного запуска — фаза F4 у Codex, она не начата; у нас это Фаза 6.
У каждого набора правил указаны дата и источник, но конкретные числа нужно сверить с официальными документами 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).
Серверная партия до 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).
Сроки — оценка трудоёмкости механизма для команды из 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). Из макета, данных товара и профиля площадки он собирает готовую сцену. Мастер, серверная очередь, сборка из таблицы и предпросмотр вызывают одну и ту же функцию.
1ПрофильПлощадка задаёт размер холста и безопасную зону.
2РамкиДоли слота переводятся в пиксели относительно безопасной зоны и якорей.
3Данные по ролямtitle ← выбранный заголовок, facts[] ← факты по их id, photo ← вырезка или сцена. Пустые необязательные слоты пропускаются.
4autoFitКегль подбирается бинарным поиском между min и max той же функцией PS.textLayout, что и в экспорте. Сейчас кегль уменьшается по 1 px за шаг (card-series.js:14).
5ПагинацияФакты делятся по вместимости слота, а не «по 3 на слайд». Если не влезает и минимальный кегль, лишняя строка уходит на следующий слайд.
6Роли в сценеКаждый слой получает role и slotId. Обращение к слою — по роли, никогда по номеру.
7СамопроверкаВсе слои в безопасной зоне, переполнения нет, кегль не меньше минимума профиля.
Умный ресайз — это копия материала в новом формате. Координаты при этом не масштабируются: тот же макет заново собирается по ролям в новом профиле. Содержимое слоёв сохраняется: тексты, фото, ручные цвета. Слои, добавленные вручную вне слотов, привязываются к ближайшему краю. У фото и кругов сохраняются пропорции. После ресайза выводится отчёт о переполнении.
Почему так
Новые шаблоны добавляются данными, а не кодом, и выглядят одинаково из мастера, очереди и таблицы. Роли дают смысл командам («все заголовки крупнее») и смене стиля. Пересборка по ролям не искажает фото и круги.
Как проверить
Один и тот же бриф подаётся в мастер, в серверную очередь и в сборку из таблицы. 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']}].
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: его коды, уровни и общий модуль остаются. В модуль добавляются версионируемые наборы правил площадок и недостающие проверки.
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 попадают только отзывы, которые селлер вставил сам или импортировал со ссылкой на источник. Модель отзывы не пишет.
Рендер детерминированный: HTML и CSS из шаблонов секций, бренд-кит превращается в CSS-переменные. Изображения — WebP, отрисованные тем же серверным рендером из сцен. Пользовательского JS нет. Генерируются sitemap.xml, robots.txt, мета-теги и описания фото. Простые правки (текст, фото, цвет) делаются в инспекторе без модели. Перестройка секций идёт через язык операций из 6.6 с target:{section}.
Станет: публикация и откат
Атомарное переключение. Сборка пишется во временный каталог и переименовывается в 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).
Станет: поддержка через события
Правила обновились. Все материалы этой площадки перепроверяются (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 оно всегда недоступно, интерфейс держит две ветки.
Оставить только в режиме разработки (по флагу). В продукте — один серверный движок.
Одинаковый результат у всех пользователей, минус одна ветка интерфейса.
Выкладка: как сейчас и как станет
Решение владельца: где должен быть публичный вход. Сейчас он идёт через 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 с.
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, :26P0
COPY docs и build-worker.cjs кладут все внутренние документы в prototype/docs, а оттуда — в образ.
Не копировать docs/. Пользовательскую справку отбирать по белому списку. Тест сборки: в образе нет «orosalex», «ssh », «Tailscale», «coolify».
Dockerfile:35, container-health.cjs:5-8
HEALTHCHECK ходит на /v1/projects и считает здоровым ответ 401. Это «сервер отвечает и требует вход», а не здоровье базы, диска и очередей.
Добавить /healthz (база, диск, возраст очереди, версия) до проверки Host. Скрипт проверки перевести на него, внешний мониторинг — тоже.
Dockerfile:13
build-worker.cjs при каждой сборке собирает ещё и Worker для OpenAI Sites, хотя в образ он не попадает.
Отдельная сборка только клиента. Worker удалить.
Dockerfile:21-23
Playwright 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).
P1deploy/container-03…11 (1105 файлов копий), разовые update-*.py и check-container-*.sh — после перехода на один скрипт.
P1server/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 и что нужно сделать.
Это рабочее дерево от 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/. Нажмите на снимок, чтобы открыть его целиком.
Одно обещание и одно действие: из одного описания товара получаются карточки, презентация и сайт бренда. Ведёт либо к входу, либо к готовому примеру.
Первый экран: «Начать бесплатно» ведёт ко входу, «Посмотреть пример» — к готовому результату.
Визуал «товар → три результата»: карточка WB, слайд презентации, сайт на телефоне.
Блоки «Как это работает» и «Один товар — все материалы» с живым переключением вкладок.
«ИИ не выдумывает»: строка текста с подсветкой факта, из которого она взята.
Проверка по правилам площадок с датой, «данные на вашем сервере», короткие тарифы, частые вопросы. Без вымышленных отзывов и рейтингов.
В коде сейчас:частично Лендинг в коде есть, но на боевом адресе посетитель без приглашения его не видит: на любом маршруте показывается только строка «Войдите в PicSeller». Главная кнопка «Создать первый дизайн» по-прежнему ведёт в старый мастер с демо-товаром, а не в новый основной маршрут. В подвале и перекрытом коде остались обещания «Публикация по API», «600+ шрифтов», «40+ правил». screens-atelier.js:4screens-site.js:12-14app.js:125assets/now/01-home.pngassets/now/ref-public-01-first.png
Что сделать:
Фаза 0 Главная кнопка ведёт в основной маршрут. Удалить ложные обещания, таблицу конкурентов и вымышленные рейтинги.
Фаза 1 Публичная страница для посетителей без приглашения: лендинг, тарифы, справка и вход.
Фаза 4 Блок про сайт бренда показывать как работающую функцию только после запуска витрин. До этого — с пометкой «Скоро».
Вход без пароля и без участия администратора: Яндекс ID, ссылка на почту или код приглашения для беты.
«Войти с Яндекс ID» — главный способ.
«Получить ссылку на почту»: поле адреса, затем состояние «Письмо отправлено».
«Есть код приглашения» — поле кода для закрытой беты.
Ссылки на условия и политику обработки данных.
В коде сейчас:частично Вход по одноразовому коду приглашения работает на боевом адресе: аккуратная форма на /auth/sign-in, код живёт 15 минут, сессия — 8 часов. Лимит попыток теперь считается по адресу клиента за доверенным прокси, а не на всех сразу (закрыто с тестом). Яндекс ID и входа по ссылке на почту нет, фальшивые экраны /login, /register и /forgot остались. server/login-rate-limit.mjs:12-31tests/session-auth.test.cjs:12server/session-auth.mjs:15, 38screens-atelier.js:10assets/now/ref-public-03-signin.png
Что сделать:
Фаза 0 Фальшивые экраны входа перенаправить на настоящий вход.
Фаза 1 Яндекс ID (OAuth 2.0) и ссылка на почту, сессии на 30 дней с продлением. Заголовки безопасности и лимиты запросов — для всего приложения, а не только для входа.
За три шага узнать, где продаёт селлер, собрать бренд и завести первый товар, а затем сразу перейти к первым карточкам.
«Где продаёте?»: WB, Ozon, ЯМ, свой сайт; категория; сколько товаров.
«Ваш бренд»: название, логотип, «Подтянуть стиль по ссылке» на магазин или сайт. Палитру, шрифты и тон предлагаем по пунктам, каждый можно принять. Шаг можно пропустить.
«Первый товар»: по артикулу WB, по фото и описанию или из файла Excel.
Финал — «Создать первые карточки».
В коде сейчас:нет Без изменений: есть только экран-макет без логики. На него ведёт лишь карта экранов: действие регистрации, которое должно его открывать, нигде не вызывается. Сбора стиля по ссылке и первого товара по артикулу нет. screens-site.js:164
Что сделать:
Фаза 1 Показывать после первого входа: площадки, категория, профиль.
Фаза 2 Шаг «Первый товар» — в таблицу товаров: импорт Excel и по артикулу.
«Подтянуть стиль по ссылке» — после пилота, с подтверждением каждого пункта.
Понятная цена до покупки. В макете: Старт 0 ₽, Селлер 990 ₽/мес, Бренд 2 490 ₽/мес (сайт и публикации), Агентство — по запросу. Это пример для обсуждения, а не решение.
Четыре тарифа и таблица сравнения.
Цена операции видна на кнопке до запуска.
Автопродление выключено по умолчанию. Брак перегенерируем бесплатно.
Пометка «Цены — пример для обсуждения».
В коде сейчас:нет Без изменений: страница-концепция с ценами 0 / 790 / 1 990 ₽ и кнопками «Посмотреть сценарий». «Тариф и использование» в кабинете — тоже макет, баланс — заглушка на 316 кредитов. Оплаты в коде нет. У конкурентов биллинг — главный источник жалоб в отзывах: сложно отписаться, ночные и еженедельные списания (SUPA, Flyvi, Fabula). assets/now/15-pricing.pngscreens-workspace.js:448-449app.js:11
Что сделать:
Фаза 0 До запуска оплаты писать прямо: «Оплата появится позже».
Фаза 6 ЮKassa или CloudPayments, таблицы планов, подписок и журнала расходов. Цена операции видна до запуска.
Рабочий стол селлера: одна строка «Что создаём?» и всё, что требует внимания. Вместо 21 пункта меню — шесть разделов.
Строка «Что создаём?» понимает запрос вроде «Карточки для Ozon для чайника „Лес“». Под ней чипы быстрых действий.
«Нужно внимание»: 4 события с готовыми кнопками действий.
«Продолжить работу» — последние материалы.
Сводка каналов (WB, Ozon, сайт, Telegram) и активные задания с живым прогрессом.
Мини-превью сайта со статистикой за неделю.
В коде сейчас:частично Кабинет «Творческая студия» почти не изменился. В меню по-прежнему 21 пункт, 8 из 12 ИИ-плиток помечены «Концепция» и показаны с ценами, баннер «Создать карточку» ведёт в старый мастер. Ленты «Нужно внимание», сводки каналов и сайта нет. Нижняя панель на телефоне работает. workspace-navigation.js:6-8data.js:155assets/now/02-studio.png
Что сделать:
Фаза 0 Убрать из меню концепции и служебные разделы: спрятать за флаг или вынести на страницу «Скоро».
Фаза 2 Меню из шести пунктов. Строку «Что создаём?» разбирать сначала словарём (площадка, тип, товар) и только потом моделью.
Единственный вход в создание: что делаем и для какого товара. Он заменяет 8 путей создания, 2 мастера и 3 алгоритма раскладки.
«Что создаём?»: карточки для маркетплейса (по умолчанию), презентация или КП, сайт-витрина, баннер и пост, пустой холст.
«Для какого товара?»: выбрать из списка, новый товар, по артикулу WB или Ozon, описать словами.
Одна кнопка «Далее».
В коде сейчас:частично Экран /app/create стал «основным маршрутом»: индикатор «Фото → Факты → Стиль → Серия», одна кнопка «Создать серию», черновик переживает перезагрузку. Но рядом остались старый мастер и ещё 6 путей создания — всего 8. Выбрать товар из каталога нельзя. Новая ошибка: из 6 площадок в форме Kaspi, Avito и Lamoda ломают создание серии, потому что контракт знает только WB, Ozon и ЯМ. main-workflow.js:35-40, 59-67create-hub.js:25, 81product-contract.js:11-15assets/now/03-create-brief.png
Что сделать:
Фаза 0 Починить площадки: список в форме брать из контракта, тест «каждая площадка создаёт серию».
Фаза 2 Один путь создания вместо 8. Старый мастер — перенаправление с переносом черновика, «Пустой холст» — ссылка на первом шаге.
Вкладка «Описать словами»: свободный текст, затем «Найти факты» с подсветкой цитат.
Живое превью обложки. В полях нет демо-данных, только подсказки-примеры.
В коде сейчас:частично Появился ProductBrief: у каждого факта есть номер, источник (введено вами, импорт, модель) и статус. Факты, предложенные моделью, блокируют скачивание, пока их не подтвердишь. Фото обязательно, пустые разделы пропускаются, есть подсказки «Осталось перед созданием». Нет общей таблицы товаров (бриф живёт в каждом проекте отдельно), удаления фона в основном пути, совета по фото и живого превью обложки. На телефоне поле названия начинается ниже первого экрана. product-contract.js:21-70product-contract.js:37, 85create-hub.js:24, 60-63, 75assets/now/03-create-brief-m.png
Что сделать:
Фаза 0 Старый мастер с демо-товаром перенаправить в этот маршрут.
Фаза 2 Факты из брифа перенести в общую таблицу товаров, показать источник каждого факта. Форма — на первом экране телефона.
Показать план серии до сборки: какие будут слайды и какие факты попадут на каждый. Сразу видны время и цена.
Выбор нескольких площадок (WB, Ozon, ЯМ) с профилем размера.
Стиль «как бренд „Мох“» и 6 стилей шаблонов; 4, 6 или 8 слайдов.
План серии: у каждого слайда роли и список фактов, порядок можно менять. «Пропускать разделы без фактов» включено, для пустого раздела есть предупреждение.
В коде сейчас:частично Появились «Мои стили»: сохранённое оформление в браузере (до 30) и в аккаунте с неизменяемыми версиями (10 стилей). Площадка и стиль спрятаны в свёрнутый блок. Плана серии с фактами по слайдам, вариантов заголовка и оценки времени и цены нет. Форма предлагает 12 стилей и 6 площадок, сервер знает 10 стилей и 3 площадки. create-hub.js:37-58server/card-recipes.mjs:4, 22-28card-layout.js:8-14, 21
Что сделать:
Фаза 2 Один движок раскладки со слотами, ролями и профилями площадок (размер, безопасные зоны, минимальный кегль). План серии, пропуск пустых разделов по умолчанию.
Фаза 2 2–3 варианта заголовка, у каждого — ссылки на факты-источники.
Честно показать, что происходит во время сборки: живые шаги, слайды по мере готовности. Вкладку можно закрыть.
Шаги: подготовка фото и фона → сцена «товар без изменений» → заголовки из фактов → раскладка под WB и Ozon → проверка по правилам с датой.
Слайды появляются по мере готовности.
«Можно закрыть вкладку — пришлём уведомление».
Финал — «Открыть результат».
В коде сейчас:частично В браузере серия собирается за секунды, без живых шагов, и сразу открывается в редакторе. «Собрать на сервере» спрятано в блок «Нужно закрыть вкладку? Собрать в фоне»: задание выполняется примерно за 6 с и появляется в «Заданиях» с кнопкой «Открыть серию». Сцены, генерации текстов и проверки по официальным правилам площадок с датой нет. main-workflow.js:88-89card-server-jobs.js:22-38product-contract.js:10assets/now/09-tasks.png
Что сделать:
Фаза 2 Одна кнопка «Собрать»: исполнитель выбирается автоматически, живые шаги берутся из ленты заданий.
Фаза 3 Сцена с сохранением товара. Честная очередь с прогрессом через SSE вместо опросов.
Экран решения после сборки: посмотреть, выбрать заголовок, скачать, отредактировать или опубликовать.
Оценки проверки по каждой площадке (в макете: WB 98 и Ozon 92, по одному замечанию), вкладки WB и Ozon, сетка слайдов.
«Варианты заголовка»: 3 варианта, у каждого чипы фактов-источников. Выбор сразу меняет обложку.
Главные действия: «Опубликовать в WB», «Скачать» с пресетами, «Редактировать».
Вторичные: «Сделать презентацию», «Добавить на сайт».
Замечания проверки с кнопками «Исправить».
В коде сейчас:частично Экран «Готовая серия» есть: просмотр, редактирование, скачивание. В окне скачивания показывается отчёт проверки качества (QualityReport), ошибки блокируют кнопку. Но проверка пропускает серию из старого мастера с демо-фото и заглушками: «Можно выпускать», файл скачивается. Вариантов заголовка нет, «Опубликовать» ведёт на заглушку. material-result.jsquality-ui.js:30-41product-contract.js:62-69, 83-95assets/now/05-result.pngassets/now/06-export-check.png
Что сделать:
Фаза 0 Правила «текст-заглушка» и «демо-фото» — ошибки, а не предупреждения.
Фаза 2 Варианты заголовка с источниками, замечания проверки с кнопками «Исправить».
Фаза 5 «Опубликовать в WB» подключить к настоящей публикации.
Холст: привязки к центру, краям и безопасным полям, текст правится двойным щелчком, переключатель «Безопасные зоны». Внизу лента слайдов.
Контекстный инспектор: шрифт бренда, цвет из палитры, роль «Заголовок», «Применить ко всей серии». Для фото: заменить, убрать фон, сцена, кадрирование.
В коде сейчас:частично Ядро прежнее: одна модель сцены и один SVG-рендер, отмена на 40 шагов, ИИ-правка одного объекта. Добавлены роли текста (заголовок, преимущество, основной текст, бренд), быстрые «Крупнее», «Мельче», «Вместить в блок», «Фото крупнее/меньше» и проверки перед скачиванием. Нет привязок, боковых ручек, правки текста прямо на холсте, токенов стиля и умной смены размера. Скорость не менялась: сцена перерисовывается целиком, история хранит полные копии проекта. scene.js:9-25server/api.mjs:69editor-simple.jsscreens-editor.js:23-28docs/82-85assets/now/04-editor.png
Что сделать:
Фаза 1 Статус «Сохранено · версия N» на сервере вместо кнопки «На сервер».
Фаза 3 Перерисовывать только изменённое, историю хранить изменениями. Привязки, боковые ручки, правка текста на холсте, токены стиля поверх ролей, умная смена размера, кириллические шрифты.
ИИ-помощникПоле «Скажите, что изменить», чип выделения, план «было/станет», «Применить» создаёт версию, режим «Спросить» ничего не меняет. частично Правка одного объекта работает (20 из 20 контрольных команд). Команды серии получили роли и проверку области, последний живой прогон — 17 из 21, но на боевом адресе они выключены. Текст модели не сверяется с фактами, режима «Спросить» нет. editor-plan.js:7, 33docs/92:132deploy/docker-compose.coolify.yml:22
ПроверкаПравила WB от 28.08.2026 с источником. Пункты ✓ и ⚠, кнопка «Исправить» меняет сцену и счёт. частично Появился общий отчёт проверки качества: он блокирует скачивание без фото, при пропаже подтверждённого факта и при неподтверждённом предложении модели. Правил площадок нет — одна версия «picseller-core-2026-09-11» для WB, Ozon и ЯМ. Демо-фото и заглушки не ловятся, контраст не считается. product-contract.js:72-107quality-ui.js:17-42
ВерсииМетки «создано», «ИИ», «опубликовано в WB», «ручная правка» и кнопка «Вернуть». частично До 40 версий в браузере. У каждой серверной ревизии теперь есть неизменяемый снимок брифа и отчёта качества, но на сервер работа попадает только кнопкой. drizzle/0022_project_contracts.sqlserver/api.mjs:86-88project-versions.js:10-12
РазмерПресеты WB, Ozon, ЯМ, сторис, баннер. «Создать версию» перекладывает элементы по ролям, без растяжения. нет Без изменений: смена размера растягивает по осям, круг 720×720 становится эллипсом 960×720. screens-editor.js:147-148
СкачатьПресеты «Для WB», «Для Ozon», «Для ЯМ», PDF, PowerPoint, исходник. Имена файлов вида {артикул}_{номер}.jpg. частично Работают PNG, JPEG, WEBP, SVG, ZIP, PDF и PowerPoint. Перед скачиванием проверяются переполнение текста и доступность фото, архив называется по товару. Пресетов площадок нет, файлы внутри — 01.png…, PDF состоит из картинок (окно об этом предупреждает). screens-editor.jsdocs/93-94pptx-export.js:11-79
Каталог товаров — источник правды: фото, артикулы, цена, подтверждённые факты и где уже есть материалы.
Поиск, фильтры, «Импорт», «+ Товар».
Таблица: фото, название, артикул, цена, факты (сколько подтверждено), материалы по каналам (WB ✓, Ozon ✎, сайт ✓), значок проблем.
Выбор строк открывает действия «Создать карточки (N)», «Обновить сайт», «Скачать».
На телефоне вместо таблицы — карточки.
В коде сейчас:нет Экрана нет. «Товар» появился только как бриф внутри каждого проекта (ProductBrief). Общей таблицы товаров в базе нет: в схеме 27 таблиц, products среди них нет. Нет ни цены, ни материалов по каналам, ни идентификаторов карточек WB и Ozon. В серверной партии артикул обязателен и уникален, но это строки партии, а не каталог. db/schema.tsproduct-contract.js:21-55server/card-batches.mjs:64
Что сделать:
Фаза 2 Серверная таблица товаров на основе ProductBrief: факты, фото, цена, артикулы, идентификаторы карточек WB и Ozon. Действия над выбранными строками.
Всё об одном товаре в одном месте: факты, фото, материалы и каналы. Если меняется цена или факт, экран показывает, что затронуто, и предлагает «Обновить всё».
Шапка: фото, артикулы, цена, «Создать материал ▾», «Открыть на WB ↗».
Баннер изменения цены (в макете тарелка «Туман»: 990 → 1 090 ₽, затронуты сайт и презентация) с кнопками «Обновить всё» и «Что изменится».
Вкладка фактов: источник, подтверждение, «используется в N материалах», правка на месте.
Вкладки фото (исходники, вырезки, сцены), материалов, каналов и истории.
В коде сейчас:нет Экрана товара нет. Факты с источником хранятся в брифе каждого проекта отдельно, поэтому изменение цены или факта не связано с материалами. product-contract.js:21-55drizzle/0022_project_contracts.sql
Что сделать:
Фаза 2 Экран товара на новой таблице: вкладки фактов, фото и материалов.
Фаза 6 Событие «изменилась цена или факт» и пакетное обновление затронутых материалов.
Завести каталог за минуты: из Excel или CSV, по артикулам WB и Ozon или по ссылке на магазин.
«Excel или CSV»: файл → сопоставление колонок → строки с отметками ✓ и ⚠.
«По артикулам WB/Ozon»: поле для артикулов и предпросмотр найденного.
«Магазин WB по ссылке».
Итог «12 готовы, 2 с замечаниями» и кнопка «Импортировать».
В коде сейчас:частично Таблицу CSV или Excel теперь можно отправить в серверную партию: предпросмотр, проверка строк до отправки, обязательный и уникальный артикул, до 100 строк. Но фото нужно заранее загрузить и сослаться на него колонкой image, а результатом становятся карточки, а не товары. Импорта по артикулу WB или Ozon и из магазина по ссылке нет. batch-server-submit.jsxlsx-import.js:4-30server/card-batches.mjs:60-64docs/91-server-catalog-guide.md
Что сделать:
Фаза 2 Импортировать в таблицу товаров. Импорт по артикулу WB — через API контента с ключом продавца.
Серии для десятков товаров одним запуском по сохранённому рецепту. Прогресс виден по каждому товару, ошибки можно повторить.
Товары (до 100 за раз) × рецепт: стиль, площадки, число слайдов, обработка фото, пресет экспорта. Кнопка «Сохранить как рецепт».
Оценка времени и кредитов, кнопка «Собрать».
Прогресс по каждому товару: «готово», «в работе» или ошибка с причиной и «Повторить». Партию можно поставить на паузу.
«Скачать всё» (ZIP с артикулами в именах файлов и контрольными суммами), «Опубликовать готовые».
Вкладка «Сценарии»: рецепт, источник товаров и расписание, журнал запусков.
В коде сейчас:частично Серверная партия работает, в том числе на боевом адресе. До 100 артикулов, очередь не зависит от вкладки, есть пауза, продолжение, архив, исправление ошибочной строки с историей попыток и однократный отложенный запуск до 30 дней. Выгрузки: ZIP редактируемых проектов и PNG-каталог с описью (артикул, позиция, попытка, SHA-256 каждого файла) и SHA-256 всего архива. Нет удаления фона в партии (сервер прямо отказывает), оценки времени и цены, «Опубликовать готовые» и повторяющихся сценариев. Экрана нет в меню, а для отправки нужен заранее сохранённый стиль. server/card-batches.mjs:58-101server/card-batches.mjs:65server/batch-export-requests.mjs:21-23server/batch-export-artifacts.mjs:52tests/api.test.cjs:326VERIFICATION.md:36assets/now/12-server-batch.png
Что сделать:
Фаза 2 Строки партии брать из таблицы товаров, сборка — тем же движком раскладки.
Фаза 3 Удаление фона в партии и пакет по папке фото.
Фаза 5 «Опубликовать готовые».
Фаза 6 Повторяющиеся сценарии с расписанием и журналом (F4 у Codex).
Подготовить фото для всех материалов: фон, тень, сцена, качество, кадр под площадку. Гарантия: сам товар не меняется.
Библиотека фото по товарам, в центре сравнение «до/после» со шторкой.
Операции: убрать фон, белый фон, тень, сцена (пресеты «Кухня утром», «Деревянный стол», «Минимализм» или своё описание), улучшить качество, кадрировать под площадку.
«Применить к 12 фото».
Знак «Товар не изменён — меняется только фон» после проверки целостности.
В коде сейчас:частично Код удаления фона не менялся: BiRefNet сохраняет цвет товара без искажений (расхождение 0/0/0), результат применяется к слою или серии. Но на боевом адресе фото-провайдер не подключён, поэтому серверное удаление фона и заказ «фон → карточки» там недоступны. Сцены и нового фона нет, сервер обрабатывает одно фото за раз, снимок с телефона (12 Мп) отклоняется лимитом 8 МБ, потерянное задание зависает. deploy/docker-compose.coolify.yml:12-22scripts/serve.cjs:15scripts/photo-pixels.py:79-149server/photo-jobs.mjs:66
Что сделать:
Фаза 3 Восстанавливать потерянные задания, подавать модели уменьшенную копию, 2–4 фото параллельно, пакет.
Фаза 3 Сцена: маска товара → новый фон (Qwen-Image-Edit-2511 или FLUX.2 klein 4B) → исходные пиксели товара поверх → проверка целостности. Провайдер на боевом стенде — по решению владельца.
Собрать сайт-витрину бренда за три шага из уже заведённых товаров и бренда.
Тип: витрина бренда, страница одного товара или сайт для оптовиков.
Товары из каталога, страницы (Главная, Каталог, О бренде, Контакты, Оптовикам), стиль из бренда, «Опишите словами (необязательно)».
Сборка: секции из фактов, фото из готовых серий, тексты со ссылками на факты, проверка SEO. Затем «Открыть конструктор».
В коде сейчас:нет Витрины нет ни в коде, ни в плане Codex F0–F7: слово «витрина» встречается только в требованиях площадок. data.js:20research/audit-2026-09-10/overview-and-plan.md:117-126
Что сделать:
Фаза 4 Сайт как документ из типизированных секций (до 12 типов) со строгой проверкой на сервере. Сборка без случайности: из товаров и бренд-кита.
Фаза 4 Тексты — по правилу карточек: каждая строка ссылается на факт из брифа.
Инспектор секции: заголовок, текст, кнопка и ссылка, фон, источник товаров «из каталога: 6», варианты раскладки миниатюрами.
В коде сейчас:нет Конструктора нет. Что можно взять: цикл «предложение → сравнение → применение → версия → одна отмена» и узкий язык правок ИИ из редактора карточек, один SVG-рендер, а теперь и ProductBrief — тексты витрины смогут ссылаться на факты. editor-plan.jsseries-plan.jsproduct-contract.js
Что сделать:
Фаза 4 Экран «чат + предпросмотр» с «укажи и скажи». Простые правки (текст, цвет, фото) — без модели, модель — только для перестройки секций.
Фаза 4 Сначала прототип на двух секциях: своя сцена против ядра GrapesJS (BSD-3-Clause).
ПомощникЛента команд: запрос → план операций → «Применить» или «Отменить». Режим «Спросить» ничего не меняет. нет Есть только образец цикла правок в редакторе карточек. editor-assistant.js:15-35
Предпросмотр на телефонеТот же сайт на ширине телефона. Правки в инспекторе сразу меняют предпросмотр. нет Делаем вместе с конструктором.
Всё о сайте на одном экране: адрес, версия, неопубликованные изменения, показатели недели и здоровье.
Адрес 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 Показатели недели и события сайта в «Нужно внимание».
Безопасная выкладка: проверка, что изменилось, адрес, выкладка без простоя и откат одним кликом.
Проверка: SEO-заголовки, описания фото, ссылки на WB и Ozon, контраст, согласие на обработку данных в форме, вес страницы. Есть кнопка «Исправить автоматически».
Изменения с прошлой версии — те же три: цена тарелки, новый вопрос, фото мастерской.
Адрес: бесплатный поддомен или свой домен с инструкцией по DNS и статусом проверки.
Выкладка: собираем страницы, загружаем, переключаем версию без простоя, проверяем HTTPS.
Готово: версия 8, ссылка, «Откатить на версию 7». До этого задание «Публикация сайта · версия 8» в «Заданиях» ждёт подтверждения: выкладка запускается только с этого экрана.
В коде сейчас:нет Публикации сайтов нет. Для самого приложения уже есть многоэтапный Dockerfile, сервис Coolify и публичный HTTPS. Но выкладка идёт разовыми скриптами под каждый выпуск, а /healthz отвечает 404: здоровье проверяется запросом /v1/projects с ожиданием ответа 401. Dockerfile:1-36scripts/container-health.cjs:6-8deploy/update-f3-preflight-15-gx10.py
Что сделать:
Фаза 1 Один скрипт выкладки с проверкой после деплоя и автооткатом, /healthz.
Фаза 4 Статические страницы на <бренд>.24oros.ru, атомарное переключение версии, откат за ≤ 10 с, один сертификат на все поддомены (wildcard через DNS-01). Свой домен клиента — позже.
Готово и откатВерсия 8 на адресе, ссылка на сайт, «Откатить на версию 7». нет Журнала выкладок и отката для сайтов нет.
Заявки с сайта не теряются: список со статусами, ответ в Telegram, уведомления.
Список: дата, имя, контакт (частично скрыт), сообщение, источник, статус (новая, в работе, закрыта).
Панель деталей: «Ответить в Telegram ↗», смена статуса.
Настройка уведомлений в Telegram, выгрузка CSV, срок хранения данных.
В коде сейчас:нет Экрана нет. Для Telegram есть привязка чата к аккаунту, но живого бота нет, а уведомлять о заявках бот не умеет. server/bot-links.mjsserver/api.mjs:132
Что сделать:
Фаза 4 Таблица заявок, уведомления в Telegram, согласие на обработку персональных данных в форме, срок хранения.
Юридические документы (политика обработки данных по 152-ФЗ) — до выкладки первой формы (см. раздел 10).
Telegram-бот как второй вход в продукт: фото и описание в чат → черновик → подтверждение → готовые файлы приходят в чат. Плюс уведомления о заявках.
«Готово к публикации» с кнопками.
Журнал: когда, что, куда, кто и с каким результатом (успешно, отклонено с причиной, откат). Кнопка «Откатить».
Блок «Изменились правила WB 28.08.2026 — 2 карточки проверить».
В коде сейчас:нет Публикации нет: кнопки ведут на заглушку «Публикация в маркетплейс — фаза 4», экран интеграций подписан «Все внешние интеграции отключены». В плане Codex публикация — фаза F7, она не начата. Telegram-бот написан (8 серверных модулей, 41 тест), но живой канал не подключён, а умеет бот только текстовую команду презентации. foundation.js:36-37server/bot-orders.mjs:24, 34NEXT_PHASE.md:22
Что сделать:
Фаза 0 Спрятать «Опубликовать», пока нет настоящей интеграции.
Фаза 5 Журнал публикаций со снимком «было» для отката.
Фаза 6 Ограниченный живой пилот бота: «фото + факты → карточки → ссылка».
Выложить фото в кабинет WB так, чтобы было видно, что изменится, и можно было вернуть как было.
Выбор: какой материал к какому артикулу WB (найдено автоматически или выбрать вручную).
Сравнение «Сейчас на WB / Станет» по каждому товару и отметка «Сохраним текущие фото WB для отката».
Подтверждение.
Отправка: загружаем файлы, ждём обработку, читаем обратно из кабинета и сверяем.
Готово: «2 из 2 опубликованы», «Открыть на WB ↗», «Откатить».
В коде сейчас:нет Вместо публикации — заглушка, старое окно с жёстко заданным «n из n» перекрыто другим кодом. Фаза F7 у Codex не начата и требует доступа владельца к API. Среди сервисов для селлеров публикацию с откатом через API продавца публично подтвердил только агент JAFO, и он не делает визуал. foundation.js:36screens-app.js:183NEXT_PHASE.md:22
Что сделать:
Фаза 5 Подключение к WB по шагам: ключ с правом «Контент» → привязка к карточке → «было/станет» → подтверждение → загрузка фото по ссылкам на серверный экспорт → чтение обратно → журнал и откат.
Фаза 5 Затем Ozon тем же путём.
Сравнение «было/станет»Миниатюры «сейчас» и «станет», сводка изменений и проверка. Текущие фото сохраняются для отката. нет Нет ни чтения карточек из кабинета, ни сравнения.
Готово и откат«2 из 2 опубликованы» после сверки с кабинетом, «Открыть на WB ↗», «Откатить». нет Есть только перекрытое окно с жёстко заданным «n из n». screens-app.js:183
Подключить кабинет с минимальными правами и сразу проверить, что ключ работает.
Для WB: где создать токен, какие права нужны (только «Контент»), скрытое поле токена.
«Проверить» → «Токен работает: магазин „Мох“, 18 товаров, права: Контент ✓». Примечание о безопасности и об отзыве ключа.
Ozon — Client-Id и ключ; ЯМ — вход через Яндекс.
Telegram — привязка бота одноразовым кодом (/start КОД), отзыв связи одной кнопкой. Свой домен — DNS-записи.
В коде сейчас:частично Появился экран «Подключение бота»: привязка чата одноразовым кодом, отзыв, единый владелец пространства для сайта и бота, журнал доставок с ручным решением «повторить или пропустить» (41 тест). Живого канала нет: на боевом адресе привязка отвечает «Привязка бота на этом сервере ещё не подключена». Подключений WB, Ozon, ЯМ и своего домена нет, экран интеграций — макет. bot-settings.js:17server/bot-links.mjsserver/workspace-owner.mjs:7-9server/api.mjs:132screens-workspace.js:442assets/now/13-telegram-bot.png
Что сделать:
Фаза 2 Подключение WB для импорта товаров по артикулу.
Фаза 5 Проверка прав ключа, хранение ключей в зашифрованном виде, отзыв одной кнопкой, журнал действий.
Фаза 6 Живой Telegram: токен владельца и ограниченный пилот.
Массовые действия: «Обновить из фактов», «Скачать», «В корзину». Вкладка «Корзина».
В коде сейчас:частично Появилась общая библиотека «Проекты»: проекты браузера и версии на сервере в одном списке, с метками места хранения и поиском. Повторное открытие той же серверной версии больше не плодит копию. Но источник истины по-прежнему браузер: на сервер работа попадает только кнопкой «На сервер», а открытие серверного проекта создаёт копию в браузере. Фильтров по статусу и каналам нет, таблиц папок и библиотеки на сервере тоже. unified-library.js:33-49unified-library.js:38, 45screens-cloud.js:44assets/now/08-library.png
Что сделать:
Фаза 1 Сервер — источник истины: автосохранение, браузер только кэш и очередь отправки. Кнопка «На сервер» уходит.
Фаза 6 «Обновить из фактов» для материалов со статусом «нужно обновить».
Бренд настраивается один раз и применяется во всех материалах и на сайте: логотип, цвета с ролями, шрифты, тон.
Логотип в светлом и тёмном вариантах.
Цвета с ролями и проверкой контраста.
Шрифты: заголовки Lora, текст Golos Text, каталог кириллических шрифтов. Тон текста с примерами.
Живые образцы: карточка, первый экран сайта, слайд.
«Подтянуть стиль по ссылке или образцам» и «Применить ко всем материалам (14)».
В коде сейчас:частично Без изменений. Палитра, шрифт, логотип и применение к проектам работают, но шрифтов 4 «офисных» семейства, Manrope в карточки не попадает, на каждой карточке печатается «Мой бренд». Хранится всё только в браузере. scene-fonts.js:5card-series.js:11app.js:12assets/now/11-brand.png
Что сделать:
Фаза 0 Убрать «Мой бренд» по умолчанию.
Фаза 1 Хранить бренды на сервере.
Фаза 3 Роли цветов и токены стиля, кириллические шрифты со свободной лицензией OFL, проверка контраста.
В коде сейчас:частично Без изменений. 41 демо-шаблон и собственные шаблоны с полями работают, но рейтинги и популярность вымышлены, а на миниатюрах видна заглушка «Добавьте описание товара». refinements.js:8-100screens-app.js:88-109assets/now/10-templates.png
Что сделать:
Фаза 0 Убрать рейтинги и «использования».
Фаза 3 Шаблоны на ролях слоёв с замками. Длинный текст уменьшать, а не выдавать ошибку.
Все фоновые работы в одном месте: что идёт, сколько осталось, что сломалось и что с этим делать.
Вкладки: «В работе», «Готово», «С ошибками».
Задание: товар, шаги с состояниями, место в очереди, оставшееся время, «Отменить», «Открыть результат».
Ошибка описана человеческими словами и сопровождается действием.
Живой прогресс.
В коде сейчас:частично Лента показывает серверные сборки карточек с кнопкой «Открыть серию» и фильтры по серверным и браузерным каталогам. У ожидания модели появился срок — 30 минут. Серии, собранные в браузере, по-прежнему не видны («Показано 0 из 0»). Задания идут в порядке поступления, без честной очереди между аккаунтами, прогресс приходит опросом. task-hub.jsserver/ai-jobs.mjs:7, 39, 75assets/now/09-tasks.png
Что сделать:
Фаза 1 Все задания на сервере, вместе с переходом на серверное хранение.
Фаза 3 Одна модель «задание + шаги», очереди «срочная» и «фоновая», задания разных аккаунтов по очереди, прогресс через SSE, у каждой ошибки — код и действие.
Профиль, команда, тариф, ключи, хранилище и данные в одном месте, без технических терминов.
Профиль и уведомления.
Команда: роли «владелец», «дизайнер», «контент-редактор», «наблюдатель»; приглашение.
Тариф и оплата: план, расход за месяц, журнал операций с ценой, автопродление выключено.
Ключи и интеграции. Хранилище: «Что занимает место», очистка неиспользуемых фото.
Данные: выгрузка всего, удаление аккаунта.
В коде сейчас:частично Настройки хранятся в браузере; команда, тариф и оплата — макеты. Освободить место можно только для PNG-выгрузок партий. Очистки фото, проектов и корзины нет, архивы лежат в базе. Есть выгрузка проекта по ревизии (теперь с проверкой качества) и управление аккаунтами из командной строки. screens-workspace.js:444-449tests/batch-export-limits.test.cjs:80server/project-export.mjs:8-9server/account-admin.mjs:14-15
Что сделать:
Фаза 1 Профиль и выгрузка данных.
Фаза 6 Команда и роли, тариф и журнал расходов. Хранилище с ежедневной очисткой: корзина старше 30 дней, фото без ссылок старше 7 дней.
Тариф и оплатаПлан, расход за месяц, журнал операций с ценой каждой, автопродление выключено. нет Оплаты нет, «Тариф и использование» в кабинете — макет, баланс — заглушка на 316 кредитов. app.js:11
Хранилище«Что занимает место» и очистка неиспользуемых фото. нет Экрана нет. Освободить место можно только для PNG-выгрузок партий, а ZIP-архивы хранятся в базе SQLite, теперь уже в двух таблицах. tests/batch-export-limits.test.cjs:80drizzle/0007, 0020
Ответ на вопрос без письма в поддержку. Если не помогло — обращение с приложенным контекстом.
Поиск, популярные статьи, разделы.
Помощник отвечает по статьям справки.
«Написать в поддержку» с приложенным контекстом.
Статус сервиса.
В коде сейчас:частично Центр помощи работает и пополнился статьями о стилях, проверке перед скачиванием и каталоге. Обращения по-прежнему «сохраняются локально». Главное: на боевом адресе без входа открываются 99 внутренних документов, в 26 из них — детали инфраструктуры (ssh, Tailscale, адреса, Coolify). support-drafts.js:20-31server/local.mjs:79-84scripts/build.cjs:5-8assets/now/14-help.png
Что сделать:
Фаза 0 Срочно закрыть /docs/: в образ — только пользовательская справка по белому списку, тест сборки на запрещённые слова.
Фаза 1 Обращения сохранять на сервере и уведомлять о них владельца.
Экран владельца сервиса: сервер ИИ, модели, очереди, сайты клиентов, бэкапы, аккаунты и ошибки. Только здесь допустимы технические термины.
Сервер ИИ: загрузка GPU и памяти.
Модели для текста, изображений и фона: загружена или «холодная».
Очереди: срочная и фоновая.
Сайты клиентов, резервные копии и проверка восстановления.
Аккаунты и приглашения, журнал ошибок.
В коде сейчас:нет Веб-пульта нет, а демо-админка /admin «не защищает данные ролями». Есть только серверные механизмы без экрана: управление аккаунтами из командной строки (теперь с отзывом Telegram-доступа), ручные бэкапы перед выпуском на том же диске, допуск загрузки модели по свободной памяти. Мониторинга, метрик и /healthz нет. screens-workspace.js:456server/account-admin.mjs:4-23server/backup.mjs:87, 92scripts/container-health.cjs:6-8
Что сделать:
Фаза 1 /healthz, внешний монитор, бэкапы по расписанию вне диска с проверкой восстановления.
Фаза 6 Веб-пульт с ролями вместо демо-админки: модели, очереди, сайты клиентов, журнал ошибок.
Служебный экран макета: все 33 экрана по группам со ссылками, назначением и статусом «в коде сейчас». С него удобно начинать просмотр.
Экраны по группам: название, ссылка, назначение.
Статус «В коде сейчас» (есть, частично, нет) с пояснением.
Ссылка на этот отчёт.
В коде сейчас:частично В прототипе есть карта экранов с уровнями готовности, но она не обновлялась: «32 точки входа», нет «Заданий», общей библиотеки, «Готовой серии», серверных партий и «Подключения бота». Продавцам этот экран не нужен. screens-help.js:46assets/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 (сайт), если в команде два разработчика.
«Нужно внимание», сценарии по расписанию, живой бот, оплата, роли, пульт
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 зелёные; выложено и проверено онлайн.
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-36server/local.mjs:25-28server/login-rate-limit.mjsunified-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 без кода от администратора.
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 непроверенных строк в материалах. Отчёт качества с правилами площадки (источник, дата) проверяет и браузерный, и серверный экспорт.
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, не блокирует очередь.
Воспроизводимый отчёт качества ИИ на отложенных примерах с согласованным порогом ошибок. Без ИИ редактор работает как обычно.
Роли текста и фильтр оформления серии по роли: 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 проверяется автоматически после каждой выкладки.
Форма заявки не публикуется без согласия на обработку данных и ссылки на политику.
Модель сцены и предсказуемый рендер — основа витрины. Бренд-кит. 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). Яндекс Маркет — позже.
Пакетная публикация готовых серий из серверной партии.
Приёмка
Публикация подтверждена чтением из кабинета.
Откат возвращает прежний набор фото.
Повтор после сбоя или неизвестного исхода не создаёт дублей.
Воспроизводимый 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-связи сразу запрещает новые заказы и доставки, история сохраняется. Наблюдатель не может менять материалы — проверено тестом.
Однократный отложенный запуск партии с часовым поясом — основа расписания: 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:3deploy/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 снимков.
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.
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, только публичные страницы
Актуальная версия не закоммичена: досверка шла по копии рабочего дерева на 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