МожливостіСутності
Документація
    Ring Platform

    Децентралізоване самобудівне майбутнє

    Увійти
    Сутності
    Можливості
    Магазин
    Документація
    Концепції
    RING ЕкономікаSonoratek LLCГлобальний впливAI зустрічає Web3
    Розпочати
    Швидкий стартКалькуляторДорожня карта
    Конфіденційність|Контакти
    v1.106.26|Sonoratek LLC

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Store
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    Членство та кредити
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    Завіса сторінки
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Організації
    Можливості
    AI Matcher
    Messaging
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    News
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Сповіщення
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура 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
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    Завіса сторінки
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Організації
    Можливості
    AI Matcher
    Messaging
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    News
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Сповіщення
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура 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
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    Завіса сторінки
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Організації
    Можливості
    AI Matcher
    Messaging
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    News
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Сповіщення
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура 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

    Архітектура News Kingdom

    Використовуйте вкладки Засновник / Розробник на бічній панелі документації, щоб відфільтрувати цю сторінку. Засновники бачать бізнес-процес і налаштування для оператора. Розробники бачать сервіси, маршрути, змінні середовища та локальний тестовий прогін.

    News Kingdom є шаром просування поверх модуля новин Ring. Учасники з роллю member або вищою пишуть статті, які розміщуються в їхньому особистому просторі за адресою /{username}/{slug}. Після цього автор може попросити місце в головній стрічці /news. Ring оцінює статтю, пропонує автору сплатити ціну, яка залежить від оцінки, і надсилає статтю адміністраторам платформи в Telegram для остаточного рішення «так» чи «ні».

    Кожен запит на просування проходить через одне поле статті, mainPageStatus:

    ЕтапЩо відбуваєтьсяmainPageStatus
    ПоданняАвтор просить розмістити статтю на головній сторінціsubmitted
    ОцінюванняAI або евристика оцінює етичність, спам, дублікати та цінністьai_scored
    Жорстке блокуванняЕтичність надто низька, ризик спаму чи дубліката надто високийpublished_blog_only
    ОплатаЦіну встановлено, відкривається checkout PaymentConductorpayment_pending
    ОплаченоWebhook підтверджує оплату, адміністратори отримують картку в Telegramawaiting_admin_approval
    СхваленоСтаття з'являється в головній стрічці для всього сайтуpublished_main
    ВідхиленоАдміністратор відмовляє. Стаття залишається в блозі автораrejected

    Чому це важливо для вашого клону

    • Учасники приносять контент і платять за охоплення. Ви ведете видання без найму редакції. Автори, які хочуть потрапити на першу сторінку, платять за це, а останнє редакційне слово залишається за вами.
    • Неякісне відсіюється першим. Спам, дублікати й дописи з низькою етичністю зупиняє оцінювання ще до оплати і до того, як адміністратор витратить на них час.
    • Ви схвалюєте з телефона. Кожне оплачене подання надходить вашим адміністраторам як повідомлення в Telegram із кнопками Approve, Reject, View і Counter.
    • Добрі матеріали окупаються. Коли адміністратор схвалює статтю учасника, Ring ставить у чергу нарахування винагороди автору й запускає переклади іншими мовами вашого клону.

    Блоги учасників

    Де стаття живе до просування: особиста URL-адреса автора.

    Модуль новин

    Головна стрічка, категорії, вподобання і редактор, яким користуються автори.

    PaymentConductor

    Карта модулів (перевірено в ring/web)

    АспектШлях
    Машина станів, аудит, схвалення і відхиленняfeatures/news/services/news-promotion-workflow.ts
    Оцінювання через OpenRouter і цінаfeatures/news/services/news-scoring-service.ts
    Евристика дублікатівfeatures/news/services/news-duplicate-check.ts
    Фасад checkout (purpose: 'news_promotion')features/news/services/news-payment-service.ts
    Обробники webhook оплатиlib/payments/conductor/handlers/news-promotion.ts, news-promotion-paypal.ts
    Картка і клавіатура адміністратора в Telegramfeatures/news/services/news-telegram-approval.ts
    Обробка callback у Telegram (підключено з )

    Відомі прогалини

    Пов'язана документація

    Related documentation

    Member Blogs

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

    News Module

    Передумова: модуль новин, редактор і головна стрічка, куди News Kingdom просуває статті.

    PaymentConductor architecture

    Залежність: як маршрутизуються checkout news_promotion і його webhooks.

    Manage via Telegram

    Див. також: бот адміністратора з кнопками Approve, Reject і Counter.

    1. Документація
    2. /Архітектура
    3. /Архітектура News Kingdom

    Оновлено 1 жовт. 2026 р.6 хв прослуховування

    Архітектура News Kingdom

    Використовуйте вкладки Засновник / Розробник на бічній панелі документації, щоб відфільтрувати цю сторінку. Засновники бачать бізнес-процес і налаштування для оператора. Розробники бачать сервіси, маршрути, змінні середовища та локальний тестовий прогін.

    News Kingdom є шаром просування поверх модуля новин Ring. Учасники з роллю member або вищою пишуть статті, які розміщуються в їхньому особистому просторі за адресою /{username}/{slug}. Після цього автор може попросити місце в головній стрічці /news. Ring оцінює статтю, пропонує автору сплатити ціну, яка залежить від оцінки, і надсилає статтю адміністраторам платформи в Telegram для остаточного рішення «так» чи «ні».

    Кожен запит на просування проходить через одне поле статті, mainPageStatus:

    ЕтапЩо відбуваєтьсяmainPageStatus
    ПоданняАвтор просить розмістити статтю на головній сторінціsubmitted
    ОцінюванняAI або евристика оцінює етичність, спам, дублікати та цінністьai_scored
    Жорстке блокуванняЕтичність надто низька, ризик спаму чи дубліката надто високийpublished_blog_only
    ОплатаЦіну встановлено, відкривається checkout PaymentConductorpayment_pending
    ОплаченоWebhook підтверджує оплату, адміністратори отримують картку в Telegramawaiting_admin_approval
    СхваленоСтаття з'являється в головній стрічці для всього сайтуpublished_main
    ВідхиленоАдміністратор відмовляє. Стаття залишається в блозі автораrejected

    Чому це важливо для вашого клону

    • Учасники приносять контент і платять за охоплення. Ви ведете видання без найму редакції. Автори, які хочуть потрапити на першу сторінку, платять за це, а останнє редакційне слово залишається за вами.
    • Неякісне відсіюється першим. Спам, дублікати й дописи з низькою етичністю зупиняє оцінювання ще до оплати і до того, як адміністратор витратить на них час.
    • Ви схвалюєте з телефона. Кожне оплачене подання надходить вашим адміністраторам як повідомлення в Telegram із кнопками Approve, Reject, View і Counter.
    • Добрі матеріали окупаються. Коли адміністратор схвалює статтю учасника, Ring ставить у чергу нарахування винагороди автору й запускає переклади іншими мовами вашого клону.

    Блоги учасників

    Де стаття живе до просування: особиста URL-адреса автора.

    Модуль новин

    Головна стрічка, категорії, вподобання і редактор, яким користуються автори.

    PaymentConductor

    Карта модулів (перевірено в ring/web)

    АспектШлях
    Машина станів, аудит, схвалення і відхиленняfeatures/news/services/news-promotion-workflow.ts
    Оцінювання через OpenRouter і цінаfeatures/news/services/news-scoring-service.ts
    Евристика дублікатівfeatures/news/services/news-duplicate-check.ts
    Фасад checkout (purpose: 'news_promotion')features/news/services/news-payment-service.ts
    Обробники webhook оплатиlib/payments/conductor/handlers/news-promotion.ts, news-promotion-paypal.ts
    Картка і клавіатура адміністратора в Telegramfeatures/news/services/news-telegram-approval.ts
    Обробка callback у Telegram (підключено з )

    Відомі прогалини

    Пов'язана документація

    Related documentation

    Member Blogs

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

    News Module

    Передумова: модуль новин, редактор і головна стрічка, куди News Kingdom просуває статті.

    PaymentConductor architecture

    Залежність: як маршрутизуються checkout news_promotion і його webhooks.

    Manage via Telegram

    Див. також: бот адміністратора з кнопками Approve, Reject і Counter.

    1. Документація
    2. /Архітектура
    3. /Архітектура News Kingdom

    Оновлено 1 жовт. 2026 р.6 хв прослуховування

    Архітектура News Kingdom

    Використовуйте вкладки Засновник / Розробник на бічній панелі документації, щоб відфільтрувати цю сторінку. Засновники бачать бізнес-процес і налаштування для оператора. Розробники бачать сервіси, маршрути, змінні середовища та локальний тестовий прогін.

    News Kingdom є шаром просування поверх модуля новин Ring. Учасники з роллю member або вищою пишуть статті, які розміщуються в їхньому особистому просторі за адресою /{username}/{slug}. Після цього автор може попросити місце в головній стрічці /news. Ring оцінює статтю, пропонує автору сплатити ціну, яка залежить від оцінки, і надсилає статтю адміністраторам платформи в Telegram для остаточного рішення «так» чи «ні».

    Кожен запит на просування проходить через одне поле статті, mainPageStatus:

    ЕтапЩо відбуваєтьсяmainPageStatus
    ПоданняАвтор просить розмістити статтю на головній сторінціsubmitted
    ОцінюванняAI або евристика оцінює етичність, спам, дублікати та цінністьai_scored
    Жорстке блокуванняЕтичність надто низька, ризик спаму чи дубліката надто високийpublished_blog_only
    ОплатаЦіну встановлено, відкривається checkout PaymentConductorpayment_pending
    ОплаченоWebhook підтверджує оплату, адміністратори отримують картку в Telegramawaiting_admin_approval
    СхваленоСтаття з'являється в головній стрічці для всього сайтуpublished_main
    ВідхиленоАдміністратор відмовляє. Стаття залишається в блозі автораrejected

    Чому це важливо для вашого клону

    • Учасники приносять контент і платять за охоплення. Ви ведете видання без найму редакції. Автори, які хочуть потрапити на першу сторінку, платять за це, а останнє редакційне слово залишається за вами.
    • Неякісне відсіюється першим. Спам, дублікати й дописи з низькою етичністю зупиняє оцінювання ще до оплати і до того, як адміністратор витратить на них час.
    • Ви схвалюєте з телефона. Кожне оплачене подання надходить вашим адміністраторам як повідомлення в Telegram із кнопками Approve, Reject, View і Counter.
    • Добрі матеріали окупаються. Коли адміністратор схвалює статтю учасника, Ring ставить у чергу нарахування винагороди автору й запускає переклади іншими мовами вашого клону.

    Блоги учасників

    Де стаття живе до просування: особиста URL-адреса автора.

    Модуль новин

    Головна стрічка, категорії, вподобання і редактор, яким користуються автори.

    PaymentConductor

    Карта модулів (перевірено в ring/web)

    АспектШлях
    Машина станів, аудит, схвалення і відхиленняfeatures/news/services/news-promotion-workflow.ts
    Оцінювання через OpenRouter і цінаfeatures/news/services/news-scoring-service.ts
    Евристика дублікатівfeatures/news/services/news-duplicate-check.ts
    Фасад checkout (purpose: 'news_promotion')features/news/services/news-payment-service.ts
    Обробники webhook оплатиlib/payments/conductor/handlers/news-promotion.ts, news-promotion-paypal.ts
    Картка і клавіатура адміністратора в Telegramfeatures/news/services/news-telegram-approval.ts
    Обробка callback у Telegram (підключено з )

    Відомі прогалини

    Пов'язана документація

    Related documentation

    Member Blogs

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

    News Module

    Передумова: модуль новин, редактор і головна стрічка, куди News Kingdom просуває статті.

    PaymentConductor architecture

    Залежність: як маршрутизуються checkout news_promotion і його webhooks.

    Manage via Telegram

    Див. також: бот адміністратора з кнопками Approve, Reject і Counter.

    1. Документація
    2. /Архітектура
    3. /Архітектура News Kingdom

    Оновлено 1 жовт. 2026 р.6 хв прослуховування

    Checkout, який стягує плату за просування через налаштований вами платіжний процесор.

    Керування через Telegram

    Бот адміністратора з кнопками схвалення.

    Від блогу учасника до головної сторінки

    Типові сценарії

    1. Громадська газета. Міський клон дозволяє місцевим учасникам публікуватися у своїх блогах і бере невелику плату за матеріали на першій сторінці. Адміністратори схвалюють найкращі з них у Telegram.
    2. Експертна мережа. Професійний клон тримає високу планку цінності: сильні статті отримують низьку ціну, а слабкі стають надто дорогими.
    3. Модерований центр кампаній. Клон громадського руху покладається на правила жорсткого блокування, тож спам ніколи не потрапляє в чергу адміністратора.

    Налаштування для оператора

    Ви встановлюєте ціни в гривнях через змінні середовища сервера. Якщо їх не задано, діють такі значення за замовчуванням:

    ПараметрЗа замовчуваннямЕфект
    Базова ціна50 UAHМінімальна ціна для статті з високою цінністю
    Масштаб2000 UAHНаскільки зростає ціна, коли цінність знижується
    Максимум5000 UAHВерхня межа ціни
    Поріг низької цінностіцінність нижче 0.25Ціна піднімається щонайменше до 4999 UAH
    Зустрічна пропозиція адміністратора+25%Кнопка Counter у Telegram встановлює нову суму, яку має сплатити автор
    lib/telegram/admin-bot/news-callback-handler.ts
    app/api/telegram/admin-bot/webhook/route.ts
    Інтерфейс просування для учасникаfeatures/news/components/news-promotion-panel.tsx на /my-news
    Типи статусів і полівfeatures/news/types/index.ts (MainPageStatus, NewsContentType, NewsVisibility)
    Мапер рядків JSONBlib/news/map-news-document.ts
    Бренд і абсолютні URLlib/site-branding.ts (localeBlogArticleUrl, absoluteSiteUrl)

    Маршрути

    Метод і шляхАвтентифікаціяПризначення
    POST /api/news/promotion/submitСесія, лише автор статтіПозначає promoteToMainPage, оцінює, відкриває checkout
    PATCH /api/news/promotion/submitЗаголовок x-news-promotion-secretDev або тест: позначити як оплачене і сповістити адміністраторів
    POST /api/payments/{wayforpay,stripe,paypal}/webhookПідпис процесораКанонічне підтвердження оплати
    POST /api/news/promotion/wayforpay-webhookPayload процесораЗастарілий делегат до канонічного webhook WayForPay
    POST /api/mcp/v1/news/[id]/{score,approve,reject,publish}Сервісний токен (withMcpGuard)Операції агентів і MCP над тим самим процесом

    Правила оцінювання

    scoreNewsForMainPage() викликає OpenRouter, коли задано OPENROUTER_API_KEY. Без ключа зберігаються евристичні значення за замовчуванням (ethics 0.7, spam 0.2, merit 0.5) і записується model: 'heuristic'.

    • Ризик дубліката: 0.95, якщо інша стаття має такий самий slug або siteWideSlug. 0.9, якщо опублікована стаття (серед перших 200) має такий самий заголовок.
    • Жорстке блокування: ethics < NEWS_ETHICS_MIN або spamRisk > NEWS_SPAM_MAX або duplicateRisk > NEWS_DUPLICATE_MAX. Результат: published_blog_only і жодного checkout.
    • Ціна: clamp(base, max, base + (1 - merit) * scale). Цінність нижче NEWS_MERIT_SOFT_REJECT піднімає ціну щонайменше до 4999. Низька цінність не змінює статус.

    Змінні середовища

    Жодного з ключів NEWS_* немає в env.local.template. Код читає їх із такими значеннями за замовчуванням.

    ЗміннаЗа замовчуваннямДе читається
    NEWS_PROMO_BASE_UAH / NEWS_PROMO_SCALE_UAH / NEWS_PROMO_MAX_UAH50 / 2000 / 5000news-scoring-service.ts
    NEWS_ETHICS_MIN / NEWS_SPAM_MAX / NEWS_DUPLICATE_MAX0.35 / 0.85 / 0.9news-scoring-service.ts
    NEWS_MERIT_SOFT_REJECT0.25оцінювання і процес просування
    OPENROUTER_API_KEY, OPENROUTER_MODEL_PRIMARY, OPENROUTER_MODEL_FALLBACKне заданоnews-scoring-service.ts
    PAYMENT_NEWS_PROCESSORрезервно PAYMENT_DEFAULT_PROCESSOR, потім wayforpaylib/payments/payment.config.ts
    NEWS_PROMOTION_WEBHOOK_SECRETне заданоPATCH /api/news/promotion/submit
    ADMIN_BOT_TOKENне заданоВідповіді на callback у Telegram

    Дані

    Усі чотири таблиці використовують документну модель JSONB (id, data jsonb, мітки часу) у data/schema.sql (сплощена v4.1.0): news, news_categories, news_likes, news_submission_audit. Кожен перехід дописує запис у data.mainPageStatusHistory і створює один рядок news_submission_audit. Файли data/migrations/002_news_content_schema.sql і 003_news_kingdom_upgrade.sql мають історичний характер. Нові інсталяції застосовують лише schema.sql.

    Побічні ефекти схвалення

    approveMainPagePublication() встановлює status: 'published' і visibility: 'site-wide'. Для матеріалів, написаних користувачами, далі в чергу ставиться enqueueRewardCreditAddEvent({ trigger: 'newsStoryApproved' }) і запускається generateArticleTranslations(). Отримувачі в Telegram: користувачі з роллю адміністратора платформи та заповненим communication.telegramId.

    Локальний тестовий прогін

    1. 1

      Застосуйте схему і створіть статтю учасника

      Застосуйте data/schema.sql і увійдіть як користувач із роллю member або вищою. Створіть статтю на /news/create. Вона отримує blogUsername і після публікації з'являється за адресою /{username}/{slug}.

    2. 2

      Подайте статтю на просування

      Відповідь містить status, aiScore і або переадресацію, або платіжні поля для checkout.

    3. 3

      Імітуйте оплату в dev

    4. 4

      Схваліть

      Натисніть Approve на картці в Telegram або викличте POST /api/mcp/v1/news/<id>/approve із сервісним токеном. Перевірте, що mainPageStatus має значення published_main і що існує рядок news_submission_audit.

    Checkout, який стягує плату за просування через налаштований вами платіжний процесор.

    Керування через Telegram

    Бот адміністратора з кнопками схвалення.

    Від блогу учасника до головної сторінки

    Типові сценарії

    1. Громадська газета. Міський клон дозволяє місцевим учасникам публікуватися у своїх блогах і бере невелику плату за матеріали на першій сторінці. Адміністратори схвалюють найкращі з них у Telegram.
    2. Експертна мережа. Професійний клон тримає високу планку цінності: сильні статті отримують низьку ціну, а слабкі стають надто дорогими.
    3. Модерований центр кампаній. Клон громадського руху покладається на правила жорсткого блокування, тож спам ніколи не потрапляє в чергу адміністратора.

    Налаштування для оператора

    Ви встановлюєте ціни в гривнях через змінні середовища сервера. Якщо їх не задано, діють такі значення за замовчуванням:

    ПараметрЗа замовчуваннямЕфект
    Базова ціна50 UAHМінімальна ціна для статті з високою цінністю
    Масштаб2000 UAHНаскільки зростає ціна, коли цінність знижується
    Максимум5000 UAHВерхня межа ціни
    Поріг низької цінностіцінність нижче 0.25Ціна піднімається щонайменше до 4999 UAH
    Зустрічна пропозиція адміністратора+25%Кнопка Counter у Telegram встановлює нову суму, яку має сплатити автор
    lib/telegram/admin-bot/news-callback-handler.ts
    app/api/telegram/admin-bot/webhook/route.ts
    Інтерфейс просування для учасникаfeatures/news/components/news-promotion-panel.tsx на /my-news
    Типи статусів і полівfeatures/news/types/index.ts (MainPageStatus, NewsContentType, NewsVisibility)
    Мапер рядків JSONBlib/news/map-news-document.ts
    Бренд і абсолютні URLlib/site-branding.ts (localeBlogArticleUrl, absoluteSiteUrl)

    Маршрути

    Метод і шляхАвтентифікаціяПризначення
    POST /api/news/promotion/submitСесія, лише автор статтіПозначає promoteToMainPage, оцінює, відкриває checkout
    PATCH /api/news/promotion/submitЗаголовок x-news-promotion-secretDev або тест: позначити як оплачене і сповістити адміністраторів
    POST /api/payments/{wayforpay,stripe,paypal}/webhookПідпис процесораКанонічне підтвердження оплати
    POST /api/news/promotion/wayforpay-webhookPayload процесораЗастарілий делегат до канонічного webhook WayForPay
    POST /api/mcp/v1/news/[id]/{score,approve,reject,publish}Сервісний токен (withMcpGuard)Операції агентів і MCP над тим самим процесом

    Правила оцінювання

    scoreNewsForMainPage() викликає OpenRouter, коли задано OPENROUTER_API_KEY. Без ключа зберігаються евристичні значення за замовчуванням (ethics 0.7, spam 0.2, merit 0.5) і записується model: 'heuristic'.

    • Ризик дубліката: 0.95, якщо інша стаття має такий самий slug або siteWideSlug. 0.9, якщо опублікована стаття (серед перших 200) має такий самий заголовок.
    • Жорстке блокування: ethics < NEWS_ETHICS_MIN або spamRisk > NEWS_SPAM_MAX або duplicateRisk > NEWS_DUPLICATE_MAX. Результат: published_blog_only і жодного checkout.
    • Ціна: clamp(base, max, base + (1 - merit) * scale). Цінність нижче NEWS_MERIT_SOFT_REJECT піднімає ціну щонайменше до 4999. Низька цінність не змінює статус.

    Змінні середовища

    Жодного з ключів NEWS_* немає в env.local.template. Код читає їх із такими значеннями за замовчуванням.

    ЗміннаЗа замовчуваннямДе читається
    NEWS_PROMO_BASE_UAH / NEWS_PROMO_SCALE_UAH / NEWS_PROMO_MAX_UAH50 / 2000 / 5000news-scoring-service.ts
    NEWS_ETHICS_MIN / NEWS_SPAM_MAX / NEWS_DUPLICATE_MAX0.35 / 0.85 / 0.9news-scoring-service.ts
    NEWS_MERIT_SOFT_REJECT0.25оцінювання і процес просування
    OPENROUTER_API_KEY, OPENROUTER_MODEL_PRIMARY, OPENROUTER_MODEL_FALLBACKне заданоnews-scoring-service.ts
    PAYMENT_NEWS_PROCESSORрезервно PAYMENT_DEFAULT_PROCESSOR, потім wayforpaylib/payments/payment.config.ts
    NEWS_PROMOTION_WEBHOOK_SECRETне заданоPATCH /api/news/promotion/submit
    ADMIN_BOT_TOKENне заданоВідповіді на callback у Telegram

    Дані

    Усі чотири таблиці використовують документну модель JSONB (id, data jsonb, мітки часу) у data/schema.sql (сплощена v4.1.0): news, news_categories, news_likes, news_submission_audit. Кожен перехід дописує запис у data.mainPageStatusHistory і створює один рядок news_submission_audit. Файли data/migrations/002_news_content_schema.sql і 003_news_kingdom_upgrade.sql мають історичний характер. Нові інсталяції застосовують лише schema.sql.

    Побічні ефекти схвалення

    approveMainPagePublication() встановлює status: 'published' і visibility: 'site-wide'. Для матеріалів, написаних користувачами, далі в чергу ставиться enqueueRewardCreditAddEvent({ trigger: 'newsStoryApproved' }) і запускається generateArticleTranslations(). Отримувачі в Telegram: користувачі з роллю адміністратора платформи та заповненим communication.telegramId.

    Локальний тестовий прогін

    1. 1

      Застосуйте схему і створіть статтю учасника

      Застосуйте data/schema.sql і увійдіть як користувач із роллю member або вищою. Створіть статтю на /news/create. Вона отримує blogUsername і після публікації з'являється за адресою /{username}/{slug}.

    2. 2

      Подайте статтю на просування

      Відповідь містить status, aiScore і або переадресацію, або платіжні поля для checkout.

    3. 3

      Імітуйте оплату в dev

    4. 4

      Схваліть

      Натисніть Approve на картці в Telegram або викличте POST /api/mcp/v1/news/<id>/approve із сервісним токеном. Перевірте, що mainPageStatus має значення published_main і що існує рядок news_submission_audit.

    Checkout, який стягує плату за просування через налаштований вами платіжний процесор.

    Керування через Telegram

    Бот адміністратора з кнопками схвалення.

    Від блогу учасника до головної сторінки

    Типові сценарії

    1. Громадська газета. Міський клон дозволяє місцевим учасникам публікуватися у своїх блогах і бере невелику плату за матеріали на першій сторінці. Адміністратори схвалюють найкращі з них у Telegram.
    2. Експертна мережа. Професійний клон тримає високу планку цінності: сильні статті отримують низьку ціну, а слабкі стають надто дорогими.
    3. Модерований центр кампаній. Клон громадського руху покладається на правила жорсткого блокування, тож спам ніколи не потрапляє в чергу адміністратора.

    Налаштування для оператора

    Ви встановлюєте ціни в гривнях через змінні середовища сервера. Якщо їх не задано, діють такі значення за замовчуванням:

    ПараметрЗа замовчуваннямЕфект
    Базова ціна50 UAHМінімальна ціна для статті з високою цінністю
    Масштаб2000 UAHНаскільки зростає ціна, коли цінність знижується
    Максимум5000 UAHВерхня межа ціни
    Поріг низької цінностіцінність нижче 0.25Ціна піднімається щонайменше до 4999 UAH
    Зустрічна пропозиція адміністратора+25%Кнопка Counter у Telegram встановлює нову суму, яку має сплатити автор
    lib/telegram/admin-bot/news-callback-handler.ts
    app/api/telegram/admin-bot/webhook/route.ts
    Інтерфейс просування для учасникаfeatures/news/components/news-promotion-panel.tsx на /my-news
    Типи статусів і полівfeatures/news/types/index.ts (MainPageStatus, NewsContentType, NewsVisibility)
    Мапер рядків JSONBlib/news/map-news-document.ts
    Бренд і абсолютні URLlib/site-branding.ts (localeBlogArticleUrl, absoluteSiteUrl)

    Маршрути

    Метод і шляхАвтентифікаціяПризначення
    POST /api/news/promotion/submitСесія, лише автор статтіПозначає promoteToMainPage, оцінює, відкриває checkout
    PATCH /api/news/promotion/submitЗаголовок x-news-promotion-secretDev або тест: позначити як оплачене і сповістити адміністраторів
    POST /api/payments/{wayforpay,stripe,paypal}/webhookПідпис процесораКанонічне підтвердження оплати
    POST /api/news/promotion/wayforpay-webhookPayload процесораЗастарілий делегат до канонічного webhook WayForPay
    POST /api/mcp/v1/news/[id]/{score,approve,reject,publish}Сервісний токен (withMcpGuard)Операції агентів і MCP над тим самим процесом

    Правила оцінювання

    scoreNewsForMainPage() викликає OpenRouter, коли задано OPENROUTER_API_KEY. Без ключа зберігаються евристичні значення за замовчуванням (ethics 0.7, spam 0.2, merit 0.5) і записується model: 'heuristic'.

    • Ризик дубліката: 0.95, якщо інша стаття має такий самий slug або siteWideSlug. 0.9, якщо опублікована стаття (серед перших 200) має такий самий заголовок.
    • Жорстке блокування: ethics < NEWS_ETHICS_MIN або spamRisk > NEWS_SPAM_MAX або duplicateRisk > NEWS_DUPLICATE_MAX. Результат: published_blog_only і жодного checkout.
    • Ціна: clamp(base, max, base + (1 - merit) * scale). Цінність нижче NEWS_MERIT_SOFT_REJECT піднімає ціну щонайменше до 4999. Низька цінність не змінює статус.

    Змінні середовища

    Жодного з ключів NEWS_* немає в env.local.template. Код читає їх із такими значеннями за замовчуванням.

    ЗміннаЗа замовчуваннямДе читається
    NEWS_PROMO_BASE_UAH / NEWS_PROMO_SCALE_UAH / NEWS_PROMO_MAX_UAH50 / 2000 / 5000news-scoring-service.ts
    NEWS_ETHICS_MIN / NEWS_SPAM_MAX / NEWS_DUPLICATE_MAX0.35 / 0.85 / 0.9news-scoring-service.ts
    NEWS_MERIT_SOFT_REJECT0.25оцінювання і процес просування
    OPENROUTER_API_KEY, OPENROUTER_MODEL_PRIMARY, OPENROUTER_MODEL_FALLBACKне заданоnews-scoring-service.ts
    PAYMENT_NEWS_PROCESSORрезервно PAYMENT_DEFAULT_PROCESSOR, потім wayforpaylib/payments/payment.config.ts
    NEWS_PROMOTION_WEBHOOK_SECRETне заданоPATCH /api/news/promotion/submit
    ADMIN_BOT_TOKENне заданоВідповіді на callback у Telegram

    Дані

    Усі чотири таблиці використовують документну модель JSONB (id, data jsonb, мітки часу) у data/schema.sql (сплощена v4.1.0): news, news_categories, news_likes, news_submission_audit. Кожен перехід дописує запис у data.mainPageStatusHistory і створює один рядок news_submission_audit. Файли data/migrations/002_news_content_schema.sql і 003_news_kingdom_upgrade.sql мають історичний характер. Нові інсталяції застосовують лише schema.sql.

    Побічні ефекти схвалення

    approveMainPagePublication() встановлює status: 'published' і visibility: 'site-wide'. Для матеріалів, написаних користувачами, далі в чергу ставиться enqueueRewardCreditAddEvent({ trigger: 'newsStoryApproved' }) і запускається generateArticleTranslations(). Отримувачі в Telegram: користувачі з роллю адміністратора платформи та заповненим communication.telegramId.

    Локальний тестовий прогін

    1. 1

      Застосуйте схему і створіть статтю учасника

      Застосуйте data/schema.sql і увійдіть як користувач із роллю member або вищою. Створіть статтю на /news/create. Вона отримує blogUsername і після публікації з'являється за адресою /{username}/{slug}.

    2. 2

      Подайте статтю на просування

      Відповідь містить status, aiScore і або переадресацію, або платіжні поля для checkout.

    3. 3

      Імітуйте оплату в dev

    4. 4

      Схваліть

      Натисніть Approve на картці в Telegram або викличте POST /api/mcp/v1/news/<id>/approve із сервісним токеном. Перевірте, що mainPageStatus має значення published_main і що існує рядок news_submission_audit.