feat: add JS Remotely (javascript.jobs) extractor #7

Merged
ilia merged 2 commits from feat/javascriptjobs-extractor into main 2026-08-10 17:20:32 -05:00
Owner

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

  • 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
ilia added 1 commit 2026-08-10 17:08:58 -05:00
feat: add JS Remotely (javascript.jobs) extractor
CI / skip-ci-check (pull_request) Successful in 36s
CI / docker-ci (pull_request) Successful in 38s
CI / unit-tests (pull_request) Failing after 40s
CI / secret-scan (pull_request) Successful in 39s
8828363bba
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.
ilia added 1 commit 2026-08-10 17:14:23 -05:00
fix: regenerate package-lock.json for javascriptjobs workspace
CI / skip-ci-check (pull_request) Successful in 36s
CI / docker-ci (pull_request) Successful in 39s
CI / secret-scan (pull_request) Successful in 40s
CI / unit-tests (pull_request) Successful in 4m21s
17c55762ef
npm ci --workspaces (used by CI) failed on lockfile drift after
adding the new extractors/javascriptjobs workspace package.
ilia scheduled this pull request to auto merge when all checks succeed 2026-08-10 17:18:29 -05:00
ilia merged commit da76afba92 into main 2026-08-10 17:20:32 -05:00
ilia deleted branch feat/javascriptjobs-extractor 2026-08-10 17:20:32 -05:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ilia/Jobber#7