A comprehensive web application that helps users optimize their CVs for Applicant Tracking Systems (ATS) using AI-powered analysis and suggestions.
- File Upload Support: Upload CVs in PDF, DOC, and DOCX formats
- AI-Powered Analysis: Uses Grok AI to analyze CV content and structure
- Interactive Chatbot: Guided conversation flow for CV optimization
- Real-time Processing: WebSocket-based real-time updates
- ATS Optimization: Keyword enhancement, formatting improvements, and structure optimization
- Section Analysis: Detailed analysis of CV sections (contact info, experience, education, skills, etc.)
- Missing Information Detection: Identifies and prompts for missing critical information
- Responsive Design: Works on desktop and mobile devices
- Backend: Spring Boot 3.5.0, Java 21
- Database: MySQL 8.4.5
- Frontend: Thymeleaf, Bootstrap 5, JavaScript
- WebSocket: STOMP protocol for real-time communication
- File Processing: Apache POI (DOC/DOCX), PDFBox (PDF)
- AI Integration: Grok AI API
- Build Tool: Maven
- Java 21 or higher
- Maven 3.6+
- Docker (for MySQL database)
- Grok AI API key
The application uses MySQL running in a Docker container. Make sure you have the MySQL container running:
# Check if MySQL container is running
docker ps
# If not running, start it (assuming container name is 'mysql-db')
docker start mysql-db
# Verify the 'ats' database exists
docker exec -it mysql-db mysql -u root -proot -e "SHOW DATABASES;"Set up your Grok AI API key as an environment variable:
export GROK_API_KEY=your-actual-grok-api-key-hereOr update the application.properties file:
app.ai.grok.api-key=your-actual-grok-api-key-here# Clone the repository (if not already done)
cd /var/www/html/tekup/ats
# Build the application
mvn clean compile
# Run the application
mvn spring-boot:runThe application will start on http://localhost:8080
- Open your browser and navigate to
http://localhost:8080 - You should see the ATS CV Optimizer homepage
- Click "Start Optimizing" to access the chat interface
- The database tables should be automatically created
- Homepage:
http://localhost:8080- Overview and features - Chat Interface:
http://localhost:8080/chat- Main optimization interface
- Start Chat: Navigate to the chat interface
- Upload CV: Use the file upload area to upload your CV (PDF, DOC, or DOCX)
- AI Analysis: The system will automatically extract text and analyze your CV
- Review Sections: The AI will identify different CV sections and their completeness
- Get Suggestions: Receive specific recommendations for improvement
- Optimization: The system will provide optimized versions of your CV sections
- Download: Get your improved, ATS-friendly CV
- PDF:
.pdffiles - Microsoft Word:
.docand.docxfiles - File Size Limit: Maximum 10MB per file
- Real-time conversation with AI assistant
- File upload with drag-and-drop support
- Progress indicators for file processing
- Chat history preservation
- Contact Information: Email, phone, LinkedIn profile validation
- Professional Summary: Content quality and completeness check
- Work Experience: Job titles, companies, dates, descriptions analysis
- Education: Degree, institution, graduation year verification
- Skills: Technical and soft skills identification
- Additional Sections: Certifications, projects, languages, achievements
- Keyword Enhancement: Industry-specific keyword suggestions
- Format Standardization: ATS-friendly formatting
- Structure Improvement: Proper section organization
- Achievement Quantification: Adding metrics and numbers
- Missing Information Detection: Prompts for incomplete sections
POST /api/cv/upload- Upload CV fileGET /api/cv/list- Get user's uploaded CVsGET /api/cv/{cvId}/status- Check CV processing statusDELETE /api/cv/{cvId}- Delete uploaded CV
GET /api/optimization/{cvId}/sections- Get CV sectionsGET /api/optimization/{cvId}/results- Get optimization resultsPOST /api/optimization/{cvId}/optimize- Request optimization
GET /api/chat/history- Get chat message history- WebSocket endpoints for real-time messaging
spring.datasource.url=jdbc:mysql://localhost:3306/ats
spring.datasource.username=root
spring.datasource.password=rootspring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
app.file.upload-dir=./uploads
app.file.allowed-extensions=pdf,doc,docxapp.ai.grok.api-key=${GROK_API_KEY:your-grok-api-key-here}
app.ai.grok.base-url=https://api.x.ai/v1
app.ai.grok.model=grok-beta-
Database Connection Error
- Ensure MySQL container is running
- Check database credentials in
application.properties - Verify the 'ats' database exists
-
File Upload Issues
- Check file size (max 10MB)
- Ensure file format is supported (PDF, DOC, DOCX)
- Verify upload directory permissions
-
AI API Errors
- Verify Grok API key is set correctly
- Check API rate limits
- Ensure internet connectivity
-
WebSocket Connection Issues
- Check browser console for errors
- Verify WebSocket endpoint configuration
- Clear browser cache and cookies
Application logs are available in the console output. For debugging:
# Run with debug logging
mvn spring-boot:run -Dspring.profiles.active=debugsrc/
├── main/
│ ├── java/com/tekup/ats/
│ │ ├── config/ # Configuration classes
│ │ ├── controller/ # REST and web controllers
│ │ ├── dto/ # Data transfer objects
│ │ ├── entity/ # JPA entities
│ │ ├── repository/ # Data repositories
│ │ └── service/ # Business logic services
│ └── resources/
│ ├── static/ # CSS, JS, images
│ ├── templates/ # Thymeleaf templates
│ └── application.properties
- New CV Section Types: Add to
CvSection.SectionTypeenum - Additional File Formats: Extend
FileProcessingService - New AI Prompts: Modify
AiServicemethods - UI Enhancements: Update templates and static files
- File upload validation and sanitization
- Session-based user management
- Input validation for all user inputs
- Secure file storage with unique filenames
- API rate limiting (recommended for production)
- Asynchronous file processing
- Database connection pooling
- File cleanup for old uploads
- Caching for frequently accessed data
This project is developed for educational and demonstration purposes.
For issues and questions, please check the troubleshooting section or review the application logs for detailed error information.