Job Intelligence
How ghost-job detection works
Ghost-job detection in RoleWorth is regex-based pattern detection, not machine learning. The full rule set lives in src/lib/yourresume/scoring.ts in the detectRiskFlags function. You can read every pattern in source and check it against your own posting text.
There are four pattern categories:
1. Compensation risk - matches 'commission only', 'unpaid', 'no salary', or 'equity only'. These postings shift compensation risk entirely onto the applicant.
2. Scam or fee risk - matches 'training fee', 'pay to apply', 'wire transfer', 'telegram only', or 'whatsapp only'. Legitimate employers do not charge applicants and do not move hiring conversations off the record onto consumer messaging apps before any interview.
3. Vague scope risk - matches 'rockstar', 'ninja', 'fast-paced ambiguity', or 'wear many hats'. These phrases correlate with unbounded scope and unclear ownership; they are not always disqualifying but are worth knowing about before you spend an hour tailoring.
4. Low-specificity urgency risk - matches 'urgent hiring' or 'start immediately' ONLY when the same posting does not also mention 'interview', 'team', or 'manager'. Real urgent hires still describe an interview process or a team; urgency without process is a common ghost-listing or scam signature.
Why pattern-based is still useful: ghost postings, scam postings, and low-effort reposts are repetitive by construction. Operators copy templates, scrape boilerplate, and reuse the same phrases across thousands of listings. A small, transparent rule set catches a meaningful share of obvious bad postings without making up data about postings it has not seen. False negatives are expected - a clever fraudulent posting that avoids these phrases will not be flagged. False positives are also possible - a real role can describe itself as 'fast-paced' for reasons other than ambiguity.
What the flags do: zero flags raises the Posting legitimacy block to high confidence. One flag drops it to 'Proceed with Caution'. Two or more flags drop it to 'Suspicious' and force the overall decision to 'skip', regardless of how well the role otherwise matches. You can still apply manually; the engine is telling you what it noticed, not making the decision for you.
