Ir al contenido principal
VOLVER A PROYECTOS
PROJECT CODENAME: CONTRACT_ANALYZER

Analizador de Contratos con IA

Sube cualquier contrato en PDF y recibe un análisis claro: cláusulas riesgosas, puntos clave, y preguntas que deberías hacerle a tu abogado.

INTERMEDIOAIProductivityWeb2-3 semanas

Proyecto educativo — no apto para producción sin validación técnica. Leer disclaimer

OVERVIEW

Los contratos están escritos para proteger a quien los redacta, no a quien los firma. El lenguaje legal es denso por diseño — lleno de cláusulas que pasas por alto cuando quieres cerrar un deal rápido. Freelancers que firman sin leer. Inquilinos que no entienden lo que están aceptando. Founders que no notan la cláusula de no competencia enterrada en la página 11.

Este proyecto te da el poder de cambiar eso: una app web donde subes cualquier contrato en PDF y Claude lo analiza en segundos. Te devuelve un resumen ejecutivo, identifica las cláusulas que merecen atención, detecta patrones de lenguaje desfavorables, y genera una lista de preguntas inteligentes para hacerle a un abogado antes de firmar.

No reemplaza al abogado — lo potencia. Y te da a ti, como parte que firma, la información para negociar desde una posición informada.

Técnicamente, es un proyecto que te hace dominar el manejo de archivos en Next.js, el procesamiento de texto largo, y el arte de diseñar prompts estructurados que devuelven outputs formateados y consistentes.

TECH STACK

Next.jsTypeScriptTailwind CSSAnthropic SDKpdf-parseVercel
SYSTEM STATUS: OPTIMAL

THE PROBLEM

Hay una asimetría de información brutal en cada contrato que firmas. La parte que lo redacta tardó horas en construirlo con asesoría legal. Tú tienes 10 minutos para leerlo y la presión implícita de parecer razonable si preguntas demasiado.

Los servicios de revisión legal son caros y lentos. Las herramientas de IA genéricas pueden analizar texto, pero no están optimizadas para el contexto legal y no ofrecen una experiencia de usuario pensada para este caso de uso específico.

Existe un espacio enorme entre "fírmalo sin leer" y "contrata un abogado" — y este proyecto vive ahí.

PROPOSED SOLUTION

El flujo tiene tres etapas bien definidas:

Extracción: El usuario sube un PDF. Una API route en Next.js recibe el archivo con FormData, lo procesa con pdf-parse para extraer el texto plano, y limpia el output (eliminando headers/footers repetidos, normalizando espacios).

Análisis: El texto extraído se envía a Claude con un prompt estructurado que pide un análisis en formato JSON con secciones predefinidas: resumen ejecutivo, cláusulas destacadas (con severidad: informativa / atención / riesgo), puntos fuertes del contrato, y preguntas sugeridas. El formato JSON garantiza que el output sea parseable y predecible.

Presentación: El frontend parsea el JSON y renderiza cada sección con componentes visuales distintos — colores por severidad, íconos, acordeones para las cláusulas largas. La experiencia final es más parecida a un informe de auditoría que a un dump de texto.

MVP FEATURES

RELEASE PHASE: v0.1-ALPHA
[ ] Upload de archivos PDF con drag & drop o selector de archivo
[ ] Extracción del texto del PDF en el servidor
[ ] Análisis estructurado con Claude que devuelve JSON con secciones fijas
[ ] Resumen ejecutivo del contrato (tipo, partes, duración, objeto)
[ ] Lista de cláusulas destacadas con nivel de severidad (informativa / atención / riesgo)

// CÓMO EJECUTARLO

PASOS SUGERIDOS

01

Setup del proyecto: Crear proyecto Next.js con TypeScript y Tailwind. Instalar `pdf-parse` y el SDK de Anthropic.

02

Crear el componente de upload: Pídele a Claude Code un componente con drag & drop, preview del nombre del archivo, y validación de tipo (solo PDF) y tamaño (máx 5MB).

03

Crear la API route de extracción: `/app/api/analyze/route.ts` que recibe `FormData`, extrae el archivo, usa `pdf-parse` para obtener el texto, y valida que haya contenido extraído.

04

Diseñar el schema del análisis: Antes de escribir el prompt, define en TypeScript la interfaz del JSON que quieres recibir. Ejemplo: `{ summary: string, clauses: Array<{ title, content, severity, explanation }>, questions: string[] }`. Este schema es tu contrato con el modelo.

05

Construir el prompt de análisis: Pídele a Claude Code que genere un system prompt para análisis de contratos. Después itera — pruébalo con contratos reales y ajusta hasta que el output sea consistente.

06

Integrar análisis con streaming: El análisis puede tardar 15-30 segundos para contratos largos. Implementá streaming para mostrar el progreso.

07

Crear los componentes de resultado: Tarjeta de resumen ejecutivo, lista de cláusulas con colores por severidad, sección de preguntas. Pedile a Claude Code que los genere uno por uno.

08

Manejo de errores y edge cases: PDFs escaneados (sin texto extraíble), contratos en idiomas distintos, archivos muy largos que exceden el context window.

09

Polish y deploy: Loading states, animaciones sutiles, deploy en Vercel con `ANTHROPIC_API_KEY` configurada.

LO QUE VAS A APRENDER

Manejo de archivos en Next.js: upload, procesamiento server-side, validaciones

Cómo diseñar prompts que devuelven JSON estructurado y predecible

TypeScript avanzado: tipos para schemas de API, discriminated unions para severidad

Manejo de context windows: estrategias para contratos que exceden el límite

UX para apps de análisis: mostrar resultados complejos de forma scannable

Prompting para dominios especializados (legal, médico, financiero) — cómo darle contexto sin hacer al modelo responsable de decisiones profesionales

HERRAMIENTAS

PUNTO DE PARTIDA SUGERIDO

Claude Code + Claude Sonnet 4.5

2-3 semanas

TAMBIÉN FUNCIONA CON

Claude CodeCursorGitHub CopilotWindsurfChatGPT + IDE

El método importa más que la herramienta. Elige la que ya conoces.

Seguridad

Nunca enviar datos sensibles del usuario directamente al LLM sin considerar qué información incluye el contrato — si el sistema es para uso propio está bien, pero si lo abres a otros usuarios, aclarar que los textos se envían a la API de Anthropic

Validar el tipo MIME del archivo en el servidor, no solo en el cliente — un usuario puede renombrar cualquier archivo como `.pdf` para intentar subir contenido malicioso

Limitar el tamaño del archivo que se puede procesar tanto en el cliente como en la API route (Vercel tiene límites de payload — configura `export const config = { api: { bodyParser: false } }` y maneja el límite tú mismo)

No exponer la estructura interna del sistema en mensajes de error: un stack trace con rutas de archivo o nombres de variables internas es información útil para un atacante

Rendimiento

Implementar un límite de tamaño de archivo estricto antes de intentar extraer texto — procesar un PDF de 100MB puede agotar la memoria del servidor en Vercel

Truncar el texto extraído si supera el context window del modelo: contratos muy largos necesitan estrategia de chunking o al menos un aviso al usuario de que solo se analizará una parte

Paginar o colapsar los resultados si el análisis devuelve muchas cláusulas — mostrar 50 cláusulas expandidas al mismo tiempo degrada la experiencia y el rendimiento del DOM

Mostrar el análisis con streaming para que el usuario vea progreso en lugar de esperar 20-30 segundos con una pantalla en blanco

Arquitectura y Estructura

Separar la lógica de extracción de texto PDF de la lógica de análisis con IA: dos funciones o archivos distintos, cada uno con una única responsabilidad

Definir un schema TypeScript estricto para el JSON que esperas del LLM antes de escribir el prompt — el modelo debe cumplir ese contrato, y si no lo cumple, el parser debe fallar de forma controlada

Manejar el caso de PDFs escaneados (solo imágenes, sin texto extraíble) con un mensaje de error específico y útil, no un error genérico de JavaScript

Validar que el JSON devuelto por el LLM es parseable antes de intentar renderizarlo — un `JSON.parse` sin try/catch crashea toda la app

Antes de publicar (MVP Checklist)

Verificar que el límite de tamaño de archivo está implementado y muestra un mensaje claro al usuario antes de intentar el upload

Probar con un PDF corrupto o con un archivo `.jpg` renombrado como `.pdf` — la app debe mostrar un error amigable, no un stack trace

Confirmar que el output del LLM se valida antes de renderizar: si el modelo devuelve texto plano en lugar de JSON, la app no debe romper

Verificar que los datos del usuario (el texto del contrato) no se guardan en ningún log o base de datos del servidor si no es necesario

// FASES DE DESARROLLO

01

Fase 1 — Setup (30 min):

Proyecto base, configurar la API key, instalar librería de parsing de PDF (`pdf-parse` o `pdfjs-dist`).

02

Fase 2 — Procesamiento de archivo (2-3 horas):

Endpoint que recibe un archivo, extrae el texto, lo pasa al LLM con instrucciones de análisis, devuelve un objeto JSON estructurado. Probar con un contrato real antes de construir la UI.

03

Fase 3 — Interfaz de upload (2-3 horas):

Componente de drag-and-drop o input de archivo. Estados: esperando archivo → procesando → resultado → error.

04

Fase 4 — Visualización de resultados (2-3 horas):

Mostrar el análisis de forma legible: cláusulas importantes, riesgos encontrados, resumen ejecutivo.

05

Fase 5 — Polish (opcional):

Comparar múltiples contratos, historial de análisis, exportar el reporte.

¿Agente o modo chat?

Modo agente para las Fases 1-2. Una vez que el backend funciona, puedes cambiar a modo chat para iterar sobre la UI y los prompts de análisis — son cambios más puntuales.

¿TUI o editor?

Claude Code o Cursor Agent: Para generar el proyecto base y el endpoint de procesamiento.

Cursor (inline): Útil para refinar los prompts de análisis dentro del código — puedes editar el system prompt directamente y ver los cambios en contexto.

// PROMPT INICIAL SUGERIDO

Construye una API route en Next.js que:
1. Reciba un archivo (PDF o texto) como multipart form data.
2. Extraiga el texto del archivo usando pdf-parse.
3. Lo envíe a [tu LLM] con el siguiente system prompt: "Eres un asistente legal especializado en análisis de contratos. Analiza el siguiente contrato e identifica: (a) las cláusulas principales, (b) los riesgos o términos desfavorables, (c) las obligaciones de cada parte, (d) fechas y plazos importantes. Devuelve el análisis en JSON con las claves: clausulas, riesgos, obligaciones, fechas."
4. Devuelva el JSON parseado al frontend.

¿LISTO PARA CONSTRUIRLO?

Abre tu herramienta de Vibe Coding favorita y empieza a construir.

INICIAR PROYECTO