Para builders de LATAM

El SaaS boilerplate serio
con MercadoPago nativo

Cobrá en pesos, reais o MXN con MercadoPago adentro — suscripciones recurrentes, webhooks asíncronos firmados e idempotencia ya resueltos. Stripe y Polar también están cableados, para cuando necesites salir al mundo.

Los kits Stripe-first te dejan glue-ando MercadoPago a mano

ShipFast, MakerKit y supastarter son Stripe-first. Pero Stripe no opera directo en Argentina (una restricción del BCRA), y ruteando por dLocal las comisiones reales trepan a 4-6% y liquidan a cuentas en USD/EUR. Para cobrar en ARS, BRL o MXN de forma nativa — con suscripciones recurrentes — MercadoPago es el rail pragmático, y muchas veces el único. Así que todo proyecto LATAM termina igual: glue-ando MercadoPago a Next.js a mano, otra vez.

El dolor de integrar MercadoPago, en palabras de los propios devs

Obligados a testear en producción

"Please fix the sandbox for the Checkout Pro; it's just plainly unacceptable that we need to test our integration in production." (Por favor arreglen el sandbox del Checkout Pro; es inaceptable tener que testear la integración en producción.) — Víctor G. G. Quiroga, github.com/mercadopago/sdk-js discusión #62

Abandonando la integración

"I am almost giving up on integrating with Mercado Pago." (Estoy a punto de abandonar la integración.) — Rafael Cardoso, y "I'm dropping the integration and moving forward with another provider." — Vicente Martínez, github.com/mercadopago/sdk-js discusión #62

La más difícil de testear

"de longe essa é a mais complexa e difícil de testar" (por lejos la más compleja y difícil de testear). — rjslegall, github.com/mercadopago/sdk-js discusión #62

MercadoPago, hecho como lo harías vos si tuvieras el tiempo

Suscripciones recurrentes con la API de preapproval. El webhook asíncrono donde la verdad aterriza después — firmado y verificado. Handlers idempotentes, para que una entrega duplicada nunca cobre dos veces. Es exactamente la plomería en la que tropiezan los que integran a mano, cableada detrás de una interfaz tipada y cubierta por tests. Prendé una sola env var para elegirlo. Ya lo sufrimos por vos.

billing · providers
 1  PAYMENT_PROVIDER=mercado-pago
 2  MERCADO_PAGO_ACCESS_TOKEN=...
 3  MERCADO_PAGO_WEBHOOK_SECRET=...
 4  
 5  // idempotente sobre externalOrderId — una
 6  // entrega repetida del webhook registra la
 7  // compra una sola vez, vía outbox durable.

Un contrato de billing, tres providers

Cambiá de provider detrás de una interfaz

Stripe, MercadoPago y Polar implementan el mismo port de payment-provider. Elegí uno con una env var; el resto de tu app no cambia.

Todo el ciclo de vida, no el happy path

Checkout, customer portal, cambios de plan, manejo de pagos fallidos y reconciliación en la DB después del webhook — no un cobro suelto.

Webhooks firmados e idempotentes

Cada provider verifica la firma de su webhook y registra las compras de forma idempotente, así el paso asíncrono donde "la verdad aterriza después" nunca cobra dos veces.

Docs reales en EN, ES y PT — no solo locale routing

El locale routing es commodity. Esto es distinto: la documentación del producto misma viene en inglés, español y portugués como páginas reales de Fumadocs, con inglés como fuente canónica y los siblings ES/PT mantenidos en sync. Tu compañero hispano o lusohablante lee la guía de setup en su idioma, no un machine-translate de yapa.

Todo lo demás que un SaaS de verdad necesita — DDD-layered y testeado

Auth

BetterAuth — 2FA, magic-link, OAuth, verificación de email y password reset, ya cableados.

Orgs y RBAC

Organizaciones, miembros, invitaciones, permisos por rol y API keys — multi-tenancy real.

Jobs y events

Colas de BullMQ con un dashboard de Bull Board, más un event bus con outbox durable.

Storage

S3, UploadThing, Supabase o disco local detrás de un solo storage port con keys content-addressed.

Observabilidad

OpenTelemetry, Sentry, Pino y /metrics — cada uno un no-op hasta que lo configures.

Deployá donde quieras

Docker, Railway o un VPS pelado. Sin lock-in a Stripe ni a un solo host.

FAQ del boilerplate con MercadoPago

¿De verdad soporta suscripciones recurrentes de MercadoPago?+
Sí — con la API de preapproval de MercadoPago, con el webhook asíncrono firmado verificado y las compras registradas de forma idempotente. Poné PAYMENT_PROVIDER=mercado-pago más tu access token y tu webhook secret.
¿Puedo usar Stripe o Polar en lugar de MercadoPago — o además?+
Sí. Los tres implementan la misma interfaz de billing, seleccionada por una env var. Usá MercadoPago para ARS/BRL/MXN local y Stripe o Polar cuando necesites USD global.
¿Esto es solo locale routing con una etiqueta en español?+
No. Los docs del producto están escritos en EN, ES y PT como páginas reales, y MercadoPago es un payment provider de primera clase — no un switch de locale atornillado a un kit Stripe-only.
¿Dónde lo puedo deployar?+
Donde quieras — Docker, Railway o un VPS pelado. No hay lock-in a Stripe ni a un solo host.

Dejá de glue-ar MercadoPago a Next.js a mano.

Arrancá desde una base donde los pesos, el preapproval y el webhook firmado ya están resueltos — y testeados.