A RESTful backend API for the TrackJobs application — a job application tracking system built with NestJS, TypeScript, and PostgreSQL.
https://trackjobs-api.onrender.com
Service spins down after inactivity on free tier. First request may take ~30 seconds.
- Framework: NestJS + TypeScript
- Database: PostgreSQL (Supabase)
- ORM: TypeORM
- Auth: JWT (httpOnly cookies) + Refresh Token
- AI: Claude API (Anthropic)
- Logging: Winston
- Documentation: Swagger / OpenAPI
- Containerization: Docker Compose (local development)
- JWT authentication with httpOnly cookies
- Refresh token support with "Remember Me" option
- Full CRUD for job applications
- Kanban-style status management (Applied, Interview, Offer, Rejected)
- Route protection with Guards
- Global exception filter with standardized error responses
- Request/response logging with Winston
- Input validation with class-validator and DTOs
- API documentation with Swagger UI
- CORS configuration for cross-origin requests
- Claude AI-powered CV analysis — compatibility scoring, strengths, weaknesses, and actionable recommendations
- Cover letter generation with streaming response
- Role-based access control (RBAC)
- Database migrations
- Unit and E2E tests
src/
├── common/
│ ├── decorators/
│ ├── filters/
│ ├── guards/
│ ├── interceptors/
│ └── logger/
├── config/
├── modules/
│ ├── ai/
│ ├── applications/
│ ├── auth/
│ └── users/
├── app.module.ts
└── main.ts
- Node.js 18+
- Docker & Docker Compose
- npm
git clone https://github.com/fffset/trackjobs-api
cd trackjobs-api
npm installCreate a .env file in the root directory:
DATABASE_URL=postgresql://user:password@host:5432/dbname
JWT_SECRET=your_jwt_secret
REFRESH_TOKEN_SECRET=your_refresh_secret
NODE_ENV=development
FRONTEND_URL=http://localhost:3000
ANTHROPIC_API_KEY=your_anthropic_api_key
ANTHROPIC_MODEL=claude-sonnet-4-6# Start PostgreSQL with Docker
docker-compose up -d
# Start the API
npm run start:devAPI will be available at http://localhost:8000
Swagger UI available at http://localhost:8000/api/docs
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/register | Register new user |
| POST | /auth/login | Login |
| POST | /auth/logout | Logout |
| POST | /auth/refresh | Refresh access token |
| GET | /auth/me | Get current user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /applications | Get all applications |
| POST | /applications | Create application |
| PATCH | /applications/:id | Update application |
| DELETE | /applications/:id | Delete application |
| Method | Endpoint | Description |
|---|---|---|
| POST | /ai/analyze-cv | Analyze CV against job description |
| POST | /ai/cover-letter | Generate cover letter (streaming) |