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

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

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

    Documentation

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

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    Повідомлення
    Завдання 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)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server

    Швидкий вхід (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)
    Сутності
    Можливості
    Повідомлення
    Завдання 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)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server

    Швидкий вхід (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)
    Сутності
    Можливості
    Повідомлення
    Завдання 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)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server

    Швидкий вхід (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

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

    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

    • Дані застосунку (колекції через 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: дві різні ролі

    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 у окремих фічах.

    Рекомендація: для нових деплоїв документуйте й задавайте 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).

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

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

    1. Документація
    2. /Архітектура
    3. /Режими бекенду та бази даних

    Оновлено 15 трав. 2026 р.3 хв прослуховування

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

    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

    • Дані застосунку (колекції через 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: дві різні ролі

    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 у окремих фічах.

    Рекомендація: для нових деплоїв документуйте й задавайте 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).

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

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

    1. Документація
    2. /Архітектура
    3. /Режими бекенду та бази даних

    Оновлено 15 трав. 2026 р.3 хв прослуховування

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

    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

    • Дані застосунку (колекції через 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: дві різні ролі

    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 у окремих фічах.

    Рекомендація: для нових деплоїв документуйте й задавайте 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).

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

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

    1. Документація
    2. /Архітектура
    3. /Режими бекенду та бази даних

    Оновлено 15 трав. 2026 р.3 хв прослуховування