Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Job / Internship Application Tracker

A full-stack web app to track job and internship applications — log statuses, set follow-up reminders, and view your job search stats on a dashboard.

Stack: React (frontend) · Node.js + Express (backend) · MySQL (database) · JWT auth


Features

  • Signup / Login with JWT authentication
  • Add, edit, delete, and view job applications
  • Track status: Applied → Interview → Offer / Rejected
  • Dashboard with stats and a pie chart breakdown
  • Reminders for follow-ups
  • Light/Dark theme toggle
  • Profile management + account deletion

Project Structure

job-tracker/
├── backend/     → Node.js + Express + MySQL API
└── frontend/    → React app

Setup Instructions

1. Prerequisites

  • Node.js (v18+) installed
  • MySQL installed and running locally

2. Database Setup

Open your MySQL client (Workbench, CLI, or XAMPP's phpMyAdmin) and run the SQL files in backend/migrations/ in order:

001_create_users.sql
002_create_jobs.sql
003_create_reminders.sql

This creates the job_tracker database and its tables.

3. Backend Setup

cd backend
npm install
cp .env.example .env

Open .env and fill in your actual MySQL password and a random JWT secret string.

npm run dev

Backend runs on http://localhost:5000. Visit http://localhost:5000/api/health to confirm it's running.

4. Frontend Setup

Open a new terminal:

cd frontend
npm install
cp .env.example .env
npm start

Frontend runs on http://localhost:3000.

5. Use the App

  1. Go to http://localhost:3000
  2. Click "Get Started" and create an account
  3. Add your first job application from the Dashboard or Applications page

API Endpoints Reference

Auth (/api/auth)

  • POST /register — create account
  • POST /login — login
  • GET /me — get current user (requires token)

Jobs (/api/jobs) — all require auth token

  • GET / — list all applications
  • GET /stats — status counts for dashboard chart
  • GET /:id — single application
  • POST / — create application
  • PUT /:id — update application
  • DELETE /:id — delete application

Reminders (/api/reminders) — all require auth token

  • GET / — list reminders
  • POST / — create reminder
  • PUT /:id — update reminder
  • DELETE /:id — delete reminder

Users (/api/users) — all require auth token

  • PUT /profile — update name/email
  • DELETE /account — delete account

Notes for Interviews

If you're using this as a portfolio project, be ready to explain:

  • Why JWT is stored and sent via Authorization: Bearer <token> header
  • How passwords are hashed with bcrypt before storage (never stored in plain text)
  • Why the backend re-checks user_id on every job/reminder query (prevents one user from accessing another user's data)
  • How the React Context API (AuthContext, ThemeContext) avoids prop-drilling
  • How ProtectedRoute blocks access to dashboard pages when not logged in

Possible Extensions (nice to mention in interviews as "future improvements")

  • Email notifications for reminders (utils/sendEmail.js is scaffolded but not wired up)
  • Pagination/search on the Applications page
  • Resume file upload
  • Deploy: frontend → Vercel/Netlify, backend → Render/Railway, DB → PlanetScale/Railway MySQL

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages