Flujos

Landing e interés

Cómo la landing en Vercel valida el envío del formulario y cómo FastAPI registra el interés confirmado en PostgreSQL.

Resumen

La landing se ejecuta en Vercel (Next.js). Si el destinatario confirma su interés, el navegador llama al Route Handler /api/interest, que aplica rate limiting con Upstash, valida Cloudflare Turnstile y reenvía la operación autenticada a api.medinodo.com. Allí FastAPI valida la relación campaña-suscriptor, evita duplicados y registra el evento en el esquema med_tracking.

Flujo de registro de interés

Diagrama: Del formulario al registro idempotente en med_trackingDiagrama: Del formulario al registro idempotente en med_tracking
Del formulario al registro idempotente en med_tracking

Explicación paso a paso

01

Confirmación

El destinatario confirma su interés en la landing servida por Vercel.

02

Rate limit

El Route Handler /api/interest aplica rate limiting distribuido con Upstash Redis.

03

Anti-abuso

Valida Cloudflare Turnstile para descartar automatización abusiva.

04

Reenvío autenticado

Reenvía la operación autenticada a api.medinodo.com; Cloudflare Tunnel la conduce hasta FastAPI.

05

Validación e idempotencia

FastAPI valida que la campaña y el suscriptor existan, evita duplicados y registra el evento en med_tracking.

Capas de validación

Vercel

Rate limit

Upstash limita la frecuencia de envío por cliente.

Vercel

Turnstile

Descarta envíos automatizados abusivos.

FastAPI

Idempotencia

Valida campaña-suscriptor y evita duplicados.

Errores posibles

  • Rate limit excedido: el envío se rechaza en Vercel antes de llegar a FastAPI.
  • Verificación de Turnstile fallida: el formulario no se procesa.
  • Campaña o suscriptor inexistentes: FastAPI rechaza el registro.
  • Intento duplicado: la idempotencia evita registrar dos veces el mismo interés.

Buenas prácticas

  • Encadenar las validaciones en el borde (rate limit y Turnstile) antes de invocar a FastAPI, para no gastar recursos del backend en solicitudes abusivas.
  • Mantener el reenvío a api.medinodo.com autenticado y a través del Tunnel, nunca exponiendo FastAPI directamente.

Consideraciones

El interés vive en med_tracking

El registro de interés se persiste en el esquema propio med_tracking, separado de los datos operativos de listmonk. Ver Base de datos.