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.
- Requisitos previos
- Inicio rápido
- Configuración paso a paso
- Configurar tu proveedor de IA
- Despliegue con Docker
- Acceder a la aplicación
- Referencia de comandos comunes
- Solución de problemas
- Estructura del proyecto
- Obtener ayuda
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 uvSi 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 app
# 3. Inicia el frontend (Terminal 2)
cd apps/frontend
npm install # Instala dependencias de Node.js
npm run dev # Arranca el servidor de desarrolloAbre 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.
Primero, trae el código a tu máquina:
git clone https://github.com/srbhr/Resume-Matcher.git
cd Resume-MatcherEl 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/backendcp .env.example .env# macOS/Linux
nano .env
# O usa el editor que prefieras
code .env # VS CodeEl 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 syncEsto crea un entorno virtual e instala todos los paquetes requeridos.
RELOAD=true uv run appDeberías ver una salida como:
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: Started reloader processDeja este terminal ejecutándose y abre un nuevo terminal para el frontend.
El frontend es una aplicación Next.js que proporciona la interfaz de usuario.
cd apps/frontendSolo es necesario si tu backend se ejecuta en un puerto distinto:
cp .env.sample .env.localnpm installnpm run devDeberías ver:
▲ Next.js 16.x.x (Turbopack)
- Local: http://localhost:3000Abre http://localhost:3000 en el navegador. Deberías ver el panel de Resume Matcher.
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.
| Proveedor | Configuración | Obtener API key |
|---|---|---|
| OpenAI | LLM_PROVIDER=openaiLLM_MODEL=gpt-5-nano-2025-08-07 |
platform.openai.com |
| Anthropic | LLM_PROVIDER=anthropicLLM_MODEL=claude-haiku-4-5-20251001 |
console.anthropic.com |
| Google Gemini | LLM_PROVIDER=geminiLLM_MODEL=gemini-3-flash-preview |
aistudio.google.com |
| OpenRouter | LLM_PROVIDER=openrouterLLM_MODEL=deepseek/deepseek-chat |
openrouter.ai |
| DeepSeek | LLM_PROVIDER=deepseekLLM_MODEL=deepseek-chat |
platform.deepseek.com |
| OpenAI-Compatible | LLM_PROVIDER=openai_compatibleLLM_MODEL=llama-3.1-8bLLM_API_BASE=http://localhost:8080/v1 |
— (local) |
OpenAI-Compatible apunta a cualquier servidor local que exponga la API Chat Completions de OpenAI — llama.cpp, vLLM, LM Studio, etc. La API key es opcional.
Ejemplo de .env para Anthropic:
LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=sk-ant-your-key-here¿Quieres ejecutar modelos localmente sin costes de API? Usa Ollama.
Descárgalo e instálalo desde ollama.com
ollama pull gemma3:4bOtras buenas opciones: mistral, codellama, neural-chat
LLM_PROVIDER=ollama
LLM_MODEL=gemma3:4b
LLM_API_BASE=http://localhost:11434
# LLM_API_KEY no es necesario con Ollamaollama serveNormalmente Ollama se inicia automáticamente tras la instalación.
¿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- Las API keys se configuran desde la UI en http://localhost:3000/settings (no mediante archivos
.env) - Los datos se persisten en un volumen de Docker
- Se exponen los puertos del frontend (3000) y del backend (8000)
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 |
- Abre http://localhost:3000/settings
- Selecciona tu proveedor de IA
- Introduce tu API key (o configura Ollama)
- Haz clic en "Save Configuration"
- Haz clic en "Test Connection" para verificar
- Vuelve al Dashboard y sube tu primer currículum
cd apps/backend
# Iniciar servidor de desarrollo (con auto-reload)
RELOAD=true uv run app
# 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 3001Resume 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/dataError: ModuleNotFoundError
Asegúrate de ejecutar con uv:
uv run uvicorn app.main:app --reloadError: 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 --reloadError: errores de build o TypeScript
Limpia la caché de Next.js:
rm -rf apps/frontend/.next
npm run devError: Cannot connect to frontend for PDF generation
El backend no puede acceder al frontend. Comprueba:
- El frontend está en ejecución
FRONTEND_BASE_URLen.envcoincide con tu URL del frontendCORS_ORIGINSincluye la URL del frontend
Si 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
- Comprueba que Ollama está en ejecución:
ollama list - Inicia Ollama si es necesario:
ollama serve - Asegúrate de que el modelo está descargado:
ollama pull gemma3:4b
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
¿Atascado? Estas son tus opciones:
- Comunidad de Discord: dsc.gg/resume-matcher - Comunidad activa para preguntas y discusiones
- Issues de GitHub: Abrir un issue para bugs o solicitudes de funcionalidades
- Documentación: revisa la carpeta docs/agent/ para guías detalladas
| Documento | Descripción |
|---|---|
| backend-guide.md | Arquitectura del backend y detalles de la API |
| frontend-workflow.md | Flujo de usuario y arquitectura de componentes |
| swiss-design-system/ | Sistema de diseño UI (Swiss International Style) — paquete portable |
¡Feliz creación de currículums! Si Resume Matcher te resulta útil, considera darle una estrella al repo y unirte a nuestro Discord.