website: https://www.opphire.com
The problem
Most job search tools are either a thin wrapper around a single job board's API, or a resume "checker" that's really just a keyword-matching script counting overlaps with a job description. Neither actually reflects how hiring works in practice.
I've spent the last stretch building Opphire — a free career platform with a job finder, resume builder, and ATS checker — and wanted to write up the two most interesting technical problems: aggregating and normalizing job data at scale, and building a resume scorer trained against real hiring patterns rather than a fixed rules engine.
What Opphire is
Job finder — live listings aggregated and normalized across sources, with real-time relevance ranking against your search
Resume builder — 12 professionally designed templates with live preview and instant PDF export
ATS checker — scores your resume against a job description and explains why, using patterns drawn from real resume and hiring data across many companies, combined with an LLM reasoning layer
I'll go deeper on the job finder first, since it's the part with the most daily usage, then get into the ATS checker.
The job finder: aggregation, direct sourcing, and consolidation
The job finder originally pulled from a cascade of general aggregators — Adzuna, Careerjet, Freelancer.com. Each source had its own auth quirks, rate limits, and inconsistent data shapes: some list salary ranges, some a single number, some no currency at all, some mixing annual and hourly figures in the same feed. One provider (Careerjet) required a static outbound IP for allowlisting, which meant running a small relay just to keep that integration alive.
Maintaining that cascade meant every provider's outages and schema changes became my outages. Eventually I consolidated the general aggregation layer onto a single source, Jobo API — slightly less raw coverage, but a much smaller surface area to keep working, which was worth it for a solo-built product.
Alongside that, the job finder pulls listings directly from recruiter-side ATS platforms — Greenhouse, Lever, Ashby, and others — instead of relying only on secondhand aggregator data. Going direct to the source means fresher postings (no lag waiting for a third party to re-crawl), fewer duplicate or stale listings, and data that reflects exactly what the company itself posted, which matters more than you'd think for things like accurate salary ranges and job descriptions.
Growth mechanics on the job finder side: unauthenticated users get 5 results per load, capped at 10 per search. Signed-in free users get a larger cap. It's a deliberate funnel — free, useful, but with enough friction to make an account worth creating — rather than gating the search itself.
The ATS checker: real resume data + an LLM reasoning layer
Most "ATS checkers" are keyword-counting scripts wearing an algorithm costume: extract terms from a job description, count overlaps with the resume, return a percentage. It can't tell that "led a team of 5 engineers" satisfies a "leadership experience" requirement just as well as the literal phrase "team leadership."
Opphire's checker is built on patterns drawn from resume and hiring data across many companies, combined with Gemini 3.1 Flash Lite (via Google AI Studio) as the reasoning layer over that data. Instead of just counting tokens, it evaluates whether the resume's actual experience satisfies the job's requirements, catching paraphrased experience and flagging missing qualifications rather than missing words.
The honest tradeoff: this is less deterministic than a rules engine. Run it twice and you can get slightly different phrasing and a few points of score drift. For a "here's roughly where you stand, and here's why" tool that's acceptable; it wouldn't be for something that needed to be strictly reproducible. Tightening that variance is ongoing work.
Other things in the stack
Next.js 15 (including chasing down the async cookies() breaking change — cost an afternoon)
Supabase for auth (Google/GitHub OAuth)
Polar.sh for subscriptions and an affiliate program via webhooks + DynamoDB
IndexedDB for local resume persistence, so drafts survive without forcing sign-up
Where it stands
Opphire is live and free at every core feature — the paid tier mostly lifts result caps rather than gating functionality. I'm a solo founder, so outside eyes on the job finder's direct-sourcing and ranking, and the ATS scoring especially, would be genuinely useful — if either gives you a weird result, I'd love to hear about it.
Happy to go deeper on any part of this — the aggregator-to-direct-source migration or the ATS scoring approach.
Top comments (0)