[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f2h3isvbmylnp8":3},{"code":4,"message":5,"data":6,"timestamp":46},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":16,"summary_md":17,"topic":18,"github_topics":21,"license":42,"homepage":43,"updated_at":44,"history":45},"strelov1\u002Ffreehire",23,"freehire — the open-source search engine for job seekers","Go",3033,303,2444,140,[],"A self-hostable job search engine that crawls company ATS pages directly, then unifies and deduplicates the postings.","Worth a look if you want a job board you control or a searchable dataset of IT postings; less appealing if a hosted aggregator already meets your needs and you do not want to run a Go\u002FPostgres\u002FMeilisearch stack.\n\n## The problem\n\nJob hunting usually means bouncing between search sites, recruiter reposts and expired listings, then rebuilding the same filters on each one. Here the desired outcome is a single deduplicated pool of original postings that can be searched by region, work mode, seniority, skills and salary. The change is at the source: rather than scraping an aggregator, workers crawl company ATS catalogs such as Workday, Greenhouse, Lever, Ashby and iCIMS and link back to the original job page, per the [project instructions](https:\u002F\u002Fgithub.com\u002Fstrelov1\u002Ffreehire\u002Fblob\u002Fmain\u002FREADME.md). The result is one normalized corpus you can query, share or build saved searches and digests on.\n\nBeyond the catalogue, the repo also bundles the application side: a CV builder with ATS-safe PDF templates, CV-to-vacancy scoring, AI fit analysis, tracer links and referrals. That is a wider scope than a pure job board, and it runs in the same repository under the same MIT licence.\n\n## What's different\n\nThe distinguishing choice is to treat ATS boards as the authoritative source and deduplicate on a stable key. You do not get one listing per board; the same role cross-posted to several sources collapses into a single entry, with structured facets derived from curated dictionaries rather than guessed at. Full-text and faceted search is handled by Meilisearch, storage and semantic embeddings by Postgres with pgvector, and the API by Go and Fiber, as laid out in the [architecture notes](https:\u002F\u002Fgithub.com\u002Fstrelov1\u002Ffreehire\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md).\n\nThe trade-off is that freshness and coverage depend on a crawl pipeline, not on human curation: each provider is its own ingest run, and enrichment, embedding and notification are separate run-once cron workers rather than a background daemon. That design is easier to schedule, but you own the scheduling. The optional LLM features use any OpenAI-compatible endpoint via langchaingo and Bifrost, so you can choose your provider, but you also carry the key and spend.\n\n## Who should try it\n\nGood fit: a developer or small team who wants an internal or public job board over IT roles, is comfortable running Docker Compose and a set of cron jobs, and values direct-from-employer postings over aggregator volume. It also suits anyone who wants to contribute a new ATS source, since the README documents an add-a-source path.\n\nPoor fit: someone who just wants to search for a job once. The hosted demo at [freehire.me](https:\u002F\u002Ffreehire.me) covers that without setup. Likewise, if you cannot run Postgres, Meilisearch and object storage, or do not want to own a crawler, the self-hosted path adds maintenance that a hosted board avoids.\n\n## Requirements and limitations\n\nYou need Docker (or Go, Postgres and Meilisearch for local development) and a JWT secret before the server starts. Migrations are applied only on first volume init, so a changed migration on an existing volume needs a recreate or a manual migrate run; plan for that when updating. The full stack also expects Redis and S3-compatible storage, plus cron scheduling for ingest, enrich, embed and notification workers, which is the main ongoing upkeep.\n\nOAuth and LLM credentials are optional and their features stay off when unset, so the catalogue and search work without an AI provider. The README advertises 3.3M+ live postings, but crawl coverage depends on which providers you ingest, and nothing in the supplied material reports index size or freshness after a self-hosted deployment.\n\n## HotRepo's take\n\nOn the 2026-10-25 boards, the project appeared at #23 on the Go monthly board with +2,444 and #6 on the weekly board with +2,066. That is a single dated snapshot; comparable daily history is not available, so persistence cannot yet be judged. Check the add-a-source process against the ATS you care about before committing to self-hosting.",{"slug":19,"name":20},"productivity","Productivity & Utilities",[22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"ats","career","careers","golang","hiring","job-aggregator","job-board","job-portal","job-scraper","job-search","jobs","langchain","llm","meilisearch","postgresql","recruitment","remote-jobs","self-hosted","svelte","sveltekit","MIT","https:\u002F\u002Ffreehire.me","2026-10-25T12:16:31Z",[],1792968389]