SETUP.es.md
English | Español | 简体中文 | 日本語
¡Bienvenido! Esta guía te acompaña para configurar Resume Matcher en tu máquina local. Tanto si eres desarrollador y quieres contribuir como si solo quieres ejecutarlo localmente, aquí tienes todo lo necesario.
<a id="prerequisites"></a>
Antes de empezar, asegúrate de tener lo siguiente instalado en tu sistema:
| Herramienta | Versión mínima | Cómo comprobarlo | Instalación |
|---|---|---|---|
| Python | 3.13+ | python --version | python.org |
| Node.js | 22+ | node --version | nodejs.org |
| npm | 10+ | npm --version | Viene con Node.js |
| uv | Última | uv --version | astral.sh/uv |
| Git | Cualquiera | git --version | git-scm.com |
Resume Matcher usa uv para una gestión de dependencias de Python rápida y fiable. Instálalo con:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# O mediante pip
pip install uv
<a id="quick-start"></a>
Si ya estás familiarizado con herramientas de desarrollo y quieres arrancar rápido:
# 1. Clona el repositorio
git clone https://github.com/srbhr/Resume-Matcher.git
cd Resume-Matcher
# 2. Inicia el backend (Terminal 1)
cd apps/backend
cp .env.example .env # Crea la configuración a partir de la plantilla
uv sync # Instala dependencias de Python
uv run uvicorn app.main:app --reload --port 8000
# 3. Inicia el frontend (Terminal 2)
cd apps/frontend
npm install # Instala dependencias de Node.js
npm run dev # Arranca el servidor de desarrollo
Abre http://localhost:3000 en el navegador y listo.
Nota: antes de usar la app, necesitas configurar un proveedor de IA. Consulta Configurar tu proveedor de IA.
<a id="step-by-step-setup"></a>
<a id="1-clone-the-repository"></a>
Primero, trae el código a tu máquina:
git clone https://github.com/srbhr/Resume-Matcher.git
cd Resume-Matcher
<a id="2-backend-setup"></a>
El backend es una aplicación Python (FastAPI) que gestiona el procesamiento de IA, el parseo del currículum y el almacenamiento de datos.
cd apps/backend
cp .env.example .env
.env con tu editor preferido# macOS/Linux
nano .env
# O usa el editor que prefieras
code .env # VS Code
El ajuste más importante es tu proveedor de IA. Aquí tienes una configuración mínima para OpenAI:
LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=sk-your-api-key-here
# Mantén estos valores por defecto para desarrollo local
HOST=0.0.0.0
PORT=8000
FRONTEND_BASE_URL=http://localhost:3000
CORS_ORIGINS=["http://localhost:3000", "http://127.0.0.1:3000"]
uv sync
Esto crea un entorno virtual e instala todos los paquetes requeridos.
uv run uvicorn app.main:app --reload --port 8000
Deberías ver una salida como:
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: Started reloader process
Deja este terminal ejecutándose y abre un nuevo terminal para el frontend.
<a id="3-frontend-setup"></a>
El frontend es una aplicación Next.js que proporciona la interfaz de usuario.
cd apps/frontend
Solo es necesario si tu backend se ejecuta en un puerto distinto:
cp .env.sample .env.local
npm install
npm run dev
Deberías ver:
▲ Next.js 16.x.x (Turbopack)
- Local: http://localhost:3000
Abre http://localhost:3000 en el navegador. Deberías ver el panel de Resume Matcher.
<a id="configuring-your-ai-provider"></a>
Resume Matcher admite múltiples proveedores de IA. Puedes configurarlo desde la página de Settings en la app o editando el archivo .env del backend.
<a id="option-a-cloud-providers"></a>
| Proveedor | Configuración | Obtener API key |
|---|---|---|
| OpenAI | LLM_PROVIDER=openai | |
LLM_MODEL=gpt-5-nano-2025-08-07 | platform.openai.com | |
| Anthropic | LLM_PROVIDER=anthropic | |
LLM_MODEL=claude-haiku-4-5-20251001 | console.anthropic.com | |
| Google Gemini | LLM_PROVIDER=gemini | |
LLM_MODEL=gemini-3-flash-preview | aistudio.google.com | |
| OpenRouter | LLM_PROVIDER=openrouter | |
LLM_MODEL=deepseek/deepseek-chat | openrouter.ai | |
| DeepSeek | LLM_PROVIDER=deepseek | |
LLM_MODEL=deepseek-chat | platform.deepseek.com |
Ejemplo de .env para Anthropic:
LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=sk-ant-your-key-here
<a id="option-b-local-ai-with-ollama-free"></a>
¿Quieres ejecutar modelos localmente sin costes de API? Usa Ollama.
Descárgalo e instálalo desde ollama.com
ollama pull gemma3:4b
Otras buenas opciones: mistral, codellama, neural-chat
.envLLM_PROVIDER=ollama
LLM_MODEL=gemma3:4b
LLM_API_BASE=http://localhost:11434
# LLM_API_KEY no es necesario con Ollama
ollama serve
Normalmente Ollama se inicia automáticamente tras la instalación.
<a id="docker-deployment"></a>
¿Prefieres un despliegue en contenedor? Resume Matcher incluye soporte para Docker.
# Construir e iniciar los contenedores
docker-compose up -d
# Ver logs
docker-compose logs -f
# Detener los contenedores
docker-compose down
.env)<a id="accessing-the-application"></a>
Cuando ambos servidores estén ejecutándose, abre el navegador:
| URL | Descripción |
|---|---|
| http://localhost:3000 | Aplicación principal (Dashboard) |
| http://localhost:3000/settings | Configurar proveedor de IA |
| http://localhost:8000 | Raíz de la API del backend |
| http://localhost:8000/docs | Documentación interactiva de la API |
| http://localhost:8000/health | Health check del backend |
<a id="common-commands-reference"></a>
cd apps/backend
# Iniciar servidor de desarrollo (con auto-reload)
uv run uvicorn app.main:app --reload --port 8000
# Iniciar servidor de producción
uv run uvicorn app.main:app --host 0.0.0.0 --port 8000
# Instalar dependencias
uv sync
# Instalar con dependencias de desarrollo (para tests)
uv sync --group dev
# Ejecutar tests
uv run pytest
# Verificar si la base de datos requiere reset (se guarda como JSON)
ls -la data/
cd apps/frontend
# Iniciar servidor de desarrollo (con Turbopack para refresco rápido)
npm run dev
# Build para producción
npm run build
# Iniciar servidor de producción
npm run start
# Ejecutar linter
npm run lint
# Formatear código con Prettier
npm run format
# Ejecutar en un puerto diferente
npm run dev -- -p 3001
Resume Matcher usa TinyDB (almacenamiento en archivos JSON). Todos los datos están en apps/backend/data/:
# Ver archivos de la base de datos
ls apps/backend/data/
# Hacer backup de tus datos
cp -r apps/backend/data apps/backend/data-backup
# Resetear todo (empezar de cero)
rm -rf apps/backend/data
<a id="troubleshooting"></a>
Error: ModuleNotFoundError
Asegúrate de ejecutar con uv:
uv run uvicorn app.main:app --reload
Error: LLM_API_KEY not configured
Revisa que tu archivo .env tenga una API key válida para el proveedor elegido.
Error: ECONNREFUSED al cargar páginas
El backend no está en ejecución. Inícialo primero:
cd apps/backend && uv run uvicorn app.main:app --reload
Error: errores de build o TypeScript
Limpia la caché de Next.js:
rm -rf apps/frontend/.next
npm run dev
Error: Cannot connect to frontend for PDF generation
El backend no puede acceder al frontend. Comprueba:
FRONTEND_BASE_URL en .env coincide con tu URL del frontendCORS_ORIGINS incluye la URL del frontendSi el frontend corre en el puerto 3001:
FRONTEND_BASE_URL=http://localhost:3001
CORS_ORIGINS=["http://localhost:3001", "http://127.0.0.1:3001"]
Error: Connection refused to localhost:11434
ollama listollama serveollama pull gemma3:4b<a id="project-structure-overview"></a>
Resume-Matcher/
├─ apps/
│ ├─ backend/ # Python FastAPI backend
│ │ ├─ app/
│ │ │ ├─ main.py # Application entry point
│ │ │ ├─ config.py # Environment configuration
│ │ │ ├─ database.py # TinyDB wrapper
│ │ │ ├─ llm.py # AI provider integration
│ │ │ ├─ routers/ # API endpoints
│ │ │ ├─ services/ # Business logic
│ │ │ └─ schemas/ # Data models
│ │ ├─ prompts/ # LLM prompt templates
│ │ ├─ data/ # Database storage (auto-created)
│ │ ├─ .env.example # Environment template
│ │ └─ pyproject.toml # Python dependencies
│ └─ frontend/ # Next.js React frontend
│ ├─ app/ # Pages (dashboard, builder, etc.)
│ ├─ components/ # Reusable React components
│ ├─ lib/ # Utilities and API client
│ ├─ .env.sample # Environment template
│ └─ package.json # Node.js dependencies
├─ docs/ # Additional documentation
├─ docker-compose.yml # Docker configuration
├─ Dockerfile # Container build instructions
└─ README.md # Project overview
<a id="getting-help"></a>
¿Atascado? Estas son tus opciones:
| Documento | Descripción |
|---|---|
| backend-guide.md | Arquitectura del backend y detalles de la API |
| frontend-workflow.md | Flujo de usuario y arquitectura de componentes |
| style-guide.md | Sistema de diseño UI (Swiss International Style) |
¡Feliz creación de currículums! Si Resume Matcher te resulta útil, considera darle una estrella al repo y unirte a nuestro Discord.