diff --git a/fetch.ts b/fetch.ts index 31b15e9..6962c61 100644 --- a/fetch.ts +++ b/fetch.ts @@ -87,7 +87,9 @@ const HEADERS = { "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", }; -const SOFTWARE_TITLE_RE = /\b(software|developer|architect|devops|platform|data|backend|frontend|fullstack|full.stack|tech\s*lead|typescript|python|rails|node\.?js|ai\b|machine\s*learning|cloud|security|analytics|sre|reliability|engineering\s*lead|solutions\s*engineer|staff\s*engineer|principal\s*engineer)\b/i; +const JUNIOR_TITLE_RE = /\b(junior|jr\.?|entry.?level|graduate|intern(?:ship)?|trainee|apprentice|werkstudent)\b/i; + +const SOFTWARE_TITLE_RE = /\b(software|developer|architect|devops|platform|data|backend|frontend|fullstack|full.stack|tech\s*lead|technical|typescript|python|rails|node\.?js|ai\b|machine\s*learning|cloud|security|analytics|sre|reliability|solutions|consultant|product\s*manager|engineering\s*manager|it\s*manager|it\s*project|staff\s*engineer|principal\s*engineer|cto|vp\s*eng)\b/i; const PAGE_SIZE = 25; const MAX_PAGES = 6; @@ -173,6 +175,7 @@ export async function fetchJobs(config: SearchConfig): Promise { const html = await res.text(); const jobs = parseJobs(html, config.label) .filter((j) => !NON_ENGLISH_RE.test(j.title)) + .filter((j) => !JUNIOR_TITLE_RE.test(j.title)) .filter((j) => SOFTWARE_TITLE_RE.test(j.title)); let newOnPage = 0;