ВозможностиОрганизации
Документация
    Ring Platform

    Децентрализованное самостроящееся будущее

    Войти
    Организации
    Возможности
    Магазин
    Документация
    Концепции платформы
    RING ЭкономикаSonoratek LLCГлобальное влияниеAI встречает Web3
    Начать
    Быстрый стартКалькуляторДорожная карта
    Конфиденциальность|Контакты
    v1.106.26|Sonoratek LLC

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    Членство и кредиты
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    Шторка страницы
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Организации
    Возможности
    AI Matcher
    Messaging
    Peer Games
    News
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Уведомления
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Ring Mailer и RingdomX Mail
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    Членство и кредиты
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    Шторка страницы
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Организации
    Возможности
    AI Matcher
    Messaging
    Peer Games
    News
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Уведомления
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Ring Mailer и RingdomX Mail
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    Членство и кредиты
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    Шторка страницы
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Организации
    Возможности
    AI Matcher
    Messaging
    Peer Games
    News
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Уведомления
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Ring Mailer и RingdomX Mail
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Шторка страницы

    Шторка страницы это узкий баннер (около 10% высоты экрана), который появляется, когда посетитель перестаёт прокручивать. Она показывает одно из двух предложений: Добавить на главный экран для приложения или товар, который продавец решил рекламировать. На страницах новостей и в постах блогов участников товар, добавленный из шторки, может принести автору страницы комиссию, когда покупатель позже оплатит заказ.

    Используйте вкладки Founder / Developer в боковой панели документации, чтобы отфильтровать эту страницу. Общие разделы относятся к обеим аудиториям.

    Статус (2026-10-26): Выпущено в Layer 1 и настраивается для каждого клона через блок curtain в ring-config.json. Очередь теперь учитывает прежние отказы, поэтому посетитель, выбравший «Не сегодня», не увидит тот же баннер снова на следующей странице.

    Без шторкиСо шторкой
    Подсказки установки зависят от браузераRing сам предлагает добавить на главный экран, один раз за окно политики
    Авторы не зарабатывают на упомянутых товарахАвторы получают дополнительные кредиты с оплаченных корзин, начавшихся с их страницы
    Продавцы платят за рекламу где-то ещёПродавцы включают рекламу товара и задают комиссию автору от 1% до 10%

    Почему это важно для вашего сообщества

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

    Новости

    Страницы статей, где появляются предложения товаров.

    Блог участника

    Посты участников получают те же предложения товаров и комиссию автору.

    Магазин

    Продавцы включают рекламу в шторке в форме товара.

    Типичные сценарии

    • Фуд-блогер ссылается на мёд фермы в статье. Читатели видят мёд в шторке, нажимают «В корзину» и оплачивают в течение 30 дней. Блогер получает 5% от этой позиции кредитами.

    Конфигурация

    ring-config.template.json поставляется с такими значениями по умолчанию. Переопределите любой ключ в ring-config.json своего клона. Значения читает getCurtainPolicy() в lib/ring-config-core.ts, а проверяет parseCurtainPolicy в features/curtain/lib/policy.ts.

    КлючПо умолчаниюДопустимые значения
    curtain.enabledtruefalse отключает все предложения
    curtain.productSourcepage_then_poolpage_then_pool, page_only, pool_only
    curtain.maxImpressionsPerDay5от 1 до 50 на предложение за сутки UTC
    curtain.notTodayHours24от 1 до 168

    Как выбираются предложения

    Related documentation

    Multi-Vendor Store

    Зависит от: товаров, корзины и оплаченных заказов, которые запускают комиссию.

    News Module

    Тот же процесс: страницы статей с предложениями товаров.

    Member Blogs

    Тот же процесс: посты участников содержат те же предложения.

    Credit Rewards

    См. также: кредитные вознаграждения, которые должны быть включены для комиссии.

    Referral Codes (Refcodes)

    1. Документация
    2. /Функции
    3. /Шторка страницы

    Обновлено 26 окт. 2026 г.5 мин прослушивания

    Шторка страницы

    Шторка страницы это узкий баннер (около 10% высоты экрана), который появляется, когда посетитель перестаёт прокручивать. Она показывает одно из двух предложений: Добавить на главный экран для приложения или товар, который продавец решил рекламировать. На страницах новостей и в постах блогов участников товар, добавленный из шторки, может принести автору страницы комиссию, когда покупатель позже оплатит заказ.

    Используйте вкладки Founder / Developer в боковой панели документации, чтобы отфильтровать эту страницу. Общие разделы относятся к обеим аудиториям.

    Статус (2026-10-26): Выпущено в Layer 1 и настраивается для каждого клона через блок curtain в ring-config.json. Очередь теперь учитывает прежние отказы, поэтому посетитель, выбравший «Не сегодня», не увидит тот же баннер снова на следующей странице.

    Без шторкиСо шторкой
    Подсказки установки зависят от браузераRing сам предлагает добавить на главный экран, один раз за окно политики
    Авторы не зарабатывают на упомянутых товарахАвторы получают дополнительные кредиты с оплаченных корзин, начавшихся с их страницы
    Продавцы платят за рекламу где-то ещёПродавцы включают рекламу товара и задают комиссию автору от 1% до 10%

    Почему это важно для вашего сообщества

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

    Новости

    Страницы статей, где появляются предложения товаров.

    Блог участника

    Посты участников получают те же предложения товаров и комиссию автору.

    Магазин

    Продавцы включают рекламу в шторке в форме товара.

    Типичные сценарии

    • Фуд-блогер ссылается на мёд фермы в статье. Читатели видят мёд в шторке, нажимают «В корзину» и оплачивают в течение 30 дней. Блогер получает 5% от этой позиции кредитами.

    Конфигурация

    ring-config.template.json поставляется с такими значениями по умолчанию. Переопределите любой ключ в ring-config.json своего клона. Значения читает getCurtainPolicy() в lib/ring-config-core.ts, а проверяет parseCurtainPolicy в features/curtain/lib/policy.ts.

    КлючПо умолчаниюДопустимые значения
    curtain.enabledtruefalse отключает все предложения
    curtain.productSourcepage_then_poolpage_then_pool, page_only, pool_only
    curtain.maxImpressionsPerDay5от 1 до 50 на предложение за сутки UTC
    curtain.notTodayHours24от 1 до 168

    Как выбираются предложения

    Related documentation

    Multi-Vendor Store

    Зависит от: товаров, корзины и оплаченных заказов, которые запускают комиссию.

    News Module

    Тот же процесс: страницы статей с предложениями товаров.

    Member Blogs

    Тот же процесс: посты участников содержат те же предложения.

    Credit Rewards

    См. также: кредитные вознаграждения, которые должны быть включены для комиссии.

    Referral Codes (Refcodes)

    1. Документация
    2. /Функции
    3. /Шторка страницы

    Обновлено 26 окт. 2026 г.5 мин прослушивания

    Шторка страницы

    Шторка страницы это узкий баннер (около 10% высоты экрана), который появляется, когда посетитель перестаёт прокручивать. Она показывает одно из двух предложений: Добавить на главный экран для приложения или товар, который продавец решил рекламировать. На страницах новостей и в постах блогов участников товар, добавленный из шторки, может принести автору страницы комиссию, когда покупатель позже оплатит заказ.

    Используйте вкладки Founder / Developer в боковой панели документации, чтобы отфильтровать эту страницу. Общие разделы относятся к обеим аудиториям.

    Статус (2026-10-26): Выпущено в Layer 1 и настраивается для каждого клона через блок curtain в ring-config.json. Очередь теперь учитывает прежние отказы, поэтому посетитель, выбравший «Не сегодня», не увидит тот же баннер снова на следующей странице.

    Без шторкиСо шторкой
    Подсказки установки зависят от браузераRing сам предлагает добавить на главный экран, один раз за окно политики
    Авторы не зарабатывают на упомянутых товарахАвторы получают дополнительные кредиты с оплаченных корзин, начавшихся с их страницы
    Продавцы платят за рекламу где-то ещёПродавцы включают рекламу товара и задают комиссию автору от 1% до 10%

    Почему это важно для вашего сообщества

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

    Новости

    Страницы статей, где появляются предложения товаров.

    Блог участника

    Посты участников получают те же предложения товаров и комиссию автору.

    Магазин

    Продавцы включают рекламу в шторке в форме товара.

    Типичные сценарии

    • Фуд-блогер ссылается на мёд фермы в статье. Читатели видят мёд в шторке, нажимают «В корзину» и оплачивают в течение 30 дней. Блогер получает 5% от этой позиции кредитами.

    Конфигурация

    ring-config.template.json поставляется с такими значениями по умолчанию. Переопределите любой ключ в ring-config.json своего клона. Значения читает getCurtainPolicy() в lib/ring-config-core.ts, а проверяет parseCurtainPolicy в features/curtain/lib/policy.ts.

    КлючПо умолчаниюДопустимые значения
    curtain.enabledtruefalse отключает все предложения
    curtain.productSourcepage_then_poolpage_then_pool, page_only, pool_only
    curtain.maxImpressionsPerDay5от 1 до 50 на предложение за сутки UTC
    curtain.notTodayHours24от 1 до 168

    Как выбираются предложения

    Related documentation

    Multi-Vendor Store

    Зависит от: товаров, корзины и оплаченных заказов, которые запускают комиссию.

    News Module

    Тот же процесс: страницы статей с предложениями товаров.

    Member Blogs

    Тот же процесс: посты участников содержат те же предложения.

    Credit Rewards

    См. также: кредитные вознаграждения, которые должны быть включены для комиссии.

    Referral Codes (Refcodes)

    1. Документация
    2. /Функции
    3. /Шторка страницы

    Обновлено 26 окт. 2026 г.5 мин прослушивания

  1. Новый посетитель на мобильном читает три страницы. На одной из них шторка предлагает добавить на главный экран. Он нажимает «Не сегодня» и не видит этого 24 часа.
  2. Читатель нажимает «Не для меня» на товаре. Этот товар больше никогда ему не покажется.
  3. От статьи до комиссии автора

    Где смотреть результаты

    • Продавцы: страница доходов показывает 7-дневную воронку шторки: показано, показано повторно, CTA, не сегодня, не для меня, прокручено, оплачено и начисленные кредиты.
    • Авторы: My News (/my-news) показывает ту же 7-дневную воронку для их страниц плюс заработанные кредиты шторки.
    • Операторы: страница аналитики администратора показывает ту же воронку для всего клона рядом с активной политикой шторки.

    requestCurtainDrop в features/curtain/actions.ts возвращает до трёх предложений (CURTAIN_QUEUE_MAX):

    1. Полностью пропускается, когда политика выключена или путь начинается с /admin, /login, /register, /auth, /vendor или /store/checkout.
    2. Предложения товаров только на страницах, передающих newsArticleId через CurtainPageProvider (статьи новостей и посты блогов участников). Статья должна быть опубликована и видна зрителю согласно canViewNewsArticle.
    3. Товары страницы это ссылки /store/<id>, найденные в тексте статьи. Товары пула это активные товары с curtainAdvertiseEnabled. Каждый должен быть рекламируемым, активным, иметь цену, не быть собственным товаром продавца-зрителя и не быть подавленным.
    4. Сортировка: сначала товары из ссылок, затем совпадение темы с категорией и тегами статьи, затем меньше показов сегодня.
    5. Свободное место заполняется предложением добавить на главный экран, если браузер ещё не запускает установленное приложение.

    curtain-host.tsx показывает очередь и применяет canShowOffer к каждому элементу очереди, что и исправляет возврат закрытых баннеров.

    Ответы посетителей

    ОтветЭффект
    CTAВ корзину (товар) или подсказка установки (A2HS)
    Не сегодняПодавлено на notTodayHours с этого момента
    Не для меняПодавлено навсегда для этого предложения
    ПрокруткаЗаписывается, без подавления

    Настройки хранятся в localStorage (ring_curtain_prefs), а для вошедших участников также в таблице curtain_preferences (миграция 050, часть schema.sql) через syncCurtainPrefs.

    Атрибуция и комиссия

    • Каждое предложение товара несёт HMAC offerToken из features/curtain/lib/offer-token.ts, подписанный AUTH_SECRET. Он связывает предложение, товар, автора и статью.
    • Касания CTA хранятся в cookie ring_curtain_attr и хранилище (окно 30 дней, не более 12 касаний).
    • Оформление заказа оставляет только касания, прошедшие verifyCurtainTouches. Автор и процент берутся из токена и актуального товара, никогда из браузера.
    • После оплаты mintCurtainAuthorCommission в features/curtain/services/commission.ts добавляет автору кредиты: подытог позиции, умноженный на процент товара (от 1 до 10, по умолчанию 5). Пропускает покупку самому себе, реферера заказа, дубликаты и работает только при включённых кредитных вознаграждениях.
    • События curtain_shown, curtain_response, curtain_cta, curtain_suppress и curtain_paid питают getCurtainFunnel в features/analytics/lib/curtain-analytics.ts.

    Включение продавцом

    Форма товара продавца содержит AdvertiseProductWidget (features/curtain/components/advertise-product-widget.tsx). Он записывает curtainAdvertise: { enabled, commissionPercent } и curtainAdvertiseEnabled в товар. Товар без цены нельзя рекламировать.

    Частые вопросы

    Влияние

    Вычитается ли комиссия из выплаты продавцу?

    Нет. Это дополнительные кредиты, начисленные автору и записанные с источником curtain_author.

    Миграция

    Нужна ли миграция?

    Не для новой установки. Существующим базам данных нужна 050_curtain_offers.sql для curtain_preferences и индекса аналитики.

    Эксплуатация

    Как отключить шторку для одного клона?

    Установите "curtain": { "enabled": false } в ring-config.json этого клона и пересоберите.

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

  4. Новый посетитель на мобильном читает три страницы. На одной из них шторка предлагает добавить на главный экран. Он нажимает «Не сегодня» и не видит этого 24 часа.
  5. Читатель нажимает «Не для меня» на товаре. Этот товар больше никогда ему не покажется.
  6. От статьи до комиссии автора

    Где смотреть результаты

    • Продавцы: страница доходов показывает 7-дневную воронку шторки: показано, показано повторно, CTA, не сегодня, не для меня, прокручено, оплачено и начисленные кредиты.
    • Авторы: My News (/my-news) показывает ту же 7-дневную воронку для их страниц плюс заработанные кредиты шторки.
    • Операторы: страница аналитики администратора показывает ту же воронку для всего клона рядом с активной политикой шторки.

    requestCurtainDrop в features/curtain/actions.ts возвращает до трёх предложений (CURTAIN_QUEUE_MAX):

    1. Полностью пропускается, когда политика выключена или путь начинается с /admin, /login, /register, /auth, /vendor или /store/checkout.
    2. Предложения товаров только на страницах, передающих newsArticleId через CurtainPageProvider (статьи новостей и посты блогов участников). Статья должна быть опубликована и видна зрителю согласно canViewNewsArticle.
    3. Товары страницы это ссылки /store/<id>, найденные в тексте статьи. Товары пула это активные товары с curtainAdvertiseEnabled. Каждый должен быть рекламируемым, активным, иметь цену, не быть собственным товаром продавца-зрителя и не быть подавленным.
    4. Сортировка: сначала товары из ссылок, затем совпадение темы с категорией и тегами статьи, затем меньше показов сегодня.
    5. Свободное место заполняется предложением добавить на главный экран, если браузер ещё не запускает установленное приложение.

    curtain-host.tsx показывает очередь и применяет canShowOffer к каждому элементу очереди, что и исправляет возврат закрытых баннеров.

    Ответы посетителей

    ОтветЭффект
    CTAВ корзину (товар) или подсказка установки (A2HS)
    Не сегодняПодавлено на notTodayHours с этого момента
    Не для меняПодавлено навсегда для этого предложения
    ПрокруткаЗаписывается, без подавления

    Настройки хранятся в localStorage (ring_curtain_prefs), а для вошедших участников также в таблице curtain_preferences (миграция 050, часть schema.sql) через syncCurtainPrefs.

    Атрибуция и комиссия

    • Каждое предложение товара несёт HMAC offerToken из features/curtain/lib/offer-token.ts, подписанный AUTH_SECRET. Он связывает предложение, товар, автора и статью.
    • Касания CTA хранятся в cookie ring_curtain_attr и хранилище (окно 30 дней, не более 12 касаний).
    • Оформление заказа оставляет только касания, прошедшие verifyCurtainTouches. Автор и процент берутся из токена и актуального товара, никогда из браузера.
    • После оплаты mintCurtainAuthorCommission в features/curtain/services/commission.ts добавляет автору кредиты: подытог позиции, умноженный на процент товара (от 1 до 10, по умолчанию 5). Пропускает покупку самому себе, реферера заказа, дубликаты и работает только при включённых кредитных вознаграждениях.
    • События curtain_shown, curtain_response, curtain_cta, curtain_suppress и curtain_paid питают getCurtainFunnel в features/analytics/lib/curtain-analytics.ts.

    Включение продавцом

    Форма товара продавца содержит AdvertiseProductWidget (features/curtain/components/advertise-product-widget.tsx). Он записывает curtainAdvertise: { enabled, commissionPercent } и curtainAdvertiseEnabled в товар. Товар без цены нельзя рекламировать.

    Частые вопросы

    Влияние

    Вычитается ли комиссия из выплаты продавцу?

    Нет. Это дополнительные кредиты, начисленные автору и записанные с источником curtain_author.

    Миграция

    Нужна ли миграция?

    Не для новой установки. Существующим базам данных нужна 050_curtain_offers.sql для curtain_preferences и индекса аналитики.

    Эксплуатация

    Как отключить шторку для одного клона?

    Установите "curtain": { "enabled": false } в ring-config.json этого клона и пересоберите.

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

  7. Новый посетитель на мобильном читает три страницы. На одной из них шторка предлагает добавить на главный экран. Он нажимает «Не сегодня» и не видит этого 24 часа.
  8. Читатель нажимает «Не для меня» на товаре. Этот товар больше никогда ему не покажется.
  9. От статьи до комиссии автора

    Где смотреть результаты

    • Продавцы: страница доходов показывает 7-дневную воронку шторки: показано, показано повторно, CTA, не сегодня, не для меня, прокручено, оплачено и начисленные кредиты.
    • Авторы: My News (/my-news) показывает ту же 7-дневную воронку для их страниц плюс заработанные кредиты шторки.
    • Операторы: страница аналитики администратора показывает ту же воронку для всего клона рядом с активной политикой шторки.

    requestCurtainDrop в features/curtain/actions.ts возвращает до трёх предложений (CURTAIN_QUEUE_MAX):

    1. Полностью пропускается, когда политика выключена или путь начинается с /admin, /login, /register, /auth, /vendor или /store/checkout.
    2. Предложения товаров только на страницах, передающих newsArticleId через CurtainPageProvider (статьи новостей и посты блогов участников). Статья должна быть опубликована и видна зрителю согласно canViewNewsArticle.
    3. Товары страницы это ссылки /store/<id>, найденные в тексте статьи. Товары пула это активные товары с curtainAdvertiseEnabled. Каждый должен быть рекламируемым, активным, иметь цену, не быть собственным товаром продавца-зрителя и не быть подавленным.
    4. Сортировка: сначала товары из ссылок, затем совпадение темы с категорией и тегами статьи, затем меньше показов сегодня.
    5. Свободное место заполняется предложением добавить на главный экран, если браузер ещё не запускает установленное приложение.

    curtain-host.tsx показывает очередь и применяет canShowOffer к каждому элементу очереди, что и исправляет возврат закрытых баннеров.

    Ответы посетителей

    ОтветЭффект
    CTAВ корзину (товар) или подсказка установки (A2HS)
    Не сегодняПодавлено на notTodayHours с этого момента
    Не для меняПодавлено навсегда для этого предложения
    ПрокруткаЗаписывается, без подавления

    Настройки хранятся в localStorage (ring_curtain_prefs), а для вошедших участников также в таблице curtain_preferences (миграция 050, часть schema.sql) через syncCurtainPrefs.

    Атрибуция и комиссия

    • Каждое предложение товара несёт HMAC offerToken из features/curtain/lib/offer-token.ts, подписанный AUTH_SECRET. Он связывает предложение, товар, автора и статью.
    • Касания CTA хранятся в cookie ring_curtain_attr и хранилище (окно 30 дней, не более 12 касаний).
    • Оформление заказа оставляет только касания, прошедшие verifyCurtainTouches. Автор и процент берутся из токена и актуального товара, никогда из браузера.
    • После оплаты mintCurtainAuthorCommission в features/curtain/services/commission.ts добавляет автору кредиты: подытог позиции, умноженный на процент товара (от 1 до 10, по умолчанию 5). Пропускает покупку самому себе, реферера заказа, дубликаты и работает только при включённых кредитных вознаграждениях.
    • События curtain_shown, curtain_response, curtain_cta, curtain_suppress и curtain_paid питают getCurtainFunnel в features/analytics/lib/curtain-analytics.ts.

    Включение продавцом

    Форма товара продавца содержит AdvertiseProductWidget (features/curtain/components/advertise-product-widget.tsx). Он записывает curtainAdvertise: { enabled, commissionPercent } и curtainAdvertiseEnabled в товар. Товар без цены нельзя рекламировать.

    Частые вопросы

    Влияние

    Вычитается ли комиссия из выплаты продавцу?

    Нет. Это дополнительные кредиты, начисленные автору и записанные с источником curtain_author.

    Миграция

    Нужна ли миграция?

    Не для новой установки. Существующим базам данных нужна 050_curtain_offers.sql для curtain_preferences и индекса аналитики.

    Эксплуатация

    Как отключить шторку для одного клона?

    Установите "curtain": { "enabled": false } в ring-config.json этого клона и пересоберите.

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