Skip to content

nplotko/job-tracker

Repository files navigation

Job Tracker

A local job search tracker built with NestJS, React, and PostgreSQL. Track applications, interviews, interviewers, and take live notes during interview calls.

Prerequisites

  • Node.js 20+
  • pnpm
  • PostgreSQL (running locally)

Setup

  1. Install dependencies
pnpm install
  1. Create the database (one-time)
createdb jobtracker

If your Postgres uses a username (Postgres.app uses your macOS username), update DATABASE_URL in .env and apps/api/.env:

DATABASE_URL=postgresql://yourusername@localhost:5432/jobtracker
  1. Run database migrations
pnpm db:generate
pnpm db:migrate
  1. Start development servers
pnpm dev

This starts:

Open http://localhost:5173 in your browser.

Project structure

job-tracker/
├── apps/
│   ├── api/          # NestJS REST API
│   └── web/          # React + Vite frontend
├── packages/
│   └── shared/       # Shared types, enums, Zod schemas
└── prisma/           # Database schema and migrations

Features

  • Dashboard — status counts, upcoming interviews, recent activity
  • Applications — track every role with status, dates, rejection reasons
  • Interviews — log rounds, formats, outcomes, and dates
  • Interviewers — directory of people you've met
  • Live Notes — full-screen note editor with autosave during interviews
  • Google Calendar — connect your account; events refresh automatically when the app loads

Google Calendar setup

  1. In Google Cloud Console, create OAuth 2.0 credentials (Web application).
  2. Add authorized redirect URI:
    http://localhost:3001/api/auth/google/callback
    
  3. Add your Google account as a test user (while the app is in testing mode).
  4. Copy Client ID and Client Secret into apps/api/.env:
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URI=http://localhost:3001/api/auth/google/callback
WEB_APP_URL=http://localhost:5173
  1. Restart the API, then click Connect Google Calendar in the app header.
  2. On each app load, upcoming events (next 30 days) are fetched from your primary calendar. Use Refresh to sync again without reloading.

Useful commands

Command Description
pnpm dev Start API + web dev servers
pnpm db:migrate Run Prisma migrations
pnpm db:studio Open Prisma Studio (DB browser)
pnpm build Build all packages

API endpoints

All routes are prefixed with /api:

  • GET /applications — list applications (optional ?status= filter)
  • POST /applications — create application
  • GET /applications/:id — application detail with interviews
  • PATCH /applications/:id — update status, rejection info
  • POST /applications/:id/interviews — add interview
  • GET /interviews/:id — interview detail
  • POST /interviews/:id/notes — add note
  • PATCH /notes/:id — update note (autosave)
  • GET /interviewers — list interviewers
  • GET /dashboard/summary — dashboard stats
  • GET /calendar/status — Google Calendar connection status
  • POST /calendar/sync — fetch upcoming events from Google Calendar
  • GET /auth/google — start Google OAuth flow
  • DELETE /calendar/disconnect — disconnect Google Calendar

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages