Job Tracker PRD
The Job Tracker captures postings, vets them with AI against fixed criteria, and tracks each job to a decision. Every finding lands in the tracker, not a chat.
OverviewProblem and userGoalsUser storiesVetting flowFunctional requirementsNon-functionalSuccess and releases
Overview
| Item | Detail |
|---|---|
| Owner | Emily Ruth (product owner and sole user) |
| Status | Working prototype in daily use |
| Built with | Claude Code, from my specs; I tested every change |
| Demo | demo.emilyruth.me (fictional data) |
| Code | GitHub: Emily-vibe-code/Job-Tracker |
Problem and user
A job search produces more detail than a spreadsheet can hold, and keeping it current by hand is slow.
- Vetting findings get lost. Each job's research turns up details with no central place to keep them.
- Comparing jobs needs a table, but tables are slow to fill. A spreadsheet view makes jobs easy to compare side by side, but entering every field by hand takes too long.
- Every job has its own history. Contacts, follow-ups, emails and interviews need to be tracked per job.
- Manual vetting doesn't scale. Once tracking worked, the next need was for Claude to vet each job, and then the company behind it.
- New postings are easy to miss. A scheduled AI agent searches the web each day for jobs posted since its last run.
Primary user: an experienced job seeker with set criteria (dealbreakers, salary floor, remote eligibility) and a resume the AI must not overstate.
Goals and non-goals
Goals
- Screen a posting in about a minute.
- Research only postings with a real fit.
- Keep every decision, note, contact and follow-up in one record per job.
- No invented facts about the user's experience.
- Never lose the user's own edits.
Non-goals
- Final decisions. The AI recommends; the user decides.
- Multi-user accounts or production hosting.
User stories
| # | As a job seeker, I want to... | Acceptance criteria |
|---|---|---|
| 1 | save a posting from any job site in one click | A bookmarklet copies the title, company and link into a new job in the tracker. |
| 2 | get a quick fit score before I invest time | The screen uses only the posting, my resume and the tracker, and returns a score in about a minute. |
| 3 | stop early on a dealbreaker | Hard gates (for example, a contract role) run before any scoring; on a fail the screen stops and asks if I want to compromise. |
| 4 | research only roles worth it | A full vet is offered only when the quick screen scores 55 or higher. |
| 5 | avoid re-researching a company | Company research less than 60 days old is reused; the vet checks only for news since then. |
| 6 | trust the scores | A skill counts only with on-the-job evidence; anything not on my resume or confirmed by me is flagged or asked about. |
| 7 | read a vet fast | Each full vet opens with the recommendation and runs about 150-200 words. |
| 8 | see where every job stands | Entering an applied or rejected date, or ticking Interviewing, moves the job to the matching tab. |
| 9 | never miss a follow-up | A due date sets itself 7 days after the latest activity, changes color when overdue, and suggests closing roles quiet for 30+ days. |
| 10 | keep my edits safe | If I edit a record while the AI updates it, my edit wins and nothing is silently overwritten. |
Vetting flow
Only postings that clear the hard gates and score 55+ get deep research. The user makes the final call.
Functional requirements
| Area | Requirement |
|---|---|
| Tabs | Six tabs: Jobs, Applied, Interviewing, Rejected, Contacts, Companies. Inline editing, sortable and resizable columns, pinned header, dark mode. |
| Details | A slide-out drawer shows the full record for any job, contact or company. |
| Stages | An applied date, rejected date or Interviewing tick moves the job to the matching tab. |
| Activity logs | Dated logs for follow-ups, interviews and replies; the table shows the most recent date. |
| Reminders | Due date 7 days after the latest activity; turns color when overdue; suggests closing after 30+ quiet days. |
| Ratings | Two sets of review-site ratings and counts, a Recommend %, a per-job Excitement rating and a per-company rating. |
| Companies | Auto-created from job and contact names; rename, delete or merge; ratings flow to related jobs. |
| Contacts | International phone formats, business and personal email, LinkedIn, and dated replies. |
| Capture | A bookmarklet copies a posting's title, company and link into the tracker. |
| AI vetting | Hard gates, quick screen, full vet at 55+; company research reused for 60 days; findings saved to the job. |
| Backup | Export all data to JSON. |
| Daily digest | Weekday email of new matches, skipping jobs already passed on. |
Non-functional requirements and limits
Requirements
- Data integrity. Saves are timestamped and merged by newest; writes check the record's version first.
- Simple delivery. One HTML file (about 5,000 lines), no build step.
- Storage. Browser local storage; optional cloud sync through Claude Artifacts.
- Accuracy. Anything not on the resume or confirmed by the user is marked as an inference.
Known limits
- No automated tests; changes are tested by hand.
- Companies match by exact name, so a typo creates a duplicate until merged.
- Stage rules are not yet in a single source of truth.
Success measures, releases and open questions
Success measures
| Measure | Target |
|---|---|
| Quick screen time | About 1 minute per posting |
| Full vet length | About 150-200 words, recommendation first |
| Lost edits | None: the user's edit always wins |
| Unsupported claims about the user | None: flagged or asked about instead |
Shipped iterations (from daily use)
- Shortened full vets from 300+ words to about 150-200, recommendation first.
- Fixed a sync bug where stale cloud snapshots overwrote fresh edits.
- Fixed a regression where opening a rejected job could move it to another tab.
- Added a weekday-morning digest of new matches that skips jobs already passed on.
Next release
- Automated tests.
- Consolidate the stage rules into a single source of truth.
Open questions
- Track a usage number, such as postings screened per week?
- Revisit the 55-point full-vet threshold as more postings are scored?