# Jobshelf A personal job-application tracker. https://jobshelf.app/ My jobs, the jobs this person is pursuing https://jobshelf.app/board Find jobs, listings from public job board APIs ## My jobs lives in the browser It is stored in the person's localStorage ("job-tracker:my-jobs:v1"), not on the server, so you cannot read or write it over HTTP. Ask them to press "Copy for AI" (or Export) and paste the result to you. If you change their list, hand back the whole document in the same shape and keep every "id". Import merges on id and only touches the fields you include, so edits update entries instead of duplicating them or blanking what you left out. They may also sync between devices with a code. The server stores only an encrypted copy under a hash of the code; there is no way to read a list through the API. { "version": 1, "jobs": [{ "id": "mj_…", "company": "…", // required "title": "…", // required "url": "…", "location": "…", "status": "new | shortlist | drafted | applied | replied | interviewing | offer | rejected | archived", "starred": true, "notes": "…", "draft": "…", "next_action": "…", "applied_at": "ISO-8601", "salary_min": 0, "salary_max": 0, "currency": "EUR", "salary_period": "year" }] } ## The board API GET https://jobshelf.app/api/jobs q search company, title, tags, location scope reachable (everything but US-only) | worldwide | eu | us | unknown | | all source one source, or all field engineering | design | product | data | marketing | sales | support | people | finance | operations | other sort newest | company | score profile a field key from the list above. Without it nothing is scored and fit_score is 0 minScore 0-100, only with a profile limit default 25, max 2000 offset skip that many; the response's query.matched says how many match in total full=1 whole descriptions instead of the first 280 characters POST https://jobshelf.app/api/jobs with { "profile": { "basedOn": "design", "reach": { "regions": ["eu"], "canWorkUS": false, "willRelocate": false }, "money": { "floor": 60000, "strong": 90000, "currency": "EUR" }, "coreStack": ["figma"] } } scores for a custom profile. Geography weighs most, so ask where someone can work before ranking anything for them. ## Sources Listings come from public APIs and feeds. When you show one, name its source and link to its "url", as each source asks: Remote OK: https://remoteok.com Remotive: https://remotive.com Himalayas: https://himalayas.app Jobicy: https://jobicy.com Arbeitnow: https://www.arbeitnow.com We Work Remotely: https://weworkremotely.com