An intelligent and scalable job application automation system that streamlines the process of sending personalized job applications to HR contacts using Apache Kafka message queues and Node.js. Perfect for job seekers looking to automate their application process while maintaining personalization and professionalism.
- π§ Bulk Email Processing: Send up to 500 emails per day within Gmail API limits
- π CSV Data Processing: Import and process HR contact data from Google Sheets exports
- β‘ Kafka Message Queue: Reliable, scalable email processing with Apache Kafka
- π³ Dockerized Infrastructure: Complete containerized setup for easy deployment
- π Email Templates: Customizable email templates for personalized applications
- π Resume Attachment: Automatic PDF resume attachment to applications
- π Rate Limiting: Built-in rate limiting to respect email service limits
- Backend: Node.js, Express.js, TypeScript
- Message Queue: Apache Kafka + Zookeeper
- Email Service: Nodemailer with Gmail integration
- Containerization: Docker & Docker Compose
- Data Processing: CSV parsing and processing
- API Testing: Postman collection included
Before running this project, ensure you have the following installed:
- Node.js (v16 or higher) - Download here
- Docker Desktop - Download here
- Git - Download here
- Gmail Account with App Password (if using 2FA)
- Postman (optional, for API testing) - Download here
git clone https://github.com/harshal255/Automated-Job-Application-System-Using-Kafka---Node.js
cd Automated-Job-Application-System-Using-Kafka---Node.js
npm install
-
Copy the example environment file:
cp .env.example .env
-
Configure your environment variables in
.env
:# Email Configuration EMAIL_USER=[email protected] EMAIL_PASSWORD=xxxxxxxxxxxxxxxx # Application Configuration PORT=3000
# Stop any existing containers (optional)
docker compose down
# Start Kafka and Zookeeper containers
docker compose up
#or
docker compose up -d
β³ Wait for Kafka to fully initialize (30-60 seconds) before proceeding.
Open a new terminal and run:
npm run dev
- Open Postman
- Click "Import" button
- Navigate to
src/postman-collection/
directory - Import the JSON collection file
- Start testing the APIs!
π Congratulations! Your application is now running at http://localhost:3000
π¦ Automated-Job-Application-System
ββ π .env.example # Environment variables template
ββ π .gitignore # Git ignore rules
ββ π README.md # Project documentation
ββ π docker-cli.txt # Docker commands reference
ββ π docker-compose.yml # Docker services configuration
ββ π package.json # Node.js dependencies and scripts
ββ π package-lock.json # Dependency lock file
ββ π tsconfig.json # TypeScript configuration
ββ π data/ # Data files and assets
β ββ π Harshal_Resume.pdf # Resume attachment
β ββ π company_wise_hr_contacts.csv # HR contacts database
β ββ π talent_acquisition_database.csv # Talent acquisition data
ββ π src/ # Source code
ββ π config/ # Configuration files
β ββ π index.ts # Main application config
β ββ π kafka-client.ts # Kafka client configuration
ββ π controllers/ # Request handlers
β ββ π recruter.controller.ts # Recruiter operations
β ββ π send-email.controller.ts # Email sending logic
β ββ π talentAcquisition.controller.ts # Talent acquisition operations
ββ π helpers/ # Utility functions
β ββ π index.ts # Common helper functions
ββ π postman-collection/ # API testing collection
β ββ π *.json # Postman collection files
ββ π routes/ # API route definitions
β ββ π recruters.routes.ts # Recruiter routes
β ββ π send-email.routes.ts # Email routes
β ββ π talentAcquisition.route.ts # Talent acquisition routes
ββ π services/ # Business logic layer
β ββ π email-service.ts # Email service implementation
ββ π templates/ # Email templates
β ββ π email.template.ts # Email template definitions
ββ π utils/ # Kafka utilities
β ββ π kafkaAdmin.ts # Kafka admin operations
β ββ π kafkaConsumer.ts # Message consumer logic
β ββ π kafkaProducer.ts # Message producer logic
ββ π index.ts # Application entry point
ββ π types.ts # TypeScript type definitions
# Development
npm run dev # Start development server with hot reload
npm run build # Build TypeScript to JavaScript
npm start # Start production server
npm run lint # Run ESLint for code quality
npm run test # Run test suite
# Docker Management
docker compose up # Start Kafka infrastructure with logs
docker compose up -d # Start Kafka infrastructure in background
docker compose down # Stop all containers
docker compose down -v # Stop containers and remove volumes
docker compose logs # View container logs
- Go to Google Account Security
- Enable 2-Step Verification
- Go to Google Account settings
- Security β 2-Step Verification β App passwords
- Select "Mail" and generate password
- Copy the 16-character password
EMAIL_USER=[email protected]
EMAIL_PASS=your-16-character-app-password
# View running containers
docker ps
# View all containers (including stopped)
docker ps -a
# View container logs
docker compose logs kafka
docker compose logs zookeeper
# Stop specific service
docker compose stop kafka
# Restart services
docker compose restart
# Remove all containers and volumes
docker compose down -v --remove-orphans
# Rebuild containers
docker compose up --build
# Access Kafka container
docker exec -it kafka bash
# List Kafka topics
docker exec kafka kafka-topics --list --bootstrap-server localhost:9092
# Create a topic
docker exec kafka kafka-topics --create --topic email-queue --bootstrap-server localhost:9092
- Update Resume: Replace
data/Harshal_Resume.pdf
with your resume - Prepare CSV: Format your HR contacts CSV with columns:
name
: HR contact nameemail
: HR email addresscompany
: Company nameposition
: Job position (optional)
Edit src/templates/email.template.ts
to customize your email content:
export const emailTemplate = {
subject: "Application for {position} at {company}",
body: `
Dear {name},
I hope this email finds you well. I am writing to express my interest in the {position} position at {company}.
[Your personalized message here]
Best regards,
[Your name]
`
};
- Gmail Limits: 500 emails/day for free accounts, 2000/day for paid
- Respect Recipients: Always include unsubscribe options
- Data Privacy: Ensure HR contact data is obtained ethically and legally
- Personalization: Customize emails to avoid spam filters
- Use professional email templates
- Include relevant skills and experience
- Attach updated resume
- Follow up appropriately
- Track application responses
- Monitor Kafka consumer lag
- Implement proper error handling
- Use environment-specific configurations
- Regular backup of important data
# Solution: Restart Kafka containers
docker compose down
docker compose up -d
# Wait 60 seconds for full initialization
# Solution: Kill process using the port
lsof -ti:3000 | xargs kill -9
# Or change PORT in .env file
- β Verify Gmail App Password is correct
- β Check 2FA is enabled on Gmail account
- β Ensure EMAIL_USER and EMAIL_PASS are set correctly
# Reset Docker environment
docker system prune -a
docker compose down -v
docker compose up --build
- β Ensure CSV has proper headers
- β Check file encoding (UTF-8 recommended)
- β Verify file path in data/ directory
If you encounter issues:
- Check the troubleshooting section above
- Review container logs:
docker compose logs
- Open an issue on GitHub with detailed error information
- Contact the maintainer (details below)
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes
- Add tests if applicable
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to the branch:
git push origin feature/amazing-feature
- Open a Pull Request
- Follow TypeScript best practices
- Add proper error handling
- Include documentation for new features
- Test your changes thoroughly
- Follow the existing code style
- π§ Additional email service providers
- π Enhanced analytics and reporting
- π¨ Better email templates
- π Enhanced security features
- π± Web dashboard interface
- π§ͺ Comprehensive testing suite
This project is licensed under the MIT License - see the LICENSE file for details.
Harshal Kahar
- π GitHub: @harshal255
- πΌ LinkedIn: Harshal Kahar
- π¦ Twitter: @harshal_kahar
- π§ Email: [email protected]
- Apache Kafka community for the excellent message queue system
- Nodemailer team for the robust email library
- Docker team for containerization technology
- All contributors who help improve this project
If this project helped you land your dream job or streamline your application process:
- β Star this repository on GitHub
- π΄ Fork and contribute to make it even better
- π’ Share it with fellow job seekers
- π¬ Provide feedback and suggestions
Happy Job Hunting! π― May this tool help you land your dream job!
Built with β€οΈ by Harshal | Last updated: June 2025