OpportunitiesEntities
Docs
    Ring Platform

    Decentralized Self-building Future

    Sign In
    Entities
    Opportunities
    Store
    Docs
    Platform Concepts
    RING EconomySonoratek LLCGlobal ImpactAI Meets Web3
    Get Started
    Quick StartCalculatorRoadmap
    Privacy|Contact
    v1.104.14|Sonoratek LLC

    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 Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Analytics API

    Use Founder / Developer tabs in the docs sidebar to filter this page. Admin console surfaces consume these routes; third-party providers are optional env hooks.

    Ring ships a first-party analytics pipeline: client telemetry is ingested over /api/analytics/*, Zod-validated at the route boundary, persisted to analytics_events / web_vitals / analytics_errors, and read back by admin-scoped GET routes. Storage can be disabled entirely per environment — every route then acknowledges without writing.

    Previous (GA-only setup)Ring equivalent
    Third-party SDK only, data leaves your cloneFirst-party ingestion into your own database
    One opaque dashboardAdmin-scoped reads + platform stats with role gates
    No device/session contextsessionId batches, device telemetry with tunnel fan-out
    Web Vitals left unmeasuredCore Web Vitals ingestion + computed performanceScore

    Route surface

    EndpointMethodAuthPurpose
    /api/analytics/appPOSToptional userIdBatched app events → analytics_events
    /api/analytics/devicePOSTsession requiredDevice telemetry → device_telemetry + user tunnel fan-out
    /api/analytics/navigationPOST—Light acknowledgement stub (no storage)
    /api/analytics/errorsPOSToptional userIdClient error capture → analytics_errors (deferred write)
    /api/analytics/errorsGET

    Why this matters for your clone

    • Your data stays on your Ring. Ingestion writes to your own database; nothing is shipped to a third party unless you opt into GA/Mixpanel/Amplitude env hooks.
    • Admin console stats — platform counts and Web Vitals summaries are role-gated to platform admin.
    • Kill switch — ANALYTICS_DISABLE_STORAGE=true turns persistence off without code changes; endpoints keep answering.
    • Docs and personal-page telemetry — the platform summary also aggregates docs 404s and personal-page visits (getPlatformAnalytics).

    Optional third-party hooks (env only)

    VariableProvider
    GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRETGoogle Analytics
    MIXPANEL_TOKENMixpanel
    AMPLITUDE_API_KEYAmplitude
    SENTRY_DSNSentry error tracking

    Ingestion contract

    All writes are non-blocking: validation happens synchronously, then persistence runs in Next.js after() so the client response is never held up. Batch schema (verified in features/analytics/lib/analytics-db.ts):

    Invalid payloads return 400 with the first Zod issue. Batches beyond 50 events are rejected, not silently truncated.

    Where each route writes

    RouteValidation moduleStorage
    appappAnalyticsBatchSchemaanalytics_events
    devicedeviceTelemetryBodySchema (device-telemetry-db.ts)device telemetry + publishToUserTunnel via telemetryChannelForDomain
    errorsanalyticsErrorPayloadSchemaanalytics_errors (userId enriched inside after())

    Configuration

    VariableDefaultEffect
    ANALYTICS_DISABLE_STORAGEunset"true" acknowledges events without writing to the database

    Related documentation

    Related documentation

    Admin API

    Next-step: admin-scoped API routes and RBAC patterns after analytics ingestion.

    Performance Optimization Patterns

    Same-workflow: Web Vitals telemetry feeds the performance feature pages.

    Data Validation

    Deep-dive: the Zod route-boundary guards every ingestion route uses.

    Analytics API

    Use Founder / Developer tabs in the docs sidebar to filter this page. Admin console surfaces consume these routes; third-party providers are optional env hooks.

    Ring ships a first-party analytics pipeline: client telemetry is ingested over /api/analytics/*, Zod-validated at the route boundary, persisted to analytics_events / web_vitals / analytics_errors, and read back by admin-scoped GET routes. Storage can be disabled entirely per environment — every route then acknowledges without writing.

    Previous (GA-only setup)Ring equivalent
    Third-party SDK only, data leaves your cloneFirst-party ingestion into your own database
    One opaque dashboardAdmin-scoped reads + platform stats with role gates
    No device/session contextsessionId batches, device telemetry with tunnel fan-out
    Web Vitals left unmeasuredCore Web Vitals ingestion + computed performanceScore

    Route surface

    EndpointMethodAuthPurpose
    /api/analytics/appPOSToptional userIdBatched app events → analytics_events
    /api/analytics/devicePOSTsession requiredDevice telemetry → device_telemetry + user tunnel fan-out
    /api/analytics/navigationPOST—Light acknowledgement stub (no storage)
    /api/analytics/errorsPOSToptional userIdClient error capture → analytics_errors (deferred write)
    /api/analytics/errorsGET

    Why this matters for your clone

    • Your data stays on your Ring. Ingestion writes to your own database; nothing is shipped to a third party unless you opt into GA/Mixpanel/Amplitude env hooks.
    • Admin console stats — platform counts and Web Vitals summaries are role-gated to platform admin.
    • Kill switch — ANALYTICS_DISABLE_STORAGE=true turns persistence off without code changes; endpoints keep answering.
    • Docs and personal-page telemetry — the platform summary also aggregates docs 404s and personal-page visits (getPlatformAnalytics).

    Optional third-party hooks (env only)

    VariableProvider
    GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRETGoogle Analytics
    MIXPANEL_TOKENMixpanel
    AMPLITUDE_API_KEYAmplitude
    SENTRY_DSNSentry error tracking

    Ingestion contract

    All writes are non-blocking: validation happens synchronously, then persistence runs in Next.js after() so the client response is never held up. Batch schema (verified in features/analytics/lib/analytics-db.ts):

    Invalid payloads return 400 with the first Zod issue. Batches beyond 50 events are rejected, not silently truncated.

    Where each route writes

    RouteValidation moduleStorage
    appappAnalyticsBatchSchemaanalytics_events
    devicedeviceTelemetryBodySchema (device-telemetry-db.ts)device telemetry + publishToUserTunnel via telemetryChannelForDomain
    errorsanalyticsErrorPayloadSchemaanalytics_errors (userId enriched inside after())

    Configuration

    VariableDefaultEffect
    ANALYTICS_DISABLE_STORAGEunset"true" acknowledges events without writing to the database

    Related documentation

    Related documentation

    Admin API

    Next-step: admin-scoped API routes and RBAC patterns after analytics ingestion.

    Performance Optimization Patterns

    Same-workflow: Web Vitals telemetry feeds the performance feature pages.

    Data Validation

    Deep-dive: the Zod route-boundary guards every ingestion route uses.

    Analytics API

    Use Founder / Developer tabs in the docs sidebar to filter this page. Admin console surfaces consume these routes; third-party providers are optional env hooks.

    Ring ships a first-party analytics pipeline: client telemetry is ingested over /api/analytics/*, Zod-validated at the route boundary, persisted to analytics_events / web_vitals / analytics_errors, and read back by admin-scoped GET routes. Storage can be disabled entirely per environment — every route then acknowledges without writing.

    Previous (GA-only setup)Ring equivalent
    Third-party SDK only, data leaves your cloneFirst-party ingestion into your own database
    One opaque dashboardAdmin-scoped reads + platform stats with role gates
    No device/session contextsessionId batches, device telemetry with tunnel fan-out
    Web Vitals left unmeasuredCore Web Vitals ingestion + computed performanceScore

    Route surface

    EndpointMethodAuthPurpose
    /api/analytics/appPOSToptional userIdBatched app events → analytics_events
    /api/analytics/devicePOSTsession requiredDevice telemetry → device_telemetry + user tunnel fan-out
    /api/analytics/navigationPOST—Light acknowledgement stub (no storage)
    /api/analytics/errorsPOSToptional userIdClient error capture → analytics_errors (deferred write)
    /api/analytics/errorsGET

    Why this matters for your clone

    • Your data stays on your Ring. Ingestion writes to your own database; nothing is shipped to a third party unless you opt into GA/Mixpanel/Amplitude env hooks.
    • Admin console stats — platform counts and Web Vitals summaries are role-gated to platform admin.
    • Kill switch — ANALYTICS_DISABLE_STORAGE=true turns persistence off without code changes; endpoints keep answering.
    • Docs and personal-page telemetry — the platform summary also aggregates docs 404s and personal-page visits (getPlatformAnalytics).

    Optional third-party hooks (env only)

    VariableProvider
    GA_TRACKING_ID / GA4_MEASUREMENT_PROTOCOL_SECRETGoogle Analytics
    MIXPANEL_TOKENMixpanel
    AMPLITUDE_API_KEYAmplitude
    SENTRY_DSNSentry error tracking

    Ingestion contract

    All writes are non-blocking: validation happens synchronously, then persistence runs in Next.js after() so the client response is never held up. Batch schema (verified in features/analytics/lib/analytics-db.ts):

    Invalid payloads return 400 with the first Zod issue. Batches beyond 50 events are rejected, not silently truncated.

    Where each route writes

    RouteValidation moduleStorage
    appappAnalyticsBatchSchemaanalytics_events
    devicedeviceTelemetryBodySchema (device-telemetry-db.ts)device telemetry + publishToUserTunnel via telemetryChannelForDomain
    errorsanalyticsErrorPayloadSchemaanalytics_errors (userId enriched inside after())

    Configuration

    VariableDefaultEffect
    ANALYTICS_DISABLE_STORAGEunset"true" acknowledges events without writing to the database

    Related documentation

    Related documentation

    Admin API

    Next-step: admin-scoped API routes and RBAC patterns after analytics ingestion.

    Performance Optimization Patterns

    Same-workflow: Web Vitals telemetry feeds the performance feature pages.

    Data Validation

    Deep-dive: the Zod route-boundary guards every ingestion route uses.

    platform admin
    Error listing with severity/component filters
    /api/analytics/web-vitalsPOSToptional userIdCore Web Vitals + performanceScore → web_vitals (deferred write)
    /api/analytics/web-vitalsGETplatform adminscope=platform summary or per-user; timeframe 24h / 7d / 30d
    /api/analytics/platform-statsGETplatform adminLive counts for users, entities, opportunities
    DD_API_KEY / DD_APP_KEY
    Datadog

    None are required — Ring's own pipeline works without them.

    web-vitals
    webVitalsInputSchema + calculatePerformanceScore
    web_vitals with detected platform/browser
    navigationnone (stub)nothing — returns { ok: true }

    Admin reads

    • GET /api/analytics/platform-stats — isPlatformAdmin(session.user.role) gate; concurrent countDocs over users / entities / opportunities.
    • GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary via getPlatformAnalyticsSummary; omit scope for per-user metrics.
    • Aggregation SSOT: features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).
    platform admin
    Error listing with severity/component filters
    /api/analytics/web-vitalsPOSToptional userIdCore Web Vitals + performanceScore → web_vitals (deferred write)
    /api/analytics/web-vitalsGETplatform adminscope=platform summary or per-user; timeframe 24h / 7d / 30d
    /api/analytics/platform-statsGETplatform adminLive counts for users, entities, opportunities
    DD_API_KEY / DD_APP_KEY
    Datadog

    None are required — Ring's own pipeline works without them.

    web-vitals
    webVitalsInputSchema + calculatePerformanceScore
    web_vitals with detected platform/browser
    navigationnone (stub)nothing — returns { ok: true }

    Admin reads

    • GET /api/analytics/platform-stats — isPlatformAdmin(session.user.role) gate; concurrent countDocs over users / entities / opportunities.
    • GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary via getPlatformAnalyticsSummary; omit scope for per-user metrics.
    • Aggregation SSOT: features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).
    platform admin
    Error listing with severity/component filters
    /api/analytics/web-vitalsPOSToptional userIdCore Web Vitals + performanceScore → web_vitals (deferred write)
    /api/analytics/web-vitalsGETplatform adminscope=platform summary or per-user; timeframe 24h / 7d / 30d
    /api/analytics/platform-statsGETplatform adminLive counts for users, entities, opportunities
    DD_API_KEY / DD_APP_KEY
    Datadog

    None are required — Ring's own pipeline works without them.

    web-vitals
    webVitalsInputSchema + calculatePerformanceScore
    web_vitals with detected platform/browser
    navigationnone (stub)nothing — returns { ok: true }

    Admin reads

    • GET /api/analytics/platform-stats — isPlatformAdmin(session.user.role) gate; concurrent countDocs over users / entities / opportunities.
    • GET /api/analytics/web-vitals?scope=platform&timeframe=30d — platform summary via getPlatformAnalyticsSummary; omit scope for per-user metrics.
    • Aggregation SSOT: features/analytics/services/get-platform-analytics.ts (core summary + docs not-found + personal-page stats).
    1. Docs
    2. /API
    3. /Analytics API

    Updated Aug 23, 20263 min listen

    1. Docs
    2. /API
    3. /Analytics API

    Updated Aug 23, 20263 min listen

    1. Docs
    2. /API
    3. /Analytics API

    Updated Aug 23, 20263 min listen