IA Aplicada7 min de lectura

Cómo construimos Tinto: la arquitectura detrás de un podcast con IA

Un vistazo técnico a cómo funciona Tinto por dentro: desde la recolección de noticias hasta la generación de audio con IA.

Por Tinto·
Cómo construimos Tinto: la arquitectura detrás de un podcast con IA

Building in public

Creemos en construir en público. Este artículo explica la arquitectura completa de Tinto: cómo recolectamos noticias, generamos guiones con IA, convertimos texto en audio, y entregamos episodios personalizados a cada usuario.

Si eres developer, founder, o simplemente curioso sobre cómo funciona un producto de IA por dentro, esto es para ti.

La arquitectura en 30 segundos

Tinto tiene 3 servicios independientes:

  1. Frontend (Next.js en Vercel): la app web, autenticación, y CRUD
  2. Pipeline (Python en VPS): el cerebro que genera los episodios
  3. Base de datos (Supabase/PostgreSQL): el puente entre ambos

El frontend NUNCA toca la IA. Solo lee episodios con status "ready" desde la base de datos. El pipeline es el único que hace el trabajo pesado.

El pipeline paso a paso

Cada 30 minutos, un cron job revisa: "¿qué usuarios tienen su hora de entrega en los próximos 30 minutos?" Para cada uno:

Paso 1: Recolección de noticias

Usamos Perplexity (via OpenRouter) como motor de búsqueda. Le pedimos: "busca las noticias más relevantes de las últimas 24 horas sobre [intereses del usuario]".

Si Perplexity falla, tenemos un fallback a Google News RSS + feedparser. Siempre obtenemos 8-12 artículos crudos.

Paso 2: Scoring de relevancia

Un segundo modelo de IA evalúa cada artículo contra los intereses del usuario y asigna un score de relevancia. Los top 5-7 pasan al siguiente paso.

Paso 3: Generación del guión

Claude Sonnet genera un guión de ~400 palabras en español. El prompt es específico: tono conversacional, transiciones naturales entre noticias, saludo al inicio, despedida al final. El resultado suena como un presentador humano, no como una lista robótica.

Paso 4: Text-to-Speech

El guión se convierte en audio. Para usuarios Pro, usamos ElevenLabs (voces prácticamente humanas). Para usuarios Free, usamos edge-tts de Microsoft (gratis, calidad decente).

Paso 5: Post-producción

FFmpeg entra en acción: une el intro musical + audio del guión + outro. Normaliza volúmenes, comprime el MP3, y genera el archivo final (~4MB por episodio).

Paso 6: Upload y distribución

El audio se sube a Cloudflare R2 (storage con CDN, egress gratis). Luego se distribuye según las preferencias del usuario: email via Resend, Telegram via Bot API, y/o web.

Las decisiones técnicas clave

¿Por qué un VPS y no serverless?

FFmpeg necesita estar instalado como binario. Los episodios tardan 10-60 segundos en generarse (excede timeouts de serverless). Un VPS de $5/mes en Hetzner maneja cientos de usuarios sin sudar.

¿Por qué OpenRouter como gateway de LLMs?

Una sola API que nos da acceso a Claude, GPT-4, Llama, Mistral. Si un modelo falla o sube de precio, cambiamos con una línea de configuración. Sin vendor lock-in.

¿Por qué Cloudflare R2?

Egress gratuito. Para una app que sirve audio (archivos de 3-5MB por usuario por día), el costo de egress puede ser brutal en S3 o GCS. R2 lo elimina.

Los costos reales

Transparencia total:

Concepto Costo por episodio
LLM (búsqueda + guión) $0.034
TTS (ElevenLabs Pro) $0.33-0.44
TTS (edge-tts Free) $0.00
Storage + delivery $0.001
Total Free $0.035
Total Pro ~$0.40

Un usuario Free nos cuesta ~$1.05/mes. Un usuario Pro cuesta ~$4/mes pero paga $3.99. A escala, los números funcionan.

Lo que aprendimos

  1. La personalización es lo que engancha. El primer feedback de usuarios beta fue siempre: "no puedo creer que esto sea solo para mí".

  2. 5 minutos es el sweet spot. Probamos 3, 5, 7, y 10 minutos. 5 ganó por goleada. Suficiente para informar, no tanto como para aburrir.

  3. La calidad de voz importa más de lo esperado. La diferencia entre edge-tts y ElevenLabs fue el factor #1 de conversión a Pro.

  4. El email sigue siendo el canal más confiable. Telegram es cool, pero el email tiene el mejor engagement rate.


¿Quieres ver el resultado? Prueba tu primer episodio gratis en tinto.fm.

Tu briefing diario te espera

5 minutos de noticias personalizadas con IA. Audio, texto o ambos. Gratis para empezar.

Probar Tinto gratis