Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI Job Search Dashboard

An Obsidian-based job-search tracker that Claude keeps up to date for you. Scheduled Claude tasks search for jobs that match your background, check that each posting is really live, rate how well it fits you, and write one note per lead into your vault. Obsidian's Dataview plugin turns those notes into a dashboard and a kanban board.

 ┌──────────────────────┐   reads rules    ┌───────────────────────────────┐
 │ Scheduled Claude     │ ───────────────▶ │  Vault Conventions.md         │  structure & rules
 │ tasks (daily/weekly/ │                  │  Job Search Profile.md        │  your preferences
 │ on demand)           │                  │  Resume Analysis & Target...  │  your background
 │                      │                  │  Target Companies.md          │  your watchlist
 │                      │   writes         └───────────────────────────────┘
 │                      │ ───────────────▶  Leads/*.md  +  Daily Logs/*.md
 └──────────────────────┘                          │
                                                   ▼ Dataview
                                 Job Leads Dashboard.md  ·  Job Search Kanban.md

Design principle: the scheduled-task prompts are generic and rarely change. Everything that shapes a run (which titles to search, where, how to judge fit, which companies to check) lives in vault notes that each run re-reads from scratch. To change what Claude searches for, edit a note, not a scheduled task.

What's in this repo

vault/                                  ← copy this folder into your Obsidian vault
├── Vault Conventions.md                core structure: schema, statuses, fit tiers, tags, update rules
├── Job Search Profile.md               YOUR preferences: titles, geography, fit weighting, standing companies, job boards
├── Resume Analysis & Target Job Titles.md   YOUR background (ships with a fictional example)
├── Target Companies.md                 YOUR employer watchlist (ships with a template + remote-first list)
├── Job Leads Dashboard.md              Dataview dashboard (active, best fits, queue, backlog, found today…)
├── Job Search Kanban.md                DataviewJS board, one column per status
├── Leads/                              one note per job posting (ships with one example lead)
├── Daily Logs/                         one note per day a task runs
└── Templates/Lead Template.md          blank lead note
scheduled-tasks/
└── scheduled-searches.md               the three task prompts to paste into Claude

Vault Conventions.md is the stable core. The three "YOUR" notes are what you personalize.

Prerequisites

  • Obsidian, with a vault you want to track your search in.
  • Dataview community plugin: Settings → Community plugins → Browse → "Dataview" → Install → Enable.
    • For the kanban board, also turn on Enable JavaScript Queries in Dataview's settings. The main dashboard works without it.
  • The Claude desktop app on a paid plan (Pro, Max, Team, or Enterprise). See Plan requirements.
  • Web search enabled in Claude, so tasks can discover postings.
  • A real browser tool for Claude: either Claude's built-in browser (in the desktop app's Code tab) or the Claude in Chrome extension. This is required, not optional. Fetch-style tools regularly report expired postings as live, so every task checks liveness by rendering the real page (see Why the browser is required).
  • Folder access: Claude needs read/write access to the job-search folder inside your vault.
  • A computer that's on and awake at task time. The scheduled tasks run locally, on your machine (see Creating the scheduled tasks).

Plan requirements

Piece Free plan Paid plan (Pro+)
Obsidian + Dataview dashboard and kanban ✅ (no Claude plan needed) ✅
Web search ✅ ✅
One-time setup prompts (resume analysis, target companies) ⚠️ Works in chat if you upload your resume and paste the results into the notes yourself ✅ Claude writes the notes directly
Scheduled tasks ❌ ✅
Claude Code / the desktop Code tab (where local scheduled tasks and the built-in browser run) ❌ ✅
Claude in Chrome ❌ ✅

In short, the automated part of this workflow needs a paid plan. On Free, you can use the dashboard and run searches by hand in chat. But Claude can't check postings in a real browser there, so you'd have to open each posting yourself to confirm it's still live.

Plan features change; check claude.com/pricing for the current details.

Setup

  1. Copy the vault folder. Copy the contents of vault/ into a subfolder of your Obsidian vault, for example <your vault>/Job Search/. A dedicated subfolder matters: the tasks are told they may only touch that folder.

    cp -R vault/ "$HOME/Documents/Obsidian/MyVault/Job Search"
  2. Enable Dataview (and JavaScript queries) as described above. Open Job Leads Dashboard.md. You should see the example lead in the tables. Open Job Search Kanban.md and you should see a board.

  3. Populate your background and preferences. Replace the fictional example in Resume Analysis & Target Job Titles.md and Job Search Profile.md with your own. See Populating your resume analysis. This is the step that matters most for the quality of fit ratings.

  4. Build your company watchlist. Replace the placeholder "Home metro employers" in Target Companies.md. See Building your target-company list.

  5. Create the scheduled tasks. See Creating the scheduled tasks.

  6. Delete the example lead (Leads/Example Corp - Senior DevOps Engineer.md) once your first real run has added leads.

Populating your resume analysis

The Resume Analysis & Target Job Titles.md that ships here describes a fictional senior DevOps engineer, and Job Search Profile.md is filled in to match. Have Claude replace both with your own.

Get your source material:

  • Resume: save it as a PDF (or .docx, or plain text) somewhere Claude can read it.
  • LinkedIn: public LinkedIn profiles usually require sign-in, so don't point Claude at the URL. Instead, on your profile click More → Save to PDF and use that file. You can combine it with your resume.

Then, in a Claude session with access to your job-search folder, send this prompt (edit the paths first):

I'm setting up an Obsidian job-search tracker in "<path to your job-search folder>". Please read Vault Conventions.md, Job Search Profile.md, and Resume Analysis & Target Job Titles.md there to understand the structure. The latter two currently contain a fictional example.

Now read my resume at "<path to resume.pdf>" (and my LinkedIn export at "<path to linkedin.pdf>", if provided) and:

1. Rewrite Resume Analysis & Target Job Titles.md for me, keeping the same section structure: career snapshot, work history, education, certifications, core skills, target job titles (grouped by: leadership continuation, senior IC, broader titles with a larger remote pool, adjacent specialties), and geography notes. Base everything strictly on what the documents say. Don't invent experience.

2. Rewrite Job Search Profile.md for me, keeping its section structure: candidate summary, search targeting (primary / also search / deprioritized-excluded), geography, fit weighting (what to weigh most, soft gaps, hard gaps, dealbreakers, overrides), minimum fit bar, standing companies of interest, job boards, big-tech on-demand search, and preference change log.

Before writing, ask me about anything the documents can't tell you:
- Where I live, and whether I want remote only, hybrid in my metro, or both
- Titles I want to avoid, and whether I want management roles
- Dealbreakers (clearance, travel, on-site, salary floor, industries to avoid)
- Experience that isn't on my resume (e.g. earlier jobs, or informal leadership before an official title) that should keep a posting's "N+ years" requirement from counting against me
- Specific companies or job boards I always want checked

Don't touch any other files.

Review both notes afterward. The fit-weighting section in particular is worth reading closely, because it drives every rating. Re-run the prompt, or just edit the notes by hand, whenever your resume or preferences change, and add a dated line to the profile's "Preference change log."

Building your target-company list

Target Companies.md is read by the weekly target-company task. It ships with a placeholder "Home metro" section and a location-independent list of remote-first infra/DevOps companies. To have Claude research your area:

Read Job Search Profile.md and Resume Analysis & Target Job Titles.md in "<path to your job-search folder>". Then research employers in <your metro area> with substantial, genuine engineering organizations (not places where IT is a small cost center) that plausibly hire for my target roles. Group them by industry and follow the entry format and ✅/⚠️ markers described at the top of Target Companies.md. Include each company's careers-site URL where you can find it. Flag anything with recent layoffs, acquisitions, or unclear local presence. Replace the "Home metro employers" placeholder section with your findings, and prune the remote-first list down to the companies relevant to my background. Don't touch any other file.

After that, add or remove companies by hand whenever you like. The task picks up changes on its next run.

Creating the scheduled tasks

scheduled-tasks/scheduled-searches.md contains three prompts:

Task Schedule Purpose
Daily job search Daily, 9:00 AM (0 9 * * *) Broad search, standing companies, and job boards; re-verifies existing leads and closes expired ones
Target-company search Weekly, e.g. Tue 11:00 AM (0 11 * * 2) Checks every employer in Target Companies.md on its own careers site
Big-tech search Manual only Deep browser-verified sweep of the companies listed in your profile

1. Fill in the placeholders

Each prompt uses {{FOLDER_PATH}} (the absolute path to your job-search folder) and {{FOLDER_NAME}} (just the folder name). Replace them by hand, or generate a filled-in copy:

sed -e 's|{{FOLDER_PATH}}|/Users/you/Documents/Obsidian/MyVault/Job Search|g' -e 's|{{FOLDER_NAME}}|Job Search|g' scheduled-tasks/scheduled-searches.md > my-scheduled-searches.md

2. Create each task as a local task in Claude

Use local tasks, not cloud ones. The Claude app offers two kinds of scheduled task:

  • Local tasks (Code tab → Routines) run on your computer. They can read and write your Obsidian vault and use Claude's built-in browser. This is the kind this workflow needs.
  • Cloud tasks (Cowork scheduled tasks and remote routines) run even when your computer is off, but they can't read or write a folder on your computer. They can't update your vault, so they won't work here.

Option A: create it in the app's UI.

  1. In the Claude desktop app, open the Code tab.
  2. Click Routines in the sidebar (or in the sidebar's More menu), then New routine, then Local.
  3. Fill in:
    • Name: e.g. daily-job-search
    • Description: e.g. "Daily job search: update Obsidian job leads"
    • Instructions: paste the filled-in prompt
    • Working folder: your job-search folder (trust it when prompted)
    • Schedule:
      • Daily at 9:00 AM for the daily search
      • Weekly (Tuesday, 11:00 AM) for the target-company search
      • Manual for the big-tech search
  4. Save, then repeat for the other two tasks.

Option B: ask Claude to create it. In a Code-tab session whose working folder is your job-search folder, say:

Create a local scheduled task called "Daily job search" that runs every day at 9:00 AM, using this folder as its working folder, with exactly this prompt:

<paste the filled-in prompt for task 1>

Repeat for the target-company task ("every Tuesday at 11:00 AM"). For the big-tech task, ask for a manual task with no schedule. Schedules are in your local time zone.

3. Do a first run and approve permissions

After creating each task, open it from the Routines list and click Run now. Watch the session for permission prompts (web search, browser, file edits) and choose always allow for each. Later runs of that task will auto-approve the same tools. If you skip this step, an unattended run can stall at its first permission prompt and wait for you.

Things to know:

  • Local tasks run only while the Claude app is open and your computer is awake. A run missed while your computer is asleep is skipped. When the app starts or the computer wakes, Claude starts one catch-up run for the most recently missed time and drops older ones. So a daily 9 AM search might actually run at 11 PM on a day your laptop was closed.
  • To stop idle sleep from skipping runs, turn on Keep computer awake in the app's Settings → Desktop app → General. Closing a laptop lid still puts it to sleep.
  • Each run is a fresh session with no memory of earlier runs. That's why the prompts tell Claude to re-read the vault notes every time.
  • From a task's page in Routines you can Run now, pause or resume it, edit it, check its run history (including skipped runs and why), and revoke saved permissions.
  • If your setup mounts your folders somewhere other than their real path (e.g. under $HOME/mnt/), the prompts already tell Claude to look for the folder by name there.

4. Changing behavior later

Don't edit the task prompts. Instead:

  • Different titles, geography, fit rules, companies, or job boards → edit Job Search Profile.md
  • Different employer watchlist → edit Target Companies.md
  • Schema, tags, or update mechanics → edit Vault Conventions.md

Using the dashboard

  • Job Leads Dashboard.md shows active leads, best fits, your queue, backlog, today's finds, new/unreviewed leads, recently closed leads, and filter examples.
  • Job Search Kanban.md is a board with one column per status, with cards sorted by fit.
  • You own status. Move a lead through new → active → queue → applied → interviewing → offer / rejected by editing its status: field. Use backlog to table a lead. The tasks never change your status values. The one exception: they set closed when a posting disappears.
  • Claude owns fit / fit_notes, and may refresh them as more posting detail surfaces.
  • Check Daily Logs/ to see what each run found, closed, or flagged.

Why the browser is required

This is built into every rule and prompt because it kept going wrong in practice:

  • Fetch-based tools reported postings as live, down to plausible req IDs and dates, when the real page said the job had expired.
  • Some careers sites keep showing the full job description after a posting closes. The only clue is that the Apply button is gone.
  • Aggregators (LinkedIn, Glassdoor, Indeed) are often bot-blocked or stale while the real posting is live on the employer's own site.

So every task verifies postings in a real rendered browser, looks for an Apply button, and falls back to the employer's own careers site. If no browser tool is available, leads get tagged unverified instead of being trusted.

Troubleshooting

  • The dashboard shows raw code blocks: Dataview isn't installed or enabled.
  • The kanban is empty but the dashboard works: turn on Dataview → Enable JavaScript Queries.
  • A lead is missing from every table: its YAML frontmatter probably doesn't parse. The usual cause is an unquoted value containing : . Quote the value, or replace the colon with --.
  • A task says it can't find the folder: check that {{FOLDER_PATH}} was replaced with the correct absolute path and that Claude has been granted access to it.
  • Too many weak leads, or too few: adjust the fit-weighting and minimum-fit-bar sections of Job Search Profile.md.

About

A tool using the Claude AI tool and Obsidian to create a job search dashboard

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors