Come funziona un motore di ricerca per lavoro con milioni di annunci senza intermediari
Cercare lavoro in aziende estere o grandi aziende IT spesso diventa una routine con sorprese spiacevoli. Trovi una posizione interessante su un aggregatore, clicchi sul link, e l'offerta era chiusa un mese fa. Oppure ti imbatti in infinite copie dello stesso annuncio da agenzie di recruiting che non menzionano nemmeno il datore di lavoro finale.

Il progetto freehire risolve questo problema con un approccio tecnico diretto: analizza i dati direttamente dai sistemi di tracking dei candidati (ATS), saltando gli intermediari. Il database contiene oltre 3,3 milioni di annunci attivi da quasi 300.000 aziende. L'intero stack è aperto sotto licenza MIT, inclusi i collector di dati, l'interfaccia web, il motore di ricerca e l'API.
Da dove provengono i dati
La maggior parte delle aziende tech pubblica annunci attraverso servizi specializzati come Greenhouse, Lever, Workday, Ashby o iCIMS. I creatori di freehire hanno scritto adapter per 92 di queste piattaforme, e hanno anche connesso circa un centinaio di board di annunci di terze parti e feed diretti da grandi aziende.
La pipeline funziona così:
- Un worker analizza i board di annunci e legge le nuove offerte. Aggiungere un'azienda di solito richiede una riga in un file YAML, specificando il nome e l'ID nell'ATS.
- I dati vengono normalizzati in un formato unificato. Se un annuncio viene pubblicato su più piattaforme, il sistema unisce i duplicati tramite una chiave stabile.
- I filtri per livelli, stipendi, località e stack tecnologico sono costruiti da dizionari rigorosi. Non ci sono euristiche inaffidabili qui—il sistema non cerca di indovinare i dati a caso.
- Un worker separato scarica il modulo di candidatura effettivo dall'ATS di destinazione, preservando la struttura originale dei campi.
Cosa c'è dentro oltre al catalogo degli annunci
La ricerca è solo la vetrina. Attorno al database degli annunci, gli sviluppatori hanno costruito uno spazio di lavoro completo per i candidati.
Generatore di curriculum e verifica della corrispondenza
Il repository include un builder di curriculum che genera file PDF ottimizzati per il parsing automatizzato degli ATS. Il sistema confronta i requisiti del lavoro con la tua esperienza e calcola un punteggio di compatibilità deterministico. Quando connesso a un modello linguistico, fornisce modifiche mirate al curriculum per applicazioni specifiche senza inventare esperienze.
Tracker delle risposte con posta in entrata
Dopo aver inviato una candidatura, il tracking continua su una board Kanban con aggiornamenti di stato. Un gateway email integrato connette le risposte dei recruiter a schede di candidatura specifiche, mantenendo la corrispondenza organizzata invece di perderla in una casella di posta generale.
Assistente ed estensione per browser
È stata sviluppata un'estensione sidebar per Chrome. Quando apri una pagina di lavoro su qualsiasi sito, il plugin legge il testo della pagina, lo mette in relazione con il tuo profilo, e compila il modulo di candidatura per te. Per chi preferisce lavorare tramite client LLM come Claude Desktop, gli autori forniscono un server MCP separato.
Architettura e stack tecnologico
Il codice è scritto in Go usando il framework web Fiber v2. Architetturalmente, il backend è chiaramente separato: il server API gestisce esclusivamente le richieste dei client, mentre tutto il lavoro in background viene spostato in worker one-off separati. Questi sono convenienti da eseguire tramite cron o all'interno di code.
cmd/ Точки входа: HTTP-сервер и консольные воркеры
sources/ Файлы конфигурации источников вакансий (YAML)
migrations/ Схема PostgreSQL для sqlc и initdb
web/ Интерфейс на SvelteKit 2
internal/ Внутренние пакеты предметной области
sources/ Адаптеры под конкретные ATS (Workday, Lever, etc.)
pipeline/ Пайплайн сбора, валидации и дедупликации
cv/ cvedit/ Генерация структурированных резюме в PDF
inbox/ Обработка и связывание почты рекрутеров
Per l'archiviazione e la ricerca veloce viene utilizzata una combinazione di componenti:
- PostgreSQL con l'estensione pgvector memorizza le entità principali e gli embedding vettoriali per la ricerca semantica.
- sqlc genera codice type-safe per lavorare con il database da semplici query SQL—nessun ORM viene utilizzato.
- Meilisearch gestisce la ricerca full-text e il filtraggio facet istantaneo.
- SvelteKit 2 (su Svelte 5 runes) e Tailwind 4 formano il frontend SSR veloce.
- Redis e MinIO coprono caching, rate limiting delle richieste e archiviazione oggetti per i file.
Avvio rapido e lavoro con l'API
Puoi avviare una copia locale del servizio insieme a tutte le dipendenze tramite Docker:
make up
Il comando avvierà il database, il motore di ricerca, l'API e l'interfaccia web sulla porta 80. Puoi verificare la disponibilità con una semplice richiesta curl:
curl localhost:8080/health
curl localhost:8080/api/v1/jobs
A proposito, l'API pubblica del progetto è disponibile senza chiavi o autorizzazione. Se hai bisogno di accedere a annunci freschi per il tuo bot o progetto personale, basta chiamare l'endpoint https://freehire.me/api/v1/jobs. Tutte le risposte vengono restituite in formato JSON prevedibile con metadati strutturati e paginazione.
Per eseguire i collector di dati, vengono utilizzati comandi console in cmd/:
# Обход конкретного каталога ATS
go run ./cmd/ingest sources/greenhouse.yml
# Сброс очереди индексации в Meilisearch
go run ./cmd/search-drain
# Извлечение вакансий из Telegram-каналов
go run ./cmd/tg-extract
Per chi è questo progetto
Il repository sarà utile in tre casi:
- Cerchi lavoro in aziende internazionali e sei stanco degli aggregatori di bassa qualità. La versione web fornisce link diretti ai sistemi ATS dei datori di lavoro senza intermediari invadenti.
- Vuoi costruire il tuo aggregatore, canale Telegram con annunci o bot. Gli adapter aperti per 92 sistemi ATS fanno risparmiare centinaia di ore nella scrittura di parser.
- Sei interessato a un esempio di progetto Go maturo senza ORM sovraccarichi, con typing SQL rigoroso, separazione in worker indipendenti e integrazione con un motore di ricerca moderno.
Il progetto sembra maturo, e la sua apertura dà a qualsiasi sviluppatore l'opportunità di inviare una pull request con una nuova azienda in una singola riga YAML. Puoi provare il servizio dal vivo sul sito web del progetto o distribuendo i container sul tuo server.
Progetti correlati