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.106.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
    Tienda multivendedor
    Membership
    Cortina de página
    Entidades
    Oportunidades
    Mensajería en tiempo real
    Módulo de noticias
    Blogs de miembros
    Notificaciones
    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
    Tienda multivendedor
    Membership
    Cortina de página
    Entidades
    Oportunidades
    Mensajería en tiempo real
    Módulo de noticias
    Blogs de miembros
    Notificaciones
    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
    Tienda multivendedor
    Membership
    Cortina de página
    Entidades
    Oportunidades
    Mensajería en tiempo real
    Módulo de noticias
    Blogs de miembros
    Notificaciones
    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

    Cortina de página

    La cortina de página es un banner estrecho (alrededor del 10% de la altura de la pantalla) que aparece cuando un visitante deja de desplazarse. Muestra uno de dos tipos de oferta: Añadir a pantalla de inicio para la app, o un producto que un vendedor ha decidido anunciar. En artículos de noticias y publicaciones del blog de miembros, un producto añadido desde la cortina puede generar una comisión para el autor de la página cuando el comprador paga más tarde.

    Usa las pestañas Founder / Developer de la barra lateral de la documentación para filtrar esta página. Las secciones compartidas se aplican a ambas audiencias.

    Estado (2026-10-26): Disponible en Layer 1 y configurable por clon mediante el bloque curtain de ring-config.json. La cola ahora respeta los descartes anteriores, así que un visitante que eligió Hoy no ya no ve el mismo banner en la página siguiente.

    Sin la cortinaCon la cortina
    Los avisos de instalación dependen del navegadorRing ofrece Añadir a pantalla de inicio por sí mismo, una vez por ventana de política
    Los autores no ganan con los productos que mencionanLos autores reciben crédito adicional en carritos pagados que empezaron en su página
    Los vendedores pagan anuncios en otro sitioLos vendedores activan un producto y fijan una comisión de autor del 1% al 10%

    Por qué importa para tu comunidad

    Los autores atraen lectores; los vendedores quieren compradores. La cortina conecta a ambos sin un sistema de anuncios aparte. Un vendedor marca un producto, un autor lo enlaza o escribe sobre el mismo tema, y cuando un lector lo compra, el autor recibe una recompensa en crédito de la plataforma. El pago al vendedor no se reduce: la comisión se emite como crédito adicional.

    Noticias

    Las páginas de artículos son donde aparecen las ofertas de productos.

    Blog de miembros

    Las publicaciones de miembros reciben las mismas ofertas y comisión de autor.

    Tienda

    Los vendedores activan la publicidad en la cortina desde el formulario del producto.

    Escenarios típicos

    • en un artículo. Los lectores ven la miel en la cortina, tocan Añadir al carrito y pagan dentro de 30 días. La bloguera recibe el 5% de esa línea como crédito.

    Configuración

    ring-config.template.json incluye estos valores por defecto. Sobrescribe cualquier clave en el ring-config.json de tu clon. Los valores los lee getCurtainPolicy() en lib/ring-config-core.ts y los valida parseCurtainPolicy en features/curtain/lib/policy.ts.

    ClavePor defectoValores permitidos
    curtain.enabledtruefalse desactiva todas las ofertas
    curtain.productSourcepage_then_poolpage_then_pool, page_only, pool_only
    curtain.maxImpressionsPerDay5de 1 a 50 por oferta, por día UTC
    curtain.notTodayHours24de 1 a 168

    Cómo se eligen las ofertas

    Related documentation

    Multi-Vendor Store

    Depende de: productos, carrito y pedidos pagados que activan la comisión.

    News Module

    Mismo flujo: páginas de artículos que alojan ofertas de productos.

    Member Blogs

    Mismo flujo: las publicaciones de miembros alojan las mismas ofertas.

    Credit Rewards

    Ver también: recompensas de crédito, que deben estar activadas para la comisión.

    Referral Codes (Refcodes)

    1. Docs
    2. /Funcionalidades
    3. /Cortina de página

    Actualizado 26 oct 20266 min de escucha

    Cortina de página

    La cortina de página es un banner estrecho (alrededor del 10% de la altura de la pantalla) que aparece cuando un visitante deja de desplazarse. Muestra uno de dos tipos de oferta: Añadir a pantalla de inicio para la app, o un producto que un vendedor ha decidido anunciar. En artículos de noticias y publicaciones del blog de miembros, un producto añadido desde la cortina puede generar una comisión para el autor de la página cuando el comprador paga más tarde.

    Usa las pestañas Founder / Developer de la barra lateral de la documentación para filtrar esta página. Las secciones compartidas se aplican a ambas audiencias.

    Estado (2026-10-26): Disponible en Layer 1 y configurable por clon mediante el bloque curtain de ring-config.json. La cola ahora respeta los descartes anteriores, así que un visitante que eligió Hoy no ya no ve el mismo banner en la página siguiente.

    Sin la cortinaCon la cortina
    Los avisos de instalación dependen del navegadorRing ofrece Añadir a pantalla de inicio por sí mismo, una vez por ventana de política
    Los autores no ganan con los productos que mencionanLos autores reciben crédito adicional en carritos pagados que empezaron en su página
    Los vendedores pagan anuncios en otro sitioLos vendedores activan un producto y fijan una comisión de autor del 1% al 10%

    Por qué importa para tu comunidad

    Los autores atraen lectores; los vendedores quieren compradores. La cortina conecta a ambos sin un sistema de anuncios aparte. Un vendedor marca un producto, un autor lo enlaza o escribe sobre el mismo tema, y cuando un lector lo compra, el autor recibe una recompensa en crédito de la plataforma. El pago al vendedor no se reduce: la comisión se emite como crédito adicional.

    Noticias

    Las páginas de artículos son donde aparecen las ofertas de productos.

    Blog de miembros

    Las publicaciones de miembros reciben las mismas ofertas y comisión de autor.

    Tienda

    Los vendedores activan la publicidad en la cortina desde el formulario del producto.

    Escenarios típicos

    • en un artículo. Los lectores ven la miel en la cortina, tocan Añadir al carrito y pagan dentro de 30 días. La bloguera recibe el 5% de esa línea como crédito.

    Configuración

    ring-config.template.json incluye estos valores por defecto. Sobrescribe cualquier clave en el ring-config.json de tu clon. Los valores los lee getCurtainPolicy() en lib/ring-config-core.ts y los valida parseCurtainPolicy en features/curtain/lib/policy.ts.

    ClavePor defectoValores permitidos
    curtain.enabledtruefalse desactiva todas las ofertas
    curtain.productSourcepage_then_poolpage_then_pool, page_only, pool_only
    curtain.maxImpressionsPerDay5de 1 a 50 por oferta, por día UTC
    curtain.notTodayHours24de 1 a 168

    Cómo se eligen las ofertas

    Related documentation

    Multi-Vendor Store

    Depende de: productos, carrito y pedidos pagados que activan la comisión.

    News Module

    Mismo flujo: páginas de artículos que alojan ofertas de productos.

    Member Blogs

    Mismo flujo: las publicaciones de miembros alojan las mismas ofertas.

    Credit Rewards

    Ver también: recompensas de crédito, que deben estar activadas para la comisión.

    Referral Codes (Refcodes)

    1. Docs
    2. /Funcionalidades
    3. /Cortina de página

    Actualizado 26 oct 20266 min de escucha

    Cortina de página

    La cortina de página es un banner estrecho (alrededor del 10% de la altura de la pantalla) que aparece cuando un visitante deja de desplazarse. Muestra uno de dos tipos de oferta: Añadir a pantalla de inicio para la app, o un producto que un vendedor ha decidido anunciar. En artículos de noticias y publicaciones del blog de miembros, un producto añadido desde la cortina puede generar una comisión para el autor de la página cuando el comprador paga más tarde.

    Usa las pestañas Founder / Developer de la barra lateral de la documentación para filtrar esta página. Las secciones compartidas se aplican a ambas audiencias.

    Estado (2026-10-26): Disponible en Layer 1 y configurable por clon mediante el bloque curtain de ring-config.json. La cola ahora respeta los descartes anteriores, así que un visitante que eligió Hoy no ya no ve el mismo banner en la página siguiente.

    Sin la cortinaCon la cortina
    Los avisos de instalación dependen del navegadorRing ofrece Añadir a pantalla de inicio por sí mismo, una vez por ventana de política
    Los autores no ganan con los productos que mencionanLos autores reciben crédito adicional en carritos pagados que empezaron en su página
    Los vendedores pagan anuncios en otro sitioLos vendedores activan un producto y fijan una comisión de autor del 1% al 10%

    Por qué importa para tu comunidad

    Los autores atraen lectores; los vendedores quieren compradores. La cortina conecta a ambos sin un sistema de anuncios aparte. Un vendedor marca un producto, un autor lo enlaza o escribe sobre el mismo tema, y cuando un lector lo compra, el autor recibe una recompensa en crédito de la plataforma. El pago al vendedor no se reduce: la comisión se emite como crédito adicional.

    Noticias

    Las páginas de artículos son donde aparecen las ofertas de productos.

    Blog de miembros

    Las publicaciones de miembros reciben las mismas ofertas y comisión de autor.

    Tienda

    Los vendedores activan la publicidad en la cortina desde el formulario del producto.

    Escenarios típicos

    • en un artículo. Los lectores ven la miel en la cortina, tocan Añadir al carrito y pagan dentro de 30 días. La bloguera recibe el 5% de esa línea como crédito.

    Configuración

    ring-config.template.json incluye estos valores por defecto. Sobrescribe cualquier clave en el ring-config.json de tu clon. Los valores los lee getCurtainPolicy() en lib/ring-config-core.ts y los valida parseCurtainPolicy en features/curtain/lib/policy.ts.

    ClavePor defectoValores permitidos
    curtain.enabledtruefalse desactiva todas las ofertas
    curtain.productSourcepage_then_poolpage_then_pool, page_only, pool_only
    curtain.maxImpressionsPerDay5de 1 a 50 por oferta, por día UTC
    curtain.notTodayHours24de 1 a 168

    Cómo se eligen las ofertas

    Related documentation

    Multi-Vendor Store

    Depende de: productos, carrito y pedidos pagados que activan la comisión.

    News Module

    Mismo flujo: páginas de artículos que alojan ofertas de productos.

    Member Blogs

    Mismo flujo: las publicaciones de miembros alojan las mismas ofertas.

    Credit Rewards

    Ver también: recompensas de crédito, que deben estar activadas para la comisión.

    Referral Codes (Refcodes)

    1. Docs
    2. /Funcionalidades
    3. /Cortina de página

    Actualizado 26 oct 20266 min de escucha

    Una bloguera gastronómica enlaza la miel de una granja
  1. Un visitante nuevo en el móvil lee tres páginas. En una de ellas la cortina ofrece Añadir a pantalla de inicio. Toca Hoy no y no la vuelve a ver durante 24 horas.
  2. Un lector toca No me interesa en un producto. Ese producto no vuelve a aparecerle nunca.
  3. Del artículo a la comisión del autor

    Dónde ver los resultados

    • Vendedores: la página de ganancias muestra un embudo de la cortina de 7 días: mostrado, mostrado de nuevo, CTA, hoy no, no me interesa, desplazado, pagado y créditos emitidos.
    • Autores: My News (/my-news) muestra el mismo embudo de 7 días para sus páginas más los créditos de cortina ganados.
    • Operadores: la página de analítica del administrador muestra el mismo embudo para todo el clon, junto a la política de cortina activa.

    requestCurtainDrop en features/curtain/actions.ts devuelve hasta tres ofertas (CURTAIN_QUEUE_MAX):

    1. Se omite por completo cuando la política está desactivada o la ruta empieza por /admin, /login, /register, /auth, /vendor o /store/checkout.
    2. Ofertas de productos solo en páginas que pasan un newsArticleId mediante CurtainPageProvider (artículos de noticias y publicaciones del blog de miembros). El artículo debe estar publicado y ser visible para el lector según canViewNewsArticle.
    3. Los productos de página son enlaces /store/<id> encontrados en el cuerpo del artículo. Los productos del pool son productos activos con curtainAdvertiseEnabled. Cada uno debe estar anunciado, activo, tener precio, no ser un producto propio del vendedor que mira y no estar suprimido.
    4. Orden: primero los productos enlazados, después la coincidencia de tema con la categoría y las etiquetas del artículo, después menos impresiones hoy.
    5. Un hueco libre se llena con Añadir a pantalla de inicio cuando el navegador no está ejecutando ya la app instalada.

    curtain-host.tsx muestra la cola y aplica canShowOffer a cada elemento en cola, lo que corrige que volvieran los banners descartados.

    Respuestas del visitante

    RespuestaEfecto
    CTAAñadir al carrito (producto) o aviso de instalación (A2HS)
    Hoy noSuprimido durante notTodayHours desde ahora
    No me interesaSuprimido para siempre para esa oferta
    DesplazarseSe registra, sin supresión

    Las preferencias se guardan en localStorage (ring_curtain_prefs) y, para miembros con sesión iniciada, en la tabla curtain_preferences (migración 050, parte de schema.sql) mediante syncCurtainPrefs.

    Atribución y comisión

    • Cada oferta de producto lleva un offerToken HMAC de features/curtain/lib/offer-token.ts, firmado con AUTH_SECRET. Vincula oferta, producto, autor y artículo.
    • Los toques de CTA se guardan en la cookie ring_curtain_attr y en el almacenamiento (ventana de 30 días, como máximo 12 toques).
    • El checkout conserva solo los toques que pasan verifyCurtainTouches. El autor y el porcentaje salen del token y del producto actual, nunca del navegador.
    • Tras el pago, mintCurtainAuthorCommission en features/curtain/services/commission.ts añade crédito al autor: subtotal de la línea por el porcentaje del producto (de 1 a 10, por defecto 5). Omite las compras propias, al referente del pedido y los duplicados, y solo se ejecuta cuando las recompensas de crédito están activadas.
    • Los eventos curtain_shown, curtain_response, curtain_cta, curtain_suppress y curtain_paid alimentan getCurtainFunnel en features/analytics/lib/curtain-analytics.ts.

    Activación por el vendedor

    El formulario de producto del vendedor incluye AdvertiseProductWidget (features/curtain/components/advertise-product-widget.tsx). Escribe curtainAdvertise: { enabled, commissionPercent } y curtainAdvertiseEnabled en el producto. Un producto sin precio no se puede anunciar.

    Preguntas frecuentes

    Impacto

    ¿La comisión sale del pago al vendedor?

    No. Es crédito adicional emitido al autor, registrado con la fuente curtain_author.

    Migración

    ¿Necesito una migración?

    No en una instalación nueva. Las bases de datos existentes necesitan 050_curtain_offers.sql para curtain_preferences y el índice de analítica.

    Operaciones

    ¿Cómo desactivo la cortina en un clon?

    Pon "curtain": { "enabled": false } en el ring-config.json de ese clon y vuelve a compilar.

    Ver también: atribución de referidos, que comparte la ventana de 30 días.

    Una bloguera gastronómica enlaza la miel de una granja
  4. Un visitante nuevo en el móvil lee tres páginas. En una de ellas la cortina ofrece Añadir a pantalla de inicio. Toca Hoy no y no la vuelve a ver durante 24 horas.
  5. Un lector toca No me interesa en un producto. Ese producto no vuelve a aparecerle nunca.
  6. Del artículo a la comisión del autor

    Dónde ver los resultados

    • Vendedores: la página de ganancias muestra un embudo de la cortina de 7 días: mostrado, mostrado de nuevo, CTA, hoy no, no me interesa, desplazado, pagado y créditos emitidos.
    • Autores: My News (/my-news) muestra el mismo embudo de 7 días para sus páginas más los créditos de cortina ganados.
    • Operadores: la página de analítica del administrador muestra el mismo embudo para todo el clon, junto a la política de cortina activa.

    requestCurtainDrop en features/curtain/actions.ts devuelve hasta tres ofertas (CURTAIN_QUEUE_MAX):

    1. Se omite por completo cuando la política está desactivada o la ruta empieza por /admin, /login, /register, /auth, /vendor o /store/checkout.
    2. Ofertas de productos solo en páginas que pasan un newsArticleId mediante CurtainPageProvider (artículos de noticias y publicaciones del blog de miembros). El artículo debe estar publicado y ser visible para el lector según canViewNewsArticle.
    3. Los productos de página son enlaces /store/<id> encontrados en el cuerpo del artículo. Los productos del pool son productos activos con curtainAdvertiseEnabled. Cada uno debe estar anunciado, activo, tener precio, no ser un producto propio del vendedor que mira y no estar suprimido.
    4. Orden: primero los productos enlazados, después la coincidencia de tema con la categoría y las etiquetas del artículo, después menos impresiones hoy.
    5. Un hueco libre se llena con Añadir a pantalla de inicio cuando el navegador no está ejecutando ya la app instalada.

    curtain-host.tsx muestra la cola y aplica canShowOffer a cada elemento en cola, lo que corrige que volvieran los banners descartados.

    Respuestas del visitante

    RespuestaEfecto
    CTAAñadir al carrito (producto) o aviso de instalación (A2HS)
    Hoy noSuprimido durante notTodayHours desde ahora
    No me interesaSuprimido para siempre para esa oferta
    DesplazarseSe registra, sin supresión

    Las preferencias se guardan en localStorage (ring_curtain_prefs) y, para miembros con sesión iniciada, en la tabla curtain_preferences (migración 050, parte de schema.sql) mediante syncCurtainPrefs.

    Atribución y comisión

    • Cada oferta de producto lleva un offerToken HMAC de features/curtain/lib/offer-token.ts, firmado con AUTH_SECRET. Vincula oferta, producto, autor y artículo.
    • Los toques de CTA se guardan en la cookie ring_curtain_attr y en el almacenamiento (ventana de 30 días, como máximo 12 toques).
    • El checkout conserva solo los toques que pasan verifyCurtainTouches. El autor y el porcentaje salen del token y del producto actual, nunca del navegador.
    • Tras el pago, mintCurtainAuthorCommission en features/curtain/services/commission.ts añade crédito al autor: subtotal de la línea por el porcentaje del producto (de 1 a 10, por defecto 5). Omite las compras propias, al referente del pedido y los duplicados, y solo se ejecuta cuando las recompensas de crédito están activadas.
    • Los eventos curtain_shown, curtain_response, curtain_cta, curtain_suppress y curtain_paid alimentan getCurtainFunnel en features/analytics/lib/curtain-analytics.ts.

    Activación por el vendedor

    El formulario de producto del vendedor incluye AdvertiseProductWidget (features/curtain/components/advertise-product-widget.tsx). Escribe curtainAdvertise: { enabled, commissionPercent } y curtainAdvertiseEnabled en el producto. Un producto sin precio no se puede anunciar.

    Preguntas frecuentes

    Impacto

    ¿La comisión sale del pago al vendedor?

    No. Es crédito adicional emitido al autor, registrado con la fuente curtain_author.

    Migración

    ¿Necesito una migración?

    No en una instalación nueva. Las bases de datos existentes necesitan 050_curtain_offers.sql para curtain_preferences y el índice de analítica.

    Operaciones

    ¿Cómo desactivo la cortina en un clon?

    Pon "curtain": { "enabled": false } en el ring-config.json de ese clon y vuelve a compilar.

    Ver también: atribución de referidos, que comparte la ventana de 30 días.

    Una bloguera gastronómica enlaza la miel de una granja
  7. Un visitante nuevo en el móvil lee tres páginas. En una de ellas la cortina ofrece Añadir a pantalla de inicio. Toca Hoy no y no la vuelve a ver durante 24 horas.
  8. Un lector toca No me interesa en un producto. Ese producto no vuelve a aparecerle nunca.
  9. Del artículo a la comisión del autor

    Dónde ver los resultados

    • Vendedores: la página de ganancias muestra un embudo de la cortina de 7 días: mostrado, mostrado de nuevo, CTA, hoy no, no me interesa, desplazado, pagado y créditos emitidos.
    • Autores: My News (/my-news) muestra el mismo embudo de 7 días para sus páginas más los créditos de cortina ganados.
    • Operadores: la página de analítica del administrador muestra el mismo embudo para todo el clon, junto a la política de cortina activa.

    requestCurtainDrop en features/curtain/actions.ts devuelve hasta tres ofertas (CURTAIN_QUEUE_MAX):

    1. Se omite por completo cuando la política está desactivada o la ruta empieza por /admin, /login, /register, /auth, /vendor o /store/checkout.
    2. Ofertas de productos solo en páginas que pasan un newsArticleId mediante CurtainPageProvider (artículos de noticias y publicaciones del blog de miembros). El artículo debe estar publicado y ser visible para el lector según canViewNewsArticle.
    3. Los productos de página son enlaces /store/<id> encontrados en el cuerpo del artículo. Los productos del pool son productos activos con curtainAdvertiseEnabled. Cada uno debe estar anunciado, activo, tener precio, no ser un producto propio del vendedor que mira y no estar suprimido.
    4. Orden: primero los productos enlazados, después la coincidencia de tema con la categoría y las etiquetas del artículo, después menos impresiones hoy.
    5. Un hueco libre se llena con Añadir a pantalla de inicio cuando el navegador no está ejecutando ya la app instalada.

    curtain-host.tsx muestra la cola y aplica canShowOffer a cada elemento en cola, lo que corrige que volvieran los banners descartados.

    Respuestas del visitante

    RespuestaEfecto
    CTAAñadir al carrito (producto) o aviso de instalación (A2HS)
    Hoy noSuprimido durante notTodayHours desde ahora
    No me interesaSuprimido para siempre para esa oferta
    DesplazarseSe registra, sin supresión

    Las preferencias se guardan en localStorage (ring_curtain_prefs) y, para miembros con sesión iniciada, en la tabla curtain_preferences (migración 050, parte de schema.sql) mediante syncCurtainPrefs.

    Atribución y comisión

    • Cada oferta de producto lleva un offerToken HMAC de features/curtain/lib/offer-token.ts, firmado con AUTH_SECRET. Vincula oferta, producto, autor y artículo.
    • Los toques de CTA se guardan en la cookie ring_curtain_attr y en el almacenamiento (ventana de 30 días, como máximo 12 toques).
    • El checkout conserva solo los toques que pasan verifyCurtainTouches. El autor y el porcentaje salen del token y del producto actual, nunca del navegador.
    • Tras el pago, mintCurtainAuthorCommission en features/curtain/services/commission.ts añade crédito al autor: subtotal de la línea por el porcentaje del producto (de 1 a 10, por defecto 5). Omite las compras propias, al referente del pedido y los duplicados, y solo se ejecuta cuando las recompensas de crédito están activadas.
    • Los eventos curtain_shown, curtain_response, curtain_cta, curtain_suppress y curtain_paid alimentan getCurtainFunnel en features/analytics/lib/curtain-analytics.ts.

    Activación por el vendedor

    El formulario de producto del vendedor incluye AdvertiseProductWidget (features/curtain/components/advertise-product-widget.tsx). Escribe curtainAdvertise: { enabled, commissionPercent } y curtainAdvertiseEnabled en el producto. Un producto sin precio no se puede anunciar.

    Preguntas frecuentes

    Impacto

    ¿La comisión sale del pago al vendedor?

    No. Es crédito adicional emitido al autor, registrado con la fuente curtain_author.

    Migración

    ¿Necesito una migración?

    No en una instalación nueva. Las bases de datos existentes necesitan 050_curtain_offers.sql para curtain_preferences y el índice de analítica.

    Operaciones

    ¿Cómo desactivo la cortina en un clon?

    Pon "curtain": { "enabled": false } en el ring-config.json de ese clon y vuelve a compilar.

    Ver también: atribución de referidos, que comparte la ventana de 30 días.