Direct-company job radar for software, data, and technology-adjacent roles.
Live page: https://frankstop.github.io/JobBoard/
This is the replacement shape for civil-service-watch: fewer broad public-sector pages, more company career boards, better fit ranking, and a public page that stays generic.
- Fetches enabled company career sources.
- Normalizes public postings from ATS APIs.
- Scores jobs using a private local profile.
- Publishes
docs/index.htmlas a generic searchable board. - Keeps personal targets out of the public dashboard and out of git.
Tracked files are generic. Personal fit criteria belong in:
private/profile.local.json
That folder is ignored by git. Do not move personal salary, identity, resume, or exact target logic into docs/.
- Greenhouse Job Board API: public JSON jobs from
boards-api.greenhouse.io. - Lever Postings API: public JSON postings from
api.lever.co. - Ashby public posting API: public JSON postings from
api.ashbyhq.com.
Indeed is used as product inspiration only: search, filters, result density, direct apply links. This repo should not scrape Indeed.
Short version: prefer official company-owned feeds, measure quality before volume, and keep private candidate targeting outside the public site.
Expansion policy: 0.05 mutation target. Current accepted batch is locked as-is: fourteen aligned sources plus one mutation source.
GitHub Actions refreshes the public dashboard daily at 13:00 UTC and can also run manually from the Actions tab.
Current snapshot badges read from GitHub Pages badge JSON generated by the same refresh workflow as the public site.
Freshness path:
- Fetch configured employer feeds.
- Rank postings with
CAREER_RADAR_PROFILE_JSONif the GitHub secret exists. - Fall back to
config/profile.example.jsonif no secret exists. - Commit updated
docs/index.htmlanddocs/latest.json. - GitHub Pages republishes from
/docs.
The site is static. It is not a live database. Fresh data appears after the scheduled or manual workflow finishes.
Add repo secret:
CAREER_RADAR_PROFILE_JSON
Value shape:
{
"include_terms": ["software developer", "data analyst", "python", "sql"],
"location_terms": ["new york", "remote", "hybrid"],
"exclude_terms": ["intern", "unpaid"],
"minimum_salary_usd": 100000
}Never commit personal targeting criteria. Put exact fit logic in the GitHub secret or local private/profile.local.json.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
python -m career_radar.cliOpen:
docs/index.html
Edit config/sources.json.
Greenhouse example:
{
"id": "company_greenhouse",
"name": "Company Name",
"adapter": "greenhouse",
"url": "https://boards-api.greenhouse.io/v1/boards/company/jobs?content=true",
"enabled": true
}Lever example:
{
"id": "company_lever",
"name": "Company Name",
"adapter": "lever",
"url": "https://api.lever.co/v0/postings/company?mode=json",
"enabled": true
}Ashby example:
{
"id": "company_ashby",
"name": "Company Name",
"adapter": "ashby",
"url": "https://api.ashbyhq.com/posting-api/job-board/company",
"enabled": true
}See docs/engineering-plan.md.
python -m unittest discover -s tests -v- Greenhouse Job Board API docs:
https://developers.greenhouse.io/job-board - Lever Postings API docs:
https://github.com/lever/postings-api - Ashby Job Postings API docs:
https://developers.ashbyhq.com/docs/public-job-posting-api - Swipe reference:
https://www.emilieaubry.com/work/