Add content-level language filter, recheck command, expanded keywords

- isEnglishContent() fetches each job page and drops descriptions with ≥6 German or French indicator words; called for every new job in index.ts before writing to CSV
- New `bun recheck` command (recheck.ts) runs searches in raw mode, lists filtered-out jobs, and prints word-frequency suggestions for SOFTWARE_TITLE_RE
- Expanded KEYWORDS and SOFTWARE_TITLE_RE to cover ML/AI, system/applications engineer, director, informatics, and more title variants
- Added `raw` flag to fetchJobs() to bypass the software-role filter
- Add CLAUDE.md with project workflow docs; add CV files and city temp scripts
This commit is contained in:
2026-05-12 13:42:27 +02:00
parent ffe2b4467a
commit bcb6ae5ea3
19 changed files with 1201 additions and 14 deletions
+38
View File
@@ -0,0 +1,38 @@
#!/usr/bin/env bun
import { KEYWORDS } from "./config.ts";
import { fetchJobs, isEnglishContent } from "./fetch.ts";
import type { SearchConfig } from "./config.ts";
const searches: SearchConfig[] = [
{ label: "Zürich", keywords: KEYWORDS, location: "Zurich, Switzerland", workType: ["onsite", "hybrid"], timePosted: "month" },
];
const seen = new Set<string>();
const results: { id: string; title: string; company: string; search: string }[] = [];
for (const config of searches) {
console.log(`\n[${config.label}]`);
const jobs = await fetchJobs(config);
for (const job of jobs) {
if (!seen.has(job.id)) {
seen.add(job.id);
results.push({ id: job.id, title: job.title, company: job.company, search: job.search });
}
}
}
console.log(`\n── ${results.length} jobs after title filter — checking content language ──\n`);
const english: typeof results = [];
for (const job of results) {
process.stdout.write(` ${job.company} — ${job.title} … `);
const ok = await isEnglishContent(job.id);
console.log(ok ? "en" : "dropped");
if (ok) english.push(job);
}
console.log(`\n── ${english.length} English jobs in Zürich ──\n`);
for (const [i, j] of english.entries()) {
console.log(` ${i + 1}. [${j.search}] ${j.title} — ${j.company}`);
console.log(` https://www.linkedin.com/jobs/view/${j.id}/`);
}