Open SourceJob-radar · Empleo CRM
CRM web self-hosted que automatiza y centraliza mi búsqueda de empleo: reúne las ofertas, las puntúa con IA (Groq/Gemini/Ollama), genera carta y ajustes de CV, y las sigue en un kanban. Astro SSR + React + PostgreSQL, todo configurable desde la web y replicable con un comando.
Astro SSRReactPostgreSQLIA · LLMsn8nDocker
Job-radar (Empleo CRM) es un CRM web self-hosted que construí para automatizar y centralizar mi propia búsqueda de empleo — y publicado en abierto (MIT) para que cualquiera lo replique. Convierte el caos habitual (mil pestañas, ofertas repetidas, seguimiento a mano) en un sistema donde PostgreSQL es la única fuente de verdad y la pantalla de inicio es una “cola de hoy” con las mejores ofertas abiertas que aún no he postulado. Pensado para ayudarme a actuar, no solo a informarme.
Qué hace
- Hoy — cola diaria accionable: las ofertas más frescas y con mejor encaje que aún no he postulado, más KPIs (score ≥80 sin postular, seguimientos pendientes, tasa de respuesta, nuevas en 24 h).
- Ofertas — tabla filtrable (encaje, estado, modalidad, texto) con ubicación normalizada y marca para las ofertas locales.
- Pipeline — kanban con arrastrar y soltar (Abiertas → CV → Postuladas → Entrevista → Resuelta) y recordatorios de entrevistas y próximas acciones.
- Config — defino zona, modalidades aceptadas, score mínimo, fuentes de scraping, palabras clave y mi perfil/CV para la IA. Todo desde la web, sin tocar código.
- Analíticas — embudo de conversión, actividad por semana, tecnologías más pedidas, tasa y velocidad de respuesta, mi tiempo de reacción, conversión por encaje/fuente/modalidad y salud del sistema.
- Ficha de oferta — por qué encaja (veredicto + razones + keywords), carta editable y copiable, ajustes de CV y documentos IA (preparación de entrevista, análisis de carencias).
Arquitectura
El CRM no tiene BD propia: lee y escribe sobre el schema empleo de PostgreSQL, la única fuente de verdad. La ingesta y la IA son piezas opcionales y externas: un scraper (JobSpy + RSS) trae las ofertas y un motor de IA las puntúa (0-100) y genera la carta y los ajustes de CV. Ese motor puede ser un worker autónomo en Node (reduce el sistema a 3 piezas: Postgres + web + worker) o n8n (7 flujos, con Telegram y Obsidian). Cualquier proceso que inserte en empleo.job_offers alimenta el CRM — así que también funciona como gestor puramente manual.
Stack
Astro 5 en modo servidor (SSR, adaptador Node standalone), islas React 19 para el kanban, Tailwind CSS 4 y postgres.js con SQL parametrizado. Fuentes autohospedadas (Bunny Fonts), sin dependencias de nube.
IA configurable
Puntuación y generación con el LLM que elijas — Groq, Gemini u Ollama (local) — con una clave basta y el resto es fallback. Las claves se ponen en Config → IA (o en el .env del worker); el repo solo lleva placeholders, ningún dato ni clave real.
Seguridad y despliegue
Rol de BD empleo_web con privilegios mínimos (SELECT global; INSERT/UPDATE solo en las tablas del CRM), login opcional (APP_PASSWORD + AUTH_SECRET) y despliegue con un comando (docker compose up -d --build levanta Postgres + web + worker) tras un reverse proxy con TLS. Yo lo uso en local a diario; el repo está pensado para que otros lo levanten en su propio NAS.
Origen
Reescritura propia inspirada en ai-job-search de Mads Lorentzen (MIT), adaptada al mercado español y a mi flujo de trabajo. Publicado bajo licencia MIT.
Job-radar (Empleo CRM) is a self-hosted web CRM I built to automate and centralize my own job search — and released as open source (MIT) so anyone can reproduce it. It turns the usual chaos (a dozen browser tabs, duplicate listings, manual tracking) into a system where PostgreSQL is the single source of truth and the home screen is a "today queue" with the best open listings I haven't applied to yet. Built to help me act, not just read.
What it does
- Today — an actionable daily queue: freshest high-fit listings I haven't applied to, plus KPIs (score ≥80 not applied, pending follow-ups, response rate, new in 24 h).
- Listings — a filterable table (fit, status, work mode, free text) with normalized location and a marker for local roles.
- Pipeline — a drag-and-drop kanban (Open → CV → Applied → Interview → Closed) with interview and next-action reminders.
- Config — set your zone, accepted work modes, minimum score, scraping sources, keywords and your profile/CV for the AI — all from the web, no code and no vault edits.
- Analytics — conversion funnel, weekly activity, most-requested technologies, response rate and speed, your reaction time, conversion by fit/source/mode and system health.
- Listing detail — why it fits (verdict + reasons + keywords), an editable/copiable cover letter, CV tweaks and AI documents (interview prep, gap analysis).
Architecture
The CRM has no database of its own: it reads and writes the PostgreSQL empleo schema, the single source of truth. Ingestion and AI are optional, external pieces: a scraper (JobSpy + RSS) brings in listings and an AI engine scores them (0-100) and drafts the letter/CV. That engine can be a lightweight autonomous Node worker (reducing everything to 3 pieces: Postgres + web + worker) or n8n (7 flows, with Telegram and Obsidian). Any process that inserts into empleo.job_offers feeds the CRM — so it also works as a purely manual tracker.
Stack
Astro 5 in server mode (SSR, standalone Node adapter), React 19 islands for the kanban, Tailwind CSS 4 and postgres.js with parameterized SQL. Self-hosted fonts (Bunny Fonts), no cloud dependencies.
Configurable AI
Scoring and generation with your choice of LLM — Groq, Gemini or Ollama (local) — one key is enough and the rest are fallback. Keys go in Config → AI (or the worker's .env); the repo ships only placeholders, never real data or keys.
Security & deploy
A least-privilege DB role (empleo_web: global SELECT, INSERT/UPDATE only on the CRM tables), optional login (APP_PASSWORD + AUTH_SECRET), and a one-command deploy (docker compose up -d --build brings up Postgres + web + worker) behind a TLS reverse proxy. I run it locally every day; the repo is designed for others to spin up on their own NAS.
Origin
An original rewrite inspired by ai-job-search by Mads Lorentzen (MIT), adapted to the Spanish market and my own workflow. Released under the MIT license.