Documentation

    Documentation

    Documentation

    Ring Platform Logo

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

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

    Ring Platform Logo

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

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

    Ring Platform Logo

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

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

    1. /
    2. /Public Profile Pages

    3 min listen

    1. /
    2. /Public Profile Pages

    3 min listen

    1. /
    2. /Public Profile Pages

    3 min listen

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

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    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)

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

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    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)

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

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    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)
    Docs
    Features
    Docs
    Features
    Docs
    Features

    Public Profile Pages

    Ring Platform provides every user with a personalized public profile page at /[locale]/[username]. This is a fully server-rendered Next.js 16 App Router page with dynamic SEO metadata, NFT galleries, blog integration, and staking portfolio display.

    URL Structure

    text
    
    /[locale]/[username]         → Public profile page
    /[locale]/[username]/[slug]  → Blog article page

    Examples: /en/ray, /uk/ivan, /ru/alex

    The route is a Next.js 16 App Router dynamic segment at app/[locale]/[username]/page.tsx. The server-side getUserByUsername() function performs a case-insensitive lookup in the users collection.

    What's on the Page

    Profile Header

    • Avatar — loaded from photoURL with optimized Next.js Image component
    • Display name — <h1> rendered with user.name
    • @Username handle — shown as @{user.username}
    • Bio paragraph — from user.bio, rendered with max-w-2xl
    • Message button — shown only to authenticated users viewing someone else's profile (hidden when viewing own profile or logged out)
    • "Verified by Telegram" badge — shown when isVerified is true from Telegram Bot verification

    NFT Gallery

    • ProfileListings component fetches user's NFT listings from /api/nft-market/listings?username=... (public GET, no auth required)
    • Responsive grid layout with NFT thumbnails
    • Supports ERC-721 and ERC-1155 standards across Polygon and Ethereum

    Blog Section

    • Blog link shown when the user has an active membership payment
    • Blog articles accessible at /blog/{username}/{slug}
    • Articles can be promoted to the main /news feed via the News Kingdom pipeline

    Staking Portfolio

    • Active staking positions and rewards from the Token Staking System
    • Supports DAAR and DAARION pools
    • Performance metrics and historical returns

    Right Rail

    • Activity — recent actions and updates
    • Share Profile — copy profile link
    • Achievements — badges and milestones
    • Platform Guide — link to documentation

    Visibility Controls

    Users control their profile's public visibility through the SetUsernameModal:

    1. Go to Settings → Profile
    2. Click "Change" next to your @username
    3. Toggle the "Personal page" switch
    Granular Toggles Coming Soon

    Individual toggles per contact field (email, phone, location, social links, Telegram) will allow founders to selectively display contact information on their public profile.

    VisibilityBehavior
    PublicProfile page at /[locale]/[username] is fully visible with avatar, name, bio, NFT listings, and blog
    PrivateProfile route returns a 404 Not Found

    Telegram Account Verification

    Users can enhance their profile credibility with Telegram account verification:

    1. Link Telegram via the Telegram Login Widget (features/auth/components/telegram-linking-modal.tsx)
    2. Bot verification — Telegram bot sends a verification code
    3. HMAC validation — callback at app/api/auth/telegram/callback/route.ts validates the auth hash
    4. "Verified by Telegram" badge appears on the public profile, building trust for:
      • NFT marketplace transactions
      • Blog article credibility
      • Contact verification for other members

    Route Architecture

    Key route details:

    • Case-insensitive username matching (.toLowerCase())
    • Server-side rendered with next-intl locale support
    • Dynamic SEO metadata via generateMetadata() — title and description derived from user name and bio
    • 404 returned via notFound() when username doesn't exist
    • No middleware auth guard — the page itself is fully public
    • Blog sub-route at app/[locale]/[username]/[slug]/page.tsx resolves blog articles from the news collection

    API Endpoints

    EndpointMethodPurpose
    /api/auth/check-username?username={name}GETCheck username availability
    /api/nft-market/listings?username={name}GETGet user's NFT listings (public)
    /api/nft-market/listingsPOSTCreate NFT listing (requires auth)
    /api/auth/telegram/callbackPOSTTelegram bot verification callback
    /api/user/favoritesPOSTBookmark a user's blog article

    Related

    • Username Reservation System
    • Member Blogs
    • NFT Marketplace
    • Token Staking System
    • Telegram Bot Integration

    Public Profile Pages

    Ring Platform provides every user with a personalized public profile page at /[locale]/[username]. This is a fully server-rendered Next.js 16 App Router page with dynamic SEO metadata, NFT galleries, blog integration, and staking portfolio display.

    URL Structure

    text
    
    /[locale]/[username]         → Public profile page
    /[locale]/[username]/[slug]  → Blog article page

    Examples: /en/ray, /uk/ivan, /ru/alex

    The route is a Next.js 16 App Router dynamic segment at app/[locale]/[username]/page.tsx. The server-side getUserByUsername() function performs a case-insensitive lookup in the users collection.

    What's on the Page

    Profile Header

    • Avatar — loaded from photoURL with optimized Next.js Image component
    • Display name — <h1> rendered with user.name
    • @Username handle — shown as @{user.username}
    • Bio paragraph — from user.bio, rendered with max-w-2xl
    • Message button — shown only to authenticated users viewing someone else's profile (hidden when viewing own profile or logged out)
    • "Verified by Telegram" badge — shown when isVerified is true from Telegram Bot verification

    NFT Gallery

    • ProfileListings component fetches user's NFT listings from /api/nft-market/listings?username=... (public GET, no auth required)
    • Responsive grid layout with NFT thumbnails
    • Supports ERC-721 and ERC-1155 standards across Polygon and Ethereum

    Blog Section

    • Blog link shown when the user has an active membership payment
    • Blog articles accessible at /blog/{username}/{slug}
    • Articles can be promoted to the main /news feed via the News Kingdom pipeline

    Staking Portfolio

    • Active staking positions and rewards from the Token Staking System
    • Supports DAAR and DAARION pools
    • Performance metrics and historical returns

    Right Rail

    • Activity — recent actions and updates
    • Share Profile — copy profile link
    • Achievements — badges and milestones
    • Platform Guide — link to documentation

    Visibility Controls

    Users control their profile's public visibility through the SetUsernameModal:

    1. Go to Settings → Profile
    2. Click "Change" next to your @username
    3. Toggle the "Personal page" switch
    Granular Toggles Coming Soon

    Individual toggles per contact field (email, phone, location, social links, Telegram) will allow founders to selectively display contact information on their public profile.

    VisibilityBehavior
    PublicProfile page at /[locale]/[username] is fully visible with avatar, name, bio, NFT listings, and blog
    PrivateProfile route returns a 404 Not Found

    Telegram Account Verification

    Users can enhance their profile credibility with Telegram account verification:

    1. Link Telegram via the Telegram Login Widget (features/auth/components/telegram-linking-modal.tsx)
    2. Bot verification — Telegram bot sends a verification code
    3. HMAC validation — callback at app/api/auth/telegram/callback/route.ts validates the auth hash
    4. "Verified by Telegram" badge appears on the public profile, building trust for:
      • NFT marketplace transactions
      • Blog article credibility
      • Contact verification for other members

    Route Architecture

    Key route details:

    • Case-insensitive username matching (.toLowerCase())
    • Server-side rendered with next-intl locale support
    • Dynamic SEO metadata via generateMetadata() — title and description derived from user name and bio
    • 404 returned via notFound() when username doesn't exist
    • No middleware auth guard — the page itself is fully public
    • Blog sub-route at app/[locale]/[username]/[slug]/page.tsx resolves blog articles from the news collection

    API Endpoints

    EndpointMethodPurpose
    /api/auth/check-username?username={name}GETCheck username availability
    /api/nft-market/listings?username={name}GETGet user's NFT listings (public)
    /api/nft-market/listingsPOSTCreate NFT listing (requires auth)
    /api/auth/telegram/callbackPOSTTelegram bot verification callback
    /api/user/favoritesPOSTBookmark a user's blog article

    Related

    • Username Reservation System
    • Member Blogs
    • NFT Marketplace
    • Token Staking System
    • Telegram Bot Integration

    Public Profile Pages

    Ring Platform provides every user with a personalized public profile page at /[locale]/[username]. This is a fully server-rendered Next.js 16 App Router page with dynamic SEO metadata, NFT galleries, blog integration, and staking portfolio display.

    URL Structure

    text
    
    /[locale]/[username]         → Public profile page
    /[locale]/[username]/[slug]  → Blog article page

    Examples: /en/ray, /uk/ivan, /ru/alex

    The route is a Next.js 16 App Router dynamic segment at app/[locale]/[username]/page.tsx. The server-side getUserByUsername() function performs a case-insensitive lookup in the users collection.

    What's on the Page

    Profile Header

    • Avatar — loaded from photoURL with optimized Next.js Image component
    • Display name — <h1> rendered with user.name
    • @Username handle — shown as @{user.username}
    • Bio paragraph — from user.bio, rendered with max-w-2xl
    • Message button — shown only to authenticated users viewing someone else's profile (hidden when viewing own profile or logged out)
    • "Verified by Telegram" badge — shown when isVerified is true from Telegram Bot verification

    NFT Gallery

    • ProfileListings component fetches user's NFT listings from /api/nft-market/listings?username=... (public GET, no auth required)
    • Responsive grid layout with NFT thumbnails
    • Supports ERC-721 and ERC-1155 standards across Polygon and Ethereum

    Blog Section

    • Blog link shown when the user has an active membership payment
    • Blog articles accessible at /blog/{username}/{slug}
    • Articles can be promoted to the main /news feed via the News Kingdom pipeline

    Staking Portfolio

    • Active staking positions and rewards from the Token Staking System
    • Supports DAAR and DAARION pools
    • Performance metrics and historical returns

    Right Rail

    • Activity — recent actions and updates
    • Share Profile — copy profile link
    • Achievements — badges and milestones
    • Platform Guide — link to documentation

    Visibility Controls

    Users control their profile's public visibility through the SetUsernameModal:

    1. Go to Settings → Profile
    2. Click "Change" next to your @username
    3. Toggle the "Personal page" switch
    Granular Toggles Coming Soon

    Individual toggles per contact field (email, phone, location, social links, Telegram) will allow founders to selectively display contact information on their public profile.

    VisibilityBehavior
    PublicProfile page at /[locale]/[username] is fully visible with avatar, name, bio, NFT listings, and blog
    PrivateProfile route returns a 404 Not Found

    Telegram Account Verification

    Users can enhance their profile credibility with Telegram account verification:

    1. Link Telegram via the Telegram Login Widget (features/auth/components/telegram-linking-modal.tsx)
    2. Bot verification — Telegram bot sends a verification code
    3. HMAC validation — callback at app/api/auth/telegram/callback/route.ts validates the auth hash
    4. "Verified by Telegram" badge appears on the public profile, building trust for:
      • NFT marketplace transactions
      • Blog article credibility
      • Contact verification for other members

    Route Architecture

    Key route details:

    • Case-insensitive username matching (.toLowerCase())
    • Server-side rendered with next-intl locale support
    • Dynamic SEO metadata via generateMetadata() — title and description derived from user name and bio
    • 404 returned via notFound() when username doesn't exist
    • No middleware auth guard — the page itself is fully public
    • Blog sub-route at app/[locale]/[username]/[slug]/page.tsx resolves blog articles from the news collection

    API Endpoints

    EndpointMethodPurpose
    /api/auth/check-username?username={name}GETCheck username availability
    /api/nft-market/listings?username={name}GETGet user's NFT listings (public)
    /api/nft-market/listingsPOSTCreate NFT listing (requires auth)
    /api/auth/telegram/callbackPOSTTelegram bot verification callback
    /api/user/favoritesPOSTBookmark a user's blog article

    Related

    • Username Reservation System
    • Member Blogs
    • NFT Marketplace
    • Token Staking System
    • Telegram Bot Integration
    typescript
    
    // app/[locale]/[username]/page.tsx
    export default async function PublicProfilePage(props: LocalePageProps<PublicProfileParams>) {
      const params = await props.params
      const user = await getUserByUsername(params.username)
      if (!user) return notFound() // 404 if username doesn't exist
      // Render profile: avatar, name, bio, NFT listings, blog, staking
    }
    
    // features/auth/services/get-user-by-username.ts
    export const getUserByUsername = cache(async (username: string) => {
      const result = await db().queryDocs({
        collection: 'users',
        filters: [{ field: 'username', operator: '=', value: username.trim().toLowerCase() }],
        pagination: { limit: 1 }
      })
      if (!result.success || result.data.length === 0) return null
      return mapRowToAuthUser(result.data[0])
    })
    typescript
    
    // app/[locale]/[username]/page.tsx
    export default async function PublicProfilePage(props: LocalePageProps<PublicProfileParams>) {
      const params = await props.params
      const user = await getUserByUsername(params.username)
      if (!user) return notFound() // 404 if username doesn't exist
      // Render profile: avatar, name, bio, NFT listings, blog, staking
    }
    
    // features/auth/services/get-user-by-username.ts
    export const getUserByUsername = cache(async (username: string) => {
      const result = await db().queryDocs({
        collection: 'users',
        filters: [{ field: 'username', operator: '=', value: username.trim().toLowerCase() }],
        pagination: { limit: 1 }
      })
      if (!result.success || result.data.length === 0) return null
      return mapRowToAuthUser(result.data[0])
    })
    typescript
    
    // app/[locale]/[username]/page.tsx
    export default async function PublicProfilePage(props: LocalePageProps<PublicProfileParams>) {
      const params = await props.params
      const user = await getUserByUsername(params.username)
      if (!user) return notFound() // 404 if username doesn't exist
      // Render profile: avatar, name, bio, NFT listings, blog, staking
    }
    
    // features/auth/services/get-user-by-username.ts
    export const getUserByUsername = cache(async (username: string) => {
      const result = await db().queryDocs({
        collection: 'users',
        filters: [{ field: 'username', operator: '=', value: username.trim().toLowerCase() }],
        pagination: { limit: 1 }
      })
      if (!result.success || result.data.length === 0) return null
      return mapRowToAuthUser(result.data[0])
    })