OpportunitiesEntities
Docs
    Ring Platform

    Futuro descentralizado que se construye a sí mismo

    Iniciar sesión
    Entities
    Opportunities
    Store
    Docs
    Conceptos de la plataforma
    RING EconomíaSonoratek LLCImpacto globalIA encuentra Web3
    Empezar
    Inicio rápidoCalculadoraHoja de ruta
    Privacidad|Contacto
    v1.104.26|Sonoratek LLC

    Documentation

    Conceptos, valor y escenarios típicos de clon — menos código.

    Primeros pasos
    Requisitos previos
    Instalación
    Validación del primer éxito
    Próximos pasos
    Funcionalidades
    Blogs de miembros
    Personalización
    Ringization playbook
    Despliegue
    Despliegue autoalojado
    Arquitectura
    Arquitectura de News Kingdom
    Desarrollo
    OSS frente a enterprise

    Entrada rápida (CTOs · auditores · agentes)

    Bienvenida — misión y audiencias
    Referencia rápida
    Primeros pasos
    Arquitectura y Auth.js
    Modos de backend y bases de datos (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Lecturas de seguridad y cumplimiento
    ringdom.org — base LegioX
    Código fuente — licencia MIT (GitHub)

    Documentation

    Conceptos, valor y escenarios típicos de clon — menos código.

    Primeros pasos
    Requisitos previos
    Instalación
    Validación del primer éxito
    Próximos pasos
    Funcionalidades
    Blogs de miembros
    Personalización
    Ringization playbook
    Despliegue
    Despliegue autoalojado
    Arquitectura
    Arquitectura de News Kingdom
    Desarrollo
    OSS frente a enterprise

    Entrada rápida (CTOs · auditores · agentes)

    Bienvenida — misión y audiencias
    Referencia rápida
    Primeros pasos
    Arquitectura y Auth.js
    Modos de backend y bases de datos (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Lecturas de seguridad y cumplimiento
    ringdom.org — base LegioX
    Código fuente — licencia MIT (GitHub)

    Documentation

    Conceptos, valor y escenarios típicos de clon — menos código.

    Primeros pasos
    Requisitos previos
    Instalación
    Validación del primer éxito
    Próximos pasos
    Funcionalidades
    Blogs de miembros
    Personalización
    Ringization playbook
    Despliegue
    Despliegue autoalojado
    Arquitectura
    Arquitectura de News Kingdom
    Desarrollo
    OSS frente a enterprise

    Entrada rápida (CTOs · auditores · agentes)

    Bienvenida — misión y audiencias
    Referencia rápida
    Primeros pasos
    Arquitectura y Auth.js
    Modos de backend y bases de datos (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Lecturas de seguridad y cumplimiento
    ringdom.org — base LegioX
    Código fuente — licencia MIT (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Validación del primer éxito

    Está hecho cuando: npm run dev sirve páginas, GET /api/health devuelve healthy (o ya corregiste AUTH_SECRET), un inicio de sesión de Auth.js crea una sesión y funciona un camino CRUD autenticado (entidades u oportunidades). El túnel en ready y la prueba de membresía con PaymentConductor son ampliados: no bloquean la personalización de marca del primer día.

    Filtra con Fundador / Desarrollador en la barra lateral. Ejecuta esto después de la Instalación y las Migraciones. Las comprobaciones básicas son una pasada corta por el navegador. Los pagos necesitan el env del PSP + 004_payment_transactions antes de dar el checkout por bueno.

    Primer éxito significa que el server.ts propio / la app Next sirve páginas, Auth.js v5 puede crear una sesión, DatabaseService lee y escribe sin fallos del adaptador y las rutas principales del marketplace cargan. No exige WayForPay, Stripe, PayPal, FCM ni conexión de billetera el primer día.

    NivelQué debe funcionarSuficiente para…
    BásicoPágina de inicio + /api/health + inicio de sesión con un proveedor + un camino CRUDPersonalizar la marca, invitar a testers
    AmpliadoGET /api/tunnel/test → status: ready; UI de entidades + oportunidadesDemostrar tiempo real / descubrimiento
    Pago opcionalInicio de membresía → redirección de PaymentConductor o liquidación con créditoCheckout en sandbox / ensayo de mejora de rol

    Camino recomendado

    Usa el MCP de LegioX legiox-env-validator (o pide al agente con el prompt de abajo) antes de perseguir fallos de la UI. Informa de las variables de env que faltan. No modifica .env, no reinicia procesos ni llama a los PSP hasta que lo apruebes.

    Prompt inicial:

    Valida este clon para la prueba de primer éxito: AUTH_SECRET, DB_BACKEND_MODE / DB_* de Postgres y, opcionalmente, WAYFORPAY_* / STRIPE_* / PAYPAL_*. Enumera las variables que faltan y la lista Básico frente a Pago opcional de /docs/getting-started/first-success. No escribas secretos ni reinicies el servidor hasta que yo lo apruebe.

    Lista de entradas

    • Árbol de trabajo después de la instalación + migraciones
    • .env.local a partir de env.local.template (o un secreto montado de k8s)
    • Navegador en http://localhost:3000 (o la URL del sitio que hayas configurado)
    • Opcional: credenciales de sandbox de WayForPay / Stripe / PayPal

    Camino manual

    Por qué importa para tu clon

    Antes de hacer demos a las partes interesadas, recorre tú mismo el camino feliz del miembro:

    Llegar a la página de inicio

    Sin pantalla en blanco ni fallo del adaptador de base de datos en la terminal.

    Registrarse / iniciar sesión

    Google, Apple o Ring Mailer, el que hayas configurado (SMTP o Ethereal).

    Crear una entidad

    Demuestra las escrituras JSONB en Postgres y los controles por rol.

    Checkout de membresía (opcional)

    Mapa de implementación

    AspectoRuta verificada
    Saludapp/api/health/route.ts
    Proveedores de autenticaciónauth.ts (Google, Apple, credenciales de Ring Mailer, One Tap, billetera)
    Inicio de membresíaapp/_actions/membership-payment.ts → PaymentConductor.createCheckout
    Conductorlib/payments/conductor/payment-conductor.ts
    Webhooksapp/api/payments/{wayforpay|stripe|paypal}/webhook/route.ts
    Prueba del túnelapp/api/tunnel/test/route.ts (status: 'ready' si tiene éxito)
    Saldo de la billetera (opcional)GET /api/wallet/balance → { balance } o /

    Resumen de la lista

    Comprobación¿Superada?
    npm run dev arranca sin fallo del adaptador de base de datos☐
    GET /api/health → healthy (o AUTH_SECRET corregido)☐
    El inicio de sesión se completa con un proveedor de Auth.js☐
    Crear/listar entidades o la lista de oportunidades funciona en la UI☐
    GET /api/tunnel/test → status: ready☐
    Opcional: el inicio de membresía devuelve redirección / éxito con crédito☐

    Preguntas frecuentes

    Impacto

    ¿Funcionará mi clon sin pagos?

    Sí. El primer éxito básico es autenticación + camino de datos. PaymentConductor es opcional hasta que hagas una demo de membresía de pago o del checkout de la tienda.

    ¿Un túnel en ready significa que SSE está en vivo?

    No. /api/tunnel/test confirma la configuración y la detección del proveedor. Los streams en vivo necesitan un cliente con sesión iniciada que llame a /api/tunnel/sse (o al proveedor que hayas configurado).

    Migración

    ¿Necesito 004_payment_transactions para el nivel Básico?

    No. Aplícala antes de la prueba de Pago opcional para que el libro contable pueda registrar las intenciones de membresía / tienda.

    ¿Prototipo solo con Firebase?

    firebase-full puede superar la página de inicio + autenticación en un prototipo, pero la profundidad de PaymentConductor y las funciones de ERP/noticias esperan Postgres como base principal (k8s-postgres-fcm / supabase-fcm). Consulta Selección de base de datos.

    Operación

    La salud devuelve 503 con degraded: ¿la app está caída?

    El proceso está en marcha. La falta de AUTH_SECRET (camino Postgres) o de variables críticas de Firebase degrada el estado. Define los secretos, reinicia y vuelve a lanzar el curl.

    ¿Saldo de la billetera 404?

    GET /api/wallet/balance devuelve 404 cuando aún no existe una fila de billetera. No es un fallo del nivel Básico. Crea o recarga la billetera mediante los flujos de billetera después de autenticarte.

    Documentación relacionada

    Related documentation

    Installation

    Requisito previo: instalación y env antes de esta lista de prueba.

    Database Migrations

    Requisito previo: esquema + 004_payment_transactions antes de la prueba de PaymentConductor.

    Authentication

    En detalle: proveedores de Auth.js y forma de la sesión cuando el registro ya funciona.

    PaymentConductor

    Siguiente paso: rails, libro contable y webhooks cuando el inicio de membresía funcione.

    1. Docs
    2. /Primeros pasos
    3. /Validación del primer éxito

    Actualizado 14 oct 20268 min de escucha

    Validación del primer éxito

    Está hecho cuando: npm run dev sirve páginas, GET /api/health devuelve healthy (o ya corregiste AUTH_SECRET), un inicio de sesión de Auth.js crea una sesión y funciona un camino CRUD autenticado (entidades u oportunidades). El túnel en ready y la prueba de membresía con PaymentConductor son ampliados: no bloquean la personalización de marca del primer día.

    Filtra con Fundador / Desarrollador en la barra lateral. Ejecuta esto después de la Instalación y las Migraciones. Las comprobaciones básicas son una pasada corta por el navegador. Los pagos necesitan el env del PSP + 004_payment_transactions antes de dar el checkout por bueno.

    Primer éxito significa que el server.ts propio / la app Next sirve páginas, Auth.js v5 puede crear una sesión, DatabaseService lee y escribe sin fallos del adaptador y las rutas principales del marketplace cargan. No exige WayForPay, Stripe, PayPal, FCM ni conexión de billetera el primer día.

    NivelQué debe funcionarSuficiente para…
    BásicoPágina de inicio + /api/health + inicio de sesión con un proveedor + un camino CRUDPersonalizar la marca, invitar a testers
    AmpliadoGET /api/tunnel/test → status: ready; UI de entidades + oportunidadesDemostrar tiempo real / descubrimiento
    Pago opcionalInicio de membresía → redirección de PaymentConductor o liquidación con créditoCheckout en sandbox / ensayo de mejora de rol

    Camino recomendado

    Usa el MCP de LegioX legiox-env-validator (o pide al agente con el prompt de abajo) antes de perseguir fallos de la UI. Informa de las variables de env que faltan. No modifica .env, no reinicia procesos ni llama a los PSP hasta que lo apruebes.

    Prompt inicial:

    Valida este clon para la prueba de primer éxito: AUTH_SECRET, DB_BACKEND_MODE / DB_* de Postgres y, opcionalmente, WAYFORPAY_* / STRIPE_* / PAYPAL_*. Enumera las variables que faltan y la lista Básico frente a Pago opcional de /docs/getting-started/first-success. No escribas secretos ni reinicies el servidor hasta que yo lo apruebe.

    Lista de entradas

    • Árbol de trabajo después de la instalación + migraciones
    • .env.local a partir de env.local.template (o un secreto montado de k8s)
    • Navegador en http://localhost:3000 (o la URL del sitio que hayas configurado)
    • Opcional: credenciales de sandbox de WayForPay / Stripe / PayPal

    Camino manual

    Por qué importa para tu clon

    Antes de hacer demos a las partes interesadas, recorre tú mismo el camino feliz del miembro:

    Llegar a la página de inicio

    Sin pantalla en blanco ni fallo del adaptador de base de datos en la terminal.

    Registrarse / iniciar sesión

    Google, Apple o Ring Mailer, el que hayas configurado (SMTP o Ethereal).

    Crear una entidad

    Demuestra las escrituras JSONB en Postgres y los controles por rol.

    Checkout de membresía (opcional)

    Mapa de implementación

    AspectoRuta verificada
    Saludapp/api/health/route.ts
    Proveedores de autenticaciónauth.ts (Google, Apple, credenciales de Ring Mailer, One Tap, billetera)
    Inicio de membresíaapp/_actions/membership-payment.ts → PaymentConductor.createCheckout
    Conductorlib/payments/conductor/payment-conductor.ts
    Webhooksapp/api/payments/{wayforpay|stripe|paypal}/webhook/route.ts
    Prueba del túnelapp/api/tunnel/test/route.ts (status: 'ready' si tiene éxito)
    Saldo de la billetera (opcional)GET /api/wallet/balance → { balance } o /

    Resumen de la lista

    Comprobación¿Superada?
    npm run dev arranca sin fallo del adaptador de base de datos☐
    GET /api/health → healthy (o AUTH_SECRET corregido)☐
    El inicio de sesión se completa con un proveedor de Auth.js☐
    Crear/listar entidades o la lista de oportunidades funciona en la UI☐
    GET /api/tunnel/test → status: ready☐
    Opcional: el inicio de membresía devuelve redirección / éxito con crédito☐

    Preguntas frecuentes

    Impacto

    ¿Funcionará mi clon sin pagos?

    Sí. El primer éxito básico es autenticación + camino de datos. PaymentConductor es opcional hasta que hagas una demo de membresía de pago o del checkout de la tienda.

    ¿Un túnel en ready significa que SSE está en vivo?

    No. /api/tunnel/test confirma la configuración y la detección del proveedor. Los streams en vivo necesitan un cliente con sesión iniciada que llame a /api/tunnel/sse (o al proveedor que hayas configurado).

    Migración

    ¿Necesito 004_payment_transactions para el nivel Básico?

    No. Aplícala antes de la prueba de Pago opcional para que el libro contable pueda registrar las intenciones de membresía / tienda.

    ¿Prototipo solo con Firebase?

    firebase-full puede superar la página de inicio + autenticación en un prototipo, pero la profundidad de PaymentConductor y las funciones de ERP/noticias esperan Postgres como base principal (k8s-postgres-fcm / supabase-fcm). Consulta Selección de base de datos.

    Operación

    La salud devuelve 503 con degraded: ¿la app está caída?

    El proceso está en marcha. La falta de AUTH_SECRET (camino Postgres) o de variables críticas de Firebase degrada el estado. Define los secretos, reinicia y vuelve a lanzar el curl.

    ¿Saldo de la billetera 404?

    GET /api/wallet/balance devuelve 404 cuando aún no existe una fila de billetera. No es un fallo del nivel Básico. Crea o recarga la billetera mediante los flujos de billetera después de autenticarte.

    Documentación relacionada

    Related documentation

    Installation

    Requisito previo: instalación y env antes de esta lista de prueba.

    Database Migrations

    Requisito previo: esquema + 004_payment_transactions antes de la prueba de PaymentConductor.

    Authentication

    En detalle: proveedores de Auth.js y forma de la sesión cuando el registro ya funciona.

    PaymentConductor

    Siguiente paso: rails, libro contable y webhooks cuando el inicio de membresía funcione.

    1. Docs
    2. /Primeros pasos
    3. /Validación del primer éxito

    Actualizado 14 oct 20268 min de escucha

    Validación del primer éxito

    Está hecho cuando: npm run dev sirve páginas, GET /api/health devuelve healthy (o ya corregiste AUTH_SECRET), un inicio de sesión de Auth.js crea una sesión y funciona un camino CRUD autenticado (entidades u oportunidades). El túnel en ready y la prueba de membresía con PaymentConductor son ampliados: no bloquean la personalización de marca del primer día.

    Filtra con Fundador / Desarrollador en la barra lateral. Ejecuta esto después de la Instalación y las Migraciones. Las comprobaciones básicas son una pasada corta por el navegador. Los pagos necesitan el env del PSP + 004_payment_transactions antes de dar el checkout por bueno.

    Primer éxito significa que el server.ts propio / la app Next sirve páginas, Auth.js v5 puede crear una sesión, DatabaseService lee y escribe sin fallos del adaptador y las rutas principales del marketplace cargan. No exige WayForPay, Stripe, PayPal, FCM ni conexión de billetera el primer día.

    NivelQué debe funcionarSuficiente para…
    BásicoPágina de inicio + /api/health + inicio de sesión con un proveedor + un camino CRUDPersonalizar la marca, invitar a testers
    AmpliadoGET /api/tunnel/test → status: ready; UI de entidades + oportunidadesDemostrar tiempo real / descubrimiento
    Pago opcionalInicio de membresía → redirección de PaymentConductor o liquidación con créditoCheckout en sandbox / ensayo de mejora de rol

    Camino recomendado

    Usa el MCP de LegioX legiox-env-validator (o pide al agente con el prompt de abajo) antes de perseguir fallos de la UI. Informa de las variables de env que faltan. No modifica .env, no reinicia procesos ni llama a los PSP hasta que lo apruebes.

    Prompt inicial:

    Valida este clon para la prueba de primer éxito: AUTH_SECRET, DB_BACKEND_MODE / DB_* de Postgres y, opcionalmente, WAYFORPAY_* / STRIPE_* / PAYPAL_*. Enumera las variables que faltan y la lista Básico frente a Pago opcional de /docs/getting-started/first-success. No escribas secretos ni reinicies el servidor hasta que yo lo apruebe.

    Lista de entradas

    • Árbol de trabajo después de la instalación + migraciones
    • .env.local a partir de env.local.template (o un secreto montado de k8s)
    • Navegador en http://localhost:3000 (o la URL del sitio que hayas configurado)
    • Opcional: credenciales de sandbox de WayForPay / Stripe / PayPal

    Camino manual

    Por qué importa para tu clon

    Antes de hacer demos a las partes interesadas, recorre tú mismo el camino feliz del miembro:

    Llegar a la página de inicio

    Sin pantalla en blanco ni fallo del adaptador de base de datos en la terminal.

    Registrarse / iniciar sesión

    Google, Apple o Ring Mailer, el que hayas configurado (SMTP o Ethereal).

    Crear una entidad

    Demuestra las escrituras JSONB en Postgres y los controles por rol.

    Checkout de membresía (opcional)

    Mapa de implementación

    AspectoRuta verificada
    Saludapp/api/health/route.ts
    Proveedores de autenticaciónauth.ts (Google, Apple, credenciales de Ring Mailer, One Tap, billetera)
    Inicio de membresíaapp/_actions/membership-payment.ts → PaymentConductor.createCheckout
    Conductorlib/payments/conductor/payment-conductor.ts
    Webhooksapp/api/payments/{wayforpay|stripe|paypal}/webhook/route.ts
    Prueba del túnelapp/api/tunnel/test/route.ts (status: 'ready' si tiene éxito)
    Saldo de la billetera (opcional)GET /api/wallet/balance → { balance } o /

    Resumen de la lista

    Comprobación¿Superada?
    npm run dev arranca sin fallo del adaptador de base de datos☐
    GET /api/health → healthy (o AUTH_SECRET corregido)☐
    El inicio de sesión se completa con un proveedor de Auth.js☐
    Crear/listar entidades o la lista de oportunidades funciona en la UI☐
    GET /api/tunnel/test → status: ready☐
    Opcional: el inicio de membresía devuelve redirección / éxito con crédito☐

    Preguntas frecuentes

    Impacto

    ¿Funcionará mi clon sin pagos?

    Sí. El primer éxito básico es autenticación + camino de datos. PaymentConductor es opcional hasta que hagas una demo de membresía de pago o del checkout de la tienda.

    ¿Un túnel en ready significa que SSE está en vivo?

    No. /api/tunnel/test confirma la configuración y la detección del proveedor. Los streams en vivo necesitan un cliente con sesión iniciada que llame a /api/tunnel/sse (o al proveedor que hayas configurado).

    Migración

    ¿Necesito 004_payment_transactions para el nivel Básico?

    No. Aplícala antes de la prueba de Pago opcional para que el libro contable pueda registrar las intenciones de membresía / tienda.

    ¿Prototipo solo con Firebase?

    firebase-full puede superar la página de inicio + autenticación en un prototipo, pero la profundidad de PaymentConductor y las funciones de ERP/noticias esperan Postgres como base principal (k8s-postgres-fcm / supabase-fcm). Consulta Selección de base de datos.

    Operación

    La salud devuelve 503 con degraded: ¿la app está caída?

    El proceso está en marcha. La falta de AUTH_SECRET (camino Postgres) o de variables críticas de Firebase degrada el estado. Define los secretos, reinicia y vuelve a lanzar el curl.

    ¿Saldo de la billetera 404?

    GET /api/wallet/balance devuelve 404 cuando aún no existe una fila de billetera. No es un fallo del nivel Básico. Crea o recarga la billetera mediante los flujos de billetera después de autenticarte.

    Documentación relacionada

    Related documentation

    Installation

    Requisito previo: instalación y env antes de esta lista de prueba.

    Database Migrations

    Requisito previo: esquema + 004_payment_transactions antes de la prueba de PaymentConductor.

    Authentication

    En detalle: proveedores de Auth.js y forma de la sesión cuando el registro ya funciona.

    PaymentConductor

    Siguiente paso: rails, libro contable y webhooks cuando el inicio de membresía funcione.

    1. Docs
    2. /Primeros pasos
    3. /Validación del primer éxito

    Actualizado 14 oct 20268 min de escucha

    1. 1

      1. Servidor de desarrollo

      Espera Next.js listo en http://localhost:3000. El script del paquete ejecuta node --import tsx server.ts. Con RING_DEPLOY_TARGET=self-hosted, el servidor propio puede registrar WSS nativo en el log.

    2. 2

      2. Salud

      Forma verificada (app/api/health/route.ts): status es healthy | degraded | unhealthy (no "ok"). services.database es postgresql o firebase. Si falta AUTH_SECRET → degraded y HTTP 503. HEAD devuelve 200 cuando el proceso está en marcha.

    3. 3

      3. Página de inicio + inicio de sesión

      1. Abre /: espera HTTP 200, sin pantalla en blanco ni fallo del adaptador en la terminal.
      2. Visita /login (puede aplicarse un prefijo de idioma: /en/login).
      3. Completa un proveedor de auth.ts: Google OAuth, Apple, Ring Mailer (OTP / enlace mágico / correo + contraseña), Google One Tap o credenciales de billetera cripto. El árbol predeterminado no incluye GitHub/Discord.
      4. Confirma la sesión: /profile muestra los datos del usuario y se mantiene al recargar. Opcional: GET /api/auth/session con las cookies del navegador devuelve { user: { id, email, role, … } }.
    4. 4

      4. CRUD autenticado

      /api/entities y /api/opportunities requieren sesión: un 401 sin cookies es lo esperado.

      Después de iniciar sesión en el navegador:

      1. /entities: la lista carga y el formulario de creación se envía (un visitante puede recibir 403 al escribir; usa una cuenta de prueba member/admin).
      2. /opportunities: la lista carga para tu rol.

      Comprobación opcional en Postgres:

      Espera un recuento ≥ 1 después del primer inicio de sesión. No existe la ruta /api/test-db: usa psql o las API autenticadas.

    5. 5

      5. Disponibilidad del túnel (ampliado)

      Espera "ready" y una lista de proveedores de lib/tunnel/config. SSE en vivo: pestaña Network → /api/tunnel/sse después de iniciar sesión. Consulta Protocolo del túnel.

    6. 6

      6. Prueba de membresía con PaymentConductor (opcional)

      Solo después de que las Migraciones hayan aplicado 004_payment_transactions.sql y hayas definido el env del procesador a partir de env.local.template (WAYFORPAY_*, y/o STRIPE_*, y/o PAYPAL_*).

      1. Inicia sesión como usuario no administrador que pueda mejorar de rol (UPGRADEABLE_ROLES, no la compra de platform-admin).
      2. Abre /membership → elige un nivel superior y un rail configurado (card → WayForPay/Stripe mediante PaymentConductor, paypal, o credit_balance si la billetera tiene saldo).
      3. La Server Action initiateMembershipPayment (app/_actions/membership-payment.ts) llama a PaymentConductor.createCheckout({ purpose: 'membership_upgrade', … }) (o primero a SubscriptionConductor para algunos rails).
      4. Espera una URL de redirección / campos de form-post hacia el PSP, o un camino de éxito inmediato para el crédito interno.
      5. Webhooks canónicos (URL de callback de producción/sandbox): /api/payments/wayforpay/webhook, /api/payments/stripe/webhook, /api/payments/paypal/webhook (getWebhookUrl en lib/payments/payment.config.ts).
      6. Después de procesar Approved / checkout.session.completed / la captura de PayPal, la UI llega a /membership/success o /membership/failure.

      No des el checkout de producción por válido hasta que la verificación HMAC/de firma y las URL de retorno coincidan con la URL pública de tu sitio. En detalle: PaymentConductor.

    Cuota de sandbox → PaymentConductor → webhook. Solo cuando el env de pagos esté definido.

    Un éxito parcial está bien

    Autenticación + un flujo CRUD sin notificaciones push ni billetera sigue siendo un clon de desarrollo válido. Conecta FCM y PaymentConductor antes de prometer membresía de pago o checkout de tienda (Entorno).

    Cuándo parar y corregir

    • Fallos repetidos de conexión a Postgres → DB_* / DB_BACKEND_MODE en Requisitos previos.
    • Bucle de redirección en el inicio de sesión → AUTH_SECRET y URI de redirección de OAuth (http://localhost:3000/api/auth/callback/google).
    • 403 al guardar una entidad → es lo esperado para visitor; inicia sesión como member o sube el rol de la cuenta de prueba.
    • Errores al iniciar la membresía por falta de claves del comercio → define WAYFORPAY_* / Stripe / PayPal antes de reintentar.
    401
    404
    Scriptsnpm run type-check, npm run build (la build ejecuta type-check)
    Flujo del primer éxito

    La detección de Postgres de la ruta de salud usa DATABASE_BACKEND=postgresql o DB_HOST / POSTGRES_HOST, no solo la cadena DB_BACKEND_MODE. Mantén ambas familias alineadas con env.local.template para que services.database indique postgresql cuando lo esperas.

    Troubleshooting

    Mismo flujo: correcciones de autenticación y base de datos cuando una fila de la lista sigue en rojo.

    Next Steps

    Siguiente paso: exploración de funciones cuando las comprobaciones básicas estén en verde.

    1. 1

      1. Servidor de desarrollo

      Espera Next.js listo en http://localhost:3000. El script del paquete ejecuta node --import tsx server.ts. Con RING_DEPLOY_TARGET=self-hosted, el servidor propio puede registrar WSS nativo en el log.

    2. 2

      2. Salud

      Forma verificada (app/api/health/route.ts): status es healthy | degraded | unhealthy (no "ok"). services.database es postgresql o firebase. Si falta AUTH_SECRET → degraded y HTTP 503. HEAD devuelve 200 cuando el proceso está en marcha.

    3. 3

      3. Página de inicio + inicio de sesión

      1. Abre /: espera HTTP 200, sin pantalla en blanco ni fallo del adaptador en la terminal.
      2. Visita /login (puede aplicarse un prefijo de idioma: /en/login).
      3. Completa un proveedor de auth.ts: Google OAuth, Apple, Ring Mailer (OTP / enlace mágico / correo + contraseña), Google One Tap o credenciales de billetera cripto. El árbol predeterminado no incluye GitHub/Discord.
      4. Confirma la sesión: /profile muestra los datos del usuario y se mantiene al recargar. Opcional: GET /api/auth/session con las cookies del navegador devuelve { user: { id, email, role, … } }.
    4. 4

      4. CRUD autenticado

      /api/entities y /api/opportunities requieren sesión: un 401 sin cookies es lo esperado.

      Después de iniciar sesión en el navegador:

      1. /entities: la lista carga y el formulario de creación se envía (un visitante puede recibir 403 al escribir; usa una cuenta de prueba member/admin).
      2. /opportunities: la lista carga para tu rol.

      Comprobación opcional en Postgres:

      Espera un recuento ≥ 1 después del primer inicio de sesión. No existe la ruta /api/test-db: usa psql o las API autenticadas.

    5. 5

      5. Disponibilidad del túnel (ampliado)

      Espera "ready" y una lista de proveedores de lib/tunnel/config. SSE en vivo: pestaña Network → /api/tunnel/sse después de iniciar sesión. Consulta Protocolo del túnel.

    6. 6

      6. Prueba de membresía con PaymentConductor (opcional)

      Solo después de que las Migraciones hayan aplicado 004_payment_transactions.sql y hayas definido el env del procesador a partir de env.local.template (WAYFORPAY_*, y/o STRIPE_*, y/o PAYPAL_*).

      1. Inicia sesión como usuario no administrador que pueda mejorar de rol (UPGRADEABLE_ROLES, no la compra de platform-admin).
      2. Abre /membership → elige un nivel superior y un rail configurado (card → WayForPay/Stripe mediante PaymentConductor, paypal, o credit_balance si la billetera tiene saldo).
      3. La Server Action initiateMembershipPayment (app/_actions/membership-payment.ts) llama a PaymentConductor.createCheckout({ purpose: 'membership_upgrade', … }) (o primero a SubscriptionConductor para algunos rails).
      4. Espera una URL de redirección / campos de form-post hacia el PSP, o un camino de éxito inmediato para el crédito interno.
      5. Webhooks canónicos (URL de callback de producción/sandbox): /api/payments/wayforpay/webhook, /api/payments/stripe/webhook, /api/payments/paypal/webhook (getWebhookUrl en lib/payments/payment.config.ts).
      6. Después de procesar Approved / checkout.session.completed / la captura de PayPal, la UI llega a /membership/success o /membership/failure.

      No des el checkout de producción por válido hasta que la verificación HMAC/de firma y las URL de retorno coincidan con la URL pública de tu sitio. En detalle: PaymentConductor.

    Cuota de sandbox → PaymentConductor → webhook. Solo cuando el env de pagos esté definido.

    Un éxito parcial está bien

    Autenticación + un flujo CRUD sin notificaciones push ni billetera sigue siendo un clon de desarrollo válido. Conecta FCM y PaymentConductor antes de prometer membresía de pago o checkout de tienda (Entorno).

    Cuándo parar y corregir

    • Fallos repetidos de conexión a Postgres → DB_* / DB_BACKEND_MODE en Requisitos previos.
    • Bucle de redirección en el inicio de sesión → AUTH_SECRET y URI de redirección de OAuth (http://localhost:3000/api/auth/callback/google).
    • 403 al guardar una entidad → es lo esperado para visitor; inicia sesión como member o sube el rol de la cuenta de prueba.
    • Errores al iniciar la membresía por falta de claves del comercio → define WAYFORPAY_* / Stripe / PayPal antes de reintentar.
    401
    404
    Scriptsnpm run type-check, npm run build (la build ejecuta type-check)
    Flujo del primer éxito

    La detección de Postgres de la ruta de salud usa DATABASE_BACKEND=postgresql o DB_HOST / POSTGRES_HOST, no solo la cadena DB_BACKEND_MODE. Mantén ambas familias alineadas con env.local.template para que services.database indique postgresql cuando lo esperas.

    Troubleshooting

    Mismo flujo: correcciones de autenticación y base de datos cuando una fila de la lista sigue en rojo.

    Next Steps

    Siguiente paso: exploración de funciones cuando las comprobaciones básicas estén en verde.

    1. 1

      1. Servidor de desarrollo

      Espera Next.js listo en http://localhost:3000. El script del paquete ejecuta node --import tsx server.ts. Con RING_DEPLOY_TARGET=self-hosted, el servidor propio puede registrar WSS nativo en el log.

    2. 2

      2. Salud

      Forma verificada (app/api/health/route.ts): status es healthy | degraded | unhealthy (no "ok"). services.database es postgresql o firebase. Si falta AUTH_SECRET → degraded y HTTP 503. HEAD devuelve 200 cuando el proceso está en marcha.

    3. 3

      3. Página de inicio + inicio de sesión

      1. Abre /: espera HTTP 200, sin pantalla en blanco ni fallo del adaptador en la terminal.
      2. Visita /login (puede aplicarse un prefijo de idioma: /en/login).
      3. Completa un proveedor de auth.ts: Google OAuth, Apple, Ring Mailer (OTP / enlace mágico / correo + contraseña), Google One Tap o credenciales de billetera cripto. El árbol predeterminado no incluye GitHub/Discord.
      4. Confirma la sesión: /profile muestra los datos del usuario y se mantiene al recargar. Opcional: GET /api/auth/session con las cookies del navegador devuelve { user: { id, email, role, … } }.
    4. 4

      4. CRUD autenticado

      /api/entities y /api/opportunities requieren sesión: un 401 sin cookies es lo esperado.

      Después de iniciar sesión en el navegador:

      1. /entities: la lista carga y el formulario de creación se envía (un visitante puede recibir 403 al escribir; usa una cuenta de prueba member/admin).
      2. /opportunities: la lista carga para tu rol.

      Comprobación opcional en Postgres:

      Espera un recuento ≥ 1 después del primer inicio de sesión. No existe la ruta /api/test-db: usa psql o las API autenticadas.

    5. 5

      5. Disponibilidad del túnel (ampliado)

      Espera "ready" y una lista de proveedores de lib/tunnel/config. SSE en vivo: pestaña Network → /api/tunnel/sse después de iniciar sesión. Consulta Protocolo del túnel.

    6. 6

      6. Prueba de membresía con PaymentConductor (opcional)

      Solo después de que las Migraciones hayan aplicado 004_payment_transactions.sql y hayas definido el env del procesador a partir de env.local.template (WAYFORPAY_*, y/o STRIPE_*, y/o PAYPAL_*).

      1. Inicia sesión como usuario no administrador que pueda mejorar de rol (UPGRADEABLE_ROLES, no la compra de platform-admin).
      2. Abre /membership → elige un nivel superior y un rail configurado (card → WayForPay/Stripe mediante PaymentConductor, paypal, o credit_balance si la billetera tiene saldo).
      3. La Server Action initiateMembershipPayment (app/_actions/membership-payment.ts) llama a PaymentConductor.createCheckout({ purpose: 'membership_upgrade', … }) (o primero a SubscriptionConductor para algunos rails).
      4. Espera una URL de redirección / campos de form-post hacia el PSP, o un camino de éxito inmediato para el crédito interno.
      5. Webhooks canónicos (URL de callback de producción/sandbox): /api/payments/wayforpay/webhook, /api/payments/stripe/webhook, /api/payments/paypal/webhook (getWebhookUrl en lib/payments/payment.config.ts).
      6. Después de procesar Approved / checkout.session.completed / la captura de PayPal, la UI llega a /membership/success o /membership/failure.

      No des el checkout de producción por válido hasta que la verificación HMAC/de firma y las URL de retorno coincidan con la URL pública de tu sitio. En detalle: PaymentConductor.

    Cuota de sandbox → PaymentConductor → webhook. Solo cuando el env de pagos esté definido.

    Un éxito parcial está bien

    Autenticación + un flujo CRUD sin notificaciones push ni billetera sigue siendo un clon de desarrollo válido. Conecta FCM y PaymentConductor antes de prometer membresía de pago o checkout de tienda (Entorno).

    Cuándo parar y corregir

    • Fallos repetidos de conexión a Postgres → DB_* / DB_BACKEND_MODE en Requisitos previos.
    • Bucle de redirección en el inicio de sesión → AUTH_SECRET y URI de redirección de OAuth (http://localhost:3000/api/auth/callback/google).
    • 403 al guardar una entidad → es lo esperado para visitor; inicia sesión como member o sube el rol de la cuenta de prueba.
    • Errores al iniciar la membresía por falta de claves del comercio → define WAYFORPAY_* / Stripe / PayPal antes de reintentar.
    401
    404
    Scriptsnpm run type-check, npm run build (la build ejecuta type-check)
    Flujo del primer éxito

    La detección de Postgres de la ruta de salud usa DATABASE_BACKEND=postgresql o DB_HOST / POSTGRES_HOST, no solo la cadena DB_BACKEND_MODE. Mantén ambas familias alineadas con env.local.template para que services.database indique postgresql cuando lo esperas.

    Troubleshooting

    Mismo flujo: correcciones de autenticación y base de datos cuando una fila de la lista sigue en rojo.

    Next Steps

    Siguiente paso: exploración de funciones cuando las comprobaciones básicas estén en verde.