Commit Graph
10 Commits
Author SHA1 Message Date
rodado e70ae1e932 feat: add startup.jobs as a switzerland-wide job source 2026-10-06 15:17:17 +02:00
rodado dfba00ae91 feat: add novartis.com and more-jobs.ch as job sources
more-jobs.ch lists foreign postings tagged as CH, so drop locations naming
another country/city or a 5-digit postcode, and dedupe its reposts by
title+company.
2026-10-03 12:47:31 +02:00
rodado 3875f13713 docs: update README sources table and drop retired sciCORE watcher references 2026-09-18 11:50:39 +02:00
rodado fccecb2254 docs: document all eight sources in the readme
The readme listed the extra sources inline in the structure block and
still described datacareer.ch as "403, currently dead". Replace that with
a Sources table covering LinkedIn plus the eight boards in fetch-other.ts,
with scope and the parsing quirk that matters for each.

Write up the two that were dead: datacareer.ch's inverted User-Agent rule,
and basel-jobs.ch's DataDome cookie — what gets through, what doesn't, how
to mint, and why a launchd run degrades instead of failing.

Also correct two things that had drifted: requiresGerman now covers
coordination, German-language phrasing and spec-sheet language lines, and
the CSV gained a location column that the Output section never mentioned.
2026-09-01 12:39:27 +02:00
rodado b61a75eca0 docs: cover the two new sources and the concurrent fetch pipeline 2026-08-30 13:07:57 +02:00
rodado 7276aded92 docs: cover the digest layer and scheduled jobs
Rewrite the README around the current pipeline: the twice-daily Telegram
digest, the sciCORE watcher, Telegram setup, and the two-stage filter
pipeline.

CLAUDE.md gains the bun daily commands, the daily/profile/telegram
architecture notes, and a scheduled-automations section covering both
launchd agents. Records that fetch.ts gates what reaches the CSV while
profile.ts gates what reaches the phone.
2026-08-27 09:28:58 +02:00
rodado fb67c38edd chore: reorganize repo structure and update docs
- move temp scripts to scripts/, cv files to cv/, jobs.csv to results/
- update index.ts and recheck.ts CSV path to results/jobs.csv
- fix imports in scripts/ to use ../config.ts and ../fetch.ts
- update CLAUDE.md and README.md to reflect new structure
- add plans/ with LinkedIn post drafts
- update .gitignore: ignore results/, jobs/, cv binaries, .DS_Store
2026-06-03 16:01:32 +02:00
rodado bcb6ae5ea3 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
2026-05-12 13:42:27 +02:00
rodado ffe2b4467a Update README: document software-role and seniority filters 2026-05-05 13:45:43 +02:00
rodado b5a6f58fe3 Initial commit: LinkedIn job scraper for Basel area
- Paginated HTML scraper (up to 6 pages, 400ms delay between requests)
- Card-boundary-safe parsing to prevent field bleed across cards
- Language filter: drops German (m/w/d, umlauts) and French (H/F, accents) titles
- Software-role filter: requires title to contain a relevant tech term
- Global deduplication by job ID across runs
- 30-day recency filter via LinkedIn f_TPR parameter
- CSV output: date_found, posted_at, search, title, company, link
2026-05-05 13:43:17 +02:00