A serverless web application that automates job searching, resume tailoring, and job application submission using AI and headless browser automation.
- Automated Job Searching: Scrapes job boards and company career pages
- AI-Powered Resume Tailoring: Automatically customizes resumes for each job application
- Automated Applications: Submits job applications using Playwright automation
- Application Tracking: Tracks application status and maintains audit trails
- REST API: Exposes APIs for frontend and CLI operations
- Serverless Architecture: Built entirely on AWS serverless services
The application is built using:
- API Gateway - HTTP API endpoints
- AWS Lambda - Serverless functions (Node.js 22)
- DynamoDB - Primary data store for users, jobs, and applications
- S3 - File storage for resumes and generated documents
- SQS - Queue system for background tasks
- EventBridge - Scheduled job scraping
- Secrets Manager - Secure storage for API keys
- CloudWatch - Logging and monitoring
.
├── infra/ # Serverless Framework configuration
├── services/
│ ├── api/ # REST API Lambda handlers
│ ├── worker/ # Background worker (scraping & automation)
│ ├── ai/ # AI service for resume tailoring
│ └── common/ # Shared utilities
├── web/ # Next.js frontend
├── tests/ # Unit and integration tests
└── .github/workflows/ # CI/CD pipelines
- Node.js 18+ and npm
- AWS CLI configured with appropriate credentials
- AWS account with permissions to create Lambda, DynamoDB, S3, SQS, etc.
- OpenAI API key (for resume tailoring)
- Clone the repository:
git clone <repository-url>
cd Job-applications-tracker- Install dependencies:
npm install
npm run install:all- Build all services:
npm run buildBefore deployment, create the required secrets:
# Set your AWS region
export AWS_REGION=us-east-1
export STAGE=dev
# Create OpenAI API key secret
aws secretsmanager create-secret \
--name job-applications-tracker-openai-api-key-${STAGE} \
--secret-string "your-openai-api-key-here"
# Create JWT secret
aws secretsmanager create-secret \
--name job-applications-tracker-jwt-secret-${STAGE} \
--secret-string "your-secure-random-jwt-secret"The application uses AWS Secrets Manager for sensitive configuration. Ensure the following are configured:
OPENAI_API_KEY_SECRET_ID- Name of the OpenAI API key secretJWT_SECRET- JWT secret for authentication (also in Secrets Manager)
cd infra
npm install
# Deploy to dev
npx serverless deploy --stage dev
# Deploy to prod
npx serverless deploy --stage prodexport AWS_PROFILE=your-profile
export STAGE=dev# From project root
npm run deploy:dev
# or
npm run deploy:prodAfter deployment, the API Gateway URL will be displayed. Example endpoints:
POST /signup- Create user accountGET /jobs- List jobs for userPOST /jobs/search- Trigger job searchPOST /applications- Create application (triggers tailor+apply)GET /applications/{id}- Get application statusPOST /upload/resume- Get presigned URL for resume upload
The Next.js frontend can be run locally:
cd web
npm install
npm run devSet the API URL in .env.local:
NEXT_PUBLIC_API_URL=https://your-api-gateway-url.execute-api.region.amazonaws.com/dev
Run all tests:
npm run testRun with coverage:
npm run test:coverage- Terms of Service: Automated scraping and application submission may violate the Terms of Service of job boards (LinkedIn, Indeed, etc.). Always check and comply with ToS.
- Robots.txt: Respect robots.txt files and scraping policies
- CAPTCHA: The system will mark applications requiring CAPTCHA as
needs_human_intervention- manual completion required - Rate Limiting: Be respectful of job board rate limits
- Privacy: The system handles PII - ensure compliance with GDPR, CCPA, etc.
For production use:
- Prefer official APIs when available
- Obtain explicit user permission
- Implement proper rate limiting
- Consider using user credentials for authenticated access
- CloudWatch Logs: All Lambda functions log to CloudWatch
- CloudWatch Metrics: Monitor function invocations, errors, and duration
- DynamoDB Metrics: Track read/write capacity and throttles
View logs:
cd infra
npx serverless logs -f api -tThis application uses serverless services with pay-per-use pricing. Estimated costs for moderate usage:
- Lambda: ~$5-20/month
- DynamoDB: ~$5-15/month
- S3: ~$1-5/month
- SQS: ~$1-3/month
- API Gateway: ~$3-10/month
Total: ~$15-53/month for moderate usage
- Check AWS credentials are configured
- Verify Secrets Manager secrets exist
- Check IAM permissions for the deployment role
- Check CloudWatch Logs for errors
- Verify environment variables are set correctly
- Check DynamoDB table permissions
- Verify S3 bucket exists and has correct permissions
- Create a feature branch
- Make changes and add tests
- Ensure all tests pass
- Submit a pull request
[Add your license here]
For issues and questions, please open an issue on GitHub.