A console tool to find your best match on Who's Hiring. Exports to JSON for automated ennui.
It:
- Finds the latest Who's Hiring post and fetches / caches all job comments locally in sqlite.
- Scores job postings according to your criteria.
- Provides a TUI to help you review the jobs and track which ones are interesting / applied to / ruled out.
go install github.com/mwinters0/hnjobs@latest
Or grab a binary from the releases
On first run, a config file is created at UserConfigDir/hnjobs/config.json
. (On linux this is
~/.config/hnjobs/config.json
.)
👉 You should edit the config file👈 before running any other commands, as this is
where your scoring rules are stored. Some samples rules are provided in the generated file. Each rule is a
golang regex which must be JSON escaped (\b
-> \\b
).
After you've set up your rules, run hnjobs
again and it will auto-fetch the most-recent job story, score the jobs by
your criteria, and show the TUI.
- Basics
ESC
- close dialogsTAB
- switch focus (so you can scroll a long job listing if needed)jk
and up/down arrows - scrollg
,G
,Ctrl-d
,Ctrl-u
- scroll harder
f
- fetch latest (only fetches new / TTL expired jobs, with default TTL of 1 day)F
- force fetch all jobs (ignore TTL)q
- quit
- Job Filtering
r
- mark read / unreadx
- mark job uninterested (hidden) or interested (default)p
- mark priority / not prioritya
- mark applied to / not applied tos
- reload config file and re-score the jobs (useful if you've changed your rules)
- Display
X
- toggle hiding of jobs marked uninterestedT
- toggle hiding of jobs below your score threshold (set in the config file)m
- select month (if multiple in your DB) / delete old months
hnjobs # Works offline.
hnjobs fetch # Just fetch, no TUI. Run this before hopping on a plane.
hnjobs fetch -x # Fetch and set exit code according to results. 0 = new jobs available.
hnjobs rescore # Re-score the cached jobs. Only needed if you've changed your rules.
hnjobs dump # Dump the current month's data to JSON on stdout.
text_missing
rules match if the regex fails. Use this to influence the score if a word is missing from a listing.why
andwhy_not
tags are optional. I like to analyze my past decisions whenever I watch my credit score drop. 🤷 These will become visible in the TUI eventually.colorize
is an optional boolean that defaults totrue
. Set tofalse
if you don't want this rule to be colorized in the display.
If you hate orange, you can edit your config file to use one of the built-in themes: material
or
gruvbox[dark|light]<hard|soft>
(example: gruvboxdarkhard
).
If you want to take a crack at making your own, have a look at the default theme which is generated on first-run at
UserConfigDir/hnjobs/theme-default.json
(on linux: ~/.config/hnjobs/theme-default.json
). You can either edit this
or copy it to theme-foo.json
and set your config's theme to foo
.
The database is stored at UserDataDir/hnjobs/hnjobs.sqlite
(on linux: ~/.local/share/hnjobs/hnjobs.sqlite
).