Adds a pipeline extractor for javascript.jobs (the board promoted under the jsremotely.com alias, which now 301s straight here).
No public API/RSS: scrapes /remote?keyword=<term>&page=<n> (server-side keyword + pagination) and enriches each match from the job detail page's schema.org JobPosting block.
That block isn't valid JSON (unescaped newlines in description, an observed missing comma), so it's parsed with targeted regexes instead of JSON.parse. See extractors/javascriptjobs/README.md for the source-side data quirks (0-valued baseSalary placeholders, minValue == maxValue bug) and how they're handled.
Wires the new javascriptjobs source through the shared extractor catalog, settings registry/types/factories, the max-coverage automatic-run preset, demo seed data, and the smoke-test target.
Test plan
biome ci .
npm run check:types:shared
npm --workspace orchestrator run check:types
npm --workspace gradcracker-extractor run check:types
npm --workspace ukvisajobs-extractor run check:types
npm --workspace orchestrator run build:client
npm --workspace orchestrator run test:run (152 files / 987 tests)
npm run smoke:extractors -- javascriptjobs against the live site, plus manual field-by-field inspection of parsed job objects
## Summary
- Adds a pipeline extractor for `javascript.jobs` (the board promoted under the `jsremotely.com` alias, which now 301s straight here).
- No public API/RSS: scrapes `/remote?keyword=<term>&page=<n>` (server-side keyword + pagination) and enriches each match from the job detail page's schema.org `JobPosting` block.
- That block isn't valid JSON (unescaped newlines in `description`, an observed missing comma), so it's parsed with targeted regexes instead of `JSON.parse`. See `extractors/javascriptjobs/README.md` for the source-side data quirks (0-valued `baseSalary` placeholders, `minValue == maxValue` bug) and how they're handled.
- Wires the new `javascriptjobs` source through the shared extractor catalog, settings registry/types/factories, the max-coverage automatic-run preset, demo seed data, and the smoke-test target.
## Test plan
- [x] `biome ci .`
- [x] `npm run check:types:shared`
- [x] `npm --workspace orchestrator run check:types`
- [x] `npm --workspace gradcracker-extractor run check:types`
- [x] `npm --workspace ukvisajobs-extractor run check:types`
- [x] `npm --workspace orchestrator run build:client`
- [x] `npm --workspace orchestrator run test:run` (152 files / 987 tests)
- [x] `npm run smoke:extractors -- javascriptjobs` against the live site, plus manual field-by-field inspection of parsed job objects
Adds a pipeline extractor for javascript.jobs (the board now promoted
under the jsremotely.com alias, which 301s straight here). No public
API/RSS, so it scrapes the /remote listing (server-side keyword+page
filtering) and enriches each match from the job detail page's
JobPosting schema.org block, which is emitted as near-JSON (unescaped
newlines, an occasional missing comma) and is parsed with targeted
regexes instead of JSON.parse. Also guards against the source's own
baseSalary bug (0 placeholders, and at least one posting with
minValue == maxValue) by keeping the listing-card salary text as a
trustworthy fallback.
Wires the new "javascriptjobs" source through the shared extractor
catalog, settings registry/types/factories, the max-coverage
automatic-run preset, demo seed data, and the smoke-test target.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
javascript.jobs(the board promoted under thejsremotely.comalias, which now 301s straight here)./remote?keyword=<term>&page=<n>(server-side keyword + pagination) and enriches each match from the job detail page's schema.orgJobPostingblock.description, an observed missing comma), so it's parsed with targeted regexes instead ofJSON.parse. Seeextractors/javascriptjobs/README.mdfor the source-side data quirks (0-valuedbaseSalaryplaceholders,minValue == maxValuebug) and how they're handled.javascriptjobssource through the shared extractor catalog, settings registry/types/factories, the max-coverage automatic-run preset, demo seed data, and the smoke-test target.Test plan
biome ci .npm run check:types:sharednpm --workspace orchestrator run check:typesnpm --workspace gradcracker-extractor run check:typesnpm --workspace ukvisajobs-extractor run check:typesnpm --workspace orchestrator run build:clientnpm --workspace orchestrator run test:run(152 files / 987 tests)npm run smoke:extractors -- javascriptjobsagainst the live site, plus manual field-by-field inspection of parsed job objects