개요
freehire는 Workday, Greenhouse, Lever 등 기업 ATS 채용 페이지에서 수백만 개의 채용 공고를 직접 수집하여 일관되게 정규화하고 중복을 제거합니다. 다차원 전문 검색, 구독 알림, 이력서 생성, 지원 추적 및 LLM 매칭 분석을 제공합니다. Go 백엔드, SvelteKit 프론트엔드, PostgreSQL 및 Meilisearch를 사용하며 완전히 자체 호스팅할 수 있습니다.
README 미리보기
\n\n\n \n \n\n\n# freehire\n\n### Every IT job, straight from the source.\n\n**3.3M+ live postings pulled directly from company career pages — no recruiters, no reposts, no dead links. Fully open source.**\n\n[**Try it live →**](https://freehire.me) · [Features](docs/features.md) · [Architecture](docs/architecture.md) · [Sources](#sources) · [API](#api) · [Add a source](#adding-a-source) · [Contributing](CONTRIBUTING.md)\n\n[](https://freehire.me)\n[](LICENSE)\n\n\n[](https://github.com/strelov1/freehire/stargazers)\n[](https://github.com/strelov1/freehire/graphs/contributors)\n[](https://discord.gg/79cgB9RRfx)\n\n\n\n\n\n \n \n \n \n\n\n\n\n\n\n\n\n\n## Why freehire?\n\n- **Straight from the source.** Every listing is crawled directly from a company's\n own ATS — Workday, Greenhouse, Lever, Ashby, iCIMS and a long tail of others — and\n links to the original posting. No recruiter reposts, no aggregator middlemen, no\n dead links.\n- **One schema, deduplicated.** The same role posted to three boards collapses into\n one entry: every posting is normalized into a single shape and deduplicated on a\n stable key.\n- **Search that understands jobs.** Faceted full-text search over region, work mode,\n seniority, skills and salary — derived from curated dictionaries, never guessed.\n- **Actually open.** MIT-licensed and self-hostable, pipeline and data both in the\n open. Adding a company is one row in the board catalog\n ([how](#adding-a-source)).\n- **Yours to build on.** A clean HTTP API, a CLI, Telegram digests, and a whole\n workspace on top of the catalogue — see [Beyond the catalogue](#beyond-the-catalogue).\n Use the hosted site, run your own, or build on top.\n\nAggregating **3.3M+ unique live postings** from **470,000+ companies** across\n**124 ATS platforms**, a long tail of aggregators and direct feeds, and **97\nTelegram channels** — **320 sources** in all, see [Sources](#sources) for the full\nbreakdown. Reposts of one job across boards ar
FAQ (3)
문제 해결스택을 재시작한 후 `docker compose up`이 s3-init 컨테이너에서 무한정 멈추는 이유는 무엇인가요?
두 번째 make up 실행 시 s3-init이 멈추는 이유는 재시도 루프가 버킷 생성 PUT 요청만 보내기 때문입니다. 버킷이 이미 존재하면 s3mock이 409 BucketAlreadyOwnedByYou로 응답하고, curl -f가 종료 코드 22로 종료되며, until 루프가 무한히 재시도하면서 컨테이너가 Waiting 상태에 멈춰 있게 됩니다.
수정 사항: 이 문제는 PR #3265(2026-10-19에 머지됨)에서 패치되었습니다. 이제 init 스크립트는 버킷 존재 여부를 먼저 확인하고 없을 때만 생성하므로, 최초 실행과 이후 실행 모두에서 0으로 종료합니다(adobe/s3mock:5.2.3에서 검증됨).
해결하려면 체크아웃을 업데이트하고 재시작하세요:
git pull origin main
make down
make up문제 해결채용 카드 스와이프를 차단하는 'job not found' 오류 해결 방법
해당 공고는 보통 삭제된 것이 아니라, 소스에서 이름이 변경되었고 백필(backfill)이 URL 슬러그를 다시 생성했기 때문에 스와이프 덱에 이전 슬러그가 남아 있어 POST /api/v1/jobs/<old-slug>/dismiss가 404를 반환한 것입니다. 해결 방법: PR #3289가 포함된 버전으로 업데이트하세요. 이 버전은 백필이 게시된 공고 슬러그를 변경하는 것을 막고, 이전 슬러그가 현재 URL로 301 리다이렉트되도록 합니다. 그래도 카드가 계속 멈춘다면 web/src/lib/components/SwipeDeck.svelte를 패치하세요: judge()에서 send.catch(...) 핸들러는 실패 시 항상 카드를 맨 위로 되돌립니다. 이를 네트워크 오류가 발생한 경우에만 카드를 복원하고, 서버가 404로 응답할 때는 카드를 버리도록 변경하세요. 404는 해당 공고가 사라졌다는 의미이기 때문입니다.
문제 해결'Locations:' 접두사가 붙은 Greenhouse 채용 공고에서 국가 및 지역이 비어 있는 이유는 무엇이며, 어떻게 해결할 수 있나요?
일부 Greenhouse 공고는 위치를 Locations: 레이블 접두사와 함께 저장합니다(예: Locations: San Francisco). 이 경우 location.Parse가 이를 해석하지 못해 jobs.countries와 jobs.regions가 비어 있게 되며, country=us 필터가 해당 공고를 누락하게 됩니다. 수정 방법: 파싱 전에 Greenhouse 어댑터 또는 normalize.CleanLocation에서 Locations: 레이블을 제거하십시오. 리스팅 측 수정은 이미 저장된 행을 복구하지 않는다는 점에 유의하십시오 — 접두사를 포함하는 행이 몇 개인지 측정하고, AGENTS.md에 설명된 INGEST_REFETCH_ALL / backfill-derive 작업을 사용하여 해당 행을 다시 파생하십시오.