Devlog

Job Scout

Finds the jobs worth applying for.

10 posts, newest first

A machine-readable summary for the daily notification

  • Each run now opens its summary with one fixed-shape line of counts (new matches, top score, strong-pay count, sources that didn't answer), so the scheduled morning run can turn it into a notification without parsing free text.
  • Job titles use the shared kit's quiet-link style, and a test checks that titles stay neutral while source links keep the accent.

A demo mode with made-up jobs

  • Job Scout now ships with a demo: ten invented jobs from invented companies, with pay, remote and hybrid roles, and applications at every stage. python -m scout.demo runs them through the real scorer and the real list page.
  • Every public picture of the tool comes from this set, so it shows exactly how Job Scout works without showing anyone's actual job search. The demo even brings its own pay floor and strong-pay line.
  • Shown here: the list on a desktop and a phone, the debug overlay that labels each card (J1, J2…) for precise feedback, and the empty state once everything has been reviewed.
A demo mode with made-up jobs, screenshotA demo mode with made-up jobs, screenshotA demo mode with made-up jobs, screenshotA demo mode with made-up jobs, screenshot

Foreign-located jobs no longer slip through as US

  • The first supervised run surfaced a Canada-only job as "new today", because its posting carried a US pay-transparency paragraph naming US states. The job's own location now decides whenever it names a place, matched as whole words so "Indiana" isn't read as India. Software-architect roles are excluded as engineering work.

The daily notification can name the best new job

  • Each run now also reports its best new match (employer, title, pay, score and link) in a form the daily routine can read, so the morning notification can say which job it is, not just how many.
  • Captured later, on demo data: a run's summary, with the counts line and the best-match line at the top.
The daily notification can name the best new job, screenshot

Clean job descriptions from company boards

  • Descriptions from Greenhouse job boards arrive as escaped HTML, and the cleaner was stripping tags before decoding them, so literal <p> tags survived in every one. They're now clean text, which matters for scoring and for the application drafts built from them.
  • A test written before the fix failed on the old code and passes now.

Calmer cards, and working Saved and Done tabs

  • After the Art Director's review, each card has one teal element, "Open listing", so the action stands out. Scores and the new-today tag are neutral, and the spyglass mark is larger.
  • The Saved and Done tabs had been rendering blank; they now show their jobs. The page test now checks what is actually on screen, which is how the fault was caught.
  • Captured later, on demo data: marking a job (the button confirms, then the job moves to Done), switching tabs, and the Saved and Done views.
  • Later the same day the mark moved to the shared kit's logo size (44 px), so every studio tool sizes its mark the same way. The screenshots here show the earlier 40 px.
Calmer cards, and working Saved and Done tabs, screenshotCalmer cards, and working Saved and Done tabs, screenshotCalmer cards, and working Saved and Done tabs, screenshotCalmer cards, and working Saved and Done tabs, screenshotCalmer cards, and working Saved and Done tabs, screenshot

Promised flexibility no longer counts against a job

  • Flexibility is one of the strongest signals in the score, and the scorer was getting it backwards in one case: "no core hours" was read as "core hours", so the jobs promising the most freedom were marked down. Negated phrases ("no time tracking", "never on-call") no longer count as risks, while real fixed hours and office days still do.
  • A test written before the fix failed on the old scorer and passes now.
  • Captured later, on demo data: a role promising no core hours, above a hybrid role flagged for core hours, 9–5 and office days.
Promised flexibility no longer counts against a job, screenshot

The list page, reskinned on the studio's shared look

  • The daily list now wears the same dark look as the studio's other tools, built from the shared UI kit, with Job Scout's own teal accent and its brass-spyglass mark.
  • Jobs sort into three tabs, To review, Saved and Done, so what still needs a decision stays at the top. Marking a job confirms on the button itself and moves the job only once the clicking stops, so the list doesn't jump under the cursor. A second click undoes.
  • Remote, hybrid, strong pay and red flags are labelled chips rather than coloured text. The page holds up at phone width, and a debug toggle labels each card (J1, J2, …) for precise feedback.
  • Every screenshot shows an invented list.
The list page, reskinned on the studio's shared look, screenshotThe list page, reskinned on the studio's shared look, screenshotThe list page, reskinned on the studio's shared look, screenshot

Salary parsing hardened, with regression tests

  • Pay is read out of free-text job descriptions, and two quiet faults were fixed. Company size, funding and cost-savings figures (a "$750,000" community) were being read as salaries, and a listing that prints several regional pay bands had its range stretched across all of them.
  • A range written as "$X – $Y" counts as pay on its own. An earlier, stricter check had dropped real ranges and buried good matches as "pay not listed".
  • 22 tests now cover pay, the filters and title matching. Each fix's test was confirmed to fail on the old code, not just to pass on the new.
  • Captured later, on demo data: posted pay ranges on the cards.
Salary parsing hardened, with regression tests, screenshot

First working daily run

  • Job Scout went from a concept to a working daily run. It reads four open job sources (Himalayas, Remotive, RemoteOK and the Hacker News "Who is hiring?" thread) plus the public job boards of a watchlist of companies on Greenhouse, Lever and Ashby.
  • Before any code, each source's terms were checked. Only documented APIs and feeds that allow automated reading are used, each is read once a day, and every job links back to its original listing. LinkedIn and Indeed aren't scraped, and the tool never applies to anything.
  • Each run gathers, de-duplicates, filters (remote first, hybrid kept but marked as a fallback, on-site dropped, a pay floor, US-eligible roles only) and scores every job from 0 to 100 with a short reason. Pay and flexibility count most, then AI focus, scope and seniority.
  • The first real run read about 6,000 listings and kept 181 matches, well past the pilot's target of 30.
  • Captured later, on demo data: the ranked list, and a run printing its summary.
First working daily run, screenshotFirst working daily run, screenshot