Skip to content

non-stop-dev/cv-optimizer

CV Optimizer

Aplicación local-first para optimizar y editar CVs con OpenAI, Gemini o OpenRouter.

cv-optimizer-preview.mp4

La idea del proyecto es simple:

  • clonas o descargas el repo
  • lo ejecutas en tu ordenador
  • configuras tu propia API key
  • subes tu CV
  • editas el resultado en el navegador

Licencia: Apache-2.0

Qué hace

  • Acepta CVs en PDF, HTML, TXT, YAML y YML.
  • Sanitiza el contenido antes de enviarlo al proveedor de IA.
  • Genera HTML semántico editable.
  • Mantiene historial local en el navegador para seguir editando.
  • Permite exportar a HTML, TXT y vista de impresión para PDF.
  • Soporta OpenAI, Gemini y OpenRouter.

Requisitos

  • Node.js 22.12.0 o superior
  • pnpm
  • una API key de OpenAI, Gemini o OpenRouter

Recomendaciones importantes

  • Se recomienda usar Google Chrome.
  • El proyecto usa APIs del navegador y almacenamiento local del navegador, y el flujo ha sido probado solo en Chrome.
  • El proyecto ha sido probado mayormente con API keys de prueba de Gemini desde GCP (Google Cloud Platform).
  • OpenAI y OpenRouter están soportados, pero en la práctica pueden presentar una tasa de errores mayor porque han sido menos probados en este repo.

Instalación paso a paso

1. Descarga el proyecto

Si usas Git:

git clone https://github.com/non-stop-dev/cv-optimizer.git
cd cv-optimizer

Si no usas Git:

  1. Descarga el repositorio como ZIP desde GitHub.
  2. Descomprímelo.
  3. Abre una terminal dentro de la carpeta.
  4. Entra al proyecto con:
cd cv-optimizer

2. Instala Node.js

Instala una versión LTS moderna de Node.js y comprueba que quedó bien:

node --version

Debe devolver 22.12.0 o superior.

3. Activa pnpm

Con Node moderno, normalmente basta con:

corepack enable pnpm
pnpm --version

4. Instala dependencias

pnpm install

5. Crea tu .env

cp .env.example .env

Importante:

  • .env no debe subirse al repositorio.
  • .env.example sí está pensado para versionarse.
  • usa solo un proveedor a la vez
  • no mezcles API keys, modelos o base URLs entre proveedores

Configuración del proveedor de IA

Abre .env y deja activa solo una plantilla.

Variables obligatorias:

  • AI_PROVIDER
  • AI_PROVIDER_API_KEY
  • AI_PROVIDER_MODEL

Variables comunes:

  • AI_MAX_OUTPUT_TOKENS
  • AI_TEMPERATURE
  • AI_TOP_P
  • CODING_ENVIRONMENT

Variables extra para OpenRouter:

  • AI_OPENROUTER_HTTP_REFERER
  • AI_OPENROUTER_TITLE

Plantilla OpenAI

AI_MAX_OUTPUT_TOKENS="10000"
AI_TEMPERATURE="0.7"
AI_TOP_P="0.95"
CODING_ENVIRONMENT="development"

AI_PROVIDER="openai"
AI_PROVIDER_API_KEY="PASTE_YOUR_OPENAI_API_KEY_HERE"
AI_PROVIDER_MODEL="PASTE_OPENAI_MODEL_NAME_HERE"
AI_PROVIDER_BASE_URL="https://api.openai.com/v1"

Ejemplos de modelo:

  • gpt-4o-mini
  • gpt-4.1-mini

Plantilla Gemini

AI_MAX_OUTPUT_TOKENS="10000"
AI_TEMPERATURE="0.7"
AI_TOP_P="0.95"
CODING_ENVIRONMENT="development"

AI_PROVIDER="gemini"
AI_PROVIDER_API_KEY="PASTE_YOUR_GEMINI_API_KEY_HERE"
AI_PROVIDER_MODEL="PASTE_GEMINI_MODEL_NAME_HERE"
AI_PROVIDER_BASE_URL="https://generativelanguage.googleapis.com/v1beta/openai/"

Ejemplos de modelo:

  • gemini-2.5-flash
  • gemini-2.5-pro

Plantilla OpenRouter

AI_MAX_OUTPUT_TOKENS="10000"
AI_TEMPERATURE="0.7"
AI_TOP_P="0.95"
CODING_ENVIRONMENT="development"

AI_PROVIDER="openrouter"
AI_PROVIDER_API_KEY="PASTE_YOUR_OPENROUTER_API_KEY_HERE"
AI_PROVIDER_MODEL="PASTE_OPENROUTER_MODEL_NAME_HERE"
AI_PROVIDER_BASE_URL="https://openrouter.ai/api/v1"
AI_OPENROUTER_HTTP_REFERER="http://localhost:4321"
AI_OPENROUTER_TITLE="CV Optimizer"

Ejemplos de modelo:

  • openai/gpt-4o-mini
  • qwen/qwen3.6-plus:free

Ejecutar la app

pnpm dev

Luego abre:

http://localhost:4321

Comandos útiles

pnpm dev

Levanta la aplicación en local.

pnpm test

Ejecuta los tests.

pnpm build

Construye la app para producción.

pnpm exec astro check

Ejecuta validación de Astro y TypeScript.

Flujo básico de uso

  1. Arranca la app con pnpm dev.
  2. Abre http://localhost:4321.
  3. Sube tu CV.
  4. Espera a que termine la optimización.
  5. Edita el contenido directamente en el navegador.
  6. Exporta a HTML, TXT o abre la vista de impresión para PDF.

Límites actuales

  • tamaño máximo por archivo: 10 MB
  • máximo de páginas PDF: 35
  • máximo de posiciones objetivo: 3
  • la exportación PDF actual usa impresión del navegador; no hay todavía un exportador automático de servidor

Solución rápida de problemas

pnpm: command not found

Ejecuta:

corepack enable pnpm

AI_NOT_CONFIGURED

Revisa que en .env existan:

  • AI_PROVIDER
  • AI_PROVIDER_API_KEY
  • AI_PROVIDER_MODEL

El modelo no existe o no es compatible

Tu API key puede ser válida, pero el modelo no corresponde con el proveedor configurado. Revisa AI_PROVIDER_MODEL.

El puerto 4321 ya está ocupado

Prueba:

pnpm dev -- --port 4322

Y abre http://localhost:4322.

Estructura del proyecto

Contribuir

Si quieres contribuir, revisa primero CONTRIBUTING.md.

Seguridad

Si encuentras un problema de seguridad, revisa SECURITY.md.

About

No description, website, or topics provided.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors