A production-ready Job & Internship Application Tracker Backend Application built with Spring Boot 3, Spring Security (JWT), Spring Data JPA, PostgreSQL, H2 In-Memory Database, Docker, Spring Mail, and Swagger UI.
π Live Deployed Application URL: https://job-and-internship-application-tracker.onrender.com
π Live Interactive Swagger UI: https://job-and-internship-application-tracker.onrender.com/swagger-ui.html
This repository is crafted in a beginner student-friendly style with explicit getters, setters, constructors, builders, and detailed Hinglish comments throughout the codebase to help students understand, learn, and present Spring Boot backend architecture easily!
graph TD
Client[Client / Postman / Swagger / Frontend] --> REST[REST Controllers]
REST --> AuthCtrl[Auth Controller]
REST --> AppCtrl[Job Application Controller]
REST --> DashCtrl[Dashboard Controller]
REST --> RemindCtrl[Reminder Controller]
AuthCtrl --> Sec[Spring Security + JWT]
AppCtrl --> AppService[Job Application Service]
DashCtrl --> DashService[Dashboard Service]
RemindCtrl --> MailService[Email Reminder Service]
AppService --> FileService[File Storage Service]
AppService --> Repo[JPA Repositories]
DashService --> Repo
Sec --> UserRepo[User Repository]
Repo --> DB[(PostgreSQL / H2 Database)]
FileService --> Storage[(Local File Storage ./uploads)]
MailService --> SMTP[SMTP Server / Spring Mail]
f:\Job & Internship Application Tracker
βββ .mvn/ # Maven Wrapper
βββ uploads/ # Resume file uploads storage
βββ src/
β βββ main/
β β βββ java/com/tracker/job/
β β β βββ JobTrackerApplication.java
β β β βββ config/ # Security, Swagger, Mail, Web Config
β β β β βββ SecurityConfig.java
β β β β βββ OpenApiConfig.java
β β β β βββ DataInitializer.java
β β β βββ controller/ # REST API Controllers
β β β β βββ AuthController.java
β β β β βββ JobApplicationController.java
β β β β βββ DashboardController.java
β β β β βββ ReminderController.java
β β β βββ dto/ # Request & Response DTOs
β β β β βββ request/
β β β β β βββ RegisterRequest.java
β β β β β βββ LoginRequest.java
β β β β β βββ JobApplicationRequest.java
β β β β β βββ StatusUpdateRequest.java
β β β β βββ response/
β β β β βββ AuthResponse.java
β β β β βββ UserDto.java
β β β β βββ JobApplicationResponse.java
β β β β βββ DashboardStatsResponse.java
β β β β βββ ApiResponse.java
β β β β βββ PagedResponse.java
β β β βββ exception/ # Custom Exceptions & Global Handler
β β β β βββ ResourceNotFoundException.java
β β β β βββ BadRequestException.java
β β β β βββ FileStorageException.java
β β β β βββ UnauthorizedAccessException.java
β β β β βββ ErrorDetails.java
β β β β βββ GlobalExceptionHandler.java
β β β βββ model/ # JPA Entities & Enums
β β β β βββ User.java
β β β β βββ Role.java
β β β β βββ JobApplication.java
β β β β βββ ApplicationStatus.java
β β β β βββ JobType.java
β β β βββ repository/ # Spring Data Repositories
β β β β βββ UserRepository.java
β β β β βββ JobApplicationRepository.java
β β β βββ security/ # JWT & Spring Security Utilities
β β β β βββ JwtTokenProvider.java
β β β β βββ JwtAuthenticationFilter.java
β β β β βββ JwtAuthenticationEntryPoint.java
β β β β βββ CustomUserDetailsService.java
β β β βββ service/ # Service Layer & Implementations
β β β βββ AuthService.java
β β β βββ JobApplicationService.java
β β β βββ DashboardService.java
β β β βββ EmailReminderService.java
β β β βββ FileStorageService.java
β β β βββ impl/
β β β βββ AuthServiceImpl.java
β β β βββ JobApplicationServiceImpl.java
β β β βββ DashboardServiceImpl.java
β β β βββ EmailReminderServiceImpl.java
β β β βββ FileStorageServiceImpl.java
β β βββ resources/
β β βββ application.properties
β β βββ application-dev.properties
β βββ test/ # Unit & Integration Tests
βββ Dockerfile # Multi-stage Docker build
βββ docker-compose.yml # App + PostgreSQL orchestration
βββ pom.xml # Dependencies & plugins
βββ Job_Tracker_Postman_Collection.json # Importable Postman collection
-
User Authentication & Authorization:
- Secure Registration & Login endpoints.
- Stateless JWT (JSON Web Token) Bearer authentication.
- Role-based Access Control (
ROLE_USER,ROLE_ADMIN). - BCrypt Password Hashing.
-
Job Application Tracking (CRUD):
- Add, View, Update, and Delete Job/Internship Applications.
- Tracking fields: Company Name, Job Title, Job Type (
FULL_TIME,INTERNSHIP,PART_TIME,CONTRACT), Location, Salary/Stipend, Applied Date, Deadline, Interview Date, Notes, and Job Posting Link. - Application Lifecycle Status Workflow:
APPLIEDβOA(Online Assessment) βINTERVIEWβSELECTED/REJECTED.
-
Multi-Criteria Search, Filtering & Pagination:
- Search applications by Company, Job Title, or Location.
- Filter applications by status (
APPLIED,OA,INTERVIEW,SELECTED,REJECTED). - Paginated & Sorted REST API responses (
Pageable,Sort).
-
Resume Attachment Handling:
- Upload PDF, DOC, or DOCX resume files for specific applications.
- Secure local file storage (
./uploads/resumes/). - Download attached resume files via REST API.
- Delete resume attachments.
-
Dashboard Analytics & Statistics:
- Total application metrics.
- Status breakdown counts (Applied, OA, Interview, Selected, Rejected).
- Calculated Response Rate % & Selection Rate %.
- Upcoming deadlines widget (next 7 days).
- Recent applications list.
-
Automated Email Reminders:
- Scheduled background cron job (
@Scheduled(cron = "0 0 9 * * ?")) checking application deadlines within 48 hours and sending HTML formatted reminder emails via Spring Boot Starter Mail. - Test email trigger endpoint.
- Scheduled background cron job (
-
Developer & Deployment Assets:
- Swagger UI interactive documentation (
/swagger-ui.html). - H2 Web Console (
/h2-console). - Multi-stage Dockerfile and docker-compose.yml.
- Ready-to-import Postman Collection (
Job_Tracker_Postman_Collection.json).
- Swagger UI interactive documentation (
- Java 17 or higher
- Maven (or use included
./mvnw.cmdwrapper) - Docker & Docker Compose (Optional, for containerized run)
# Clone the repository
git clone https://github.com/krishna3163/Job-And-Internship-Application-Tracker.git
cd Job-And-Internship-Application-Tracker
# Run using Maven Wrapper
.\mvnw.cmd spring-boot:runOnce started:
- Swagger UI Documentation: http://localhost:8080/swagger-ui.html
- H2 Database Console: http://localhost:8080/h2-console (JDBC URL:
jdbc:h2:mem:jobtrackerdb, Username:sa, Password: blank)
docker-compose up --buildIss project ko Render.com par 100% Free deploy karne ke liye simple steps:
- Render.com par account banayein aur New + > Web Service select karein.
- Apne GitHub repository
krishna3163/Job-And-Internship-Application-Trackerko connect karein. - Configuration settings set karein:
- Name:
job-tracker-backend - Language / Environment:
Docker - Region:
Singapore(or nearest) - Instance Type:
Free
- Name:
- Environment Variables add karein:
SPRING_PROFILES_ACTIVE:dev(H2 Database ke liye instant deployment without external DB)APP_JWT_SECRET:9a2f8c4e6b1d3a5f7e9c2b4a6d8f1e3c5a7b9d2e4f6a8c1e3b5d7f9a2c4e6b1d
- Create Web Service par click karein. Application live URL https://job-and-internship-application-tracker.onrender.com par start ho jaayegi! π
On application startup, demo user and 5 sample applications (Google, Microsoft, Amazon, Flipkart, Adobe) are automatically created:
- Username:
demo_student - Email:
user@example.com - Password:
password123
Agar aap beginner hain aur check karna chahte hain ki APIs live kaam kar rahi hain ya nahi, to Swagger UI sabse simple interactive testing tool hai!
Browser me live URL ya local link kholein:
- Live Render URL: https://job-and-internship-application-tracker.onrender.com/swagger-ui.html
- Local URL: http://localhost:8080/swagger-ui.html
- Section
1. AuthenticationmePOST /api/v1/auth/loginpar click karein. - Top-right side me Try it out button dabayein.
- Request body me sample student credentials pass karein:
{ "usernameOrEmail": "user@example.com", "password": "password123" } - Execute button par click karein.
- Response me
200 OKmilega aur JSON data meaccessToken(long JWT string) dikhega. Us token string ko Copy kar lein.
- Swagger page ke bilkul top-right me π’ Authorize π button par click karein.
- Value box me copied
accessTokenstring paste karein. - Authorize click karke Close dabayein. (Ab sabhi protected endpoints aapke token se automatically verify ho jayenge!)
- Dashboard Metrics Check: Section
3. Dashboard Analytics->GET /api/v1/dashboard/stats-> Try it out -> Execute. Aapko live statistics (totalApplications: 5, response rate80.0%, status counts) return honge! - Job Applications Search Check: Section
2. Job Applications Management->GET /api/v1/applications-> Execute. Saari job applications paginated JSON format me fetch hongi!
| Method | Endpoint | Description | Public / Protected |
|---|---|---|---|
POST |
/api/v1/auth/register |
Register new user account | Public |
POST |
/api/v1/auth/login |
Login user & receive JWT token | Public |
GET |
/api/v1/auth/me |
Fetch logged-in user profile | Protected (JWT) |
| Method | Endpoint | Description | Public / Protected |
|---|---|---|---|
POST |
/api/v1/applications |
Create new job application | Protected (JWT) |
GET |
/api/v1/applications |
Get paginated applications (with search & filter) | Protected (JWT) |
GET |
/api/v1/applications/{id} |
Get application details by ID | Protected (JWT) |
PUT |
/api/v1/applications/{id} |
Update application details | Protected (JWT) |
PATCH |
/api/v1/applications/{id}/status |
Quick status transition (APPLIED β OA β INTERVIEW) |
Protected (JWT) |
DELETE |
/api/v1/applications/{id} |
Delete application | Protected (JWT) |
POST |
/api/v1/applications/{id}/resume |
Upload & attach PDF/DOCX resume | Protected (JWT) |
GET |
/api/v1/applications/{id}/resume |
Download attached resume file | Protected (JWT) |
DELETE |
/api/v1/applications/{id}/resume |
Remove attached resume | Protected (JWT) |
| Method | Endpoint | Description | Public / Protected |
|---|---|---|---|
GET |
/api/v1/dashboard/stats |
Fetch application metrics, status counts & rates | Protected (JWT) |
| Method | Endpoint | Description | Public / Protected |
|---|---|---|---|
POST |
/api/v1/reminders/test-email |
Trigger test email to logged-in user | Protected (JWT) |
POST |
/api/v1/reminders/trigger-deadlines-job |
Manually run deadline reminder scan | Protected (JWT) |
- Open Postman and click Import.
- Select
Job_Tracker_Postman_Collection.jsonfrom project root directory. - Execute the
Login Userrequest under 1. Authentication. - The test script will automatically capture and save the Bearer JWT token into
{{jwt_token}}for all subsequent requests!
/**
* JobApplicationServiceImpl: Job Applications business logic implementation.
*/
@Service
public class JobApplicationServiceImpl implements JobApplicationService {
// Helper: Application ID verify karna aur Security Ownership Check karna
private JobApplication getApplicationAndVerifyUser(Long applicationId, User user) {
JobApplication application = jobApplicationRepository.findById(applicationId)
.orElseThrow(() -> new ResourceNotFoundException("JobApplication", "id", applicationId));
// Security Check: Verify that logged-in user owns this job application
if (!application.getUser().getId().equals(user.getId())) {
throw new UnauthorizedAccessException("Aap is job application ko access ya modify nahi kar sakte!");
}
return application;
}
}- Krishna Kumar (@krishna3163)