>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Go

Jak działa wyszukiwarka ofert pracy wśród milionów wakatów bez pośredników

Szukanie pracy w zagranicznych lub dużych firmach IT często zamienia się w rutynę z niemiłymi niespodziankami. Znajdujesz interesujące stanowisko na agregatorze, klikasz link, a wakat został zamknięty miesiąc temu. Albo trafiasz na niekończące się kopie tej samej oferty od agencji rekrutacyjnych, które nawet nie podają nazwy końcowego pracodawcy.

freehire preview

Projekt freehire rozwiązuje ten problem prostym podejściem technicznym: parsuje dane bezpośrednio z systemów śledzenia kandydatów (ATS), omijając pośredników. Baza danych zawiera ponad 3,3 miliona aktywnych wakatów od prawie 300 000 firm. Cały stos technologiczny jest otwarty na licencji MIT, w tym kolektory danych, interfejs webowy, wyszukiwarka i API.

Skąd pochodzą dane

Większość firm technologicznych publikuje oferty pracy za pośrednictwem specjalistycznych platform takich jak Greenhouse, Lever, Workday, Ashby czy iCIMS. Twórcy freehire napisali adaptery dla 92 takich platform, a także połączyli około stu zewnętrznych tablic ogłoszeń i bezpośrednie kanały z dużych korporacji.

Potok danych działa w następujący sposób:

  1. Worker przeszukuje tablice ogłoszeń i pobiera nowe oferty. Dodanie firmy zwykle wymaga jednej linii w pliku YAML, określającej nazwę i identyfikator w systemie ATS.
  2. Dane są normalizowane do jednolitego formatu. Jeśli jedna oferta jest publikowana na wielu platformach, system scala duplikaty za pomocą stabilnego klucza.
  3. Filtry dotyczące poziomów stanowisk, wynagrodzenia, lokalizacji i stosu technologicznego są budowane ze ścisłych słowników. Nie ma tutaj zawodnych heurystyk — system nie próbuje zgadywać danych na chybił trafił.
  4. Odrębny worker pobiera rzeczywisty formularz aplikacyjny z docelowego systemu ATS, zachowując oryginalną strukturę pól.

Co jeszcze kryje się w środku oprócz katalogu wakatów

Wyszukiwarka to tylko witryna sklepowa. Wokół bazy wakatów deweloperzy zbudowali pełnowartościowe środowisko pracy dla kandydata.

Generator CV i sprawdzanie dopasowania

Repozytorium zawiera kreator CV, który generuje pliki PDF zoptymalizowane pod kątem automatycznego parsowania przez systemy ATS. System porównuje wymagania stanowiska z Twoim doświadczeniem i oblicza deterministyczny wynik kompatybilności. Po połączeniu z modelem językowym dostarcza ukierunkowane sugestie dotyczące CV pod kątem konkretnych aplikacji bez fabrykowania doświadczenia.

Śledzenie odpowiedzi z pocztą przychodzącą

Po wysłaniu aplikacji śledzenie jest kontynuowane na tablicy Kanban z aktualizacjami statusu. Zintegrowana bramka e-mail łączy odpowiedzi rekrutera z konkretnymi kartami aplikacji, utrzymując korespondencję w porządku zamiast gubić ją w ogólnej skrzynce odbiorczej.

Asystent i rozszerzenie przeglądarki

Opracowano rozszerzenie paska bocznego dla Chrome. Gdy otwierasz stronę z ofertą pracy na dowolnej stronie, wtyczka odczytuje tekst strony, porównuje go z Twoim profilem i wypełnia formularz aplikacyjny za Ciebie. Dla osób preferujących pracę przez klientów LLM, takich jak Claude Desktop, autorzy udostępniają osobny serwer MCP.

Architektura i stos technologiczny

Kod źródłowy jest napisany w Go z użyciem frameworka webowego Fiber v2. Architektonicznie backend jest wyraźnie rozdzielony: serwer API obsługuje wyłącznie żądania klientów, podczas gdy cała praca w tle została przeniesiona do oddzielnych jednorazowych workerów. Wygodnie uruchamia się je przez cron lub wewnątrz kolejek.

cmd/ Точки входа: HTTP-сервер и консольные воркеры sources/ Файлы конфигурации источников вакансий (YAML) migrations/ Схема PostgreSQL для sqlc и initdb web/ Интерфейс на SvelteKit 2 internal/ Внутренние пакеты предметной области sources/ Адаптеры под конкретные ATS (Workday, Lever, etc.) pipeline/ Пайплайн сбора, валидации и дедупликации cv/ cvedit/ Генерация структурированных резюме в PDF inbox/ Обработка и связывание почты рекрутеров " alt="freehire architecture">

Do przechowywania i szybkiego wyszukiwania wykorzystywana jest kombinacja komponentów:

  • PostgreSQL z rozszerzeniem pgvector przechowuje główne encje i osadzenia wektorowe na potrzeby wyszukiwania semantycznego.
  • sqlc generuje kod z typami bezpiecznymi do pracy z bazą danych z zwykłych zapytań SQL — żaden ORM nie jest używany.
  • Meilisearch obsługuje wyszukiwanie pełnotekstowe i natychmiastowe filtrowanie fasetowe.
  • SvelteKit 2 (na Svelte 5 runes) i Tailwind 4 tworzą szybki frontend z SSR.
  • Redis i MinIO odpowiadają za cache, ograniczanie liczby żądań i przechowywanie obiektów dla plików.

Szybki start i praca z API

Możesz uruchomić lokalną kopię usługi wraz ze wszystkimi zależnościami przez Docker:

make up " alt="docker compose up">

Polecenie uruchomi bazę danych, wyszukiwarkę, API i interfejs webowy na porcie 80. Dostępność można sprawdzić prostym żądaniem curl:

curl localhost:8080/health curl localhost:8080/api/v1/jobs " alt="curl request">

Przy okazji, publiczne API projektu jest dostępne bez kluczy ani autoryzacji. Jeśli potrzebujesz dostępu do świeżych wakatów dla swojego bota lub projektu hobbystycznego, po prostu wywołaj endpoint https://freehire.me/api/v1/jobs. Wszystkie odpowiedzi są zwracane w przewidywalnym formacie JSON ze strukturalnymi metadanymi i paginacją.

Aby uruchomić kolektory danych, używane są polecenia konsolowe w cmd/:

# Обход конкретного каталога ATS go run ./cmd/ingest sources/greenhouse.yml # Сброс очереди индексации в Meilisearch go run ./cmd/search-drain # Извлечение вакансий из Telegram-каналов go run ./cmd/tg-extract " alt="console commands">

Dla kogo jest ten projekt

Repozytorium będzie przydatne w trzech przypadkach:

  1. Szukasz pracy w międzynarodowych firmach i masz dość niskiej jakości agregatorów. Wersja webowa daje bezpośrednie linki do systemów ATS pracodawców bez natrętnych pośredników.
  2. Chcesz zbudować własny agregator, kanał Telegram z ofertami pracy lub bota. Otwarte adaptery do 92 systemów ATS oszczędzają setki godzin na pisanie parserów.
  3. Interesuje Cię przykład dojrzałego projektu w Go bez przeciążonych ORM, ze ścisłym typowaniem SQL, podziałem na niezależne workery i integracją z nowoczesną wyszukiwarką.

Projekt wygląda dojrzale, a jego otwartość daje każdemu deweloperowi możliwość przesłania pull requesta z nową firmą w jednej linii YAML. Możesz wypróbować usługę na żywo na stronie projektu lub wdrażając kontenery na własnym serwerze.

Powiązane projekty