Local-first job search

Your search. Your notes.

Stop refreshing forty job boards and losing track of what you sent where.

TekJobs watches hundreds of company boards every morning, scores every posting against criteria you own, and files each match as a markdown note in a folder on your machine. It reads your mail for replies, drafts the resume and the letter from your own resume, and stops before anything is sent. The LLM is the coding CLI you already pay for.

Today: the decision queue, in-flight applications, and what has gone quiet
Boards watched
356
Postings a run
25k
MCP tools
39
Accounts
0
How it works

Five moments, every day

A scheduled task does the first three before you wake up. The last two are yours, and the app keeps them short.

  1. Scan

    Every morning: 350-plus company boards on Greenhouse, Lever, Ashby, Workday and the rest, the Google and Apple career pages, and a dozen aggregator feeds. Around 25,000 postings a run, deduplicated. All public, all key-free.

  2. Score

    Each posting is scored against criteria you own: title terms, hard exclusions, description keywords, seniority, a remote rule, a pay floor with a stretch band, recency. Every point is written down as a reason.

  3. File

    A match becomes a markdown note in a folder on your machine: the posting, why it matched, a status log, an application packet. Open the folder in Obsidian or anything else. The notes are the record; nothing else is.

  4. Decide

    Today shows the few worth a decision and what is about to close. Shortlist or pass, with a reason. Mail says reads your inbox for confirmations, rejections and interviews and asks you to confirm each one.

  5. Apply

    A tailored resume and a letter written from your resume of record, checked against it, saved into the note. The copy panel holds the answers forms keep asking for. You review, you click send; the app never does.

The app

Built to be read at a glance

Dark by default, one accent used sparingly, every number in mono. Filters are chips, views are links, and the sheet says why a job scored what it scored.

Jobs: filters as chips, saved views, the matches table
Jobs
Pipeline: committed work as columns from reviewing to offer
Pipeline
The boundary

What it will not do

A job search is a series of claims about things that happened to you. The software drafts and files; the claims stay yours.

It never submits an application.

Drafts are written into the note and stop there. Applied, interviewing and offer are statuses only a person can set, because only a person knows.

It never touches LinkedIn on your behalf.

No profile scraping, no automated messages. A single job link you paste is read once, the way a browser would open it.

It never sends mail.

The mail check runs with only Gmail's read tools allowed and every write tool denied by name. The model extracts; matching and every change to a note is ordinary code, and nothing changes until you confirm.

Nothing leaves your computer.

The scan runs on your machine, the notes live in your folder, and the LLM is the coding CLI you already pay for, signed in locally. No accounts, no API keys, no telemetry.

Numbers

From one real search

The author's own vault, on 22 September 2026. The board registry that produces the first two numbers is in the repository as a markdown table, and pull requests to it are the most useful contribution.

356

boards watched

Company boards on nine platforms plus the Atlassian, GitHub, Spotify and Amazon career APIs and the Google and Apple pages, in one daily run.

25k

postings a run

Fetched, deduplicated across sources, scored, and cut to the ones that clear your bar. About a minute on a laptop.

39

MCP tools

Claude Code, Claude Desktop, Cursor or ChatGPT can run the whole search over the same notes: find, move, draft, add boards, start scans, read the mailbox.

0

accounts

No sign-up, no server, no key. A folder of markdown and a scheduled task.

Requirements

What it needs from you

Nothing personal lives in the repository. Your profile folder, criteria, notes and mail state are outside it; the repository is the code and the starter notes.

Node 20 or newer
The scraper has one dependency; the app has its own install.
A folder for your profile
Plain markdown. Obsidian is the nicest way to read it, and not required.
A coding CLI, signed in
Claude Code by default. It writes the letters and resumes and reads the mailbox, so there is no API key and nothing metered.
Its Gmail connector, for mail
Optional. Check mail is boxed to Gmail's three read tools.
Get started

Clone, import a resume, be interviewed

The interview runs through the app's own MCP server in the coding CLI you already have: it reads your resume, asks the few things a resume cannot say, writes your profile and criteria, and runs the first scan. After that a scheduled task does the mornings.

Everything after the first scan is in the docs: the profile folder, scoring, mail, people, the copy panel, letters and resumes, and the 39 MCP tools.

terminal
git clone https://github.com/Timurtek/tekjobs && cd tekjobs
npm install
npm run init -- --resume ~/Downloads/resume.pdf   # the profile folder, with your resume imported

# Then the interview: open Claude Code in app/ and say
#   "Use the tekjobs MCP server. Call onboarding_status, then onboarding_materials, and follow its script."

cd app && npm install
npm run server      # API on http://127.0.0.1:8787
npm run dev         # the app on http://localhost:5173