1M+ job descriptions parsed by LLMs on a search engine I built with Claude Code.

Earlier this spring, an 18-year run in big tech ended for me with a layoff. As I started job search again, I quickly realized how broken the search process still is. LinkedIn and Indeed give you a "skills match" badge that's basically just a keyword hit dressed up as a label. The newer AI job boards go a bit further and give you a match score, but it usually feels like a random vibe score. I kept seeing 90%+ matches for jobs where I clearly lacked several core requirements, and after a while, I just stopped trusting them. Honestly, the only thing that actually worked was pasting a job description and my resume directly into Claude and asking, "Do I fit this?" But doing that at scale is slow, token-hungry, and doesn't solve the other massive problem: stale data. I was seeing roles in my feed listed as "posted 2 days ago" that had actually been open since January. So, I decided to build the version I wanted. I started working on this in early June. I'm now at about 4,300 commits and 1,300+ merged PRs. My background is mostly backend with only a small amount of TypeScript and React experience, so Claude helped me build the web app portion way faster than I ever could have on my own. Here is a look at how it actually works under the hood: A crawler reads job postings straight from employer applicant tracking systems (Workday, Greenhouse, Lever, iCIMS, SmartRecruiters, Ashby, Oracle, SuccessFactors, plus first-party career pages). No aggregators. Right now that is 12,700 employers and 1.12M open postings across the US, Canada, UK, Ireland, Australia and New Zealand, with 30k to 50k new ones arriving a day. Other countries are crawled but not served yet. Every board is re-crawled at least daily. When I checked this morning, 98% of open postings sat on a board that had been crawled in the last 24 hours. A posting that disappears from the employer's page gets closed on our side, so you do not see January's leftovers. Every posting goes through an LLM parse, not just a keyword pass: requirements split into must-have and nice-to-have, keywords, seniority, domain, workplace type, comp. 1.29M parses so far. Claude Sonnet is the reference parser, and every cheaper lane has to match Sonnet's output on a banked gold set before it is allowed to write a row. The bulk lane is a distilled classifier trained using parsed data from Claude, followed by open-weight model (Gemma 4 26B) on llama.cpp across five M-series Macs in my house plus one RTX 4080 box. The Macs do it at about a tenth of a watt-hour per posting. 951k of the 1.29M parses came off that fleet. Your resume gets the same treatment: parsed into confirmed units, embedded, matched against each posting by vector similarity, keyword dictionary and the requirement list. So instead of "82%", each job shows you which requirements you cover, which keywords are on your page or missing, and whether the domain experience is actually there. The vault (your master copy of everything you have done) grows as you tailor resumes on it, so matching sharpens the longer you use it. The tailor itself only writes from facts you have confirmed. If you did not do it, the line does not build. I'm happy to say the search worked out. I accepted a new role about three weeks ago. But I’m using the downtime before I start to polish up the platform, and I plan to continue investing in it long-term. It is still early days, and the roadmap is essentially just building what early users tell me they need. Try it (free): jobshifu.com . Would love any feedback from this sub!

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论