// CVForge · Cómo está hecho

Una promesa que se verifica, no que se pide.

Casi cualquier herramienta de CV con IA te promete "no inventar". CVForge lo convierte en estructura: cada afirmación trae su fuente, cada número se comprueba en código, y lo que no se puede probar se marca en rojo antes de que salga de tu máquina. Esta página explica cómo, para quien quiera leer el sistema además de usarlo.

// Tres sustantivos

Evidencia, requisitos, resultados.

Todo el producto se reduce a tres cosas: evidencia (lo que la persona realmente hizo, registro por registro, con métricas y periodo), requisitos (lo que una vacante realmente pide, extraídos por el modelo sin ver la evidencia) y resultados (lo que pasó con cada postulación). Cada función captura evidencia, mapea evidencia a requisitos, o aprende de resultados. La IA puede seleccionar, ordenar, condensar y reformular evidencia real; nunca inventar empleadores, fechas, títulos, cifras ni experiencia.

$ cvforge compose --verify

b6 · "Lideré la adquisición digital de comercios nuevos…"

cita → ev_06 (2018-08 – 2021-02) · cifras: $1,450 → $890 MXN ✓ unidad ✓ moneda

✓ cada afirmación con rastro a evidencia registrada

b8 · "Escribí consultas SQL (joins y agregados)…"

⚠ distorsión: la fuente dice "consultas SQL sencillas"; el punto omite el calificativo

// Cómo se verifica

Cinco capas, cuatro de ellas sin modelo.

01

Citas obligatorias

Cada punto del CV y cada párrafo con hechos lista los ids de la evidencia de la que sale. Un punto sin cita, o con una cita a un registro que no se seleccionó para esa postulación, falla la verificación.

02

Números verificados en código

Cada cifra del documento se busca en las métricas de los registros citados, con su unidad y su moneda. "$1.2M USD" sobre un registro que dice "$1.2M MXN" falla. Esto no se le pide al modelo: se comprueba.

03

Un hueco no se puede reclamar

Si el análisis marcó un requisito como no cubierto, ningún punto del CV puede afirmarlo, ni siquiera usando la palabra exacta de la vacante. Es la fabricación que más cuesta una oferta, y se bloquea en código.

04

Una sola reparación

Si algo falla, el modelo recibe exactamente qué y reescribe una vez. Lo que siga fallando se muestra, no se esconde ni se reintenta en bucle.

05

Exageración y tiempo verbal

Una pasada final, con las fuentes anotadas con su periodo, revisa que "lideré" no venga de "participé" y que un trabajo terminado no se escriba en presente.

// Dos etapas que no se ven

El análisis está separado a propósito.

La extracción de requisitos solo ve la vacante; nunca la evidencia. El mapeo recibe los requisitos ya extraídos y la evidencia proyectada de forma estable (la misma cadena de bytes en cada llamada, para que la caché de prompt la cobre a una fracción). El veredicto ("vale la pena", "apuesta", "descarta") es aritmética sobre el mapeo, no un número que el modelo inventa entre 65 y 85. Ubicación, zona horaria y permiso de trabajo se evalúan primero porque no se arreglan redactando.

Cuando la evidencia cambia después de un análisis, el sistema lo nota (un hash de la proyección) y ofrece re-analizar con un clic; la extracción, que no cambió, no se repite ni se paga.

// Medir, no suponer

Evals de prompts y costos reales.

Un cambio de prompt es injuzgable sin línea base: se ve que la salida cambió, no que mejoró. CVForge congela vacantes reales con lo que el prompt extrajo el día que se juzgó bien, y vuelve a correr las etapas en vivo para comparar: qué requisitos se cayeron o aparecieron, qué cambió de obligatorio a deseable, si el veredicto se movió con la misma evidencia. La primera medición mostró algo útil: el mismo prompt sobre la misma vacante re-extrae con ruido visible en los requisitos blandos, así que el conjunto que se juzga es el de requisitos obligatorios no blandos, y cada corrida se registra para medir el ruido en vez de suponerlo.

Cada llamada al modelo registra sus tokens y su costo; el contador está en la barra superior de la app. Medido en uso real: ≈ $0.13 USD por análisis de vacante; ≈ $0.50 USD por kit completo (CV + carta + respuestas + mensaje); $5–10 USD de API en una búsqueda completa.

// Lo que no se construyó, a propósito

  • Nada de scraping ni auto-aplicación: prepara materiales; la persona aplica.
  • Nada de puntajes predictivos ni aprendizaje automático sobre resultados: la página de números es aritmética sobre los datos propios, y dice "no hay datos suficientes" debajo de n=5.
  • Nada en la nube: sin cuentas, sin telemetría, sin datos de nadie en ningún servidor. La única conexión es a la API de Anthropic con la clave del usuario.
  • La demo pública es la misma app con la base de datos en memoria, una persona ficticia y resultados generados una sola vez; no llama a ningún modelo y no puede escribir nada.

// Stack

Next.js 16 (App Router, acciones de servidor, streaming), React 19, TypeScript estricto, SQLite en un archivo local con migraciones automáticas, SDK de Anthropic con salidas estructuradas validadas por esquema (Zod) y caché de prompt, Playwright solo como motor de impresión para el PDF, pruebas con Vitest (cerca de 300, escritas primero), Biome. Interfaz en español e inglés con un diccionario tipado. Todo el código es abierto, con licencia MIT: se puede leer, correr y cambiar sin pedirle permiso a nadie.