Senda
Arquitectura

Componentes

Componentes de Senda, cómo interactúan y qué pieza corre hoy frente al diseño.

Componentes

ComponenteTecnologíaRol
LandingNext.js 15, React 19, Tailwind 4, next-intlMarketing y pitch en Senda.App
BackendNode.js (>= 22.12.0) / TypeScript / ExpressWebhook de WhatsApp, motor de intenciones, transcripción, orquestación
TranscripciónAPI de OpenAI (whisper-1)Nota de voz → texto
Capa blockchainStellar (USDC SAC) + SendaContract en SorobanSettlement, crédito y saldo
RendimientosBlend (testnet)Supply / consulta / withdraw de USDC
Off-ramp Mercado PagoSEP-24 contra testanchor.stellar.orgRetiro interactivo a Mercado Pago
Off-ramp efectivoÓrdenes simuladas (MoneyGram, Western Union, comercio Senda)Código de retiro y lock de USDC
On-ramp / Alfred PayPrevistoNo está implementado en senda-backend
Interfaz de chatWhatsApp Cloud API (v22.0)Canal del usuario

Cómo interactúan

La landing y el backend son despliegues separados. La landing no llama al backend.

Piezas

Bot de WhatsApp

WhatsApp Cloud API (versión v22.0 por defecto). El backend expone:

  • GET /webhook para la verificación de Meta.
  • POST /webhook para los mensajes, validados con la firma X-Hub-Signature-256 usando el App Secret de Meta.
  • GET /health y GET /media/welcome.mp4.

Wallet

  • Diseño: no-custodial (passkey / smart wallet Soroban).
  • Hoy: custodia invisible SEP-30; Privy MPC solo si USE_PRIVY_WALLETS=true.

Confidential Token

  • Diseño: envoltura de USDC con Confidential Token (OpenZeppelin + verificador UltraHonk de Nethermind).
  • Hoy: el contrato propio del backend es SendaContract (ping / credit / balance) vía STELLAR_CONTRACT_ID; no hay Confidential Token integrado en senda-backend.

En testnet el backend usa el Stellar Asset Contract de USDC CDT2MY3QNV2RT2XULQWWXX2JELUWRWNXNKONCYG5MTIGZM7G5S2QNNGB (USDC_SAC_CONTRACT_ID). SendaContract (STELLAR_CONTRACT_ID) registra créditos y saldos; no es un Confidential Token.

Persistencia

El bot escribe JSON en el directorio de datos (senda-db.json, sesiones, órdenes de retiro). Prisma existe como referencia (DATABASE_URL por defecto file:../data/senda.db) y no está activo. Los mensajes de WhatsApp se deduplican por id; los créditos usan un claim idempotente.

La iteración en curso del backend migra la persistencia a SQLite / Supabase: ver Senda Backend → Persistencia.

Off-ramp

Mercado Pago vía SEP-10 + SEP-24 (ancla de test). El efectivo (MoneyGram, Western Union, comercio) es una orden simulada que bloquea USDC en el vault de retiro. Alfred Pay es la pasarela prevista, no un cliente en el código.

Stack de la landing

  • Next.js 15
  • React 19
  • Prisma
  • tRPC
  • NextAuth
  • Tailwind 4
  • next-intl

La landing usa Next.js / React / Tailwind / next-intl. Prisma / tRPC / NextAuth están disponibles en el stack; su rol final depende de cómo se conecte Senda.App con senda-backend.