Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Profile Account Widgets
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Vertical Presets (SSOT)
    Ringization playbook
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Project configuration
    Public environment variables
    Order Lab secrets
    WalletConnect Project ID (Reown Cloud)
    Supported services
    NODUS wiki (project knowledge)
    Configuration playbook
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel Deployment
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Backend Services
    Firebase Integration
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Profile Account Widgets
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Vertical Presets (SSOT)
    Ringization playbook
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Project configuration
    Public environment variables
    Order Lab secrets
    WalletConnect Project ID (Reown Cloud)
    Supported services
    NODUS wiki (project knowledge)
    Configuration playbook
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel Deployment
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Backend Services
    Firebase Integration
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Profile Account Widgets
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Vertical Presets (SSOT)
    Ringization playbook
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Project configuration
    Public environment variables
    Order Lab secrets
    WalletConnect Project ID (Reown Cloud)
    Supported services
    NODUS wiki (project knowledge)
    Configuration playbook
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel Deployment
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Backend Services
    Firebase Integration
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (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

    Discovery Mutation Sync

    Filter this page with Founder / Developer in the docs sidebar. Founders learn why listings stay fresh; developers get modules, events, and extension points.

    When someone creates, edits, or removes an opportunity or entity on a PostgreSQL-primary Ring clone, users expect the marketplace and directory to update immediately — without a nightly reindex job. Ring coordinates three lightweight steps on every mutation.

    The three-step freshness model

    StepWhat users perceiveWhat happens under the hood
    1. Cache bustList pages stop showing stale cardsrevalidateTag clears role-scoped list caches
    2. Page refreshDetail and hub URLs show new data on next navigationrevalidatePath invalidates App Router SSR
    3. Realtime pingOpen tabs update without manual reloadTunnel publishes opportunity:* / entity:* events

    On Postgres-primary clones, the database row is the search index. There is no separate Elasticsearch table to rebuild — discovery queries read JSONB directly (Data model).

    Why founders should care

    Your clone's directory (entities) and marketplace of needs (opportunities) are the core loop most rings monetize around. Stale listings erode trust faster than a missing feature.

    Typical scenarios

    Job board

    A member posts a contract — approved listings appear on /opportunities and subscribers get Tunnel notifications.

    Vendor directory

    A verified entity updates its showcase — profile pages and public directory refresh without ops intervention.

    AI matcher follow-up

    New opportunities trigger matcher pipelines; fresh cache tags ensure match cards reference current budget and deadline fields.

    Architecture

    Post-mutation sync pipeline

    Shared Tunnel helper

    lib/discovery/sync-discovery.ts — realtime fan-out only (cache + paths live in domain wrappers):

    ChannelTunnel events
    opportunitiesopportunity:created, opportunity:updated, opportunity:deleted
    entitiesentity:created, entity:updated, entity:deleted

    Domain wrappers

    ResourceModuleInvoked from
    Opportunities

    Related documentation

    Related documentation

    Tunnel Protocol

    Prerequisite: channel subscribe SSOT and publishToChannel vs publishToUserTunnel.

    Real Time

    Deep-dive: TunnelHub broker and feature publish/subscribe matrix.

    Data Model

    Depends-on: JSONB collections synced by this pipeline.

    Opportunities

    Same-workflow: REST surface + post-mutation hooks for opportunities.

    Entities

    Discovery Mutation Sync

    Filter this page with Founder / Developer in the docs sidebar. Founders learn why listings stay fresh; developers get modules, events, and extension points.

    When someone creates, edits, or removes an opportunity or entity on a PostgreSQL-primary Ring clone, users expect the marketplace and directory to update immediately — without a nightly reindex job. Ring coordinates three lightweight steps on every mutation.

    The three-step freshness model

    StepWhat users perceiveWhat happens under the hood
    1. Cache bustList pages stop showing stale cardsrevalidateTag clears role-scoped list caches
    2. Page refreshDetail and hub URLs show new data on next navigationrevalidatePath invalidates App Router SSR
    3. Realtime pingOpen tabs update without manual reloadTunnel publishes opportunity:* / entity:* events

    On Postgres-primary clones, the database row is the search index. There is no separate Elasticsearch table to rebuild — discovery queries read JSONB directly (Data model).

    Why founders should care

    Your clone's directory (entities) and marketplace of needs (opportunities) are the core loop most rings monetize around. Stale listings erode trust faster than a missing feature.

    Typical scenarios

    Job board

    A member posts a contract — approved listings appear on /opportunities and subscribers get Tunnel notifications.

    Vendor directory

    A verified entity updates its showcase — profile pages and public directory refresh without ops intervention.

    AI matcher follow-up

    New opportunities trigger matcher pipelines; fresh cache tags ensure match cards reference current budget and deadline fields.

    Architecture

    Post-mutation sync pipeline

    Shared Tunnel helper

    lib/discovery/sync-discovery.ts — realtime fan-out only (cache + paths live in domain wrappers):

    ChannelTunnel events
    opportunitiesopportunity:created, opportunity:updated, opportunity:deleted
    entitiesentity:created, entity:updated, entity:deleted

    Domain wrappers

    ResourceModuleInvoked from
    Opportunities

    Related documentation

    Related documentation

    Tunnel Protocol

    Prerequisite: channel subscribe SSOT and publishToChannel vs publishToUserTunnel.

    Real Time

    Deep-dive: TunnelHub broker and feature publish/subscribe matrix.

    Data Model

    Depends-on: JSONB collections synced by this pipeline.

    Opportunities

    Same-workflow: REST surface + post-mutation hooks for opportunities.

    Entities

    Discovery Mutation Sync

    Filter this page with Founder / Developer in the docs sidebar. Founders learn why listings stay fresh; developers get modules, events, and extension points.

    When someone creates, edits, or removes an opportunity or entity on a PostgreSQL-primary Ring clone, users expect the marketplace and directory to update immediately — without a nightly reindex job. Ring coordinates three lightweight steps on every mutation.

    The three-step freshness model

    StepWhat users perceiveWhat happens under the hood
    1. Cache bustList pages stop showing stale cardsrevalidateTag clears role-scoped list caches
    2. Page refreshDetail and hub URLs show new data on next navigationrevalidatePath invalidates App Router SSR
    3. Realtime pingOpen tabs update without manual reloadTunnel publishes opportunity:* / entity:* events

    On Postgres-primary clones, the database row is the search index. There is no separate Elasticsearch table to rebuild — discovery queries read JSONB directly (Data model).

    Why founders should care

    Your clone's directory (entities) and marketplace of needs (opportunities) are the core loop most rings monetize around. Stale listings erode trust faster than a missing feature.

    Typical scenarios

    Job board

    A member posts a contract — approved listings appear on /opportunities and subscribers get Tunnel notifications.

    Vendor directory

    A verified entity updates its showcase — profile pages and public directory refresh without ops intervention.

    AI matcher follow-up

    New opportunities trigger matcher pipelines; fresh cache tags ensure match cards reference current budget and deadline fields.

    Architecture

    Post-mutation sync pipeline

    Shared Tunnel helper

    lib/discovery/sync-discovery.ts — realtime fan-out only (cache + paths live in domain wrappers):

    ChannelTunnel events
    opportunitiesopportunity:created, opportunity:updated, opportunity:deleted
    entitiesentity:created, entity:updated, entity:deleted

    Domain wrappers

    ResourceModuleInvoked from
    Opportunities

    Related documentation

    Related documentation

    Tunnel Protocol

    Prerequisite: channel subscribe SSOT and publishToChannel vs publishToUserTunnel.

    Real Time

    Deep-dive: TunnelHub broker and feature publish/subscribe matrix.

    Data Model

    Depends-on: JSONB collections synced by this pipeline.

    Opportunities

    Same-workflow: REST surface + post-mutation hooks for opportunities.

    Entities

    Moderation workflow

    Admin approve/reject flows call the same sync — status changes behave like updates for subscribers watching the channel.

    Operator expectations

    • No manual reindex CLI for standard CRUD — if lists look stale, check Tunnel transport and DB_BACKEND_MODE first.
    • Confidential tiers share list cache tags; path revalidation is minimized for narrow audiences (see developer table below).
    • Maps / graph views (Ringdom Maps) are a separate store today — entity CRUD does not auto-update map nodes.
    features/opportunities/lib/opportunity-mutation-sync.ts
    create-opportunity, update-opportunity, delete-opportunity, auto-approval-service
    Entitiesfeatures/entities/lib/entity-mutation-sync.tscreate-entity, update-entity, delete-entity, moderation + KYC hooks
    1. 1

      After any opportunity mutation

    2. 2

      After any entity mutation

    3. 3

      Subscribe on the client

      Wire topic listeners with useTunnelChannel — production hooks parse syncDiscovery payloads via lib/discovery/parse-discovery-tunnel-message.ts ({ id, event } + message.event like entity:created).

      ChannelHookUI wiring
      opportunitieshooks/use-realtime-opportunities.tsfeatures/opportunities/components/opportunities.tsx
      entitieshooks/use-realtime-entities.tsfeatures/entities/components/entities.tsx — deletes splice locally; create/update soft-reloads the cursor feed

      See Realtime transport and Tunnel protocol.

    Revalidated paths

    Opportunities

    • /[locale]/opportunities
    • /[locale]/opportunities/[id]
    • /[locale]/opportunities/my
    • /opportunities (on create / status change)

    Entities

    • /[locale]/entities
    • /[locale]/entities/[id]
    • /[locale]/entities/my
    • /entities (on create / status change)

    Paths intentionally omitted

    PathReason
    /[locale]/entities/addOne-shot form; redirect after create
    /[locale]/entities/status/...Payment callbacks — unrelated to CRUD discovery
    /[locale]/confidential/entitiesTag invalidation sufficient; avoids extra path churn
    Ringdom Maps nodesSeparate graph store — not wired to entity list caches

    Row mapping

    Reads map DatabaseService rows through:

    • features/opportunities/lib/opportunity-db-mapper.ts
    • features/entities/lib/entity-db-mapper.ts

    Legacy Firestore converters under lib/converters/*-converter.ts apply only when DB_BACKEND_MODE=firebase-full.

    Same-workflow: REST surface + post-mutation hooks for entities.

    Moderation workflow

    Admin approve/reject flows call the same sync — status changes behave like updates for subscribers watching the channel.

    Operator expectations

    • No manual reindex CLI for standard CRUD — if lists look stale, check Tunnel transport and DB_BACKEND_MODE first.
    • Confidential tiers share list cache tags; path revalidation is minimized for narrow audiences (see developer table below).
    • Maps / graph views (Ringdom Maps) are a separate store today — entity CRUD does not auto-update map nodes.
    features/opportunities/lib/opportunity-mutation-sync.ts
    create-opportunity, update-opportunity, delete-opportunity, auto-approval-service
    Entitiesfeatures/entities/lib/entity-mutation-sync.tscreate-entity, update-entity, delete-entity, moderation + KYC hooks
    1. 1

      After any opportunity mutation

    2. 2

      After any entity mutation

    3. 3

      Subscribe on the client

      Wire topic listeners with useTunnelChannel — production hooks parse syncDiscovery payloads via lib/discovery/parse-discovery-tunnel-message.ts ({ id, event } + message.event like entity:created).

      ChannelHookUI wiring
      opportunitieshooks/use-realtime-opportunities.tsfeatures/opportunities/components/opportunities.tsx
      entitieshooks/use-realtime-entities.tsfeatures/entities/components/entities.tsx — deletes splice locally; create/update soft-reloads the cursor feed

      See Realtime transport and Tunnel protocol.

    Revalidated paths

    Opportunities

    • /[locale]/opportunities
    • /[locale]/opportunities/[id]
    • /[locale]/opportunities/my
    • /opportunities (on create / status change)

    Entities

    • /[locale]/entities
    • /[locale]/entities/[id]
    • /[locale]/entities/my
    • /entities (on create / status change)

    Paths intentionally omitted

    PathReason
    /[locale]/entities/addOne-shot form; redirect after create
    /[locale]/entities/status/...Payment callbacks — unrelated to CRUD discovery
    /[locale]/confidential/entitiesTag invalidation sufficient; avoids extra path churn
    Ringdom Maps nodesSeparate graph store — not wired to entity list caches

    Row mapping

    Reads map DatabaseService rows through:

    • features/opportunities/lib/opportunity-db-mapper.ts
    • features/entities/lib/entity-db-mapper.ts

    Legacy Firestore converters under lib/converters/*-converter.ts apply only when DB_BACKEND_MODE=firebase-full.

    Same-workflow: REST surface + post-mutation hooks for entities.

    Moderation workflow

    Admin approve/reject flows call the same sync — status changes behave like updates for subscribers watching the channel.

    Operator expectations

    • No manual reindex CLI for standard CRUD — if lists look stale, check Tunnel transport and DB_BACKEND_MODE first.
    • Confidential tiers share list cache tags; path revalidation is minimized for narrow audiences (see developer table below).
    • Maps / graph views (Ringdom Maps) are a separate store today — entity CRUD does not auto-update map nodes.
    features/opportunities/lib/opportunity-mutation-sync.ts
    create-opportunity, update-opportunity, delete-opportunity, auto-approval-service
    Entitiesfeatures/entities/lib/entity-mutation-sync.tscreate-entity, update-entity, delete-entity, moderation + KYC hooks
    1. 1

      After any opportunity mutation

    2. 2

      After any entity mutation

    3. 3

      Subscribe on the client

      Wire topic listeners with useTunnelChannel — production hooks parse syncDiscovery payloads via lib/discovery/parse-discovery-tunnel-message.ts ({ id, event } + message.event like entity:created).

      ChannelHookUI wiring
      opportunitieshooks/use-realtime-opportunities.tsfeatures/opportunities/components/opportunities.tsx
      entitieshooks/use-realtime-entities.tsfeatures/entities/components/entities.tsx — deletes splice locally; create/update soft-reloads the cursor feed

      See Realtime transport and Tunnel protocol.

    Revalidated paths

    Opportunities

    • /[locale]/opportunities
    • /[locale]/opportunities/[id]
    • /[locale]/opportunities/my
    • /opportunities (on create / status change)

    Entities

    • /[locale]/entities
    • /[locale]/entities/[id]
    • /[locale]/entities/my
    • /entities (on create / status change)

    Paths intentionally omitted

    PathReason
    /[locale]/entities/addOne-shot form; redirect after create
    /[locale]/entities/status/...Payment callbacks — unrelated to CRUD discovery
    /[locale]/confidential/entitiesTag invalidation sufficient; avoids extra path churn
    Ringdom Maps nodesSeparate graph store — not wired to entity list caches

    Row mapping

    Reads map DatabaseService rows through:

    • features/opportunities/lib/opportunity-db-mapper.ts
    • features/entities/lib/entity-db-mapper.ts

    Legacy Firestore converters under lib/converters/*-converter.ts apply only when DB_BACKEND_MODE=firebase-full.

    Same-workflow: REST surface + post-mutation hooks for entities.

    1. Docs
    2. /Architecture
    3. /Discovery Mutation Sync

    Updated Jul 20, 20263 min listen

    1. Docs
    2. /Architecture
    3. /Discovery Mutation Sync

    Updated Jul 20, 20263 min listen

    1. Docs
    2. /Architecture
    3. /Discovery Mutation Sync

    Updated Jul 20, 20263 min listen