Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring Platform
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    Real-Time Messaging
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    White Label
    Интеграция Web3
    Реальные Проекты
    Кастомизация
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Monitoring
    Оптимизация производительности
    Backup
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция 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 Platform
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    Real-Time Messaging
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    White Label
    Интеграция Web3
    Реальные Проекты
    Кастомизация
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Monitoring
    Оптимизация производительности
    Backup
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция 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 Platform
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    Real-Time Messaging
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    White Label
    Интеграция Web3
    Реальные Проекты
    Кастомизация
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Monitoring
    Оптимизация производительности
    Backup
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция 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 Platform Logo

    Loading documentation...

    Preparing Ring Platform content

    Ring Platform Logo

    Loading documentation...

    Preparing Ring Platform content

    Ring Platform Logo

    Loading documentation...

    Preparing Ring Platform content

    Real-Time Messaging

    Use Founder / Developer tabs in the docs sidebar to filter this page. This article is the SSOT for Conversation.type (channel) vs metadata.kind (subtype) and inbox hygiene for tool chats.

    Ring messaging combines REST conversations with Tunnel Protocol fan-out so members chat in context of opportunities, entities, and store deals without refreshing the page.

    LayerWhere
    RESTapp/api/conversations/**
    RealtimeTunnel channels conversation:{id} — see Tunnel Protocol
    UIfeatures/chat, features/messages
    Typesfeatures/chat/types/index.ts
    API referenceMessaging API

    Channel vs subtype (shared)

    Ring does not invent a new top-level conversation type for every feature. Two layers stay separate:

    FieldMeaningExample
    Conversation.typeChannel / domain routing — where the thread lives in the messaging systemdirect, entity, opportunity, product, group
    metadata.kindOptional subtype within that channelgenerative_gallery
    metadata.hiddenFromInboxInbox contract — hide from Messages listtrue for tool editors

    Verified channel enum (TypeScript + create zod in app/api/conversations/route.ts):

    direct | entity | opportunity | product | group

    Do not add type: 'generative'. Generative Gallery reuses type: 'product' plus kind: 'generative_gallery' and hiddenFromInbox: true. Extending the channel enum for one feature breaks product lookup helpers and invents parallel plumbing.

    Same product channel, different visibility:

    UsetypeMetadata highlightsMessages inbox
    Store product agent (DAGI)productreal productId, no tool kindVisible
    Generative Gallery tool chatproductkind: 'generative_gallery', hiddenFromInbox: true, productId/subject = genmedia:…Hidden

    Conversation metadata.kind is not the same namespace as message metadata.kind (e.g. payment_request, env_request, task, poll, rsvp, dao_jar, share_card, gallery_upload, ghost_write_result, game_request).

    Interactive types share one lifecycle kit (features/chat/lib/interactive-kind.ts + bubble registry + notify helper): server-action create → dual-gate widget (type OR metadata.kind) → updateMessage / tunnel message:update → typed notify. Domain owns money for dao_jar via public-pools: native treasury chip-in (contributeToPool) and card/PayPal (public_pool_contribution → desk-oracle FX). Chat owns the snapshot — always refreshOpenDaoJarMessages after totals change. share_card reuses MESSAGE_RECEIVED + data.kind. Tier A interactive UX is remediated (2026-07-21); see Public Pools & DAO Jars.

    Peer games add game_request (allowlisted in interactive-kind.ts): session SSOT in PeerGameService.createInvite, Tunnel game:invite / games:incoming (incl. terminal clear), and IncomingGameBanner on Messages + /games. Titles: tic-tac-toe · chess · checkers. Direct conversations only. See Peer Games.

    Structured work inside a thread: Ring Tasks (type: 'task' + /tasks tree).

    Why messaging matters for your clone

    Instant conversation shortens the path from match → trust → deal. Members stay inside your Ring instead of dropping to email or third-party chat. Tool editors (image generation history) stay out of the main inbox so operators are not flooded with system threads.

    Tunnel Protocol

    How live updates reach the browser (WSS / SSE / poll).

    Generative Gallery

    Upload | Generate media — history in a hidden product-tool chat.

    WebRTC Calls & STUNner

    1:1 audio/video in direct chats — ICE + TURN.

    Messaging API

    Implementation

    Verified routes

    MethodPathRole
    GET, POST/api/conversationsList / create conversations
    GET/api/conversations/[id]Conversation detail
    POST/api/conversations/[id]/typingTyping signal
    POST/api/conversations/[id]/readMark read
    POST/api/conversations/uploadAttachment upload
    MCP

    Related

    Related documentation

    Tunnel Protocol

    Depends-on: live message and jar updates publish on conversation tunnel channels.

    Public Pools & DAO Jars

    Same-workflow: dao_jar money, dual-currency contribute, and jar refresh after chip-in.

    Generative Gallery

    See-also: product-channel tool chats stay hidden from the Messages inbox.

    Multi-Vendor Store

    See-also: product agent chats share type product but stay inbox-visible.

    1. /
    2. /Real-Time Messaging

    Обновлено 24 июл. 2026 г.5 мин прослушивания

    Real-Time Messaging

    Use Founder / Developer tabs in the docs sidebar to filter this page. This article is the SSOT for Conversation.type (channel) vs metadata.kind (subtype) and inbox hygiene for tool chats.

    Ring messaging combines REST conversations with Tunnel Protocol fan-out so members chat in context of opportunities, entities, and store deals without refreshing the page.

    LayerWhere
    RESTapp/api/conversations/**
    RealtimeTunnel channels conversation:{id} — see Tunnel Protocol
    UIfeatures/chat, features/messages
    Typesfeatures/chat/types/index.ts
    API referenceMessaging API

    Channel vs subtype (shared)

    Ring does not invent a new top-level conversation type for every feature. Two layers stay separate:

    FieldMeaningExample
    Conversation.typeChannel / domain routing — where the thread lives in the messaging systemdirect, entity, opportunity, product, group
    metadata.kindOptional subtype within that channelgenerative_gallery
    metadata.hiddenFromInboxInbox contract — hide from Messages listtrue for tool editors

    Verified channel enum (TypeScript + create zod in app/api/conversations/route.ts):

    direct | entity | opportunity | product | group

    Do not add type: 'generative'. Generative Gallery reuses type: 'product' plus kind: 'generative_gallery' and hiddenFromInbox: true. Extending the channel enum for one feature breaks product lookup helpers and invents parallel plumbing.

    Same product channel, different visibility:

    UsetypeMetadata highlightsMessages inbox
    Store product agent (DAGI)productreal productId, no tool kindVisible
    Generative Gallery tool chatproductkind: 'generative_gallery', hiddenFromInbox: true, productId/subject = genmedia:…Hidden

    Conversation metadata.kind is not the same namespace as message metadata.kind (e.g. payment_request, env_request, task, poll, rsvp, dao_jar, share_card, gallery_upload, ghost_write_result, game_request).

    Interactive types share one lifecycle kit (features/chat/lib/interactive-kind.ts + bubble registry + notify helper): server-action create → dual-gate widget (type OR metadata.kind) → updateMessage / tunnel message:update → typed notify. Domain owns money for dao_jar via public-pools: native treasury chip-in (contributeToPool) and card/PayPal (public_pool_contribution → desk-oracle FX). Chat owns the snapshot — always refreshOpenDaoJarMessages after totals change. share_card reuses MESSAGE_RECEIVED + data.kind. Tier A interactive UX is remediated (2026-07-21); see Public Pools & DAO Jars.

    Peer games add game_request (allowlisted in interactive-kind.ts): session SSOT in PeerGameService.createInvite, Tunnel game:invite / games:incoming (incl. terminal clear), and IncomingGameBanner on Messages + /games. Titles: tic-tac-toe · chess · checkers. Direct conversations only. See Peer Games.

    Structured work inside a thread: Ring Tasks (type: 'task' + /tasks tree).

    Why messaging matters for your clone

    Instant conversation shortens the path from match → trust → deal. Members stay inside your Ring instead of dropping to email or third-party chat. Tool editors (image generation history) stay out of the main inbox so operators are not flooded with system threads.

    Tunnel Protocol

    How live updates reach the browser (WSS / SSE / poll).

    Generative Gallery

    Upload | Generate media — history in a hidden product-tool chat.

    WebRTC Calls & STUNner

    1:1 audio/video in direct chats — ICE + TURN.

    Messaging API

    Implementation

    Verified routes

    MethodPathRole
    GET, POST/api/conversationsList / create conversations
    GET/api/conversations/[id]Conversation detail
    POST/api/conversations/[id]/typingTyping signal
    POST/api/conversations/[id]/readMark read
    POST/api/conversations/uploadAttachment upload
    MCP

    Related

    Related documentation

    Tunnel Protocol

    Depends-on: live message and jar updates publish on conversation tunnel channels.

    Public Pools & DAO Jars

    Same-workflow: dao_jar money, dual-currency contribute, and jar refresh after chip-in.

    Generative Gallery

    See-also: product-channel tool chats stay hidden from the Messages inbox.

    Multi-Vendor Store

    See-also: product agent chats share type product but stay inbox-visible.

    1. /
    2. /Real-Time Messaging

    Обновлено 24 июл. 2026 г.5 мин прослушивания

    Real-Time Messaging

    Use Founder / Developer tabs in the docs sidebar to filter this page. This article is the SSOT for Conversation.type (channel) vs metadata.kind (subtype) and inbox hygiene for tool chats.

    Ring messaging combines REST conversations with Tunnel Protocol fan-out so members chat in context of opportunities, entities, and store deals without refreshing the page.

    LayerWhere
    RESTapp/api/conversations/**
    RealtimeTunnel channels conversation:{id} — see Tunnel Protocol
    UIfeatures/chat, features/messages
    Typesfeatures/chat/types/index.ts
    API referenceMessaging API

    Channel vs subtype (shared)

    Ring does not invent a new top-level conversation type for every feature. Two layers stay separate:

    FieldMeaningExample
    Conversation.typeChannel / domain routing — where the thread lives in the messaging systemdirect, entity, opportunity, product, group
    metadata.kindOptional subtype within that channelgenerative_gallery
    metadata.hiddenFromInboxInbox contract — hide from Messages listtrue for tool editors

    Verified channel enum (TypeScript + create zod in app/api/conversations/route.ts):

    direct | entity | opportunity | product | group

    Do not add type: 'generative'. Generative Gallery reuses type: 'product' plus kind: 'generative_gallery' and hiddenFromInbox: true. Extending the channel enum for one feature breaks product lookup helpers and invents parallel plumbing.

    Same product channel, different visibility:

    UsetypeMetadata highlightsMessages inbox
    Store product agent (DAGI)productreal productId, no tool kindVisible
    Generative Gallery tool chatproductkind: 'generative_gallery', hiddenFromInbox: true, productId/subject = genmedia:…Hidden

    Conversation metadata.kind is not the same namespace as message metadata.kind (e.g. payment_request, env_request, task, poll, rsvp, dao_jar, share_card, gallery_upload, ghost_write_result, game_request).

    Interactive types share one lifecycle kit (features/chat/lib/interactive-kind.ts + bubble registry + notify helper): server-action create → dual-gate widget (type OR metadata.kind) → updateMessage / tunnel message:update → typed notify. Domain owns money for dao_jar via public-pools: native treasury chip-in (contributeToPool) and card/PayPal (public_pool_contribution → desk-oracle FX). Chat owns the snapshot — always refreshOpenDaoJarMessages after totals change. share_card reuses MESSAGE_RECEIVED + data.kind. Tier A interactive UX is remediated (2026-07-21); see Public Pools & DAO Jars.

    Peer games add game_request (allowlisted in interactive-kind.ts): session SSOT in PeerGameService.createInvite, Tunnel game:invite / games:incoming (incl. terminal clear), and IncomingGameBanner on Messages + /games. Titles: tic-tac-toe · chess · checkers. Direct conversations only. See Peer Games.

    Structured work inside a thread: Ring Tasks (type: 'task' + /tasks tree).

    Why messaging matters for your clone

    Instant conversation shortens the path from match → trust → deal. Members stay inside your Ring instead of dropping to email or third-party chat. Tool editors (image generation history) stay out of the main inbox so operators are not flooded with system threads.

    Tunnel Protocol

    How live updates reach the browser (WSS / SSE / poll).

    Generative Gallery

    Upload | Generate media — history in a hidden product-tool chat.

    WebRTC Calls & STUNner

    1:1 audio/video in direct chats — ICE + TURN.

    Messaging API

    Implementation

    Verified routes

    MethodPathRole
    GET, POST/api/conversationsList / create conversations
    GET/api/conversations/[id]Conversation detail
    POST/api/conversations/[id]/typingTyping signal
    POST/api/conversations/[id]/readMark read
    POST/api/conversations/uploadAttachment upload
    MCP

    Related

    Related documentation

    Tunnel Protocol

    Depends-on: live message and jar updates publish on conversation tunnel channels.

    Public Pools & DAO Jars

    Same-workflow: dao_jar money, dual-currency contribute, and jar refresh after chip-in.

    Generative Gallery

    See-also: product-channel tool chats stay hidden from the Messages inbox.

    Multi-Vendor Store

    See-also: product agent chats share type product but stay inbox-visible.

    1. /
    2. /Real-Time Messaging

    Обновлено 24 июл. 2026 г.5 мин прослушивания

    Integrator contracts for conversations and typing.

    Typical scenarios

    • Two matched professionals open a direct conversation from an opportunity — it appears in Messages.
    • A buyer asks a store product agent a question — that product chat stays visible in Messages.
    • A vendor or member generates NFT/product art in Generative Gallery — history lives in a hidden tool chat, not the inbox.
    • Typing indicators and read state keep negotiations moving on mobile PWA.
    /api/mcp/v1/messaging/conversations
    Agent tooling

    After writes, publish on Tunnel channel conversation:{id} via publishToChannel — clients subscribe with useTunnelChannel (not raw useTunnel().subscribe() in effects).

    Create body type must be one of: direct | entity | opportunity | product | group (z.enum in app/api/conversations/route.ts). Optional metadata includes productId, groupName, kind, hiddenFromInbox, and domain ids (entityId, opportunityId, …).

    Inbox hide contract

    ConversationService.getConversations skips rows where isHiddenToolConversation is true (features/chat/services/conversation-service.ts):

    1. metadata.hiddenFromInbox === true (preferred long-term gate)
    2. metadata.kind === 'generative_gallery'
    3. Legacy: productId or subject starts with genmedia: or imggen:

    Modules

    PathResponsibility
    features/chat/types/index.tsConversation, CreateConversationRequest, filters
    features/chat/services/conversation-service.tsCRUD + isHiddenToolConversation
    features/chat/, features/messages/Chat UI
    features/generative-media/service.tsCreates hidden product + generative_gallery chats
    features/store/services/product-agent-service.tsCreates visible product agent chats
    lib/tunnel/Hub, publisher, transports
    hooks/use-tunnel-channel.tsStable channel subscribe

    Transports

    • k8s / self-hosted: native WSS /api/tunnel/ws primary
    • Vercel: SSE + long-poll (/api/tunnel/poll)
    • Optional Supabase Realtime when configured

    Full endpoint samples: Messaging API. Architecture: Real-time.

    WebRTC Calls & STUNner TURN

    Next-step: 1:1 audio/video in direct chats.

    Peer Games

    Same-workflow: game_request interactive type, IncomingGameBanner, and call/game mutex.

    Messaging API

    Deep-dive: REST + tunnel contracts for conversations.

    Push Notifications with FCM (Ring-Powered)

    Next-step: reach members when the tab is closed.

    Документация
    Функции

    Integrator contracts for conversations and typing.

    Typical scenarios

    • Two matched professionals open a direct conversation from an opportunity — it appears in Messages.
    • A buyer asks a store product agent a question — that product chat stays visible in Messages.
    • A vendor or member generates NFT/product art in Generative Gallery — history lives in a hidden tool chat, not the inbox.
    • Typing indicators and read state keep negotiations moving on mobile PWA.
    /api/mcp/v1/messaging/conversations
    Agent tooling

    After writes, publish on Tunnel channel conversation:{id} via publishToChannel — clients subscribe with useTunnelChannel (not raw useTunnel().subscribe() in effects).

    Create body type must be one of: direct | entity | opportunity | product | group (z.enum in app/api/conversations/route.ts). Optional metadata includes productId, groupName, kind, hiddenFromInbox, and domain ids (entityId, opportunityId, …).

    Inbox hide contract

    ConversationService.getConversations skips rows where isHiddenToolConversation is true (features/chat/services/conversation-service.ts):

    1. metadata.hiddenFromInbox === true (preferred long-term gate)
    2. metadata.kind === 'generative_gallery'
    3. Legacy: productId or subject starts with genmedia: or imggen:

    Modules

    PathResponsibility
    features/chat/types/index.tsConversation, CreateConversationRequest, filters
    features/chat/services/conversation-service.tsCRUD + isHiddenToolConversation
    features/chat/, features/messages/Chat UI
    features/generative-media/service.tsCreates hidden product + generative_gallery chats
    features/store/services/product-agent-service.tsCreates visible product agent chats
    lib/tunnel/Hub, publisher, transports
    hooks/use-tunnel-channel.tsStable channel subscribe

    Transports

    • k8s / self-hosted: native WSS /api/tunnel/ws primary
    • Vercel: SSE + long-poll (/api/tunnel/poll)
    • Optional Supabase Realtime when configured

    Full endpoint samples: Messaging API. Architecture: Real-time.

    WebRTC Calls & STUNner TURN

    Next-step: 1:1 audio/video in direct chats.

    Peer Games

    Same-workflow: game_request interactive type, IncomingGameBanner, and call/game mutex.

    Messaging API

    Deep-dive: REST + tunnel contracts for conversations.

    Push Notifications with FCM (Ring-Powered)

    Next-step: reach members when the tab is closed.

    Документация
    Функции

    Integrator contracts for conversations and typing.

    Typical scenarios

    • Two matched professionals open a direct conversation from an opportunity — it appears in Messages.
    • A buyer asks a store product agent a question — that product chat stays visible in Messages.
    • A vendor or member generates NFT/product art in Generative Gallery — history lives in a hidden tool chat, not the inbox.
    • Typing indicators and read state keep negotiations moving on mobile PWA.
    /api/mcp/v1/messaging/conversations
    Agent tooling

    After writes, publish on Tunnel channel conversation:{id} via publishToChannel — clients subscribe with useTunnelChannel (not raw useTunnel().subscribe() in effects).

    Create body type must be one of: direct | entity | opportunity | product | group (z.enum in app/api/conversations/route.ts). Optional metadata includes productId, groupName, kind, hiddenFromInbox, and domain ids (entityId, opportunityId, …).

    Inbox hide contract

    ConversationService.getConversations skips rows where isHiddenToolConversation is true (features/chat/services/conversation-service.ts):

    1. metadata.hiddenFromInbox === true (preferred long-term gate)
    2. metadata.kind === 'generative_gallery'
    3. Legacy: productId or subject starts with genmedia: or imggen:

    Modules

    PathResponsibility
    features/chat/types/index.tsConversation, CreateConversationRequest, filters
    features/chat/services/conversation-service.tsCRUD + isHiddenToolConversation
    features/chat/, features/messages/Chat UI
    features/generative-media/service.tsCreates hidden product + generative_gallery chats
    features/store/services/product-agent-service.tsCreates visible product agent chats
    lib/tunnel/Hub, publisher, transports
    hooks/use-tunnel-channel.tsStable channel subscribe

    Transports

    • k8s / self-hosted: native WSS /api/tunnel/ws primary
    • Vercel: SSE + long-poll (/api/tunnel/poll)
    • Optional Supabase Realtime when configured

    Full endpoint samples: Messaging API. Architecture: Real-time.

    WebRTC Calls & STUNner TURN

    Next-step: 1:1 audio/video in direct chats.

    Peer Games

    Same-workflow: game_request interactive type, IncomingGameBanner, and call/game mutex.

    Messaging API

    Deep-dive: REST + tunnel contracts for conversations.

    Push Notifications with FCM (Ring-Powered)

    Next-step: reach members when the tab is closed.

    Документация
    Функции