A full-stack job application tracker: dashboard to view and manage applications, API to store them, and browser tools (Chrome extension or Tampermonkey script) to record applications from any job site.
| Part | What it does |
|---|---|
Backend (backend/) |
Express API + SQLite. CRUD for applications, metrics, and job listings (e.g. Greenhouse). |
Frontend (frontend/) |
React + Vite dashboard: list applications, metrics, discover companies/roles, add/edit entries. |
Extension (extension/) |
Chrome extension with a popup to record an application and send it to the API. |
Scripts (scripts/) |
Tampermonkey userscript: “Record” button on any page; alternative to the extension. |
- Node.js 18+ (for backend and frontend)
- Chrome (for the extension or Tampermonkey)
From the project root:
npm installThis installs dependencies for the root workspace and for backend, frontend, and extension.
npm run dev- Backend runs at http://localhost:3001 (API under
/api) - Frontend runs at http://localhost:5173 (proxies
/apito the backend)
Open http://localhost:5173 in your browser to use the dashboard.
Choose one:
- Chrome extension – extension/README.md: load the unpacked
extensionfolder in Chrome. - Tampermonkey script – scripts/README.md: install Tampermonkey, then install
scripts/job-app-tracker-tampermonkey.user.js.
Both send new applications to http://localhost:3001 by default (configurable). Keep the backend running while you use them.
job-app-tracker/
├── backend/ # Express API, SQLite DB
│ ├── src/
│ │ ├── server.js # Routes, Greenhouse proxy, etc.
│ │ └── db.js # SQLite setup
│ └── data/ # applications.db (created on first run)
├── frontend/ # React + Vite dashboard
│ └── src/
│ ├── App.jsx
│ ├── Dashboard.jsx
│ ├── ApplicationList.jsx
│ ├── Metrics.jsx
│ ├── Discover.jsx
│ └── components/
├── extension/ # Chrome extension (popup to record apps)
├── scripts/ # Tampermonkey userscript (Record button)
├── docs/ # Extra docs (e.g. HOW_REQUESTS_WORK.md)
└── package.json # Workspace root; npm run dev runs backend + frontend
| Command | Description |
|---|---|
npm run dev |
Start backend + frontend together |
npm run dev:backend |
Start only the API (port 3001) |
npm run dev:frontend |
Start only the dashboard (port 5173) |
npm run build |
Build frontend for production |
npm run start |
Run backend only (no watch) |
- Dashboard – Summary metrics, recent applications, “Add application” dialog.
- Applications – Table or grouped-by-company view; edit/delete; role links to job URL when present.
- Metrics – Totals, by status, by company, by source.
- Discover – Curated company lists with career links and (where available) live role lists from Greenhouse; search filters roles across companies.
Theme (light/dark) is stored in the browser and persists across reloads.
- Frontend (dev): uses the Vite proxy, so you don’t set anything;
/apigoes to the backend. - Extension / Tampermonkey: default is
http://localhost:3001. You can change it in the extension popup or via the Tampermonkey command “Set Job Tracker API URL”.
For production, run the backend where you want (e.g. port 3001 or behind a reverse proxy) and point the extension/script to that URL.
- Extension install & use: extension/README.md
- Tampermonkey install & use: scripts/README.md
- How requests flow (extension/script → backend, CORS, etc.): docs/HOW_REQUESTS_WORK.md (if present)