A full-stack web application that allows users to upload their resumes, manage their profiles, and generate AI-enhanced resume content using AWS services.
- User Authentication: Secure sign-in/sign-up using AWS Cognito
- Profile Management: Create and manage personal profiles with job objectives
- Resume Upload: Upload PDF resumes to secure cloud storage
- AI Resume Generation: Generate enhanced resume content using AI models
- Resume Preview: View uploaded and generated resumes directly in the browser
- Secure Downloads: Download resumes with time-limited secure URLs
- Real-time Processing: Track AI processing status with progress indicators
- Responsive Design: Mobile-friendly interface with expandable sections
- HTML5/CSS3/JavaScript: Single-page application with modern UI
- AWS SDK for JavaScript: Direct integration with AWS services
- Progressive Web App: Responsive design with mobile support
- AWS API Gateway: RESTful API endpoints with JWT authentication
- AWS Lambda: Serverless functions for business logic
- AWS Cognito: User authentication and authorization
- Amazon S3: Secure file storage for resumes
- Amazon DynamoDB: User profile and metadata storage
- AWS Bedrock: AI model integration for resume enhancement
- AWS CloudFormation: Infrastructure as Code (IaC)
- Amazon CloudFront: Global content delivery network
- AWS IAM: Fine-grained access control
- AWS Account with appropriate permissions
- AWS CLI configured
- Basic understanding of AWS services
- Modern web browser with JavaScript enabled
- Model Access: Request access to Claude 3.7 models in US East 1 region via AWS Bedrock console
Upload the required Lambda layers to an S3 bucket:
- Use zip files:
lambda-pdf-layer.zipandpypdf2-layer.zip - Upload to S3 bucket under
layers/folder
Lambda layer zip files uploaded to S3 bucket under layers/ folder
Deploy the infrastructure using AWS Console in US East 1 region:
- Navigate to CloudFormation in AWS Console (ensure you're in us-east-1 region)
- Create new stack using
cloudformation-template.yaml
Upload the CloudFormation template in the AWS Console
Configure stack name and S3 bucket with Lambda layers
Upload the frontend to the created S3 bucket and configure variables:
- Navigate to S3 Console
- Find bucket named
smart-job-resume-<accountID> - Upload
index.htmlfile to the bucket - Configure these variables using the outputs information from the CloudFormation template:
const userclient = '<example>';
const userpool = 'us-east-1_<example>';
const baseUrl = 'https://<example>.execute-api.us-east-1.amazonaws.com';
const cognitoDomain = 'https://auth-event-driven-agents-<ACCOUNT_ID>.auth.us-east-1.amazoncognito.com';
const redirectUri = 'https://<example>.cloudfront.net';To test the application locally before deployment:
- Navigate to the directory containing
index.html - Start a Python HTTP server:
python -m http.server
- Open your browser and go to
http://localhost:8000 - The application will be served locally for testing
Set up SNS filter policy for email notifications:
- Navigate to SNS in AWS Console
- Find the created SNS topic
Locate the SNS topic in the AWS Console
- Add subscription filter policy:
{
"user_email": [
"your-email@domain.com"
]
}
Configure the SNS filter policy with your email
The application requires these Lambda layers:
lambda-pdf-layer.zip: PDF processing librariespypdf2-layer.zip: PyPDF2 library for PDF manipulation
The Lambda functions use these environment variables:
BUCKET_NAME: S3 bucket for file storageTABLE_NAME: DynamoDB table nameCOGNITO_USER_POOL_ID: Cognito User Pool ID
| Method | Endpoint | Description |
|---|---|---|
| POST | /profile |
Save user profile |
| POST | /get-profile |
Retrieve user profile |
| POST | /get-upload-url |
Get S3 presigned upload URL |
| POST | /get-resume-url |
Get S3 presigned download URL |
| POST | /generate |
Trigger AI resume generation |
| POST | /list-generated-resumes |
List user's generated resumes |
- Sign Up: Create a new account or sign in with existing credentials
- Complete Profile: Fill in your personal information and job objectives
- Upload Resume: Upload your current resume in PDF format
- Generate Content: Use AI to enhance your resume content
- Preview & Download: View and download your resumes
- Save personal information (name, email, objectives)
- Data synced between local storage and cloud
- Automatic profile loading on sign-in
- Drag-and-drop PDF upload
- Secure S3 storage with user-specific folders
- Automatic file validation and processing
- Real-time processing status with progress bar
- Enhanced resume content based on your profile and uploaded resume
- Multiple generated versions stored separately
- Preview resumes directly in the browser
- Secure download with time-limited URLs
- Organized view of uploaded and generated resumes
- JWT Authentication: Secure API access with Cognito tokens
- User Isolation: Each user can only access their own data
- Presigned URLs: Time-limited access to S3 objects
- Input Validation: Server-side validation of all inputs
- CORS Protection: Proper cross-origin resource sharing configuration
| Service | Purpose |
|---|---|
| Cognito | User authentication and management |
| API Gateway | RESTful API with JWT authorization |
| Lambda | Serverless business logic |
| S3 | File storage and static website hosting |
| DynamoDB | User profile and metadata storage |
| CloudFront | Content delivery network |
| Bedrock | AI model integration |
| IAM | Access control and permissions |
| CloudFormation | Infrastructure deployment |
resume_generator/
├── index.html # Main application file
├── cloudformation-template.yaml # Infrastructure as Code
├── images/ # Screenshots and documentation images
│ ├── image_1.png
│ ├── image_2.png
│ ├── image_3.png
│ ├── image_4.png
│ └── image_5.png
├── layers/ # Lambda layer zip files
│ ├── lambda-pdf-layer.zip
│ └── pypdf2-layer.zip
└── README.md # This file
- User Authentication: Cognito handles sign-in/sign-up
- Profile Management: Data stored in DynamoDB, cached locally
- File Upload: Frontend → API Gateway → Lambda → S3
- AI Processing: Lambda triggers Bedrock models for content generation
- File Access: Presigned URLs provide secure, time-limited access
Authentication Errors
- Verify Cognito configuration in frontend
- Check JWT token expiration
- Ensure proper CORS settings
Upload Failures
- Verify S3 bucket permissions
- Check file size limits (default: 10MB)
- Ensure proper content-type headers
AI Generation Issues
- Check Bedrock model availability in your region
- Verify IAM permissions for Bedrock access
- Monitor Lambda function logs
- CloudWatch Logs: Monitor Lambda function execution
- API Gateway Logs: Track API request/response patterns
- S3 Access Logs: Monitor file upload/download activity
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions:
- Create an issue in the GitHub repository
- Check AWS documentation for service-specific questions
- Review CloudWatch logs for debugging
Built with ❤️ using AWS Serverless Technologies
