JobPulse is a personal job search intelligence platform and customizable tracking dashboard.
It turns fragmented job hunting into a structured engineering workflow: aggregating scraped feeds, calculating skill-match relevance scores, tracking opportunities via a keyboard-first master-detail view, and visualizing recruitment funnel analytics across customizable dashboard widgets.
Why JobPulse?
- Customizable Analytics Dashboard: Reorderable bento analytics widgets with drag-and-drop layout persistence
backed by
@dnd-kitand local storage. - Keyboard-First Opportunity Pipeline: Two-pane master-detail list with keyboard cycling (
j/k), quick apply (Enter), and rapid status shortcuts (a/i/t/nfor Applied, Interview, Interested, and Not Interested) with real-time Supabase synchronization. - Match Relevance Scoring: Automatically scores incoming roles based on your skills, target domain, seniority, and minimum salary thresholds.
- Employer Watchlist & Company Intelligence: Monitor hiring signals, interview ratings, and culture notes for target organizations.
- Sourcing Telemetry: Real-time status and health telemetry across automated scrapers and job board ingestions.
- Recruitment Funnel Analytics: Interactive Recharts breakdown of pipeline velocity, skill frequency demand, and salary distributions.
- Command Palette (
Cmd+K/Ctrl+K): Keyboard-first navigation to quickly jump between views, search jobs, and execute actions. - High-Density Dark UI: Linear-inspired hairline surfaces, crisp typography, and responsive drawer inspectors optimized for fast triage.
- Framework: React 19 + TypeScript + Vite 8
- Server State & Caching: TanStack Query (
@tanstack/react-query) - Styling: Tailwind CSS 4 + Lucide React icons
- Dashboard Layout & Reordering:
@dnd-kit(core & sortable) - Data & Auth: Supabase (
@supabase/supabase-js) - Virtualization: TanStack Virtual (
@tanstack/react-virtual) - Visualizations: Recharts
- Command Menu:
cmdk - Linting & Type Safety: Oxlint + TypeScript (
tsc) - Tooling & Git Hooks: Mise + Lefthook
Requires Node.js 20.19.0 or newer (Node 22.12.0 recommended via mise).
-
Install pinned tooling:
mise install
-
Install dependencies:
npm install
-
Install Git hooks:
npm run prepare
-
Configure environment:
Copy the example environment file:
cp .env.example .env
Populate your Supabase project credentials in
.env:VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_PUBLISHABLE_KEY=sb_publishable_... VITE_SUPABASE_ANON_KEY=sb_publishable_...
-
Start local dev server:
npm run dev
Open your browser at
http://localhost:5173. -
Run local quality checks:
npm run check
├── .github/
│ ├── dependabot.yml # Weekly automated dependency updates
│ └── workflows/
│ └── ci.yml # CI build and code quality verification
├── public/ # Static assets and icons
├── src/
│ ├── assets/ # Hero and bundled media assets
│ ├── components/
│ │ ├── auth/ # Supabase login and access control
│ │ ├── charts/ # Pipeline, relevance, and skill charts
│ │ ├── dashboard/ # Sidebar, navigation, and sortable widgets
│ │ ├── employers/ # Employer watchlist management
│ │ ├── jobs/ # Master-detail split, list view, and detail inspector
│ │ ├── profile/ # Candidate criteria and scoring weights
│ │ ├── sources/ # Job board scrapers and ingestion status
│ │ └── ui/ # Reusable primitives (buttons, sheets, cmdk)
│ ├── hooks/ # TanStack query and mutation hooks (useQueries.ts)
│ ├── lib/ # Supabase client, query client, storage, and profile utils
│ ├── types/ # Domain & database types (job.ts, database.types.ts)
│ ├── App.tsx # Root application shell and view router
│ └── main.tsx # Entrypoint
├── supabase/ # Supabase configuration & versioned migrations
│ ├── config.toml # Supabase CLI project config
│ └── migrations/ # SQL schema migrations
├── AGENTS.md # Operational guidelines for AI agents
├── CODEOWNERS # Repository code ownership
├── lefthook.yml # Pre-commit and pre-push Git hook triggers
├── mise.toml # Tool version specifications
├── package.json # Project dependencies and lifecycle scripts
└── vite.config.ts # Vite bundler configuration
Run checks in order, or use npm run check for the full pipeline:
# Fast linter
npm run lint
# TypeScript compilation check without emit
npm run typecheck
# Production build
npm run build
# Combined gate
npm run checkSee CONTRIBUTING.md.
For coding assistants and autonomous agents, see AGENTS.md.
MIT License. See LICENSE.