Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Documentation

    Вітаємо — місія та аудиторії

    Ласкаво просимо до Ring Platform - Врата між Людством та Квантовим Світом

    Хаб бібліотеки

    Overview

    Початок роботи

    Індекс
    Передумови
    Встановлення
    Міграції бази даних
    Валідація першого успіху
    Усунення несправностей
    Next Steps

    Архітектура

    Index
    Режими бекенду та бази даних
    Data Model
    Архітектура Аутентифікації
    Архітектура Email AI-CRM
    Архітектура PaymentConductor
    Архітектура News Kingdom
    Proxy та інтернаціоналізація
    Real Time
    Security

    Функції

    Індекс
    Authentication
    Email AI-CRM
    Сутності
    Можливості
    Повідомлення
    Notifications
    Push-сповіщення через FCM (Ring)
    Web3 Гаманець
    Магазин
    Інтеграція платежів
    PaymentConductor
    Інтеграція WayForPay

    API-інтерфейс

    Індекс
    Аутентифікація
    Email AI-CRM API
    Entities
    Можливості
    API повідомлень
    API повідомлень
    Гаманець
    API магазину

    CLI

    Ring CLI (лише enterprise)

    Кастомізація

    Індекс
    Брендування
    Функції
    Локалізація
    Теми
    Компоненти

    Розгортання

    Index
    Self-hosted розгортання
    Vercel
    Docker
    Environment
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення

    Розробка

    Розробка
    Локальне налаштування
    Структура коду
    Community tooling
    Ring MCP Server
    OSS vs enterprise
    Найкращі практики
    Workflow

    Приклади

    Приклади
    Швидкий старт
    Автентифікація
    Email AI-CRM — туторіал
    Інтеграція API
    Інтеграція Web3
    Білий лейбл
    Реальні приклади

    Інтеграції

    Ethereum гаманці (Wagmi v3)

    Швидкий вхід (CTO · аудитори · агенти)

    Хаб бібліотеки
    Вітаємо — місія та аудиторії
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Деплой (Docker · k8s)
    Безпека та відповідність
    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Documentation

    Вітаємо — місія та аудиторії

    Ласкаво просимо до Ring Platform - Врата між Людством та Квантовим Світом

    Хаб бібліотеки

    Overview

    Початок роботи

    Індекс
    Передумови
    Встановлення
    Міграції бази даних
    Валідація першого успіху
    Усунення несправностей
    Next Steps

    Архітектура

    Index
    Режими бекенду та бази даних
    Data Model
    Архітектура Аутентифікації
    Архітектура Email AI-CRM
    Архітектура PaymentConductor
    Архітектура News Kingdom
    Proxy та інтернаціоналізація

    Функції

    Індекс
    Authentication
    Email AI-CRM
    Сутності
    Можливості
    Повідомлення
    Notifications
    Push-сповіщення через FCM (Ring)

    API-інтерфейс

    Індекс
    Аутентифікація
    Email AI-CRM API
    Entities
    Можливості
    API повідомлень
    API повідомлень
    Гаманець
    API магазину

    CLI

    Ring CLI (лише enterprise)

    Кастомізація

    Індекс
    Брендування
    Функції
    Локалізація
    Теми
    Компоненти

    Розгортання

    Index
    Self-hosted розгортання
    Vercel
    Docker
    Environment
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення

    Розробка

    Розробка
    Локальне налаштування
    Структура коду
    Community tooling
    Ring MCP Server
    OSS vs enterprise
    Найкращі практики
    Workflow

    Приклади

    Приклади
    Швидкий старт
    Автентифікація
    Email AI-CRM — туторіал
    Інтеграція API
    Інтеграція Web3
    Білий лейбл
    Реальні приклади

    Інтеграції

    Ethereum гаманці (Wagmi v3)

    Швидкий вхід (CTO · аудитори · агенти)

    Хаб бібліотеки
    Вітаємо — місія та аудиторії
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Деплой (Docker · k8s)
    Безпека та відповідність
    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Documentation

    Вітаємо — місія та аудиторії

    Ласкаво просимо до Ring Platform - Врата між Людством та Квантовим Світом

    Хаб бібліотеки

    Overview

    Початок роботи

    Індекс
    Передумови
    Встановлення
    Міграції бази даних
    Валідація першого успіху
    Усунення несправностей
    Next Steps

    Архітектура

    Index
    Режими бекенду та бази даних
    Data Model
    Архітектура Аутентифікації
    Архітектура Email AI-CRM
    Архітектура PaymentConductor
    Архітектура News Kingdom
    Proxy та інтернаціоналізація

    Функції

    Індекс
    Authentication
    Email AI-CRM
    Сутності
    Можливості
    Повідомлення
    Notifications
    Push-сповіщення через FCM (Ring)

    API-інтерфейс

    Індекс
    Аутентифікація
    Email AI-CRM API
    Entities
    Можливості
    API повідомлень
    API повідомлень
    Гаманець
    API магазину

    CLI

    Ring CLI (лише enterprise)

    Кастомізація

    Індекс
    Брендування
    Функції
    Локалізація
    Теми
    Компоненти

    Розгортання

    Index
    Self-hosted розгортання
    Vercel
    Docker
    Environment
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення

    Розробка

    Розробка
    Локальне налаштування
    Структура коду
    Community tooling
    Ring MCP Server
    OSS vs enterprise
    Найкращі практики
    Workflow

    Приклади

    Приклади
    Швидкий старт
    Автентифікація
    Email AI-CRM — туторіал
    Інтеграція API
    Інтеграція Web3
    Білий лейбл
    Реальні приклади

    Інтеграції

    Ethereum гаманці (Wagmi v3)

    Швидкий вхід (CTO · аудитори · агенти)

    Хаб бібліотеки
    Вітаємо — місія та аудиторії
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP
    Деплой (Docker · k8s)
    Безпека та відповідність
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Науковий редактор
    Система локалей
    Безпека та відповідність
    NFT Маркетплейс
    Система Стейкінга Токенів
    Паттерни Оптимізації Продуктивності
    Мобільний Досвід
    API адміністратора
    Code Style
    Performance
    Тестування
    Розгортання
    Налагодження
    Співпраця
    Приклади API
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    Real Time
    Security
    Web3 Гаманець
    Магазин
    Інтеграція платежів
    PaymentConductor
    Інтеграція WayForPay
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Науковий редактор
    Система локалей
    Безпека та відповідність
    NFT Маркетплейс
    Система Стейкінга Токенів
    Паттерни Оптимізації Продуктивності
    Мобільний Досвід
    API адміністратора
    Code Style
    Performance
    Тестування
    Розгортання
    Налагодження
    Співпраця
    Приклади API
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    Real Time
    Security
    Web3 Гаманець
    Магазин
    Інтеграція платежів
    PaymentConductor
    Інтеграція WayForPay
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Науковий редактор
    Система локалей
    Безпека та відповідність
    NFT Маркетплейс
    Система Стейкінга Токенів
    Паттерни Оптимізації Продуктивності
    Мобільний Досвід
    API адміністратора
    Code Style
    Performance
    Тестування
    Розгортання
    Налагодження
    Співпраця
    Приклади API
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Режими бекенду та бази даних

    Ring Platform — це єдиний код застосунку з обов’язковим перемикачем під час виконання: DB_BACKEND_MODE. Значення визначає, які адаптери БД реєструються, чи використовується Firestore для даних застосунку та як підключені push-сповіщення.

    Ця сторінка — канонічний довідник для операторів і супроводу клонів. Реалізація: lib/database/backend-mode-config.ts, lib/database/DatabaseService.ts, lib/database/BackendSelector.ts.

    DB_BACKEND_MODE (обов’язково)

    РежимОсновна БД застосункуFirebase Admin для БД / Firestore?Push (FCM / Apple)
    k8s-postgres-fcmPostgreSQL (ваш кластер — наприклад k3s + CloudNativePG / PostGIS)Ні — shouldUseFirebaseForDatabase() = false; поза firebase-full getAdminDb() повертає mock FirestoreFCM (і Apple за налаштуванням) через Firebase Admin messaging та web-конфіг; Firestore не є джерелом істини
    firebase-fullFirestore / шляхи на Firebase

    Режими бекенду та бази даних

    Ring Platform — це єдиний код застосунку з обов’язковим перемикачем під час виконання: DB_BACKEND_MODE. Значення визначає, які адаптери БД реєструються, чи використовується Firestore для даних застосунку та як підключені push-сповіщення.

    Ця сторінка — канонічний довідник для операторів і супроводу клонів. Реалізація: lib/database/backend-mode-config.ts, lib/database/DatabaseService.ts, lib/database/BackendSelector.ts.

    DB_BACKEND_MODE (обов’язково)

    РежимОсновна БД застосункуFirebase Admin для БД / Firestore?Push (FCM / Apple)
    k8s-postgres-fcmPostgreSQL (ваш кластер — наприклад k3s + CloudNativePG / PostGIS)Ні — shouldUseFirebaseForDatabase() = false; поза firebase-full getAdminDb() повертає mock FirestoreFCM (і Apple за налаштуванням) через Firebase Admin messaging та web-конфіг; Firestore не є джерелом істини
    firebase-fullFirestore / шляхи на Firebase

    Режими бекенду та бази даних

    Ring Platform — це єдиний код застосунку з обов’язковим перемикачем під час виконання: DB_BACKEND_MODE. Значення визначає, які адаптери БД реєструються, чи використовується Firestore для даних застосунку та як підключені push-сповіщення.

    Ця сторінка — канонічний довідник для операторів і супроводу клонів. Реалізація: lib/database/backend-mode-config.ts, lib/database/DatabaseService.ts, lib/database/BackendSelector.ts.

    DB_BACKEND_MODE (обов’язково)

    РежимОсновна БД застосункуFirebase Admin для БД / Firestore?Push (FCM / Apple)
    k8s-postgres-fcmPostgreSQL (ваш кластер — наприклад k3s + CloudNativePG / PostGIS)Ні — shouldUseFirebaseForDatabase() = false; поза firebase-full getAdminDb() повертає mock FirestoreFCM (і Apple за налаштуванням) через Firebase Admin messaging та web-конфіг; Firestore не є джерелом істини
    firebase-fullFirestore / шляхи на Firebase
    Так
    FCM у складі повного стеку Firebase
    supabase-fcmPostgreSQL на Supabase (підключення через env)Ні (той самий підхід до Firestore, що й у k8s-режимі)FCM + Apple за налаштуванням

    Назви в документації: продакшен на власному Postgres часто описують як «self-hosted PostgreSQL + FCM» або «режим з пріоритетом Postgres». Рядок enum лишається k8s-postgres-fcm — перейменування зламає всі деплої, сховища секретів і клони без узгодженої міграції.

    Firebase у k8s-postgres-fcm та supabase-fcm

    Так
    FCM у складі повного стеку Firebase
    supabase-fcmPostgreSQL на Supabase (підключення через env)Ні (той самий підхід до Firestore, що й у k8s-режимі)FCM + Apple за налаштуванням

    Назви в документації: продакшен на власному Postgres часто описують як «self-hosted PostgreSQL + FCM» або «режим з пріоритетом Postgres». Рядок enum лишається k8s-postgres-fcm — перейменування зламає всі деплої, сховища секретів і клони без узгодженої міграції.

    Firebase у k8s-postgres-fcm та supabase-fcm

    Так
    FCM у складі повного стеку Firebase
    supabase-fcmPostgreSQL на Supabase (підключення через env)Ні (той самий підхід до Firestore, що й у k8s-режимі)FCM + Apple за налаштуванням

    Назви в документації: продакшен на власному Postgres часто описують як «self-hosted PostgreSQL + FCM» або «режим з пріоритетом Postgres». Рядок enum лишається k8s-postgres-fcm — перейменування зламає всі деплої, сховища секретів і клони без узгодженої міграції.

    Firebase у k8s-postgres-fcm та supabase-fcm

    • Дані застосунку (колекції через DatabaseService / BackendSelector) йдуть у PostgreSQL через PostgreSQLAdapter.
    • lib/firebase-admin.server.ts явно не піднімає справжній Firestore, коли shouldUseFirebaseForDatabase() = false (див. коментарі біля getAdminDb() / getAdminAuth()).
    • FCM досі використовує облікові дані проєкту Firebase, якщо увімкнено (shouldInitializeFirebaseFCM(), NEXT_PUBLIC_FIREBASE_*, змінні service account). Це доставка push, а не основна транзакційна БД.
    • Дані застосунку (колекції через DatabaseService / BackendSelector) йдуть у PostgreSQL через PostgreSQLAdapter.
    • lib/firebase-admin.server.ts явно не піднімає справжній Firestore, коли shouldUseFirebaseForDatabase() = false (див. коментарі біля getAdminDb() / getAdminAuth()).
    • FCM досі використовує облікові дані проєкту Firebase, якщо увімкнено (shouldInitializeFirebaseFCM(), NEXT_PUBLIC_FIREBASE_*, змінні service account). Це доставка push, а не основна транзакційна БД.
    • Дані застосунку (колекції через DatabaseService / BackendSelector) йдуть у PostgreSQL через PostgreSQLAdapter.
    • lib/firebase-admin.server.ts явно не піднімає справжній Firestore, коли shouldUseFirebaseForDatabase() = false (див. коментарі біля getAdminDb() / getAdminAuth()).
    • FCM досі використовує облікові дані проєкту Firebase, якщо увімкнено (shouldInitializeFirebaseFCM(), NEXT_PUBLIC_FIREBASE_*, змінні service account). Це доставка push, а не основна транзакційна БД.

    Тобто формулювання «ми пішли з Firebase як з БД» коректне для режимів з пріоритетом Postgres; Firebase не зник з репозиторію — залишається стандартним шляхом FCM, доки push не вимкнено.

    Supabase: дві різні ролі

    Тобто формулювання «ми пішли з Firebase як з БД» коректне для режимів з пріоритетом Postgres; Firebase не зник з репозиторію — залишається стандартним шляхом FCM, доки push не вимкнено.

    Supabase: дві різні ролі

    Тобто формулювання «ми пішли з Firebase як з БД» коректне для режимів з пріоритетом Postgres; Firebase не зник з репозиторію — залишається стандартним шляхом FCM, доки push не вимкнено.

    Supabase: дві різні ролі

    1. DB_BACKEND_MODE=supabase-fcm — Postgres на Supabase; той самий патерн «Postgres primary + FCM», що й у k8s-режимі щодо Firestore.
    2. Tunnel realtime (NEXT_PUBLIC_TUNNEL_TRANSPORT=supabase) — опційний канал Realtime у lib/tunnel/transports/supabase-transport.ts через @supabase/supabase-js та NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY. Це ортогонально до того, який SQL-бекенд володіє таблицями; наявність Supabase в env не завжди означає режим supabase-fcm.
    1. DB_BACKEND_MODE=supabase-fcm — Postgres на Supabase; той самий патерн «Postgres primary + FCM», що й у k8s-режимі щодо Firestore.
    2. Tunnel realtime (NEXT_PUBLIC_TUNNEL_TRANSPORT=supabase) — опційний канал Realtime у lib/tunnel/transports/supabase-transport.ts через @supabase/supabase-js та NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY. Це ортогонально до того, який SQL-бекенд володіє таблицями; наявність Supabase в env не завжди означає режим supabase-fcm.
    1. DB_BACKEND_MODE=supabase-fcm — Postgres на Supabase; той самий патерн «Postgres primary + FCM», що й у k8s-режимі щодо Firestore.
    2. Tunnel realtime (NEXT_PUBLIC_TUNNEL_TRANSPORT=supabase) — опційний канал Realtime у lib/tunnel/transports/supabase-transport.ts через @supabase/supabase-js та NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY. Це ортогонально до того, який SQL-бекенд володіє таблицями; наявність Supabase в env не завжди означає режим supabase-fcm.

    Vercel і «serverless Postgres»

    У цьому дереві коду Ring Platform не використовує @vercel/postgres як основний драйвер БД. Vercel Blob (BLOB_READ_WRITE_TOKEN) — для файлового / blob-сховища за налаштування; це не реляційна база.

    DB_HYBRID_MODE — це не те саме, що DB_BACKEND_MODE

    DB_HYBRID_MODE — застарілий / на рівні фіч перемикач, на який ще посилаються кілька місць (наприклад features/store/config.ts, features/notifications/services/notification-service-loader.ts, scripts/inject-firebase-config.js). Він не замінює і не тотожний DB_BACKEND_MODE.

    • DB_BACKEND_MODE — глобальний режим деплою (пріоритет Postgres проти повний Firebase проти Postgres на Supabase).
    • DB_HYBRID_MODE — старіша «гібридна» термінологія для часткового Firebase проти Postgres у окремих фічах.

    Vercel і «serverless Postgres»

    У цьому дереві коду Ring Platform не використовує @vercel/postgres як основний драйвер БД. Vercel Blob (BLOB_READ_WRITE_TOKEN) — для файлового / blob-сховища за налаштування; це не реляційна база.

    DB_HYBRID_MODE — це не те саме, що DB_BACKEND_MODE

    DB_HYBRID_MODE — застарілий / на рівні фіч перемикач, на який ще посилаються кілька місць (наприклад features/store/config.ts, features/notifications/services/notification-service-loader.ts, scripts/inject-firebase-config.js). Він не замінює і не тотожний DB_BACKEND_MODE.

    • DB_BACKEND_MODE — глобальний режим деплою (пріоритет Postgres проти повний Firebase проти Postgres на Supabase).
    • DB_HYBRID_MODE — старіша «гібридна» термінологія для часткового Firebase проти Postgres у окремих фічах.

    Vercel і «serverless Postgres»

    У цьому дереві коду Ring Platform не використовує @vercel/postgres як основний драйвер БД. Vercel Blob (BLOB_READ_WRITE_TOKEN) — для файлового / blob-сховища за налаштування; це не реляційна база.

    DB_HYBRID_MODE — це не те саме, що DB_BACKEND_MODE

    DB_HYBRID_MODE — застарілий / на рівні фіч перемикач, на який ще посилаються кілька місць (наприклад features/store/config.ts, features/notifications/services/notification-service-loader.ts, scripts/inject-firebase-config.js). Він не замінює і не тотожний DB_BACKEND_MODE.

    • DB_BACKEND_MODE — глобальний режим деплою (пріоритет Postgres проти повний Firebase проти Postgres на Supabase).
    • DB_HYBRID_MODE — старіша «гібридна» термінологія для часткового Firebase проти Postgres у окремих фічах.

    Рекомендація: для нових деплоїв документуйте й задавайте DB_BACKEND_MODE. Якщо в документації «hybrid» замінюєте на «self-hosted», робіть це в прозі та назвах у новому коді, а не в рядку enum DB_BACKEND_MODE без плану міграції.

    Auth.js і PostgreSQL

    Таблиці auth (users, accounts, sessions, verification_tokens, …) входять у схему Postgres при адаптері PostgreSQL. Див. lib/auth/postgres-adapter.ts та data/schema.sql. Підтримка кількох режимів коротко в Authentication.

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

    Рекомендація: для нових деплоїв документуйте й задавайте DB_BACKEND_MODE. Якщо в документації «hybrid» замінюєте на «self-hosted», робіть це в прозі та назвах у новому коді, а не в рядку enum DB_BACKEND_MODE без плану міграції.

    Auth.js і PostgreSQL

    Таблиці auth (users, accounts, sessions, verification_tokens, …) входять у схему Postgres при адаптері PostgreSQL. Див. lib/auth/postgres-adapter.ts та data/schema.sql. Підтримка кількох режимів коротко в Authentication.

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

    Рекомендація: для нових деплоїв документуйте й задавайте DB_BACKEND_MODE. Якщо в документації «hybrid» замінюєте на «self-hosted», робіть це в прозі та назвах у новому коді, а не в рядку enum DB_BACKEND_MODE без плану міграції.

    Auth.js і PostgreSQL

    Таблиці auth (users, accounts, sessions, verification_tokens, …) входять у схему Postgres при адаптері PostgreSQL. Див. lib/auth/postgres-adapter.ts та data/schema.sql. Підтримка кількох режимів коротко в Authentication.

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

    • Конфігурація середовища — згруповані секрети та URL (посилання на режими бекенду).
    • Push-сповіщення (FCM) — токени зберігаються через BackendSelector і режим.
    • Протокол Tunnel — транспорти проти DB_BACKEND_MODE.
    • Вибір бекенду БД (white-label) — продуктове порівняння; env узгоджуйте з цією сторінкою.
    • Продакшен-підключення: k8s/ENV-PROD-WIRING.md (секрети кластера, build args, DB_BACKEND_MODE в образі проти runtime).
    • Конфігурація середовища — згруповані секрети та URL (посилання на режими бекенду).
    • Push-сповіщення (FCM) — токени зберігаються через BackendSelector і режим.
    • Протокол Tunnel — транспорти проти DB_BACKEND_MODE.
    • Вибір бекенду БД (white-label) — продуктове порівняння; env узгоджуйте з цією сторінкою.
    • Продакшен-підключення: k8s/ENV-PROD-WIRING.md (секрети кластера, build args, DB_BACKEND_MODE в образі проти runtime).
    • Конфігурація середовища — згруповані секрети та URL (посилання на режими бекенду).
    • Push-сповіщення (FCM) — токени зберігаються через BackendSelector і режим.
    • Протокол Tunnel — транспорти проти DB_BACKEND_MODE.
    • Вибір бекенду БД (white-label) — продуктове порівняння; env узгоджуйте з цією сторінкою.
    • Продакшен-підключення: k8s/ENV-PROD-WIRING.md (секрети кластера, build args, DB_BACKEND_MODE в образі проти runtime).

    Відкрите рішення (найменування)

    Якщо потрібно, щоб рядок k8s-postgres-fcm у env читався як self-hosted або postgres, потрібні: нове припустиме значення в backend-mode-config.ts, маніфести деплою, секрети всіх кілець, CI і документація — або довга депрекація з підтримкою аліасів. Лише документаційне найменування «self-hosted» безпечне й уже відображено вище.

    Відкрите рішення (найменування)

    Якщо потрібно, щоб рядок k8s-postgres-fcm у env читався як self-hosted або postgres, потрібні: нове припустиме значення в backend-mode-config.ts, маніфести деплою, секрети всіх кілець, CI і документація — або довга депрекація з підтримкою аліасів. Лише документаційне найменування «self-hosted» безпечне й уже відображено вище.

    Відкрите рішення (найменування)

    Якщо потрібно, щоб рядок k8s-postgres-fcm у env читався як self-hosted або postgres, потрібні: нове припустиме значення в backend-mode-config.ts, маніфести деплою, секрети всіх кілець, CI і документація — або довга депрекація з підтримкою аліасів. Лише документаційне найменування «self-hosted» безпечне й уже відображено вище.