Skip to content

Lets-code-with-us/CareerCaster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Automated Job Application System

Node.js TypeScript Docker Kafka License

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.

✨ Features

  • πŸ“§ 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

πŸ› οΈ Tech Stack

  • 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

πŸ“‹ Prerequisites

Before running this project, ensure you have the following installed:

πŸš€ Quick Start Guide

Step 1: Clone the Repository

git clone https://github.com/harshal255/Automated-Job-Application-System-Using-Kafka---Node.js
cd Automated-Job-Application-System-Using-Kafka---Node.js

Step 2: Install Dependencies

npm install

Step 3: Environment Configuration

  1. Copy the example environment file:

    cp .env.example .env
  2. Configure your environment variables in .env:

    # Email Configuration
    EMAIL_USER=[email protected]
    EMAIL_PASSWORD=xxxxxxxxxxxxxxxx
    
    # Application Configuration
    PORT=3000

Step 4: Start Kafka Infrastructure

# 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.

Step 5: Start the Application

Open a new terminal and run:

npm run dev

Step 6: Import Postman Collection (Optional)

  1. Open Postman
  2. Click "Import" button
  3. Navigate to src/postman-collection/ directory
  4. Import the JSON collection file
  5. Start testing the APIs!

πŸŽ‰ Congratulations! Your application is now running at http://localhost:3000

πŸ“ Project Structure

πŸ“¦ 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

πŸ”§ Available Scripts

# 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

πŸ”’ Gmail Setup Guide

Step 1: Enable 2-Factor Authentication

  1. Go to Google Account Security
  2. Enable 2-Step Verification

Step 2: Generate App Password

  1. Go to Google Account settings
  2. Security β†’ 2-Step Verification β†’ App passwords
  3. Select "Mail" and generate password
  4. Copy the 16-character password

Step 3: Update Environment Variables

EMAIL_USER=[email protected]
EMAIL_PASS=your-16-character-app-password

🐳 Docker Management

Useful Docker Commands

# 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

Kafka Management

# 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

πŸ“ Usage Examples

1. Preparing Your Data

  1. Update Resume: Replace data/Harshal_Resume.pdf with your resume
  2. Prepare CSV: Format your HR contacts CSV with columns:
    • name: HR contact name
    • email: HR email address
    • company: Company name
    • position: Job position (optional)

2. Customizing Email Templates

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]
  `
};

⚠️ Important Notes & Best Practices

Rate Limits & Compliance

  • 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

Email Best Practices

  • Use professional email templates
  • Include relevant skills and experience
  • Attach updated resume
  • Follow up appropriately
  • Track application responses

Technical Considerations

  • Monitor Kafka consumer lag
  • Implement proper error handling
  • Use environment-specific configurations
  • Regular backup of important data

πŸ› Troubleshooting

Common Issues & Solutions

πŸ”΄ Kafka Connection Error

# Solution: Restart Kafka containers
docker compose down
docker compose up -d
# Wait 60 seconds for full initialization

πŸ”΄ Port Already in Use

# Solution: Kill process using the port
lsof -ti:3000 | xargs kill -9
# Or change PORT in .env file

πŸ”΄ Email Authentication Error

  • βœ… Verify Gmail App Password is correct
  • βœ… Check 2FA is enabled on Gmail account
  • βœ… Ensure EMAIL_USER and EMAIL_PASS are set correctly

πŸ”΄ Docker Issues

# Reset Docker environment
docker system prune -a
docker compose down -v
docker compose up --build

πŸ”΄ CSV Processing Error

  • βœ… Ensure CSV has proper headers
  • βœ… Check file encoding (UTF-8 recommended)
  • βœ… Verify file path in data/ directory

Getting Help

If you encounter issues:

  1. Check the troubleshooting section above
  2. Review container logs: docker compose logs
  3. Open an issue on GitHub with detailed error information
  4. Contact the maintainer (details below)

🀝 Contributing

We welcome contributions! Here's how you can help:

Getting Started

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes
  4. Add tests if applicable
  5. Commit your changes: git commit -m 'Add amazing feature'
  6. Push to the branch: git push origin feature/amazing-feature
  7. Open a Pull Request

Contribution Guidelines

  • Follow TypeScript best practices
  • Add proper error handling
  • Include documentation for new features
  • Test your changes thoroughly
  • Follow the existing code style

Areas for Contribution

  • πŸ”§ Additional email service providers
  • πŸ“Š Enhanced analytics and reporting
  • 🎨 Better email templates
  • πŸ”’ Enhanced security features
  • πŸ“± Web dashboard interface
  • πŸ§ͺ Comprehensive testing suite

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ‘¨β€πŸ’» Author & Contact

Harshal Kahar

πŸ™ Acknowledgments

  • 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

⭐ Support the 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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published