Llevo unos meses construyendo Autoreport mientras trabajo a jornada completa. La idea era sencilla: cada lunes por la mañana, recibir un PDF en el inbox con los números de Stripe de la semana anterior — sin dashboards, sin trabajo manual. Así lo construí, el stack que elegí y las lecciones que aprendí.
El problema
Cada lunes abría Stripe para revisar la semana anterior. Revenue, pagos, nuevos clientes. No era difícil — solo generaba fricción. Y como requería esfuerzo, me lo saltaba o lo hacía mal.
Quería que los números vinieran a mí, no al revés.
El stack
Todo el backend corre en AWS, desplegado con Terraform:
- Lambda (Python) — una función por etapa del pipeline: extracción de datos, generación de narrativa con IA, construcción del PDF, envío por email
- EventBridge — dispara el pipeline cada lunes por la mañana
- S3 — almacena los datos brutos de Stripe y los informes generados
- DynamoDB — registro de tenants
- SES — envío de emails
- Secrets Manager — guarda la API key de Stripe de cada cliente
- Bedrock (Claude Haiku) — genera la narrativa de IA a partir de las métricas semanales
- API Gateway + Lambda — gestiona los webhooks de Paddle para la gestión de suscripciones
La landing page es un sitio estático en Netlify. Los pagos van a través de Paddle como Merchant of Record.
Cómo funciona
- El cliente se suscribe a través del checkout de Paddle
- Un email automático vía SES le pide su API key de solo lectura de Stripe
- El cliente responde con la key y lo registro manualmente con un script (intencionadamente simple para la beta)
- Cada lunes, EventBridge dispara el pipeline por tenant
- Lambda extrae los datos de Stripe, los envía a Bedrock, construye el PDF y lo entrega vía SES
Lo que me sorprendió
El prompt engineering en Bedrock me llevó más tiempo del esperado. La primera versión de la narrativa era alarmista — "preocupación crítica", "atención inmediata" — ante fluctuaciones semana a semana completamente normales. Tuve que ser muy explícito en el prompt sobre el tono, el contexto y cuándo usar lenguaje contundente de verdad.
Lo que funcionó fue estructurar el prompt en torno a tres cosas: (1) indicarle explícitamente qué métricas importan más y en qué orden, (2) darle umbrales para saber cuándo algo merece ser destacado frente a varianza normal, y (3) decirle qué NO decir — cosas como "requiere atención inmediata" a menos que la tasa de éxito caiga por debajo de un umbral definido o haya varias disputas abiertas.
La restricción más útil fue pedirle que reconociera las bajadas semana a semana de forma neutra y sin alarma, y que centrara la narrativa en lo que muestran los datos, no en lo que podrían significar. Al principio inventaba razones para las bajadas — "esto podría indicar fluctuación estacional o menor inversión en marketing" — que es puro ruido cuando tienes 2 transacciones.
La ruta de Merchant of Record (Paddle) fue la decisión correcta para evitar los dolores de cabeza de impuestos e IVA como fundador en solitario en España. El proceso de aprobación tardó unos días pero mereció la pena.
Qué viene después
Ahora mismo está en beta. Si tienes un SaaS en Stripe y quieres que te llegue tu semana resumida cada lunes sin hacer nada, pruébalo en autoreport.dev.
Encantado de responder cualquier pregunta sobre la arquitectura o el proceso de construcción.
Top comments (0)