Skip to content

Servicios Externos

ServicioUsoVariables de entorno
StripePagos y suscripcionesSTRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET
Neon PostgreSQLBase de datosDATABASE_URL, DIRECT_URL
Upstash RedisCaché + BullMQ + pub/subUPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN
Cloudflare R2Storage de archivosR2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_NAME
Bunny.netCDN de videoBUNNY_API_KEY, BUNNY_LIBRARY_ID, BUNNY_CDN_URL
ResendEmail transaccionalRESEND_API_KEY, RESEND_FROM_EMAIL
SentryError trackingSENTRY_DSN
PostHogProduct analyticsPOSTHOG_API_KEY
Google OAuthLogin socialGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
LinkedIn OAuthLogin socialLINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET

NappAI Fluency usa Stripe para gestionar suscripciones recurrentes.

Flujo de suscripción:

  1. Usuario elige plan → POST /payments/create-checkout-session
  2. Redirección a Stripe Checkout
  3. Stripe envía webhook a POST /payments/webhook
  4. Backend actualiza user.role y user.subPeriodEnd

Importante: El endpoint /payments/webhook usa el raw body parser (no JSON) para verificar la firma de Stripe.

Redis tiene varios usos en el sistema:

UsoPatrón
Caché de sesiónTTL configurable
Colas de tareasBullMQ — certificates, email, ai, reports
Pub/subInvalidación de caché de AICredentials
Rate limitingThrottlerModule de NestJS

Almacenamiento S3-compatible para:

  • Thumbnails de cursos
  • Recursos adjuntos (PDF, DOCX, PPTX…)
  • Avatares de usuarios

CDN para video streaming:

  • Los videos de lecciones se alojan en Bunny Stream
  • La URL de reproducción incluye un token firmado (tiempo de expiración)
  • El backend genera el token — nunca exponer la API key al cliente

Email transaccional para:

  • Verificación de email al registro
  • Reset de contraseña
  • Invitaciones corporativas
  • Certificados emitidos (PDF adjunto)
  • Notificaciones de suscripción