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

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

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

    Documentation

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

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    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
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    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
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    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

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

    Зміна URL: статті учасників тепер розміщуються за адресою /{username}/{slug}, поруч із профілем учасника на /{username}. Старого шаблону /blog/{username}/{slug} більше немає, і маршруту /blog не існує. Використовуйте вкладки Засновник / Розробник на бічній панелі, щоб відфільтрувати цю сторінку.

    Блоги учасників перетворюють модуль новин вашого клону на простір для публікацій кожного учасника. Статті зберігаються в тій самій таблиці news, що й офіційні новини, позначаються іменем автора і віддаються за власною URL-адресою автора. Якщо автор хоче потрапити в головну стрічку, він подає запит на просування, і стаття потрапляє в конвеєр News Kingdom.

    Раніше в документаціїПоточна поведінка
    /blog/{username} і /blog/{username}/{slug}/{username} (профіль) і /{username}/{slug} (стаття)
    Платне членство відкриває блогДля написання потрібна роль member або вища. Платне підвищення членства надає роль member
    Профіль показує посилання на блог і значок TelegramУ поточній сторінці профілю цього немає. Автори діляться посиланням із /my-news
    Без членства маршрут блогу повертає 404Стаття повертає 404, якщо вона не опублікована, ім'я або slug не збігаються чи мова відрізняється

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

    • Учасники стають авторами. Кожен платний учасник отримує особистий простір із чистою URL-адресою під вашим доменом, якою зручно ділитися.
    • Одна ідентичність. Те саме ім'я користувача об'єднує профіль, статті та список статей автора.
    • Контентна воронка під вашим контролем. Добрі дописи можна за плату просунути на першу сторінку. Кожен із них схвалюєте ви.
    • Читачі допомагають покращувати дописи. Інші учасники можуть пропонувати редакції. Автор вирішує, що прийняти.

    News Kingdom

    Оцінювання, платне просування і схвалення в Telegram для головної стрічки.

    Публічний профіль

    Сторінка /{username}, розташована поруч зі статтями учасника.

    Резервування імен користувачів

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

    АспектШлях
    Сторінка статтіapp/[locale]/[username]/[slug]/page.tsx
    Сторінка профілюapp/[locale]/[username]/page.tsx
    Список статей автораapp/[locale]/news/author/[username]/page.tsx (до 50 опублікованих, через getMyArticles)
    Редактор учасникаapp/[locale]/(protected)/news/create/page.tsx (ArticleEditor audience="member")
    Робочий простір учасникаapp/[locale]/(protected)/my-news/ з components/layout/rails/my-news-rail.tsx
    Вхідні пропозиції редакцій/my-news/{articleId}/amendments (ROUTES.MY_NEWS_AMENDMENTS)
    Хелпери імен і шляхів (, , )

    Поширені запитання

    Міграція

    Чи працюватимуть старі посилання /blog?

    Ні. У ring/web немає ні маршруту /blog, ні переадресації. Оновіть поширені посилання на /{username}/{slug}.

    Вплив

    Чи можуть читачі додавати статті учасників у закладки?

    Вибране працює через GET і POST /api/user/favorites з хуком useContentFavorite. Цей хук підключено до перегляду новинної статті (components/wrappers/news-article-wrapper.tsx), а не до сторінки /{username}/{slug}.

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

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

    Related documentation

    News Kingdom architecture

    Наступний крок: що відбувається після того, як автор подає запит на просування на головну сторінку.

    News Module

    Передумова: модуль новин, який зберігає і відображає статті учасників.

    Public Profile Pages

    Той самий процес: сторінка /{username}, яка використовує те саме ім'я учасника.

    Username Reservation System

    Залежність: як обираються і захищаються імена, від яких залежать URL блогів.

    1. Документація
    2. /Функції
    3. /Блоги учасників

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

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

    Зміна URL: статті учасників тепер розміщуються за адресою /{username}/{slug}, поруч із профілем учасника на /{username}. Старого шаблону /blog/{username}/{slug} більше немає, і маршруту /blog не існує. Використовуйте вкладки Засновник / Розробник на бічній панелі, щоб відфільтрувати цю сторінку.

    Блоги учасників перетворюють модуль новин вашого клону на простір для публікацій кожного учасника. Статті зберігаються в тій самій таблиці news, що й офіційні новини, позначаються іменем автора і віддаються за власною URL-адресою автора. Якщо автор хоче потрапити в головну стрічку, він подає запит на просування, і стаття потрапляє в конвеєр News Kingdom.

    Раніше в документаціїПоточна поведінка
    /blog/{username} і /blog/{username}/{slug}/{username} (профіль) і /{username}/{slug} (стаття)
    Платне членство відкриває блогДля написання потрібна роль member або вища. Платне підвищення членства надає роль member
    Профіль показує посилання на блог і значок TelegramУ поточній сторінці профілю цього немає. Автори діляться посиланням із /my-news
    Без членства маршрут блогу повертає 404Стаття повертає 404, якщо вона не опублікована, ім'я або slug не збігаються чи мова відрізняється

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

    • Учасники стають авторами. Кожен платний учасник отримує особистий простір із чистою URL-адресою під вашим доменом, якою зручно ділитися.
    • Одна ідентичність. Те саме ім'я користувача об'єднує профіль, статті та список статей автора.
    • Контентна воронка під вашим контролем. Добрі дописи можна за плату просунути на першу сторінку. Кожен із них схвалюєте ви.
    • Читачі допомагають покращувати дописи. Інші учасники можуть пропонувати редакції. Автор вирішує, що прийняти.

    News Kingdom

    Оцінювання, платне просування і схвалення в Telegram для головної стрічки.

    Публічний профіль

    Сторінка /{username}, розташована поруч зі статтями учасника.

    Резервування імен користувачів

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

    АспектШлях
    Сторінка статтіapp/[locale]/[username]/[slug]/page.tsx
    Сторінка профілюapp/[locale]/[username]/page.tsx
    Список статей автораapp/[locale]/news/author/[username]/page.tsx (до 50 опублікованих, через getMyArticles)
    Редактор учасникаapp/[locale]/(protected)/news/create/page.tsx (ArticleEditor audience="member")
    Робочий простір учасникаapp/[locale]/(protected)/my-news/ з components/layout/rails/my-news-rail.tsx
    Вхідні пропозиції редакцій/my-news/{articleId}/amendments (ROUTES.MY_NEWS_AMENDMENTS)
    Хелпери імен і шляхів (, , )

    Поширені запитання

    Міграція

    Чи працюватимуть старі посилання /blog?

    Ні. У ring/web немає ні маршруту /blog, ні переадресації. Оновіть поширені посилання на /{username}/{slug}.

    Вплив

    Чи можуть читачі додавати статті учасників у закладки?

    Вибране працює через GET і POST /api/user/favorites з хуком useContentFavorite. Цей хук підключено до перегляду новинної статті (components/wrappers/news-article-wrapper.tsx), а не до сторінки /{username}/{slug}.

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

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

    Related documentation

    News Kingdom architecture

    Наступний крок: що відбувається після того, як автор подає запит на просування на головну сторінку.

    News Module

    Передумова: модуль новин, який зберігає і відображає статті учасників.

    Public Profile Pages

    Той самий процес: сторінка /{username}, яка використовує те саме ім'я учасника.

    Username Reservation System

    Залежність: як обираються і захищаються імена, від яких залежать URL блогів.

    1. Документація
    2. /Функції
    3. /Блоги учасників

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

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

    Зміна URL: статті учасників тепер розміщуються за адресою /{username}/{slug}, поруч із профілем учасника на /{username}. Старого шаблону /blog/{username}/{slug} більше немає, і маршруту /blog не існує. Використовуйте вкладки Засновник / Розробник на бічній панелі, щоб відфільтрувати цю сторінку.

    Блоги учасників перетворюють модуль новин вашого клону на простір для публікацій кожного учасника. Статті зберігаються в тій самій таблиці news, що й офіційні новини, позначаються іменем автора і віддаються за власною URL-адресою автора. Якщо автор хоче потрапити в головну стрічку, він подає запит на просування, і стаття потрапляє в конвеєр News Kingdom.

    Раніше в документаціїПоточна поведінка
    /blog/{username} і /blog/{username}/{slug}/{username} (профіль) і /{username}/{slug} (стаття)
    Платне членство відкриває блогДля написання потрібна роль member або вища. Платне підвищення членства надає роль member
    Профіль показує посилання на блог і значок TelegramУ поточній сторінці профілю цього немає. Автори діляться посиланням із /my-news
    Без членства маршрут блогу повертає 404Стаття повертає 404, якщо вона не опублікована, ім'я або slug не збігаються чи мова відрізняється

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

    • Учасники стають авторами. Кожен платний учасник отримує особистий простір із чистою URL-адресою під вашим доменом, якою зручно ділитися.
    • Одна ідентичність. Те саме ім'я користувача об'єднує профіль, статті та список статей автора.
    • Контентна воронка під вашим контролем. Добрі дописи можна за плату просунути на першу сторінку. Кожен із них схвалюєте ви.
    • Читачі допомагають покращувати дописи. Інші учасники можуть пропонувати редакції. Автор вирішує, що прийняти.

    News Kingdom

    Оцінювання, платне просування і схвалення в Telegram для головної стрічки.

    Публічний профіль

    Сторінка /{username}, розташована поруч зі статтями учасника.

    Резервування імен користувачів

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

    АспектШлях
    Сторінка статтіapp/[locale]/[username]/[slug]/page.tsx
    Сторінка профілюapp/[locale]/[username]/page.tsx
    Список статей автораapp/[locale]/news/author/[username]/page.tsx (до 50 опублікованих, через getMyArticles)
    Редактор учасникаapp/[locale]/(protected)/news/create/page.tsx (ArticleEditor audience="member")
    Робочий простір учасникаapp/[locale]/(protected)/my-news/ з components/layout/rails/my-news-rail.tsx
    Вхідні пропозиції редакцій/my-news/{articleId}/amendments (ROUTES.MY_NEWS_AMENDMENTS)
    Хелпери імен і шляхів (, , )

    Поширені запитання

    Міграція

    Чи працюватимуть старі посилання /blog?

    Ні. У ring/web немає ні маршруту /blog, ні переадресації. Оновіть поширені посилання на /{username}/{slug}.

    Вплив

    Чи можуть читачі додавати статті учасників у закладки?

    Вибране працює через GET і POST /api/user/favorites з хуком useContentFavorite. Цей хук підключено до перегляду новинної статті (components/wrappers/news-article-wrapper.tsx), а не до сторінки /{username}/{slug}.

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

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

    Related documentation

    News Kingdom architecture

    Наступний крок: що відбувається після того, як автор подає запит на просування на головну сторінку.

    News Module

    Передумова: модуль новин, який зберігає і відображає статті учасників.

    Public Profile Pages

    Той самий процес: сторінка /{username}, яка використовує те саме ім'я учасника.

    Username Reservation System

    Залежність: як обираються і захищаються імена, від яких залежать URL блогів.

    1. Документація
    2. /Функції
    3. /Блоги учасників

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

    Імена визначають URL блогів, тому зарезервовані імена мають значення.

    Підписки

    Платний шлях, що підвищує користувача до ролі member.

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

    1. Експертна спільнота. Учасники пишуть розгорнуті дописи під власним іменем, а найкращі з них просуваються на першу сторінку.
    2. Кооперативна розсилка. Кожен виробник веде блог. Команда адміністраторів відбирає матеріали для головної стрічки.
    3. Стимул для членства. Безкоштовні користувачі можуть читати. Можливість писати є перевагою платного членства.

    Де працюють учасники

    РозділШлях
    Написати нову статтю/news/create
    Керувати, ділитися і просувати/my-news
    Публічна стаття/{username}/{slug}
    Усі статті одного автора/news/author/{username}
    lib/blog/blog-path.ts
    normalizeBlogHandle
    profileArticlePathname
    profileArticleHref
    Абсолютний URLlib/site-branding.ts localeBlogArticleUrl(locale, username, slug)
    Дія збереженняapp/_actions/news.ts
    Дозволиfeatures/news/lib/news-permissions.ts

    Як знаходиться стаття

    Сторінка статті шукає в news один рядок, що відповідає всім чотирьом фільтрам: blogUsername == normalizeBlogHandle(username), slug, locale і status == 'published'. Якщо жоден рядок не підходить, вона викликає notFound(), а метадані переходять на noindex. Імена зберігаються з початковим @, тому /en/alice/hello шукає blogUsername: '@alice'.

    blogUsername проставляється лише під час створення і лише тоді, коли користувач сесії має ім'я користувача. Статті, написані до того, як автор обрав ім'я, ніколи не отримують його, тому вони не відкриватимуться за адресою /{username}/{slug}. Для такого випадку панель /my-news показує підказку встановити ім'я користувача.

    Статичні маршрути, як-от /store, /news або /about, мають пріоритет над динамічним сегментом [username]. Ім'я користувача, що збігається зі статичним маршрутом, не може мати URL профілю.

    Дозволи

    ДіяПравило
    СтворенняcanCreateNewsArticle: роль member або вища, адміністратор платформи або confidential
    Редагування чи видаленняАдміністратор платформи або автор статті
    Видимість site-wideЛише адміністратори платформи. Учасники отримують її через схвалення просування
    Видимість confidentialЛише користувачі з конфіденційним доступом
    featuredПід час збереження примусово false для не-адміністраторів
    Запропонувати редакціюКористувач, який увійшов і не є автором, з canProposeRevision, для опублікованих статей

    Написання, публікація, просування

    1. 1

      Створення

      Учасник відкриває /news/create. Під час збереження app/_actions/news.ts записує статтю через createNewsArticle() з blogUsername і фіксує перший коміт версії (lib/versioning).

    2. 2

      Публікація та поширення

      Встановіть status: 'published'. Панель /my-news формує публічне посилання з ROUTES.PUBLIC_PROFILE(handle) і пропонує кнопку копіювання посилання.

    3. 3

      Просування (необов'язково)

      features/news/components/news-promotion-panel.tsx викликає POST /api/news/promotion/submit з { articleId }. Подавати може лише автор. Оцінювання, оплату і схвалення описано в News Kingdom.

    Кожен перегляд статті рахує recordArticlePageView() всередині after(), тому підрахунок ніколи не блокує рендеринг.

    Імена визначають URL блогів, тому зарезервовані імена мають значення.

    Підписки

    Платний шлях, що підвищує користувача до ролі member.

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

    1. Експертна спільнота. Учасники пишуть розгорнуті дописи під власним іменем, а найкращі з них просуваються на першу сторінку.
    2. Кооперативна розсилка. Кожен виробник веде блог. Команда адміністраторів відбирає матеріали для головної стрічки.
    3. Стимул для членства. Безкоштовні користувачі можуть читати. Можливість писати є перевагою платного членства.

    Де працюють учасники

    РозділШлях
    Написати нову статтю/news/create
    Керувати, ділитися і просувати/my-news
    Публічна стаття/{username}/{slug}
    Усі статті одного автора/news/author/{username}
    lib/blog/blog-path.ts
    normalizeBlogHandle
    profileArticlePathname
    profileArticleHref
    Абсолютний URLlib/site-branding.ts localeBlogArticleUrl(locale, username, slug)
    Дія збереженняapp/_actions/news.ts
    Дозволиfeatures/news/lib/news-permissions.ts

    Як знаходиться стаття

    Сторінка статті шукає в news один рядок, що відповідає всім чотирьом фільтрам: blogUsername == normalizeBlogHandle(username), slug, locale і status == 'published'. Якщо жоден рядок не підходить, вона викликає notFound(), а метадані переходять на noindex. Імена зберігаються з початковим @, тому /en/alice/hello шукає blogUsername: '@alice'.

    blogUsername проставляється лише під час створення і лише тоді, коли користувач сесії має ім'я користувача. Статті, написані до того, як автор обрав ім'я, ніколи не отримують його, тому вони не відкриватимуться за адресою /{username}/{slug}. Для такого випадку панель /my-news показує підказку встановити ім'я користувача.

    Статичні маршрути, як-от /store, /news або /about, мають пріоритет над динамічним сегментом [username]. Ім'я користувача, що збігається зі статичним маршрутом, не може мати URL профілю.

    Дозволи

    ДіяПравило
    СтворенняcanCreateNewsArticle: роль member або вища, адміністратор платформи або confidential
    Редагування чи видаленняАдміністратор платформи або автор статті
    Видимість site-wideЛише адміністратори платформи. Учасники отримують її через схвалення просування
    Видимість confidentialЛише користувачі з конфіденційним доступом
    featuredПід час збереження примусово false для не-адміністраторів
    Запропонувати редакціюКористувач, який увійшов і не є автором, з canProposeRevision, для опублікованих статей

    Написання, публікація, просування

    1. 1

      Створення

      Учасник відкриває /news/create. Під час збереження app/_actions/news.ts записує статтю через createNewsArticle() з blogUsername і фіксує перший коміт версії (lib/versioning).

    2. 2

      Публікація та поширення

      Встановіть status: 'published'. Панель /my-news формує публічне посилання з ROUTES.PUBLIC_PROFILE(handle) і пропонує кнопку копіювання посилання.

    3. 3

      Просування (необов'язково)

      features/news/components/news-promotion-panel.tsx викликає POST /api/news/promotion/submit з { articleId }. Подавати може лише автор. Оцінювання, оплату і схвалення описано в News Kingdom.

    Кожен перегляд статті рахує recordArticlePageView() всередині after(), тому підрахунок ніколи не блокує рендеринг.

    Імена визначають URL блогів, тому зарезервовані імена мають значення.

    Підписки

    Платний шлях, що підвищує користувача до ролі member.

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

    1. Експертна спільнота. Учасники пишуть розгорнуті дописи під власним іменем, а найкращі з них просуваються на першу сторінку.
    2. Кооперативна розсилка. Кожен виробник веде блог. Команда адміністраторів відбирає матеріали для головної стрічки.
    3. Стимул для членства. Безкоштовні користувачі можуть читати. Можливість писати є перевагою платного членства.

    Де працюють учасники

    РозділШлях
    Написати нову статтю/news/create
    Керувати, ділитися і просувати/my-news
    Публічна стаття/{username}/{slug}
    Усі статті одного автора/news/author/{username}
    lib/blog/blog-path.ts
    normalizeBlogHandle
    profileArticlePathname
    profileArticleHref
    Абсолютний URLlib/site-branding.ts localeBlogArticleUrl(locale, username, slug)
    Дія збереженняapp/_actions/news.ts
    Дозволиfeatures/news/lib/news-permissions.ts

    Як знаходиться стаття

    Сторінка статті шукає в news один рядок, що відповідає всім чотирьом фільтрам: blogUsername == normalizeBlogHandle(username), slug, locale і status == 'published'. Якщо жоден рядок не підходить, вона викликає notFound(), а метадані переходять на noindex. Імена зберігаються з початковим @, тому /en/alice/hello шукає blogUsername: '@alice'.

    blogUsername проставляється лише під час створення і лише тоді, коли користувач сесії має ім'я користувача. Статті, написані до того, як автор обрав ім'я, ніколи не отримують його, тому вони не відкриватимуться за адресою /{username}/{slug}. Для такого випадку панель /my-news показує підказку встановити ім'я користувача.

    Статичні маршрути, як-от /store, /news або /about, мають пріоритет над динамічним сегментом [username]. Ім'я користувача, що збігається зі статичним маршрутом, не може мати URL профілю.

    Дозволи

    ДіяПравило
    СтворенняcanCreateNewsArticle: роль member або вища, адміністратор платформи або confidential
    Редагування чи видаленняАдміністратор платформи або автор статті
    Видимість site-wideЛише адміністратори платформи. Учасники отримують її через схвалення просування
    Видимість confidentialЛише користувачі з конфіденційним доступом
    featuredПід час збереження примусово false для не-адміністраторів
    Запропонувати редакціюКористувач, який увійшов і не є автором, з canProposeRevision, для опублікованих статей

    Написання, публікація, просування

    1. 1

      Створення

      Учасник відкриває /news/create. Під час збереження app/_actions/news.ts записує статтю через createNewsArticle() з blogUsername і фіксує перший коміт версії (lib/versioning).

    2. 2

      Публікація та поширення

      Встановіть status: 'published'. Панель /my-news формує публічне посилання з ROUTES.PUBLIC_PROFILE(handle) і пропонує кнопку копіювання посилання.

    3. 3

      Просування (необов'язково)

      features/news/components/news-promotion-panel.tsx викликає POST /api/news/promotion/submit з { articleId }. Подавати може лише автор. Оцінювання, оплату і схвалення описано в News Kingdom.

    Кожен перегляд статті рахує recordArticlePageView() всередині after(), тому підрахунок ніколи не блокує рендеринг.