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
    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
    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
    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

    Vercel Deployment

    Use the Founder / Developer tabs in the docs sidebar to filter this page for your role. audience frontmatter controls content filtering within the page. Sidebar article visibility is controlled separately by lib/docs/audience-curated-docs.ts.

    Vercel is a first-class Ring deploy target — equal in the backend matrix to Firebase Hosting / Cloud Run and k3s. The app runs as Next.js serverless route handlers (no custom server.ts). Platform Cron reads root vercel.json and invokes each ProcessConductor path on a UTC schedule.

    ConcernVercel truth
    Deploy flagsRING_DEPLOY_TARGET=vercel, NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    RuntimeServerless only — no custom Node server.ts
    TunnelSSE + long-polling (no native WSS)
    Cron catalogvercel.json → crons[] — must list every ProcessConductor cronPath
    Auth gateAuthorization: Bearer $CRON_SECRET on /api/cron/*

    Why Vercel Cron matters for clone health

    ProcessConductor runs 19 background pipelines (email poll, cleanups, settlements, membership expiry, peer-game session expiry, Forgejo lab GC, and more). On Vercel, Platform Cron hits the same HTTP routes your Admin → Background Processes panel records. If CRON_SECRET is missing or crons[] is incomplete, those jobs silently never run.

    Operator checklist

    1. Import the Ring repo in the Vercel dashboard and deploy the main branch.
    2. Copy required secrets from Environment variables — include a long random CRON_SECRET.
    3. Set RING_DEPLOY_TARGET=vercel and NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel.
    4. Confirm root vercel.json crons[] lists every ProcessConductor path (schedule SSOT for all backends).
    5. After deploy, open Admin → Background Processes and verify runs appear.
    6. Expect Tunnel over SSE + long-polling only — native WebSocket is a self-hosted / custom-server concern.

    Hosting on Firebase instead? Same cron URLs and schedules — trigger with Google Cloud Scheduler, using vercel.json as the catalog. See Firebase Integration.

    Environment variables

    Deploy on Vercel

    1. 1

      Push the Ring repo to GitHub (or connect another Git provider Vercel supports).

    2. 2

      Import the project in the Vercel dashboard. Framework preset: Next.js. Root directory: the Ring app root (where package.json and vercel.json live).

    3. 3

      Set environment variables (see Environment), including:

      Plus your DB_BACKEND_MODE and backend-specific secrets (AUTH_FIREBASE_*, Postgres URL, payment keys, etc.).

    4. 4

      Deploy the production branch. Confirm Platform Cron shows the paths from vercel.json.

    Vercel runs serverless route handlers only — there is no custom server.ts. Tunnel uses SSE + long-polling; native WSS is unavailable on this target (server.ts logs SSE-only when RING_DEPLOY_TARGET=vercel).

    ProcessConductor + vercel.json

    LayerPath
    Pipeline SSOTlib/processes/registry.ts — PIPELINE_IDS + PIPELINE_REGISTRY (19)

    Related documentation

    Related documentation

    Firebase Integration

    Same-workflow: Firebase-hosted rings use Cloud Scheduler + this vercel.json catalog (firebase.json is not cron).

    Environment Configuration

    Depends-on: CRON_SECRET, RING_DEPLOY_TARGET, and backend secrets.

    Admin console

    Next-step: Admin → Background Processes for recorded pipeline runs.

    Email AI-CRM

    Same-workflow: email-processor and email-analytics cron pipelines.

    1. Docs
    2. /Deployment
    3. /Vercel Deployment

    Updated Aug 3, 20264 min listen

    Vercel Deployment

    Use the Founder / Developer tabs in the docs sidebar to filter this page for your role. audience frontmatter controls content filtering within the page. Sidebar article visibility is controlled separately by lib/docs/audience-curated-docs.ts.

    Vercel is a first-class Ring deploy target — equal in the backend matrix to Firebase Hosting / Cloud Run and k3s. The app runs as Next.js serverless route handlers (no custom server.ts). Platform Cron reads root vercel.json and invokes each ProcessConductor path on a UTC schedule.

    ConcernVercel truth
    Deploy flagsRING_DEPLOY_TARGET=vercel, NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    RuntimeServerless only — no custom Node server.ts
    TunnelSSE + long-polling (no native WSS)
    Cron catalogvercel.json → crons[] — must list every ProcessConductor cronPath
    Auth gateAuthorization: Bearer $CRON_SECRET on /api/cron/*

    Why Vercel Cron matters for clone health

    ProcessConductor runs 19 background pipelines (email poll, cleanups, settlements, membership expiry, peer-game session expiry, Forgejo lab GC, and more). On Vercel, Platform Cron hits the same HTTP routes your Admin → Background Processes panel records. If CRON_SECRET is missing or crons[] is incomplete, those jobs silently never run.

    Operator checklist

    1. Import the Ring repo in the Vercel dashboard and deploy the main branch.
    2. Copy required secrets from Environment variables — include a long random CRON_SECRET.
    3. Set RING_DEPLOY_TARGET=vercel and NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel.
    4. Confirm root vercel.json crons[] lists every ProcessConductor path (schedule SSOT for all backends).
    5. After deploy, open Admin → Background Processes and verify runs appear.
    6. Expect Tunnel over SSE + long-polling only — native WebSocket is a self-hosted / custom-server concern.

    Hosting on Firebase instead? Same cron URLs and schedules — trigger with Google Cloud Scheduler, using vercel.json as the catalog. See Firebase Integration.

    Environment variables

    Deploy on Vercel

    1. 1

      Push the Ring repo to GitHub (or connect another Git provider Vercel supports).

    2. 2

      Import the project in the Vercel dashboard. Framework preset: Next.js. Root directory: the Ring app root (where package.json and vercel.json live).

    3. 3

      Set environment variables (see Environment), including:

      Plus your DB_BACKEND_MODE and backend-specific secrets (AUTH_FIREBASE_*, Postgres URL, payment keys, etc.).

    4. 4

      Deploy the production branch. Confirm Platform Cron shows the paths from vercel.json.

    Vercel runs serverless route handlers only — there is no custom server.ts. Tunnel uses SSE + long-polling; native WSS is unavailable on this target (server.ts logs SSE-only when RING_DEPLOY_TARGET=vercel).

    ProcessConductor + vercel.json

    LayerPath
    Pipeline SSOTlib/processes/registry.ts — PIPELINE_IDS + PIPELINE_REGISTRY (19)

    Related documentation

    Related documentation

    Firebase Integration

    Same-workflow: Firebase-hosted rings use Cloud Scheduler + this vercel.json catalog (firebase.json is not cron).

    Environment Configuration

    Depends-on: CRON_SECRET, RING_DEPLOY_TARGET, and backend secrets.

    Admin console

    Next-step: Admin → Background Processes for recorded pipeline runs.

    Email AI-CRM

    Same-workflow: email-processor and email-analytics cron pipelines.

    1. Docs
    2. /Deployment
    3. /Vercel Deployment

    Updated Aug 3, 20264 min listen

    Vercel Deployment

    Use the Founder / Developer tabs in the docs sidebar to filter this page for your role. audience frontmatter controls content filtering within the page. Sidebar article visibility is controlled separately by lib/docs/audience-curated-docs.ts.

    Vercel is a first-class Ring deploy target — equal in the backend matrix to Firebase Hosting / Cloud Run and k3s. The app runs as Next.js serverless route handlers (no custom server.ts). Platform Cron reads root vercel.json and invokes each ProcessConductor path on a UTC schedule.

    ConcernVercel truth
    Deploy flagsRING_DEPLOY_TARGET=vercel, NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    RuntimeServerless only — no custom Node server.ts
    TunnelSSE + long-polling (no native WSS)
    Cron catalogvercel.json → crons[] — must list every ProcessConductor cronPath
    Auth gateAuthorization: Bearer $CRON_SECRET on /api/cron/*

    Why Vercel Cron matters for clone health

    ProcessConductor runs 19 background pipelines (email poll, cleanups, settlements, membership expiry, peer-game session expiry, Forgejo lab GC, and more). On Vercel, Platform Cron hits the same HTTP routes your Admin → Background Processes panel records. If CRON_SECRET is missing or crons[] is incomplete, those jobs silently never run.

    Operator checklist

    1. Import the Ring repo in the Vercel dashboard and deploy the main branch.
    2. Copy required secrets from Environment variables — include a long random CRON_SECRET.
    3. Set RING_DEPLOY_TARGET=vercel and NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel.
    4. Confirm root vercel.json crons[] lists every ProcessConductor path (schedule SSOT for all backends).
    5. After deploy, open Admin → Background Processes and verify runs appear.
    6. Expect Tunnel over SSE + long-polling only — native WebSocket is a self-hosted / custom-server concern.

    Hosting on Firebase instead? Same cron URLs and schedules — trigger with Google Cloud Scheduler, using vercel.json as the catalog. See Firebase Integration.

    Environment variables

    Deploy on Vercel

    1. 1

      Push the Ring repo to GitHub (or connect another Git provider Vercel supports).

    2. 2

      Import the project in the Vercel dashboard. Framework preset: Next.js. Root directory: the Ring app root (where package.json and vercel.json live).

    3. 3

      Set environment variables (see Environment), including:

      Plus your DB_BACKEND_MODE and backend-specific secrets (AUTH_FIREBASE_*, Postgres URL, payment keys, etc.).

    4. 4

      Deploy the production branch. Confirm Platform Cron shows the paths from vercel.json.

    Vercel runs serverless route handlers only — there is no custom server.ts. Tunnel uses SSE + long-polling; native WSS is unavailable on this target (server.ts logs SSE-only when RING_DEPLOY_TARGET=vercel).

    ProcessConductor + vercel.json

    LayerPath
    Pipeline SSOTlib/processes/registry.ts — PIPELINE_IDS + PIPELINE_REGISTRY (19)

    Related documentation

    Related documentation

    Firebase Integration

    Same-workflow: Firebase-hosted rings use Cloud Scheduler + this vercel.json catalog (firebase.json is not cron).

    Environment Configuration

    Depends-on: CRON_SECRET, RING_DEPLOY_TARGET, and backend secrets.

    Admin console

    Next-step: Admin → Background Processes for recorded pipeline runs.

    Email AI-CRM

    Same-workflow: email-processor and email-analytics cron pipelines.

    1. Docs
    2. /Deployment
    3. /Vercel Deployment

    Updated Aug 3, 20264 min listen

    Firebase + Cloud Scheduler

    Admin console

    HTTP routes
    app/api/cron/<name>/route.ts — GET/POST
    Schedule catalogring-platform.org/vercel.json → crons[] (UTC)
    LedgerProcessConductor.recordRun
    Admin copylocales/*/modules/admin.json → processes.pipelines.*
    Ops write-upAI-RING/scripts/PIPELINES.md § ProcessConductor cron pipelines

    Parity rule: vercel.json must list every ProcessConductor cronPath. Firebase-hosted rings reuse this file as the schedule catalog for Cloud Scheduler. k3s uses per-job YAML under k8s/ (e.g. cronjob-email-processor.yaml) curling an in-cluster URL — not a single inventory file.

    Full schedule catalog (UTC)

    Pipeline IDcronPathschedule
    email-processor/api/cron/email-processor*/5 * * * *
    email-analytics/api/cron/email-analytics0 6 * * *
    refcodes-mint/api/cron/refcodes-mint*/30 * * * *
    cleanup-reservations/api/cron/cleanup-reservations*/15 * * * *
    cleanup-usernames/api/cron/cleanup-usernames*/5 * * * *
    cleanup-news-deleted/api/cron/cleanup-news-deleted0 3 * * 0
    cleanup-email-tokens/api/cron/cleanup-email-tokens0 */6 * * *
    train/api/cron/train0 2 * * *
    settlement-payout/api/cron/settlement-payout0 1 * * *
    inventory-drift/api/cron/inventory-drift0 */6 * * *
    subscription-expiry-check/api/cron/subscription-expiry0 0 * * *
    credit-balance-monthly/api/cron/credit-balance-monthly0 * * * *
    subscription-payment/api/cron/subscription-payment0 2 * * *
    solana-batch-payment/api/cron/solana-batch-payment0 3 * * *
    nft-gate-expiry/api/cron/nft-gate-expiry0 4 * * *
    close-expired-polls/api/cron/close-expired-polls*/5 * * * *
    peer-game-session-expiry/api/cron/peer-game-session-expiry*/5 * * * *
    forgejo-robot-gc/api/cron/forgejo-robot-gc0 4 * * 0
    forgejo-token-rotate/api/cron/forgejo-token-rotate0 5 1 * *

    Example vercel.json shape (every ProcessConductor path must appear):

    Auth smoke test

    Fail-closed: missing/wrong bearer → 401.

    Adding a pipeline

    1. Register in lib/processes/registry.ts (PIPELINE_IDS + PIPELINE_REGISTRY with cronPath).
    2. Add app/api/cron/<name>/route.ts (Bearer gate + ProcessConductor.recordRun).
    3. Add Admin labels under locales/*/modules/admin.json → processes.pipelines.*.
    4. Append { path, schedule } to vercel.json crons[].
    5. Optionally add k8s/cronjob-<name>.yaml for cluster deploys.

    Ops notes: forgejo-robot-gc supports ?dryRun=1; forgejo-token-rotate uses FORGEJO_TOKEN_ROTATE_MAX_AGE_DAYS / FORGEJO_TOKEN_ROTATE_LIMIT.

    Self-hosted deployment

    See-also: k3s path with native WSS and per-job CronJob YAML.

    Backend modes and databases

    Prerequisite: pick DB_BACKEND_MODE before choosing a host.

    bash
    
    RING_DEPLOY_TARGET=vercel
    NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    CRON_SECRET=generate-a-long-random-string
    json
    
    {
      "crons": [
        { "path": "/api/cron/email-processor", "schedule": "*/5 * * * *" },
        { "path": "/api/cron/forgejo-robot-gc", "schedule": "0 4 * * 0" }
      ]
    }
    bash
    
    curl -sS -H "Authorization: Bearer $CRON_SECRET" \
      "https://<your-deployment>/api/cron/email-processor"

    Firebase + Cloud Scheduler

    Admin console

    HTTP routes
    app/api/cron/<name>/route.ts — GET/POST
    Schedule catalogring-platform.org/vercel.json → crons[] (UTC)
    LedgerProcessConductor.recordRun
    Admin copylocales/*/modules/admin.json → processes.pipelines.*
    Ops write-upAI-RING/scripts/PIPELINES.md § ProcessConductor cron pipelines

    Parity rule: vercel.json must list every ProcessConductor cronPath. Firebase-hosted rings reuse this file as the schedule catalog for Cloud Scheduler. k3s uses per-job YAML under k8s/ (e.g. cronjob-email-processor.yaml) curling an in-cluster URL — not a single inventory file.

    Full schedule catalog (UTC)

    Pipeline IDcronPathschedule
    email-processor/api/cron/email-processor*/5 * * * *
    email-analytics/api/cron/email-analytics0 6 * * *
    refcodes-mint/api/cron/refcodes-mint*/30 * * * *
    cleanup-reservations/api/cron/cleanup-reservations*/15 * * * *
    cleanup-usernames/api/cron/cleanup-usernames*/5 * * * *
    cleanup-news-deleted/api/cron/cleanup-news-deleted0 3 * * 0
    cleanup-email-tokens/api/cron/cleanup-email-tokens0 */6 * * *
    train/api/cron/train0 2 * * *
    settlement-payout/api/cron/settlement-payout0 1 * * *
    inventory-drift/api/cron/inventory-drift0 */6 * * *
    subscription-expiry-check/api/cron/subscription-expiry0 0 * * *
    credit-balance-monthly/api/cron/credit-balance-monthly0 * * * *
    subscription-payment/api/cron/subscription-payment0 2 * * *
    solana-batch-payment/api/cron/solana-batch-payment0 3 * * *
    nft-gate-expiry/api/cron/nft-gate-expiry0 4 * * *
    close-expired-polls/api/cron/close-expired-polls*/5 * * * *
    peer-game-session-expiry/api/cron/peer-game-session-expiry*/5 * * * *
    forgejo-robot-gc/api/cron/forgejo-robot-gc0 4 * * 0
    forgejo-token-rotate/api/cron/forgejo-token-rotate0 5 1 * *

    Example vercel.json shape (every ProcessConductor path must appear):

    Auth smoke test

    Fail-closed: missing/wrong bearer → 401.

    Adding a pipeline

    1. Register in lib/processes/registry.ts (PIPELINE_IDS + PIPELINE_REGISTRY with cronPath).
    2. Add app/api/cron/<name>/route.ts (Bearer gate + ProcessConductor.recordRun).
    3. Add Admin labels under locales/*/modules/admin.json → processes.pipelines.*.
    4. Append { path, schedule } to vercel.json crons[].
    5. Optionally add k8s/cronjob-<name>.yaml for cluster deploys.

    Ops notes: forgejo-robot-gc supports ?dryRun=1; forgejo-token-rotate uses FORGEJO_TOKEN_ROTATE_MAX_AGE_DAYS / FORGEJO_TOKEN_ROTATE_LIMIT.

    Self-hosted deployment

    See-also: k3s path with native WSS and per-job CronJob YAML.

    Backend modes and databases

    Prerequisite: pick DB_BACKEND_MODE before choosing a host.

    bash
    
    RING_DEPLOY_TARGET=vercel
    NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    CRON_SECRET=generate-a-long-random-string
    json
    
    {
      "crons": [
        { "path": "/api/cron/email-processor", "schedule": "*/5 * * * *" },
        { "path": "/api/cron/forgejo-robot-gc", "schedule": "0 4 * * 0" }
      ]
    }
    bash
    
    curl -sS -H "Authorization: Bearer $CRON_SECRET" \
      "https://<your-deployment>/api/cron/email-processor"

    Firebase + Cloud Scheduler

    Admin console

    HTTP routes
    app/api/cron/<name>/route.ts — GET/POST
    Schedule catalogring-platform.org/vercel.json → crons[] (UTC)
    LedgerProcessConductor.recordRun
    Admin copylocales/*/modules/admin.json → processes.pipelines.*
    Ops write-upAI-RING/scripts/PIPELINES.md § ProcessConductor cron pipelines

    Parity rule: vercel.json must list every ProcessConductor cronPath. Firebase-hosted rings reuse this file as the schedule catalog for Cloud Scheduler. k3s uses per-job YAML under k8s/ (e.g. cronjob-email-processor.yaml) curling an in-cluster URL — not a single inventory file.

    Full schedule catalog (UTC)

    Pipeline IDcronPathschedule
    email-processor/api/cron/email-processor*/5 * * * *
    email-analytics/api/cron/email-analytics0 6 * * *
    refcodes-mint/api/cron/refcodes-mint*/30 * * * *
    cleanup-reservations/api/cron/cleanup-reservations*/15 * * * *
    cleanup-usernames/api/cron/cleanup-usernames*/5 * * * *
    cleanup-news-deleted/api/cron/cleanup-news-deleted0 3 * * 0
    cleanup-email-tokens/api/cron/cleanup-email-tokens0 */6 * * *
    train/api/cron/train0 2 * * *
    settlement-payout/api/cron/settlement-payout0 1 * * *
    inventory-drift/api/cron/inventory-drift0 */6 * * *
    subscription-expiry-check/api/cron/subscription-expiry0 0 * * *
    credit-balance-monthly/api/cron/credit-balance-monthly0 * * * *
    subscription-payment/api/cron/subscription-payment0 2 * * *
    solana-batch-payment/api/cron/solana-batch-payment0 3 * * *
    nft-gate-expiry/api/cron/nft-gate-expiry0 4 * * *
    close-expired-polls/api/cron/close-expired-polls*/5 * * * *
    peer-game-session-expiry/api/cron/peer-game-session-expiry*/5 * * * *
    forgejo-robot-gc/api/cron/forgejo-robot-gc0 4 * * 0
    forgejo-token-rotate/api/cron/forgejo-token-rotate0 5 1 * *

    Example vercel.json shape (every ProcessConductor path must appear):

    Auth smoke test

    Fail-closed: missing/wrong bearer → 401.

    Adding a pipeline

    1. Register in lib/processes/registry.ts (PIPELINE_IDS + PIPELINE_REGISTRY with cronPath).
    2. Add app/api/cron/<name>/route.ts (Bearer gate + ProcessConductor.recordRun).
    3. Add Admin labels under locales/*/modules/admin.json → processes.pipelines.*.
    4. Append { path, schedule } to vercel.json crons[].
    5. Optionally add k8s/cronjob-<name>.yaml for cluster deploys.

    Ops notes: forgejo-robot-gc supports ?dryRun=1; forgejo-token-rotate uses FORGEJO_TOKEN_ROTATE_MAX_AGE_DAYS / FORGEJO_TOKEN_ROTATE_LIMIT.

    Self-hosted deployment

    See-also: k3s path with native WSS and per-job CronJob YAML.

    Backend modes and databases

    Prerequisite: pick DB_BACKEND_MODE before choosing a host.

    bash
    
    RING_DEPLOY_TARGET=vercel
    NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    CRON_SECRET=generate-a-long-random-string
    json
    
    {
      "crons": [
        { "path": "/api/cron/email-processor", "schedule": "*/5 * * * *" },
        { "path": "/api/cron/forgejo-robot-gc", "schedule": "0 4 * * 0" }
      ]
    }
    bash
    
    curl -sS -H "Authorization: Bearer $CRON_SECRET" \
      "https://<your-deployment>/api/cron/email-processor"