<link rel="stylesheet" href="/assets/fonts/jetbrains-mono/jetbrains-mono.css" />
All posts

Cómo construí un laboratorio de 13 herramientas PDF e IA que trabajan juntas

El laboratorio de esta web nació de una necesidad concreta: necesitaba un banco de pruebas para las tecnologías que uso con clientes, y quería que también fuera útil para quien trabaja a diario con documentos. Hoy cuenta con 13 herramientas — visor, editor de PDF, OCR, escáner, traducción, resumen, búsqueda de PDF legales, diapositivas con IA y otras — en siete idiomas. Esta es la historia de cómo lo construí.

El problema y las restricciones

  • Costes bajos: un backend NestJS en un pequeño servicio cloud, sin infraestructura dedicada.
  • Privacidad: siempre que sea posible, los archivos no deben salir del dispositivo de quien los usa.
  • Siete idiomas y SEO: cada herramienta debe poder encontrarse en Google en todos los idiomas.
  • Herramientas anónimas: sin registro obligatorio, así que con protecciones contra abusos.

Decisión 1: en el navegador cuando se puede, en el servidor cuando hace falta

El visor, el editor de PDF (unir, dividir, rotar, marca de agua) y la primera fase del OCR funcionan íntegramente en el navegador, con pdf.js y pdf-lib: el documento nunca se sube. El servidor solo entra en juego cuando es inevitable: llamadas a modelos de IA, OCR pesado con Tesseract, conversiones de formato.

Decisión 2: primero el texto, después el OCR

Cada página se consulta primero por su capa de texto. Por debajo de 40 caracteres la considero un escaneo y la envío al OCR; el mismo umbral vale en el navegador y en el servidor, para que ambos caminos den resultados coherentes. El OCR es lento, así que hay un tope de 20 páginas por documento.

Decisión 3: límites declarados, no ocultos

Los documentos largos se dividen en bloques para la IA. Por encima de 15 bloques prefiero truncar y decírselo al usuario, antes que dejar que tiempos y costes se disparen con un archivo patológico:

// Hard cap on blocks per document: beyond it the file is
// truncated honestly instead of exploding latency and cost.
const chunks = allChunks.slice(0, this.MAX_CHUNKS); // 15
const truncated = allChunks.length > this.MAX_CHUNKS;
// "truncated" goes back to the UI: the user is told, not surprised

Decisión 4: herramientas conectadas por un workspace

El valor real está en las cadenas: escáner → OCR → traducción, búsqueda → resumen. Por eso añadí un workspace que pasa el resultado de una herramienta a la siguiente sin descargar y volver a subir archivos. Lo conté en detalle en este artículo.

Decisión 5: cuotas de IA

Herramientas anónimas y llamadas a modelos de IA son una combinación peligrosa para el presupuesto. Además del límite por minuto, introduje un tope diario por dirección IP y un presupuesto global diario de tokens, con un interruptor de emergencia. Sin ellos, un solo script automático podría gastar en una hora el presupuesto de un mes.

Los errores de los que más aprendí

  • Mis propias cabeceras de seguridad bloqueaban mi propia vista previa. Los valores por defecto de Helmet prohíben mostrar respuestas del backend en un iframe de otro origen: tuve que abrir una excepción específica, solo en esa ruta y solo para mi frontend.
  • En los móviles la vista previa del PDF mostraba solo la primera página. El visor nativo de los navegadores móviles suele hacerlo: en móvil ahora renderizo las páginas con pdf.js, a través de un proxy con una lista cerrada de dominios permitidos para evitar abusos.
  • Las fuentes hay que verificarlas en vivo. Para la búsqueda de PDF legales mantuve Internet Archive, Project Gutenberg, arXiv y Europe PMC; otras fuentes prometedoras se descartaron porque, al probarlas de verdad, devolvían páginas HTML y no PDF.
  • Títulos en un solo idioma. Durante semanas las páginas de las herramientas tuvieron títulos y descripciones fijos, casi todos en inglés: las versiones en los otros idiomas eran, en la práctica, invisibles para Google.

El resultado

Trece herramientas en siete idiomas, con páginas prerenderizadas para cada idioma y la mayor parte del procesamiento en el navegador. Pero el resultado más útil es otro: un repertorio de soluciones ya probadas — gestión de PDF, OCR, cuotas de IA, proxies seguros, i18n — que reutilizo en los proyectos para clientes.


En resumen

Construir el laboratorio me enseñó tres cosas: procesar en el navegador todo lo posible, declarar los límites en lugar de ocultarlos y proteger cada recurso que cuesta dinero. Si tienes un proyecto que trabaja con documentos o IA, escríbeme: probablemente ya me he enfrentado a un problema parecido.

💬 Notas de los lectores

0 notas

Escribe una nota

Comparte tu opinión, una sugerencia o un cumplido

Últimas notas

Aún no hay notas. ¡Sé el primero en comentar!