JobTracker is a full-stack web application to manage your job search - track applications, schedule interviews, and sync everything to Google Calendar in one place.
Built to explore and practice:
- Google OAuth 2.0 - third-party authentication flow and token handling
- External API integration - communicating with Supabase and Google Calendar APIs
- Rate limiting - protecting APIs from abuse with per-user throttling
- Application Tracking - Create, update, and delete job applications with status labels: Applied, Interview, Offer, Rejected, or Ghosted
- Interview Scheduling - Register interviews linked to specific applications and add them to Google Calendar with a single click
- Status Filtering - Quickly surface applications by their current stage
- Google OAuth - Authenticate securely via your Google account, no password required
- Rate limiting - Per-user API rate limiting via
express-rate-limitto protect against abuse - Input validation - All incoming data is validated and sanitized using Zod schemas
- JWT authentication - Stateless, token-based session management
- Docker Desktop or Node.js
- A Supabase project → Setup guide
- A Google Cloud OAuth 2.0 client → Setup guide
git clone https://github.com/RodrigoCoelhoo/job-tracker.git
cd job-trackerCopy the example file and fill in your credentials:
macOS/Linux
cp backend/.env.example backend/.envWindows
copy backend\.env.example backend\.envFill in backend/.env:
# Supabase
SUPABASE_URL=https://<project-id>.supabase.co
SUPABASE_SERVICE_ROLE_KEY=
# Google OAuth
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# JWT
JWT_SECRET=your-secret-key
# App
FRONTEND_URL=http://localhost:80
BACKEND_URL=http://localhost:5000
PORT=5000
NODE_ENV=productionChoose one of the following methods:
Note
Requires Node.js to be installed.
cd backend
npm install
npm run devcd frontend
npm install
npm run devNote
Requires Docker Desktop to be installed.
docker-compose up --build| Service | URL |
|---|---|
| Frontend | http://localhost:80 |
| Backend | http://localhost:5000 |
| Method | Endpoint | Description |
|---|---|---|
| GET | /auth/google | Redirect to Google login |
| GET | /auth/callback | Google OAuth callback |
| GET | /auth/me | Get authenticated user |
| POST | /auth/logout | Logout |
| Method | Endpoint | Description |
|---|---|---|
| GET | /applications | Get all applications (with filters) |
| POST | /applications | Create a new application |
| PUT | /applications/:id | Update an application |
| DELETE | /applications/:id | Delete an application |
| GET | /applications/stats | Get application statistics |
| Method | Endpoint | Description |
|---|---|---|
| GET | /applications/:id/interviews | Get all interviews |
| POST | /applications/:id/interviews | Create an interview |
| PUT | /applications/:id/interviews/:interviewId | Update an interview |
| DELETE | /applications/:id/interviews/:interviewId | Delete an interview |
MIT - see LICENSE for details.