МожливостіСутності
Документація
    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


    title: Analytics API description: First-party аналітика Ring — інгест і адмін-читання: app-події, device telemetry, Web Vitals, захоплення помилок і platform stats через перевірені маршрути /api/analytics last_modified: "2026-09-06" audience: both

    Analytics API

    Використовуйте вкладки Founder / Developer у бічній панелі, щоб відфільтрувати цю сторінку. Поверхні адмін-консолі споживають ці маршрути; сторонні провайдери — опційні env-хуки.

    Ring постачає first-party аналітичний пайплайн: клієнтська телеметрія інгестується через /api/analytics/*, валідується Zod на межі маршруту, зберігається в analytics_events / web_vitals / analytics_errors і читається назад адмін-scoped GET-маршрутами. Зберігання можна повністю вимкнути на середовище — тоді кожен маршрут підтверджує без запису.

    Previous (GA-only setup)Ring equivalent
    Third-party SDK only, data leaves your cloneFirst-party інгест у вашу власну базу
    One opaque dashboardАдмін-scoped читання + platform stats з role gates
    No device/session contextБатчі sessionId, device telemetry з tunnel fan-out
    Web Vitals left unmeasuredІнгест Core Web Vitals + обчислений performanceScore

    Поверхня маршрутів

    EndpointMethodAuthPurpose
    /api/analytics/appPOSToptional userIdБатчовані app-події → analytics_events
    /api/analytics/devicePOSTsession requiredDevice telemetry → device_telemetry + fan-out у user tunnel
    /api/analytics/navigationPOST—Легкий acknowledgement stub (без зберігання)
    /api/analytics/errorsPOSToptional userIdЗахоплення клієнтських помилок → analytics_errors (відкладений запис)
    /api/analytics/errors

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

    • Ваші дані залишаються на вашому Ring. Інгест пише у вашу базу; нічого не йде до третьої сторони, доки ви самі не увімкнете env-хуки GA/Mixpanel/Amplitude.
    • Статистика адмін-консолі — platform counts і підсумки Web Vitals закриті role gate на platform admin.
    • Kill switch — ANALYTICS_DISABLE_STORAGE=true вимикає persistence без змін коду; endpoints продовжують відповідати.
    • Телеметрія docs і personal-page — platform summary також агрегує docs 404 і візити personal-page (getPlatformAnalytics).

    Опційні сторонні хуки (лише env)

    VariableProvider
    GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRETGoogle Analytics
    MIXPANEL_TOKENMixpanel
    AMPLITUDE_API_KEYAmplitude
    SENTRY_DSNSentry error tracking
    /

    Контракт інгесту

    Усі записи неблокуючі: валідація синхронна, потім persistence у Next.js after(), тож відповідь клієнту ніколи не затримується. Схема батчу (перевірено в features/analytics/lib/analytics-db.ts):

    Невалідні payload повертають 400 з першою Zod-проблемою. Батчі понад 50 подій відхиляються, а не тихо обрізаються.

    Куди пише кожен маршрут

    RouteValidation moduleStorage
    appappAnalyticsBatchSchemaanalytics_events
    devicedeviceTelemetryBodySchema (device-telemetry-db.ts)device telemetry + publishToUserTunnel через telemetryChannelForDomain
    errorsanalyticsErrorPayloadSchemaanalytics_errors (userId збагачується всередині after())

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

    VariableDefaultEffect
    ANALYTICS_DISABLE_STORAGEunset"true" підтверджує події без запису в базу

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

    Related documentation

    Admin API

    Next-step: адмін-scoped API-маршрути та RBAC-патерни після інгесту аналітики.

    Performance Optimization Patterns

    Same-workflow: телеметрія Web Vitals живить сторінки performance.

    Data Validation

    Deep-dive: Zod-охоронці межі маршруту, які використовує кожен інгест-маршрут.

    1. Документація
    2. /API-інтерфейс
    3. /Analytics

    4 хв прослуховування


    title: Analytics API description: First-party аналітика Ring — інгест і адмін-читання: app-події, device telemetry, Web Vitals, захоплення помилок і platform stats через перевірені маршрути /api/analytics last_modified: "2026-09-06" audience: both

    Analytics API

    Використовуйте вкладки Founder / Developer у бічній панелі, щоб відфільтрувати цю сторінку. Поверхні адмін-консолі споживають ці маршрути; сторонні провайдери — опційні env-хуки.

    Ring постачає first-party аналітичний пайплайн: клієнтська телеметрія інгестується через /api/analytics/*, валідується Zod на межі маршруту, зберігається в analytics_events / web_vitals / analytics_errors і читається назад адмін-scoped GET-маршрутами. Зберігання можна повністю вимкнути на середовище — тоді кожен маршрут підтверджує без запису.

    Previous (GA-only setup)Ring equivalent
    Third-party SDK only, data leaves your cloneFirst-party інгест у вашу власну базу
    One opaque dashboardАдмін-scoped читання + platform stats з role gates
    No device/session contextБатчі sessionId, device telemetry з tunnel fan-out
    Web Vitals left unmeasuredІнгест Core Web Vitals + обчислений performanceScore

    Поверхня маршрутів

    EndpointMethodAuthPurpose
    /api/analytics/appPOSToptional userIdБатчовані app-події → analytics_events
    /api/analytics/devicePOSTsession requiredDevice telemetry → device_telemetry + fan-out у user tunnel
    /api/analytics/navigationPOST—Легкий acknowledgement stub (без зберігання)
    /api/analytics/errorsPOSToptional userIdЗахоплення клієнтських помилок → analytics_errors (відкладений запис)
    /api/analytics/errors

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

    • Ваші дані залишаються на вашому Ring. Інгест пише у вашу базу; нічого не йде до третьої сторони, доки ви самі не увімкнете env-хуки GA/Mixpanel/Amplitude.
    • Статистика адмін-консолі — platform counts і підсумки Web Vitals закриті role gate на platform admin.
    • Kill switch — ANALYTICS_DISABLE_STORAGE=true вимикає persistence без змін коду; endpoints продовжують відповідати.
    • Телеметрія docs і personal-page — platform summary також агрегує docs 404 і візити personal-page (getPlatformAnalytics).

    Опційні сторонні хуки (лише env)

    VariableProvider
    GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRETGoogle Analytics
    MIXPANEL_TOKENMixpanel
    AMPLITUDE_API_KEYAmplitude
    SENTRY_DSNSentry error tracking
    /

    Контракт інгесту

    Усі записи неблокуючі: валідація синхронна, потім persistence у Next.js after(), тож відповідь клієнту ніколи не затримується. Схема батчу (перевірено в features/analytics/lib/analytics-db.ts):

    Невалідні payload повертають 400 з першою Zod-проблемою. Батчі понад 50 подій відхиляються, а не тихо обрізаються.

    Куди пише кожен маршрут

    RouteValidation moduleStorage
    appappAnalyticsBatchSchemaanalytics_events
    devicedeviceTelemetryBodySchema (device-telemetry-db.ts)device telemetry + publishToUserTunnel через telemetryChannelForDomain
    errorsanalyticsErrorPayloadSchemaanalytics_errors (userId збагачується всередині after())

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

    VariableDefaultEffect
    ANALYTICS_DISABLE_STORAGEunset"true" підтверджує події без запису в базу

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

    Related documentation

    Admin API

    Next-step: адмін-scoped API-маршрути та RBAC-патерни після інгесту аналітики.

    Performance Optimization Patterns

    Same-workflow: телеметрія Web Vitals живить сторінки performance.

    Data Validation

    Deep-dive: Zod-охоронці межі маршруту, які використовує кожен інгест-маршрут.

    1. Документація
    2. /API-інтерфейс
    3. /Analytics

    4 хв прослуховування


    title: Analytics API description: First-party аналітика Ring — інгест і адмін-читання: app-події, device telemetry, Web Vitals, захоплення помилок і platform stats через перевірені маршрути /api/analytics last_modified: "2026-09-06" audience: both

    Analytics API

    Використовуйте вкладки Founder / Developer у бічній панелі, щоб відфільтрувати цю сторінку. Поверхні адмін-консолі споживають ці маршрути; сторонні провайдери — опційні env-хуки.

    Ring постачає first-party аналітичний пайплайн: клієнтська телеметрія інгестується через /api/analytics/*, валідується Zod на межі маршруту, зберігається в analytics_events / web_vitals / analytics_errors і читається назад адмін-scoped GET-маршрутами. Зберігання можна повністю вимкнути на середовище — тоді кожен маршрут підтверджує без запису.

    Previous (GA-only setup)Ring equivalent
    Third-party SDK only, data leaves your cloneFirst-party інгест у вашу власну базу
    One opaque dashboardАдмін-scoped читання + platform stats з role gates
    No device/session contextБатчі sessionId, device telemetry з tunnel fan-out
    Web Vitals left unmeasuredІнгест Core Web Vitals + обчислений performanceScore

    Поверхня маршрутів

    EndpointMethodAuthPurpose
    /api/analytics/appPOSToptional userIdБатчовані app-події → analytics_events
    /api/analytics/devicePOSTsession requiredDevice telemetry → device_telemetry + fan-out у user tunnel
    /api/analytics/navigationPOST—Легкий acknowledgement stub (без зберігання)
    /api/analytics/errorsPOSToptional userIdЗахоплення клієнтських помилок → analytics_errors (відкладений запис)
    /api/analytics/errors

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

    • Ваші дані залишаються на вашому Ring. Інгест пише у вашу базу; нічого не йде до третьої сторони, доки ви самі не увімкнете env-хуки GA/Mixpanel/Amplitude.
    • Статистика адмін-консолі — platform counts і підсумки Web Vitals закриті role gate на platform admin.
    • Kill switch — ANALYTICS_DISABLE_STORAGE=true вимикає persistence без змін коду; endpoints продовжують відповідати.
    • Телеметрія docs і personal-page — platform summary також агрегує docs 404 і візити personal-page (getPlatformAnalytics).

    Опційні сторонні хуки (лише env)

    VariableProvider
    GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRETGoogle Analytics
    MIXPANEL_TOKENMixpanel
    AMPLITUDE_API_KEYAmplitude
    SENTRY_DSNSentry error tracking
    /

    Контракт інгесту

    Усі записи неблокуючі: валідація синхронна, потім persistence у Next.js after(), тож відповідь клієнту ніколи не затримується. Схема батчу (перевірено в features/analytics/lib/analytics-db.ts):

    Невалідні payload повертають 400 з першою Zod-проблемою. Батчі понад 50 подій відхиляються, а не тихо обрізаються.

    Куди пише кожен маршрут

    RouteValidation moduleStorage
    appappAnalyticsBatchSchemaanalytics_events
    devicedeviceTelemetryBodySchema (device-telemetry-db.ts)device telemetry + publishToUserTunnel через telemetryChannelForDomain
    errorsanalyticsErrorPayloadSchemaanalytics_errors (userId збагачується всередині after())

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

    VariableDefaultEffect
    ANALYTICS_DISABLE_STORAGEunset"true" підтверджує події без запису в базу

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

    Related documentation

    Admin API

    Next-step: адмін-scoped API-маршрути та RBAC-патерни після інгесту аналітики.

    Performance Optimization Patterns

    Same-workflow: телеметрія Web Vitals живить сторінки performance.

    Data Validation

    Deep-dive: Zod-охоронці межі маршруту, які використовує кожен інгест-маршрут.

    1. Документація
    2. /API-інтерфейс
    3. /Analytics

    4 хв прослуховування

    GET
    platform admin
    Список помилок із фільтрами severity/component
    /api/analytics/web-vitalsPOSToptional userIdCore Web Vitals + performanceScore → web_vitals (відкладений запис)
    /api/analytics/web-vitalsGETplatform adminПідсумок scope=platform або per-user; timeframe 24h / 7d / 30d
    /api/analytics/platform-statsGETplatform adminЖиві підрахунки для users, entities, opportunities
    DD_API_KEY
    DD_APP_KEY
    Datadog

    Жоден не обовʼязковий — власний пайплайн Ring працює без них.

    web-vitals
    webVitalsInputSchema + calculatePerformanceScore
    web_vitals із виявленими platform/browser
    navigationnone (stub)нічого — повертає { ok: true }

    Адмін-читання

    • GET /api/analytics/platform-stats — гейт isPlatformAdmin(session.user.role); паралельні countDocs над users / entities / opportunities.
    • GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary через getPlatformAnalyticsSummary; без scope — per-user метрики.
    • Aggregation SSOT: features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).
    GET
    platform admin
    Список помилок із фільтрами severity/component
    /api/analytics/web-vitalsPOSToptional userIdCore Web Vitals + performanceScore → web_vitals (відкладений запис)
    /api/analytics/web-vitalsGETplatform adminПідсумок scope=platform або per-user; timeframe 24h / 7d / 30d
    /api/analytics/platform-statsGETplatform adminЖиві підрахунки для users, entities, opportunities
    DD_API_KEY
    DD_APP_KEY
    Datadog

    Жоден не обовʼязковий — власний пайплайн Ring працює без них.

    web-vitals
    webVitalsInputSchema + calculatePerformanceScore
    web_vitals із виявленими platform/browser
    navigationnone (stub)нічого — повертає { ok: true }

    Адмін-читання

    • GET /api/analytics/platform-stats — гейт isPlatformAdmin(session.user.role); паралельні countDocs над users / entities / opportunities.
    • GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary через getPlatformAnalyticsSummary; без scope — per-user метрики.
    • Aggregation SSOT: features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).
    GET
    platform admin
    Список помилок із фільтрами severity/component
    /api/analytics/web-vitalsPOSToptional userIdCore Web Vitals + performanceScore → web_vitals (відкладений запис)
    /api/analytics/web-vitalsGETplatform adminПідсумок scope=platform або per-user; timeframe 24h / 7d / 30d
    /api/analytics/platform-statsGETplatform adminЖиві підрахунки для users, entities, opportunities
    DD_API_KEY
    DD_APP_KEY
    Datadog

    Жоден не обовʼязковий — власний пайплайн Ring працює без них.

    web-vitals
    webVitalsInputSchema + calculatePerformanceScore
    web_vitals із виявленими platform/browser
    navigationnone (stub)нічого — повертає { ok: true }

    Адмін-читання

    • GET /api/analytics/platform-stats — гейт isPlatformAdmin(session.user.role); паралельні countDocs над users / entities / opportunities.
    • GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary через getPlatformAnalyticsSummary; без scope — per-user метрики.
    • Aggregation SSOT: features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).