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

    First Success Validation

    Done when: npm run dev serves pages, GET /api/health is healthy (or you fixed AUTH_SECRET), one Auth.js sign-in establishes a session, and one authenticated CRUD path works (entities or opportunities). Tunnel ready and PaymentConductor membership smoke are extended — not blockers for day-one branding.

    Filter with Founder / Developer in the docs sidebar. Run this after Installation and Migrations. Core checks are a short browser pass; payments need PSP env + 004_payment_transactions before you treat checkout as green.

    First success means the custom server.ts / Next app serves pages, Auth.js v5 can establish a session, DatabaseService reads/writes without adapter crashes, and core marketplace routes load. It does not require WayForPay, Stripe, PayPal, FCM, or wallet connectivity on day one.

    Pass barWhat must workGood enough to…
    CoreHomepage + /api/health + one provider sign-in + one CRUD pathCustomize branding, invite testers
    ExtendedGET /api/tunnel/test → status: ready; entities + opportunities UIDemo realtime / discovery
    Optional paymentMembership initiate → PaymentConductor redirect or credit settleSandbox checkout / role-upgrade rehearsal

    Recommended path

    Use LegioX MCP legiox-env-validator (or ask the agent with the prompt below) before chasing UI failures. It reports missing env — it does not mutate .env, restart processes, or call PSPs until you approve.

    Starter prompt:

    Validate this clone for first-success smoke: AUTH_SECRET, DB_BACKEND_MODE / Postgres DB_*, and optional WAYFORPAY_* / STRIPE_* / PAYPAL_*. List missing vars and the Core vs Optional-payment checklist from /docs/getting-started/first-success. Do not write secrets or restart the server until I approve.

    Inputs checklist

    • Working tree after install + migrations
    • .env.local from env.local.template (or k8s secret mount)
    • Browser on http://localhost:3000 (or your configured site URL)
    • Optional: WayForPay / Stripe / PayPal sandbox credentials

    Manual path

    Why this matters for your clone

    Before stakeholder demos, walk the member happy path yourself:

    Land on the homepage

    No blank screen or database-adapter crash in the terminal.

    Sign up / sign in

    Google, Apple, or Ring Mailer — whichever you configured (SMTP or Ethereal).

    Create an entity

    Proves Postgres JSONB writes and role gates.

    Membership checkout (optional)

    Implementation map

    ConcernVerified path
    Healthapp/api/health/route.ts
    Auth providersauth.ts (Google, Apple, Ring Mailer credentials, One Tap, wallet)
    Membership initiateapp/_actions/membership-payment.ts → PaymentConductor.createCheckout
    Conductorlib/payments/conductor/payment-conductor.ts
    Webhooksapp/api/payments/{wayforpay|stripe|paypal}/webhook/route.ts
    Tunnel testapp/api/tunnel/test/route.ts (status: 'ready' on success)
    Wallet balance (optional)GET /api/wallet/balance → { balance } or 401 /

    Checklist summary

    CheckPass?
    npm run dev starts without DB adapter crash☐
    GET /api/health → healthy (or fixed AUTH_SECRET)☐
    Sign-in completes for one Auth.js provider☐
    Entity create/list or opportunities list works in UI☐
    GET /api/tunnel/test → status: ready☐
    Optional: membership initiate returns redirect / credit success☐

    Frequently asked questions

    Impact

    Will my clone work without payments?

    Yes. Core first success is auth + data path. PaymentConductor is optional until you demo paid membership or store checkout.

    Does tunnel ready mean SSE is live?

    No. /api/tunnel/test confirms config/provider detection. Live streams need a signed-in client hitting /api/tunnel/sse (or your configured provider).

    Migration

    Do I need 004_payment_transactions for Core?

    No. Apply it before Optional payment smoke so the ledger can record membership / store intents.

    Firebase-only prototype?

    firebase-full can pass homepage + auth for a prototype, but PaymentConductor depth and ERP/news features expect Postgres-primary (k8s-postgres-fcm / supabase-fcm). See Database selection.

    Ops

    Health returns 503 with degraded — is the app down?

    Process is up; missing AUTH_SECRET (Postgres path) or Firebase critical vars degrade status. Set secrets, restart, re-curl.

    Wallet balance 404?

    GET /api/wallet/balance returns 404 when no wallet row exists yet — not a Core failure. Create/top-up via wallet flows after auth.

    Related documentation

    Related documentation

    Installation

    Prerequisite: install and env before this smoke checklist.

    Database migrations

    Prerequisite: schema + 004_payment_transactions before PaymentConductor smoke.

    Authentication

    Deep-dive: Auth.js providers and session shape after signup works.

    PaymentConductor

    Next-step: rails, ledger, and webhooks after membership initiate succeeds.

    First Success Validation

    Done when: npm run dev serves pages, GET /api/health is healthy (or you fixed AUTH_SECRET), one Auth.js sign-in establishes a session, and one authenticated CRUD path works (entities or opportunities). Tunnel ready and PaymentConductor membership smoke are extended — not blockers for day-one branding.

    Filter with Founder / Developer in the docs sidebar. Run this after Installation and Migrations. Core checks are a short browser pass; payments need PSP env + 004_payment_transactions before you treat checkout as green.

    First success means the custom server.ts / Next app serves pages, Auth.js v5 can establish a session, DatabaseService reads/writes without adapter crashes, and core marketplace routes load. It does not require WayForPay, Stripe, PayPal, FCM, or wallet connectivity on day one.

    Pass barWhat must workGood enough to…
    CoreHomepage + /api/health + one provider sign-in + one CRUD pathCustomize branding, invite testers
    ExtendedGET /api/tunnel/test → status: ready; entities + opportunities UIDemo realtime / discovery
    Optional paymentMembership initiate → PaymentConductor redirect or credit settleSandbox checkout / role-upgrade rehearsal

    Recommended path

    Use LegioX MCP legiox-env-validator (or ask the agent with the prompt below) before chasing UI failures. It reports missing env — it does not mutate .env, restart processes, or call PSPs until you approve.

    Starter prompt:

    Validate this clone for first-success smoke: AUTH_SECRET, DB_BACKEND_MODE / Postgres DB_*, and optional WAYFORPAY_* / STRIPE_* / PAYPAL_*. List missing vars and the Core vs Optional-payment checklist from /docs/getting-started/first-success. Do not write secrets or restart the server until I approve.

    Inputs checklist

    • Working tree after install + migrations
    • .env.local from env.local.template (or k8s secret mount)
    • Browser on http://localhost:3000 (or your configured site URL)
    • Optional: WayForPay / Stripe / PayPal sandbox credentials

    Manual path

    Why this matters for your clone

    Before stakeholder demos, walk the member happy path yourself:

    Land on the homepage

    No blank screen or database-adapter crash in the terminal.

    Sign up / sign in

    Google, Apple, or Ring Mailer — whichever you configured (SMTP or Ethereal).

    Create an entity

    Proves Postgres JSONB writes and role gates.

    Membership checkout (optional)

    Implementation map

    ConcernVerified path
    Healthapp/api/health/route.ts
    Auth providersauth.ts (Google, Apple, Ring Mailer credentials, One Tap, wallet)
    Membership initiateapp/_actions/membership-payment.ts → PaymentConductor.createCheckout
    Conductorlib/payments/conductor/payment-conductor.ts
    Webhooksapp/api/payments/{wayforpay|stripe|paypal}/webhook/route.ts
    Tunnel testapp/api/tunnel/test/route.ts (status: 'ready' on success)
    Wallet balance (optional)GET /api/wallet/balance → { balance } or 401 /

    Checklist summary

    CheckPass?
    npm run dev starts without DB adapter crash☐
    GET /api/health → healthy (or fixed AUTH_SECRET)☐
    Sign-in completes for one Auth.js provider☐
    Entity create/list or opportunities list works in UI☐
    GET /api/tunnel/test → status: ready☐
    Optional: membership initiate returns redirect / credit success☐

    Frequently asked questions

    Impact

    Will my clone work without payments?

    Yes. Core first success is auth + data path. PaymentConductor is optional until you demo paid membership or store checkout.

    Does tunnel ready mean SSE is live?

    No. /api/tunnel/test confirms config/provider detection. Live streams need a signed-in client hitting /api/tunnel/sse (or your configured provider).

    Migration

    Do I need 004_payment_transactions for Core?

    No. Apply it before Optional payment smoke so the ledger can record membership / store intents.

    Firebase-only prototype?

    firebase-full can pass homepage + auth for a prototype, but PaymentConductor depth and ERP/news features expect Postgres-primary (k8s-postgres-fcm / supabase-fcm). See Database selection.

    Ops

    Health returns 503 with degraded — is the app down?

    Process is up; missing AUTH_SECRET (Postgres path) or Firebase critical vars degrade status. Set secrets, restart, re-curl.

    Wallet balance 404?

    GET /api/wallet/balance returns 404 when no wallet row exists yet — not a Core failure. Create/top-up via wallet flows after auth.

    Related documentation

    Related documentation

    Installation

    Prerequisite: install and env before this smoke checklist.

    Database migrations

    Prerequisite: schema + 004_payment_transactions before PaymentConductor smoke.

    Authentication

    Deep-dive: Auth.js providers and session shape after signup works.

    PaymentConductor

    Next-step: rails, ledger, and webhooks after membership initiate succeeds.

    First Success Validation

    Done when: npm run dev serves pages, GET /api/health is healthy (or you fixed AUTH_SECRET), one Auth.js sign-in establishes a session, and one authenticated CRUD path works (entities or opportunities). Tunnel ready and PaymentConductor membership smoke are extended — not blockers for day-one branding.

    Filter with Founder / Developer in the docs sidebar. Run this after Installation and Migrations. Core checks are a short browser pass; payments need PSP env + 004_payment_transactions before you treat checkout as green.

    First success means the custom server.ts / Next app serves pages, Auth.js v5 can establish a session, DatabaseService reads/writes without adapter crashes, and core marketplace routes load. It does not require WayForPay, Stripe, PayPal, FCM, or wallet connectivity on day one.

    Pass barWhat must workGood enough to…
    CoreHomepage + /api/health + one provider sign-in + one CRUD pathCustomize branding, invite testers
    ExtendedGET /api/tunnel/test → status: ready; entities + opportunities UIDemo realtime / discovery
    Optional paymentMembership initiate → PaymentConductor redirect or credit settleSandbox checkout / role-upgrade rehearsal

    Recommended path

    Use LegioX MCP legiox-env-validator (or ask the agent with the prompt below) before chasing UI failures. It reports missing env — it does not mutate .env, restart processes, or call PSPs until you approve.

    Starter prompt:

    Validate this clone for first-success smoke: AUTH_SECRET, DB_BACKEND_MODE / Postgres DB_*, and optional WAYFORPAY_* / STRIPE_* / PAYPAL_*. List missing vars and the Core vs Optional-payment checklist from /docs/getting-started/first-success. Do not write secrets or restart the server until I approve.

    Inputs checklist

    • Working tree after install + migrations
    • .env.local from env.local.template (or k8s secret mount)
    • Browser on http://localhost:3000 (or your configured site URL)
    • Optional: WayForPay / Stripe / PayPal sandbox credentials

    Manual path

    Why this matters for your clone

    Before stakeholder demos, walk the member happy path yourself:

    Land on the homepage

    No blank screen or database-adapter crash in the terminal.

    Sign up / sign in

    Google, Apple, or Ring Mailer — whichever you configured (SMTP or Ethereal).

    Create an entity

    Proves Postgres JSONB writes and role gates.

    Membership checkout (optional)

    Implementation map

    ConcernVerified path
    Healthapp/api/health/route.ts
    Auth providersauth.ts (Google, Apple, Ring Mailer credentials, One Tap, wallet)
    Membership initiateapp/_actions/membership-payment.ts → PaymentConductor.createCheckout
    Conductorlib/payments/conductor/payment-conductor.ts
    Webhooksapp/api/payments/{wayforpay|stripe|paypal}/webhook/route.ts
    Tunnel testapp/api/tunnel/test/route.ts (status: 'ready' on success)
    Wallet balance (optional)GET /api/wallet/balance → { balance } or 401 /

    Checklist summary

    CheckPass?
    npm run dev starts without DB adapter crash☐
    GET /api/health → healthy (or fixed AUTH_SECRET)☐
    Sign-in completes for one Auth.js provider☐
    Entity create/list or opportunities list works in UI☐
    GET /api/tunnel/test → status: ready☐
    Optional: membership initiate returns redirect / credit success☐

    Frequently asked questions

    Impact

    Will my clone work without payments?

    Yes. Core first success is auth + data path. PaymentConductor is optional until you demo paid membership or store checkout.

    Does tunnel ready mean SSE is live?

    No. /api/tunnel/test confirms config/provider detection. Live streams need a signed-in client hitting /api/tunnel/sse (or your configured provider).

    Migration

    Do I need 004_payment_transactions for Core?

    No. Apply it before Optional payment smoke so the ledger can record membership / store intents.

    Firebase-only prototype?

    firebase-full can pass homepage + auth for a prototype, but PaymentConductor depth and ERP/news features expect Postgres-primary (k8s-postgres-fcm / supabase-fcm). See Database selection.

    Ops

    Health returns 503 with degraded — is the app down?

    Process is up; missing AUTH_SECRET (Postgres path) or Firebase critical vars degrade status. Set secrets, restart, re-curl.

    Wallet balance 404?

    GET /api/wallet/balance returns 404 when no wallet row exists yet — not a Core failure. Create/top-up via wallet flows after auth.

    Related documentation

    Related documentation

    Installation

    Prerequisite: install and env before this smoke checklist.

    Database migrations

    Prerequisite: schema + 004_payment_transactions before PaymentConductor smoke.

    Authentication

    Deep-dive: Auth.js providers and session shape after signup works.

    PaymentConductor

    Next-step: rails, ledger, and webhooks after membership initiate succeeds.

    1. 1

      1 — Dev server

      Expect Next.js ready on http://localhost:3000. Package script runs node --import tsx server.ts. With RING_DEPLOY_TARGET=self-hosted, custom server may log native WSS.

    2. 2

      2 — Health

      Verified shape (app/api/health/route.ts): status is healthy | degraded | unhealthy (not "ok"). services.database is postgresql or firebase. Missing AUTH_SECRET → degraded and HTTP 503. HEAD returns 200 when the process is up.

    3. 3

      3 — Homepage + sign-in

      1. Open / — expect HTTP 200; no blank screen or adapter crash in the terminal.
      2. Visit /login (locale prefix may apply: /en/login).
      3. Complete one provider from auth.ts: Google OAuth, Apple, Ring Mailer (OTP / magic link / email+password), Google One Tap, or crypto-wallet credentials. Default tree does not ship GitHub/Discord.
      4. Confirm session: /profile shows user data; refresh persists. Optional: GET /api/auth/session with browser cookies returns { user: { id, email, role, … } }.
    4. 4

      4 — Authenticated CRUD

      /api/entities and /api/opportunities require a session — 401 without cookies is expected.

      After browser login:

      1. /entities — list + create form submits (visitor may 403 on write — use member/admin test account).
      2. /opportunities — list loads for your role.

      Optional Postgres check:

      Expect count ≥ 1 after first sign-in. There is no /api/test-db route — use psql or authenticated APIs.

    5. 5

      5 — Tunnel readiness (extended)

      Expect "ready" and a provider list from lib/tunnel/config. Live SSE: Network tab → /api/tunnel/sse after sign-in. See Tunnel protocol.

    6. 6

      6 — PaymentConductor membership smoke (optional)

      Only after Migrations applied 004_payment_transactions.sql and you set processor env from env.local.template (WAYFORPAY_*, and/or STRIPE_*, and/or PAYPAL_*).

      1. Sign in as a non-admin user who can upgrade (UPGRADEABLE_ROLES — not platform-admin purchase).
      2. Open /membership → choose a higher tier and a configured rail (card → WayForPay/Stripe via PaymentConductor, paypal, or credit_balance if the wallet has balance).
      3. Server Action initiateMembershipPayment (app/_actions/membership-payment.ts) calls PaymentConductor.createCheckout({ purpose: 'membership_upgrade', … }) (or SubscriptionConductor first for some rails).
      4. Expect a redirect URL / form-post fields to the PSP, or an immediate success path for internal credit.
      5. Canonical webhooks (production/sandbox callback URLs): /api/payments/wayforpay/webhook, /api/payments/stripe/webhook, /api/payments/paypal/webhook (getWebhookUrl in lib/payments/payment.config.ts).
      6. After Approved / checkout.session.completed / PayPal capture handling, UI lands on /membership/success or /membership/failure.

      Do not claim production checkout until HMAC/signature verification and return URLs match your public site URL. Deep dive: PaymentConductor.

    Sandbox fee → PaymentConductor → webhook — only after payment env is set.

    Partial success is OK

    Auth + one CRUD flow without push notifications or wallet is still a valid dev clone. Wire FCM and PaymentConductor before promising paid membership or store checkout (Environment).

    When to stop and fix

    • Repeated Postgres connection failures → Prerequisites DB_* / DB_BACKEND_MODE.
    • Login redirect loop → AUTH_SECRET and OAuth redirect URIs (http://localhost:3000/api/auth/callback/google).
    • Entity save 403 → expected for visitor; sign in as member or raise the test account role.
    • Membership initiate errors with missing merchant keys → set WAYFORPAY_* / Stripe / PayPal before retrying.
    404
    Scriptsnpm run type-check, npm run build (build runs type-check)
    First-success flow

    Health’s Postgres detection uses DATABASE_BACKEND=postgresql or DB_HOST / POSTGRES_HOST — not the string DB_BACKEND_MODE alone. Keep both families aligned with env.local.template so services.database reports postgresql when you expect it.

    Troubleshooting

    Same-workflow: auth and database fixes when a checklist row stays red.

    Next Steps

    Next-step: feature exploration after Core checks are green.

    1. 1

      1 — Dev server

      Expect Next.js ready on http://localhost:3000. Package script runs node --import tsx server.ts. With RING_DEPLOY_TARGET=self-hosted, custom server may log native WSS.

    2. 2

      2 — Health

      Verified shape (app/api/health/route.ts): status is healthy | degraded | unhealthy (not "ok"). services.database is postgresql or firebase. Missing AUTH_SECRET → degraded and HTTP 503. HEAD returns 200 when the process is up.

    3. 3

      3 — Homepage + sign-in

      1. Open / — expect HTTP 200; no blank screen or adapter crash in the terminal.
      2. Visit /login (locale prefix may apply: /en/login).
      3. Complete one provider from auth.ts: Google OAuth, Apple, Ring Mailer (OTP / magic link / email+password), Google One Tap, or crypto-wallet credentials. Default tree does not ship GitHub/Discord.
      4. Confirm session: /profile shows user data; refresh persists. Optional: GET /api/auth/session with browser cookies returns { user: { id, email, role, … } }.
    4. 4

      4 — Authenticated CRUD

      /api/entities and /api/opportunities require a session — 401 without cookies is expected.

      After browser login:

      1. /entities — list + create form submits (visitor may 403 on write — use member/admin test account).
      2. /opportunities — list loads for your role.

      Optional Postgres check:

      Expect count ≥ 1 after first sign-in. There is no /api/test-db route — use psql or authenticated APIs.

    5. 5

      5 — Tunnel readiness (extended)

      Expect "ready" and a provider list from lib/tunnel/config. Live SSE: Network tab → /api/tunnel/sse after sign-in. See Tunnel protocol.

    6. 6

      6 — PaymentConductor membership smoke (optional)

      Only after Migrations applied 004_payment_transactions.sql and you set processor env from env.local.template (WAYFORPAY_*, and/or STRIPE_*, and/or PAYPAL_*).

      1. Sign in as a non-admin user who can upgrade (UPGRADEABLE_ROLES — not platform-admin purchase).
      2. Open /membership → choose a higher tier and a configured rail (card → WayForPay/Stripe via PaymentConductor, paypal, or credit_balance if the wallet has balance).
      3. Server Action initiateMembershipPayment (app/_actions/membership-payment.ts) calls PaymentConductor.createCheckout({ purpose: 'membership_upgrade', … }) (or SubscriptionConductor first for some rails).
      4. Expect a redirect URL / form-post fields to the PSP, or an immediate success path for internal credit.
      5. Canonical webhooks (production/sandbox callback URLs): /api/payments/wayforpay/webhook, /api/payments/stripe/webhook, /api/payments/paypal/webhook (getWebhookUrl in lib/payments/payment.config.ts).
      6. After Approved / checkout.session.completed / PayPal capture handling, UI lands on /membership/success or /membership/failure.

      Do not claim production checkout until HMAC/signature verification and return URLs match your public site URL. Deep dive: PaymentConductor.

    Sandbox fee → PaymentConductor → webhook — only after payment env is set.

    Partial success is OK

    Auth + one CRUD flow without push notifications or wallet is still a valid dev clone. Wire FCM and PaymentConductor before promising paid membership or store checkout (Environment).

    When to stop and fix

    • Repeated Postgres connection failures → Prerequisites DB_* / DB_BACKEND_MODE.
    • Login redirect loop → AUTH_SECRET and OAuth redirect URIs (http://localhost:3000/api/auth/callback/google).
    • Entity save 403 → expected for visitor; sign in as member or raise the test account role.
    • Membership initiate errors with missing merchant keys → set WAYFORPAY_* / Stripe / PayPal before retrying.
    404
    Scriptsnpm run type-check, npm run build (build runs type-check)
    First-success flow

    Health’s Postgres detection uses DATABASE_BACKEND=postgresql or DB_HOST / POSTGRES_HOST — not the string DB_BACKEND_MODE alone. Keep both families aligned with env.local.template so services.database reports postgresql when you expect it.

    Troubleshooting

    Same-workflow: auth and database fixes when a checklist row stays red.

    Next Steps

    Next-step: feature exploration after Core checks are green.

    1. 1

      1 — Dev server

      Expect Next.js ready on http://localhost:3000. Package script runs node --import tsx server.ts. With RING_DEPLOY_TARGET=self-hosted, custom server may log native WSS.

    2. 2

      2 — Health

      Verified shape (app/api/health/route.ts): status is healthy | degraded | unhealthy (not "ok"). services.database is postgresql or firebase. Missing AUTH_SECRET → degraded and HTTP 503. HEAD returns 200 when the process is up.

    3. 3

      3 — Homepage + sign-in

      1. Open / — expect HTTP 200; no blank screen or adapter crash in the terminal.
      2. Visit /login (locale prefix may apply: /en/login).
      3. Complete one provider from auth.ts: Google OAuth, Apple, Ring Mailer (OTP / magic link / email+password), Google One Tap, or crypto-wallet credentials. Default tree does not ship GitHub/Discord.
      4. Confirm session: /profile shows user data; refresh persists. Optional: GET /api/auth/session with browser cookies returns { user: { id, email, role, … } }.
    4. 4

      4 — Authenticated CRUD

      /api/entities and /api/opportunities require a session — 401 without cookies is expected.

      After browser login:

      1. /entities — list + create form submits (visitor may 403 on write — use member/admin test account).
      2. /opportunities — list loads for your role.

      Optional Postgres check:

      Expect count ≥ 1 after first sign-in. There is no /api/test-db route — use psql or authenticated APIs.

    5. 5

      5 — Tunnel readiness (extended)

      Expect "ready" and a provider list from lib/tunnel/config. Live SSE: Network tab → /api/tunnel/sse after sign-in. See Tunnel protocol.

    6. 6

      6 — PaymentConductor membership smoke (optional)

      Only after Migrations applied 004_payment_transactions.sql and you set processor env from env.local.template (WAYFORPAY_*, and/or STRIPE_*, and/or PAYPAL_*).

      1. Sign in as a non-admin user who can upgrade (UPGRADEABLE_ROLES — not platform-admin purchase).
      2. Open /membership → choose a higher tier and a configured rail (card → WayForPay/Stripe via PaymentConductor, paypal, or credit_balance if the wallet has balance).
      3. Server Action initiateMembershipPayment (app/_actions/membership-payment.ts) calls PaymentConductor.createCheckout({ purpose: 'membership_upgrade', … }) (or SubscriptionConductor first for some rails).
      4. Expect a redirect URL / form-post fields to the PSP, or an immediate success path for internal credit.
      5. Canonical webhooks (production/sandbox callback URLs): /api/payments/wayforpay/webhook, /api/payments/stripe/webhook, /api/payments/paypal/webhook (getWebhookUrl in lib/payments/payment.config.ts).
      6. After Approved / checkout.session.completed / PayPal capture handling, UI lands on /membership/success or /membership/failure.

      Do not claim production checkout until HMAC/signature verification and return URLs match your public site URL. Deep dive: PaymentConductor.

    Sandbox fee → PaymentConductor → webhook — only after payment env is set.

    Partial success is OK

    Auth + one CRUD flow without push notifications or wallet is still a valid dev clone. Wire FCM and PaymentConductor before promising paid membership or store checkout (Environment).

    When to stop and fix

    • Repeated Postgres connection failures → Prerequisites DB_* / DB_BACKEND_MODE.
    • Login redirect loop → AUTH_SECRET and OAuth redirect URIs (http://localhost:3000/api/auth/callback/google).
    • Entity save 403 → expected for visitor; sign in as member or raise the test account role.
    • Membership initiate errors with missing merchant keys → set WAYFORPAY_* / Stripe / PayPal before retrying.
    404
    Scriptsnpm run type-check, npm run build (build runs type-check)
    First-success flow

    Health’s Postgres detection uses DATABASE_BACKEND=postgresql or DB_HOST / POSTGRES_HOST — not the string DB_BACKEND_MODE alone. Keep both families aligned with env.local.template so services.database reports postgresql when you expect it.

    Troubleshooting

    Same-workflow: auth and database fixes when a checklist row stays red.

    Next Steps

    Next-step: feature exploration after Core checks are green.

    1. Docs
    2. /Getting Started
    3. /First Success Validation

    Updated Aug 12, 20266 min listen

    1. Docs
    2. /Getting Started
    3. /First Success Validation

    Updated Aug 12, 20266 min listen

    1. Docs
    2. /Getting Started
    3. /First Success Validation

    Updated Aug 12, 20266 min listen