Private job application tracker. Browse target companies, log job URLs from your phone, review and process them on desktop with AI.
Live: https://job-targets.vercel.app
Access: Password protected — set TRACKER_PASSWORD in env
Case study: CASE_STUDY.md
- 228 pre-seeded target companies organized by tier (Dream → Brand)
- Log job postings as you find them — paste a URL and title auto-fills from the page
- Add new companies on the fly — paste a URL and company name auto-fills
- Delete companies or jobs with a confirm prompt
- Status tracking: new → interested → submitted → skip
- Search and filter by tier or status
- Installed as a PWA — stays in the app's browser, no Safari handoff
- Mobile-friendly for browsing at night, desktop-ready for AI-assisted review
- Install the PWA: Safari → Share → "Add to Home Screen"
- Browse company career sites inside the PWA
- When you find a job:
- Share the job URL to the tracker (best effort via share target), or copy link and paste into
/share
- Share the job URL to the tracker (best effort via share target), or copy link and paste into
- Select company, hit Save → job is created as
status='new' - Keep browsing, then close the in-app browser tab and return to the tracker
If your share-sheet shortcut is more reliable than the PWA share target, use iOS Shortcuts to POST directly into the DB.
- Endpoint:
POST https://job-targets.vercel.app/api/shortcuts/jobs - Auth header:
Authorization: Bearer <SHORTCUTS_TOKEN> - JSON body:
{ "url": "https://..." }
The endpoint will best-effort scrape the job title/company and attach it to an existing company when it can. If it can't, it will file the job under an Inbox company.
Install link (in-app): https://job-targets.vercel.app/shortcut
# 1. Install deps
npm install
# 2. Set up env
cp .env.example .env.local
# Fill in POSTGRES_*, TRACKER_PASSWORD, AUTH_SECRET (and optionally SHORTCUTS_TOKEN)
# Generate AUTH_SECRET:
openssl rand -hex 32
# 3. Seed the database
# Go to Neon console → SQL Editor → paste contents of seed.sql → Run
# 4. Run
npm run dev
# → http://localhost:3000 (redirects to /tracker)git add . && git commit -m "your message"
git push
# Vercel auto-deploys on push to mainMake sure these env vars are set in Vercel dashboard:
POSTGRES_*— auto-injected by Neon integrationTRACKER_PASSWORD— your login passwordAUTH_SECRET— same value as local (runopenssl rand -hex 32)SHORTCUTS_TOKEN— optional; required only for iOS Shortcut capture via/api/shortcuts/jobs
| File | What's In It |
|---|---|
ARCH.md |
Stack, folder structure, DB schema, data flow |
DECISIONS.md |
Why we chose each technology and pattern |
PATTERNS.md |
How to write code in this codebase |
STATUS.md |
What's working, what's broken, what's next |
SETUP.md |
Step-by-step first-time setup |
seed.sql |
DB schema + all seed data |
Start a Claude session and say:
"Read ARCH.md, DECISIONS.md, PATTERNS.md, and STATUS.md. Then connect to the DB and pull all jobs with status = 'new'."
Claude will surface new job URLs added from your phone. Paste job descriptions and Claude will output apply/skip recommendations and next steps.