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

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

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

    Сторінки публічного профілю

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Персональні файлові медіа, mood audio та доступність peer-game — окремі маршрути під тим самим username; див. Ring File Cabinet і Peer Games. Телеметрія відвідувань приєднується до загальної аналітики Ring — див. Monitoring & Analytics.

    Кожен користувач із зарезервованим username може відкрити публічний профіль на /{username} (за потреби з префіксом locale). Сторінка рендериться сервером App Router із динамічними SEO-метаданими. Пов’язані публічні поверхні:

    URLПризначення
    /{username}Заголовок профілю, bio, NFT-лістинги, blog/staking, коли ввімкнено; записує personal_page_view для не-власників
    /{username}/imgLightbox галереї File Cabinet (visibility=public)
    /{username}/playerПублічний mood player (оболонка DaVinci + плейлисти у правій рейці)
    /{username}/gamesПублічна доступність peer-game («Play with me»)
    /profile/songsПриватне керування mood-player
    /profile/gamesПриватне керування Member для ввімкнених game slug

    Власники бачать віджет статистики відвідувань (унікальні відвідувачі за 24 год / 7 днів із розподілом за роллю відвідувача). Власні перегляди пропускаються, тому оновлення власної сторінки не завищує унікальні значення.

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

    Публічний профіль — це обличчя довіри учасника: хто він, що продає/виставляє, які медіа обирає показати і (через Peer Games) які безкоштовні мініігри приймає. Видимість головної сторінки сьогодні бінарна — приватні профілі повертають 404. Статистика унікальних відвідувань допомагає учасникам бачити, чи приваблює їхня сторінка гостей, subscriber або member, не враховуючи самих себе.

    Резервування username

    Спершу заявіть @handle — публічні маршрути розв’язуються через getUserByUsername.

    Галерея File Cabinet

    Власний менеджер member+ на /file-cabinet; публічні елементи — на /{username}/img.

    Peer Games

    Учасники вмикають slug на /profile/games; відвідувачі кидають виклик із //games.

    Карта маршрутів

    Шлях AppНотатки
    app/[locale]/[username]/page.tsxГоловний профіль; getUserByUsername; notFound() якщо відсутній / приватний; пропускає recordPersonalPageView, коли isOwner
    app/[locale]/[username]/img/page.tsxlistPublicGalleryByOwner + PublicProfileImgGallery
    app/[locale]/[username]/player/page.tsxPublicPlayerShell + сервіс mood-player
    app/[locale]/[username]/games/page.tsxПублічні ввімкнені slug + Play-with-me
    app/[locale]/(protected)/profile/songs/page.tsxАвтентифіковане керування mood-player
    app/[locale]/(protected)/profile/games/page.tsxДоступність game для автентифікованого Member

    Константи: ROUTES.PUBLIC_PROFILE_IMG, , , , , .

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

    Related documentation

    Profile Account Widgets

    Той самий процес: автентифіковані Professional-віджети /profile (Organization, tags, My CV) формують публічне обличчя довіри.

    Ring File Cabinet

    Наступний крок: /file-cabinet із гейтом member + упорядкування галереї; public /img для visibility=public.

    Monitoring & Analytics

    Залежність: personal_page_view приєднує first-party analytics_events і personalPages адміністратора.

    Peer Games

    Той самий процес: доступність public /{username}/games і керування Member на /profile/games.

    1. Документація
    2. /Функції
    3. /Сторінки публічного профілю

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

    Сторінки публічного профілю

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Персональні файлові медіа, mood audio та доступність peer-game — окремі маршрути під тим самим username; див. Ring File Cabinet і Peer Games. Телеметрія відвідувань приєднується до загальної аналітики Ring — див. Monitoring & Analytics.

    Кожен користувач із зарезервованим username може відкрити публічний профіль на /{username} (за потреби з префіксом locale). Сторінка рендериться сервером App Router із динамічними SEO-метаданими. Пов’язані публічні поверхні:

    URLПризначення
    /{username}Заголовок профілю, bio, NFT-лістинги, blog/staking, коли ввімкнено; записує personal_page_view для не-власників
    /{username}/imgLightbox галереї File Cabinet (visibility=public)
    /{username}/playerПублічний mood player (оболонка DaVinci + плейлисти у правій рейці)
    /{username}/gamesПублічна доступність peer-game («Play with me»)
    /profile/songsПриватне керування mood-player
    /profile/gamesПриватне керування Member для ввімкнених game slug

    Власники бачать віджет статистики відвідувань (унікальні відвідувачі за 24 год / 7 днів із розподілом за роллю відвідувача). Власні перегляди пропускаються, тому оновлення власної сторінки не завищує унікальні значення.

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

    Публічний профіль — це обличчя довіри учасника: хто він, що продає/виставляє, які медіа обирає показати і (через Peer Games) які безкоштовні мініігри приймає. Видимість головної сторінки сьогодні бінарна — приватні профілі повертають 404. Статистика унікальних відвідувань допомагає учасникам бачити, чи приваблює їхня сторінка гостей, subscriber або member, не враховуючи самих себе.

    Резервування username

    Спершу заявіть @handle — публічні маршрути розв’язуються через getUserByUsername.

    Галерея File Cabinet

    Власний менеджер member+ на /file-cabinet; публічні елементи — на /{username}/img.

    Peer Games

    Учасники вмикають slug на /profile/games; відвідувачі кидають виклик із //games.

    Карта маршрутів

    Шлях AppНотатки
    app/[locale]/[username]/page.tsxГоловний профіль; getUserByUsername; notFound() якщо відсутній / приватний; пропускає recordPersonalPageView, коли isOwner
    app/[locale]/[username]/img/page.tsxlistPublicGalleryByOwner + PublicProfileImgGallery
    app/[locale]/[username]/player/page.tsxPublicPlayerShell + сервіс mood-player
    app/[locale]/[username]/games/page.tsxПублічні ввімкнені slug + Play-with-me
    app/[locale]/(protected)/profile/songs/page.tsxАвтентифіковане керування mood-player
    app/[locale]/(protected)/profile/games/page.tsxДоступність game для автентифікованого Member

    Константи: ROUTES.PUBLIC_PROFILE_IMG, , , , , .

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

    Related documentation

    Profile Account Widgets

    Той самий процес: автентифіковані Professional-віджети /profile (Organization, tags, My CV) формують публічне обличчя довіри.

    Ring File Cabinet

    Наступний крок: /file-cabinet із гейтом member + упорядкування галереї; public /img для visibility=public.

    Monitoring & Analytics

    Залежність: personal_page_view приєднує first-party analytics_events і personalPages адміністратора.

    Peer Games

    Той самий процес: доступність public /{username}/games і керування Member на /profile/games.

    1. Документація
    2. /Функції
    3. /Сторінки публічного профілю

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

    Сторінки публічного профілю

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Персональні файлові медіа, mood audio та доступність peer-game — окремі маршрути під тим самим username; див. Ring File Cabinet і Peer Games. Телеметрія відвідувань приєднується до загальної аналітики Ring — див. Monitoring & Analytics.

    Кожен користувач із зарезервованим username може відкрити публічний профіль на /{username} (за потреби з префіксом locale). Сторінка рендериться сервером App Router із динамічними SEO-метаданими. Пов’язані публічні поверхні:

    URLПризначення
    /{username}Заголовок профілю, bio, NFT-лістинги, blog/staking, коли ввімкнено; записує personal_page_view для не-власників
    /{username}/imgLightbox галереї File Cabinet (visibility=public)
    /{username}/playerПублічний mood player (оболонка DaVinci + плейлисти у правій рейці)
    /{username}/gamesПублічна доступність peer-game («Play with me»)
    /profile/songsПриватне керування mood-player
    /profile/gamesПриватне керування Member для ввімкнених game slug

    Власники бачать віджет статистики відвідувань (унікальні відвідувачі за 24 год / 7 днів із розподілом за роллю відвідувача). Власні перегляди пропускаються, тому оновлення власної сторінки не завищує унікальні значення.

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

    Публічний профіль — це обличчя довіри учасника: хто він, що продає/виставляє, які медіа обирає показати і (через Peer Games) які безкоштовні мініігри приймає. Видимість головної сторінки сьогодні бінарна — приватні профілі повертають 404. Статистика унікальних відвідувань допомагає учасникам бачити, чи приваблює їхня сторінка гостей, subscriber або member, не враховуючи самих себе.

    Резервування username

    Спершу заявіть @handle — публічні маршрути розв’язуються через getUserByUsername.

    Галерея File Cabinet

    Власний менеджер member+ на /file-cabinet; публічні елементи — на /{username}/img.

    Peer Games

    Учасники вмикають slug на /profile/games; відвідувачі кидають виклик із //games.

    Карта маршрутів

    Шлях AppНотатки
    app/[locale]/[username]/page.tsxГоловний профіль; getUserByUsername; notFound() якщо відсутній / приватний; пропускає recordPersonalPageView, коли isOwner
    app/[locale]/[username]/img/page.tsxlistPublicGalleryByOwner + PublicProfileImgGallery
    app/[locale]/[username]/player/page.tsxPublicPlayerShell + сервіс mood-player
    app/[locale]/[username]/games/page.tsxПублічні ввімкнені slug + Play-with-me
    app/[locale]/(protected)/profile/songs/page.tsxАвтентифіковане керування mood-player
    app/[locale]/(protected)/profile/games/page.tsxДоступність game для автентифікованого Member

    Константи: ROUTES.PUBLIC_PROFILE_IMG, , , , , .

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

    Related documentation

    Profile Account Widgets

    Той самий процес: автентифіковані Professional-віджети /profile (Organization, tags, My CV) формують публічне обличчя довіри.

    Ring File Cabinet

    Наступний крок: /file-cabinet із гейтом member + упорядкування галереї; public /img для visibility=public.

    Monitoring & Analytics

    Залежність: personal_page_view приєднує first-party analytics_events і personalPages адміністратора.

    Peer Games

    Той самий процес: доступність public /{username}/games і керування Member на /profile/games.

    1. Документація
    2. /Функції
    3. /Сторінки публічного профілю

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

    Monitoring & Analytics

    Події personal_page_view потрапляють у analytics_events; адміністратори бачать personalPages на /admin/analytics.

    Чекліст оператора

    • Підтвердьте заявлений username і видимість «Personal page» у налаштуваннях профілю.
    • Перевірте /{username} як анонімний відвідувач — віджет власника має показати унікальне відвідування після звернення не-власника.
    • Підтвердьте, що перезавантаження власником не збільшує унікальні лічильники.
    • Керування власною галереєю залишається на /profile/gallery (member+).
    • CRUD приватних плейлистів залишається на /profile/songs.
    Детальні перемикачі контактів

    Окремі перемикачі публічності для кожного поля контакту (email, phone, social) ще не випущені — вважайте поточним гейтом перемикач personal-page.

    ROUTES.PUBLIC_PROFILE_PLAYER
    ROUTES.PUBLIC_PROFILE_GAMES
    ROUTES.PROFILE_SONGS
    ROUTES.PROFILE_GAMES
    ROUTES.PROFILE_GALLERY

    Аналітика відвідувань personal page (випущено)

    ПитанняШлях
    Тип подіїpersonal_page_view → analytics_events через insertAnalyticsEventBatch
    Реєстраторfeatures/analytics/lib/personal-page-analytics.ts → recordPersonalPageView
    Пропуск власникаСторінка: if (isOwner) return перед записом; recorder: пропуск коли visitorUserId === profileUserId
    SSOT типівfeatures/analytics/types/personal-page.ts (PersonalPageVisitStats, рольові buckets)
    Action віджета власникаgetPersonalPageViewStats у features/auth/services/personal-page-stats.ts (власник або platform admin)
    UI віджетаfeatures/auth/components/personal-page-widget.tsx
    Зведення для адмінаgetPersonalPagePlatformStats → PlatformAnalyticsSummary.personalPages на /admin/analytics
    Приєднання engagementanalytics-db.ts включає personal_page_view разом із docs_page_view / page_view / app_load у агрегатах pageViews
    Kill switchANALYTICS_DISABLE_STORAGE=true — recorder нічого не робить

    Форма статистики: unique24h / unique7d, visits24h / visits7d, byRole24h / byRole7d (унікальні + відвідування за роллю). Для ідентичності відвідувача надається перевага user id, потім session key, потім anon IP.

    Пошук identity

    features/auth/services/get-user-by-username.ts — кешований через cache() queryDocs у users з регістронезалежним username.

    Що є на головному профілі (перевірена поверхня)

    • Avatar (photoURL), ім’я, @username, bio
    • Кнопка повідомлення для автентифікованих відвідувачів (не для себе)
    • Значок верифікації Telegram, коли підтверджено
    • NFT-лістинги через public GET /api/nft-market/listings?username=…
    • Розділи Blog / staking, коли це дозволяють product flags і дані
    • Посилання в header/nav на Player, Games і Gallery
    • Віджет статистики відвідувань власника (коли показано owner chrome)

    Видимість

    Користувачі керують публічною видимістю через процес username / personal-page. Public → сторінка рендериться; Private → маршрут повертає 404.

    Пов’язані API (суміжні з профілем)

    EndpointПризначення
    GET /api/auth/check-usernameДоступність
    GET /api/nft-market/listings?username=Публічні лістинги
    POST /api/auth/telegram/callbackCallback верифікації Telegram

    Дані галереї File Cabinet — це не окремий публічний REST-список: сторінка img читає їх через listPublicGalleryByOwner. Доступність peer-game використовує user_peer_games (міграція 043_peer_games.sql).

    Username Reservation System

    Передумова: зарезервований username потрібен перед розв’язанням публічних маршрутів /{username}.

    Member Blogs

    Той самий процес: секція blog у профілі, коли membership активний.

    NFT Exhibition Marketplace

    Див. також: публічна NFT-сітка ProfileListings на сторінці профілю.

    Ring CDN (RingFileBase edge)

    Залежність: зображення публічної галереї використовують URL CDN /files/{uuid}.

    Monitoring & Analytics

    Події personal_page_view потрапляють у analytics_events; адміністратори бачать personalPages на /admin/analytics.

    Чекліст оператора

    • Підтвердьте заявлений username і видимість «Personal page» у налаштуваннях профілю.
    • Перевірте /{username} як анонімний відвідувач — віджет власника має показати унікальне відвідування після звернення не-власника.
    • Підтвердьте, що перезавантаження власником не збільшує унікальні лічильники.
    • Керування власною галереєю залишається на /profile/gallery (member+).
    • CRUD приватних плейлистів залишається на /profile/songs.
    Детальні перемикачі контактів

    Окремі перемикачі публічності для кожного поля контакту (email, phone, social) ще не випущені — вважайте поточним гейтом перемикач personal-page.

    ROUTES.PUBLIC_PROFILE_PLAYER
    ROUTES.PUBLIC_PROFILE_GAMES
    ROUTES.PROFILE_SONGS
    ROUTES.PROFILE_GAMES
    ROUTES.PROFILE_GALLERY

    Аналітика відвідувань personal page (випущено)

    ПитанняШлях
    Тип подіїpersonal_page_view → analytics_events через insertAnalyticsEventBatch
    Реєстраторfeatures/analytics/lib/personal-page-analytics.ts → recordPersonalPageView
    Пропуск власникаСторінка: if (isOwner) return перед записом; recorder: пропуск коли visitorUserId === profileUserId
    SSOT типівfeatures/analytics/types/personal-page.ts (PersonalPageVisitStats, рольові buckets)
    Action віджета власникаgetPersonalPageViewStats у features/auth/services/personal-page-stats.ts (власник або platform admin)
    UI віджетаfeatures/auth/components/personal-page-widget.tsx
    Зведення для адмінаgetPersonalPagePlatformStats → PlatformAnalyticsSummary.personalPages на /admin/analytics
    Приєднання engagementanalytics-db.ts включає personal_page_view разом із docs_page_view / page_view / app_load у агрегатах pageViews
    Kill switchANALYTICS_DISABLE_STORAGE=true — recorder нічого не робить

    Форма статистики: unique24h / unique7d, visits24h / visits7d, byRole24h / byRole7d (унікальні + відвідування за роллю). Для ідентичності відвідувача надається перевага user id, потім session key, потім anon IP.

    Пошук identity

    features/auth/services/get-user-by-username.ts — кешований через cache() queryDocs у users з регістронезалежним username.

    Що є на головному профілі (перевірена поверхня)

    • Avatar (photoURL), ім’я, @username, bio
    • Кнопка повідомлення для автентифікованих відвідувачів (не для себе)
    • Значок верифікації Telegram, коли підтверджено
    • NFT-лістинги через public GET /api/nft-market/listings?username=…
    • Розділи Blog / staking, коли це дозволяють product flags і дані
    • Посилання в header/nav на Player, Games і Gallery
    • Віджет статистики відвідувань власника (коли показано owner chrome)

    Видимість

    Користувачі керують публічною видимістю через процес username / personal-page. Public → сторінка рендериться; Private → маршрут повертає 404.

    Пов’язані API (суміжні з профілем)

    EndpointПризначення
    GET /api/auth/check-usernameДоступність
    GET /api/nft-market/listings?username=Публічні лістинги
    POST /api/auth/telegram/callbackCallback верифікації Telegram

    Дані галереї File Cabinet — це не окремий публічний REST-список: сторінка img читає їх через listPublicGalleryByOwner. Доступність peer-game використовує user_peer_games (міграція 043_peer_games.sql).

    Username Reservation System

    Передумова: зарезервований username потрібен перед розв’язанням публічних маршрутів /{username}.

    Member Blogs

    Той самий процес: секція blog у профілі, коли membership активний.

    NFT Exhibition Marketplace

    Див. також: публічна NFT-сітка ProfileListings на сторінці профілю.

    Ring CDN (RingFileBase edge)

    Залежність: зображення публічної галереї використовують URL CDN /files/{uuid}.

    Monitoring & Analytics

    Події personal_page_view потрапляють у analytics_events; адміністратори бачать personalPages на /admin/analytics.

    Чекліст оператора

    • Підтвердьте заявлений username і видимість «Personal page» у налаштуваннях профілю.
    • Перевірте /{username} як анонімний відвідувач — віджет власника має показати унікальне відвідування після звернення не-власника.
    • Підтвердьте, що перезавантаження власником не збільшує унікальні лічильники.
    • Керування власною галереєю залишається на /profile/gallery (member+).
    • CRUD приватних плейлистів залишається на /profile/songs.
    Детальні перемикачі контактів

    Окремі перемикачі публічності для кожного поля контакту (email, phone, social) ще не випущені — вважайте поточним гейтом перемикач personal-page.

    ROUTES.PUBLIC_PROFILE_PLAYER
    ROUTES.PUBLIC_PROFILE_GAMES
    ROUTES.PROFILE_SONGS
    ROUTES.PROFILE_GAMES
    ROUTES.PROFILE_GALLERY

    Аналітика відвідувань personal page (випущено)

    ПитанняШлях
    Тип подіїpersonal_page_view → analytics_events через insertAnalyticsEventBatch
    Реєстраторfeatures/analytics/lib/personal-page-analytics.ts → recordPersonalPageView
    Пропуск власникаСторінка: if (isOwner) return перед записом; recorder: пропуск коли visitorUserId === profileUserId
    SSOT типівfeatures/analytics/types/personal-page.ts (PersonalPageVisitStats, рольові buckets)
    Action віджета власникаgetPersonalPageViewStats у features/auth/services/personal-page-stats.ts (власник або platform admin)
    UI віджетаfeatures/auth/components/personal-page-widget.tsx
    Зведення для адмінаgetPersonalPagePlatformStats → PlatformAnalyticsSummary.personalPages на /admin/analytics
    Приєднання engagementanalytics-db.ts включає personal_page_view разом із docs_page_view / page_view / app_load у агрегатах pageViews
    Kill switchANALYTICS_DISABLE_STORAGE=true — recorder нічого не робить

    Форма статистики: unique24h / unique7d, visits24h / visits7d, byRole24h / byRole7d (унікальні + відвідування за роллю). Для ідентичності відвідувача надається перевага user id, потім session key, потім anon IP.

    Пошук identity

    features/auth/services/get-user-by-username.ts — кешований через cache() queryDocs у users з регістронезалежним username.

    Що є на головному профілі (перевірена поверхня)

    • Avatar (photoURL), ім’я, @username, bio
    • Кнопка повідомлення для автентифікованих відвідувачів (не для себе)
    • Значок верифікації Telegram, коли підтверджено
    • NFT-лістинги через public GET /api/nft-market/listings?username=…
    • Розділи Blog / staking, коли це дозволяють product flags і дані
    • Посилання в header/nav на Player, Games і Gallery
    • Віджет статистики відвідувань власника (коли показано owner chrome)

    Видимість

    Користувачі керують публічною видимістю через процес username / personal-page. Public → сторінка рендериться; Private → маршрут повертає 404.

    Пов’язані API (суміжні з профілем)

    EndpointПризначення
    GET /api/auth/check-usernameДоступність
    GET /api/nft-market/listings?username=Публічні лістинги
    POST /api/auth/telegram/callbackCallback верифікації Telegram

    Дані галереї File Cabinet — це не окремий публічний REST-список: сторінка img читає їх через listPublicGalleryByOwner. Доступність peer-game використовує user_peer_games (міграція 043_peer_games.sql).

    Username Reservation System

    Передумова: зарезервований username потрібен перед розв’язанням публічних маршрутів /{username}.

    Member Blogs

    Той самий процес: секція blog у профілі, коли membership активний.

    NFT Exhibition Marketplace

    Див. також: публічна NFT-сітка ProfileListings на сторінці профілю.

    Ring CDN (RingFileBase edge)

    Залежність: зображення публічної галереї використовують URL CDN /files/{uuid}.