La idea
Muchos profesionales necesitan cotizar rápido y con aspecto profesional, pero no tienen herramientas más allá de WhatsApp o una hoja de Excel. Quería ver si un LLM podía generar cotizaciones estructuradas — con desglose de materiales, cronograma y recomendaciones — a partir de una descripción en lenguaje natural.
El reto real no era conectar un LLM a un textarea. Era diseñar la seguridad alrededor del input del usuario, manejar fallos de proveedor de forma transparente, y generar un output que se pudiera exportar como PDF profesional.
Cómo funciona
El usuario describe el servicio, la IA genera un reporte completo, y se exporta a PDF.
Input del usuario
Descripción en lenguaje natural del servicio. Opcionalmente, la IA mejora la descripción antes de procesarla.
Generación con IA
Google Gemini genera el reporte estructurado. Si falla, Groq (Llama 3.3 70B) toma el relevo automáticamente.
Reporte completo
Análisis, materiales, costos, cronograma por fases, recomendaciones y términos.
Exportación PDF
Puppeteer renderiza el reporte a PDF y lo sube a Vercel Blob para descarga.
Seguridad multicapa
El input del usuario pasa por múltiples capas de validación antes de llegar al LLM.
Sanitización de input
XSS, HTML injection, caracteres peligrosos — todo se limpia antes de procesarse.
Prompt injection
Detección de intentos de manipular el comportamiento del LLM vía el input del usuario.
Contenido ilícito
10+ categorías bloqueadas. El sistema rechaza solicitudes fuera del dominio de mantenimiento.
Rate limiting + CSRF
Límite de requests por IP y tokens de protección contra cross-site request forgery.
Decisiones técnicas
Motor de IA con fallback
Gemini como primario, Groq como respaldo. Si el primario falla (rate limit, timeout), el segundo toma el relevo sin que el usuario lo note.
PDF serverless
Puppeteer Core + Chromium headless en una API Route de Next.js. El PDF se genera server-side y se almacena en Vercel Blob.
Validación en capas
Cada capa de seguridad es independiente. Se pueden activar/desactivar sin afectar las demás.
Modo gratuito
Variable de entorno controla si los pagos están habilitados. En modo free, todo funciona sin restricciones.
Stack
Por qué lo construí
Este proyecto ya no está en producción, pero fue donde aprendí a diseñar seguridad real alrededor de un LLM expuesto a input de usuario — no solo un disclaimer, sino capas prácticas que reducen el riesgo: sanitización, detección de patrones, validación de dominio, y rate limiting.
Aunque ya había integrado pasarelas de pago en proyectos de agencia, este fue el primer flujo de cobro end-to-end donde controlé todo el ciclo: desde la generación del valor (reporte con IA) hasta la integración con Mercado Pago, la validación del pago, y la entrega del resultado. Diseñar ese ciclo completo como owner cambió cómo pienso los productos.
El fallback entre Gemini y Groq me confirmó que diseñar con interfaces (un contrato común para el motor de IA) hace que agregar o cambiar proveedores sea trivial — el mismo patrón que apliqué después en Incident Analyzer.
Si te interesa conversar sobre este proyecto o sobre arquitectura frontend en general, escríbeme.