Kanban-style web app for tracking job applications. Drag applications between columns (Applied / Interview / Offer / Rejected), set follow-up reminders, and use AI to auto-parse job postings.
- Frontend: React (Vite), TypeScript, Tailwind CSS, dnd-kit, React Query
- Backend: Node.js, Express 5, TypeScript
- Database: PostgreSQL + Prisma ORM
- Auth: JWT (email + password, bcrypt)
- AI: Claude API (auto-parse job postings into structured data)
- Node.js 20+ or Bun
- Docker (for PostgreSQL)
docker compose up -dcd backend
cp .env.example .env
# Edit .env with your settings (defaults work with docker-compose)
bun install
npx prisma migrate dev
bun run devBackend runs on http://localhost:3002
cd frontend
bun install
bun run devFrontend runs on http://localhost:5173 (proxies API requests to backend)
Go to http://localhost:5173, register an account, and start tracking!
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register |
No | Register new user |
| POST | /api/auth/login |
No | Login |
| GET | /api/auth/me |
Yes | Get current user |
| GET | /api/applications |
Yes | List all applications |
| GET | /api/applications/:id |
Yes | Get single application |
| POST | /api/applications |
Yes | Create application |
| PUT | /api/applications/:id |
Yes | Update application |
| PATCH | /api/applications/:id/status |
Yes | Update status (drag & drop) |
| DELETE | /api/applications/:id |
Yes | Delete application |
| POST | /api/ai/parse-job |
Yes | Parse job posting with AI |
The "Paste job description" button in the application form sends the text to Claude API, which extracts:
- Company name
- Position
- Tech stack
- Salary (if mentioned)
Requires ANTHROPIC_API_KEY in backend .env.
See backend/.env.example for all required variables.
cd backend
bun run test24 tests covering auth (registration, login, JWT) and CRUD operations.
- Frontend: Vercel (
cd frontend && vercel) - Backend: Railway or Render (set env vars, use
npm run build && npm start) - Database: Railway PostgreSQL or Supabase