Extensión de Chrome (Manifest V3) que analiza ofertas de LinkedIn Jobs directamente desde la página, sin copiar/pegar URLs.
- Detecta automáticamente cuando estás en
linkedin.com/jobs/* - Inyecta un botón flotante "Analyze"
- Al hacer click, abre un panel lateral que extrae:
- Título del puesto
- Empresa
- Ubicación
- Descripción completa
- Botón "Analyze with AI":
- Si no configuraste un backend, muestra un análisis demo basado en coincidencia simple de palabras clave (para probar la UI)
- Si configurás
BACKEND_URLencontent.js, llama a tu backend enPOST /analyzecon{ job, profile }y muestra el resultado real
- Popup de configuración: definí tu perfil (nombre, años de experiencia, skills) — se usa para calcular el match
- Abrí Chrome y vas a
chrome://extensions - Activá "Modo de desarrollador" (arriba a la derecha)
- Click en "Cargar descomprimida"
- Seleccioná esta carpeta (
zeroloop-extension) - Entrá a cualquier oferta de LinkedIn, ej:
https://www.linkedin.com/jobs/view/123456789 - Click en el botón morado "Analyze" que aparece a la derecha
- Click en el ícono de la extensión (arriba a la derecha del navegador)
- Completá nombre, años de experiencia y skills (separadas por coma)
- "Guardar perfil"
Estos datos se guardan localmente con chrome.storage.local y se envían
al backend (Fase 2) junto con cada oferta para calcular el match.
Editá content.js:
const BACKEND_URL = "http://localhost:3000";Tu backend debe expoder un endpoint:
POST /analyze
Body: { "job": {...}, "profile": {...} }
Respuesta esperada:
{
"match": 87,
"summary": "texto breve sobre el fit",
"salaryMin": 3000,
"salaryMax": 4500,
"strengths": ["Vue", "React", "Node"],
"missingSkills": ["AWS"]
}
- Fase 2: backend Node.js + Express + OpenAI para análisis real
- Fase 3: perfil enriquecido (CV completo, experiencias) para mejor matching
- Fase 4: botón "Generate tailored CV" → genera PDF personalizado
- Fase 5: botón "Generate reply" → mensaje listo para el recruiter
- Fase 6: PostgreSQL para guardar histórico de ofertas analizadas
- Fase 7: dashboard con métricas (ofertas analizadas, match promedio, etc.)
- Los selectores del DOM de LinkedIn (
content.js→SELECTORS) tienen fallbacks porque LinkedIn cambia sus clases generadas frecuentemente. Si algo deja de extraerse bien, revisar/actualizar esos selectores inspeccionando el HTML actual de la página. - LinkedIn es una SPA: el script detecta cambios de URL para re-extraer datos al navegar entre ofertas sin recargar la página.