Revolutionizing Hiring with Postmark and Amazon Bedrock Nova Premier Model
This is a submission for the Postmark Challenge: Inbox Innovators.
What I Built
I've created an enterprise-grade AI-powered resume analysis system that automatically processes resume attachments from email using Postmark's inbound email parsing capabilities. The system analyzes resumes using Amazon Bedrock's Nova Premier AI model and provides detailed insights through a beautiful web dashboard with advanced search and filtering capabilities.
The system transforms the hiring process by:
- Automatically extracting and analyzing resumes from email attachments
- Providing AI-powered scoring and categorization of candidates
- Offering a comprehensive dashboard with powerful search and filtering
- Sending email notifications with analysis results via Postmark
(Note: The resumes and names shown in the demo and images are fictional)
Live Demo
🔑 Login Credentials:
• URL: http://postmark-demo.viaan.tech
• Username: postmark-demo
• Email: [email protected]
• Password: DemoUser123
For a limited time, you can explore my live, fully functional serverless AWS application at the above URL, by sending an email with a resume attachment to [email protected]
(Remember to replace with your Postmark-configured email when testing it on your own AWS infrastructure).
Testing Instructions
- Email Testing: Send an email with a resume PDF attachment to the configured Postmark email address
-
Sample Resumes: Use the provided sample fictional resumes in the
/samples
directory - Receive Notifications: You'll receive an email notification with the analysis results. You will not be able to receive the Postmark's rich HTML email when using my demo site, since the email is configured to my .tech domain. However, in the section below, I have provided an email screenshot how this AI analysis email looks like.
-
Dashboard Access: View all analyzed resumes at
https://your-amplify-url.amplifyapp.com
Screenshots
Enterprise-grade serverless architecture with AI-powered resume analysis and email notifications
Code Repository
How I Built It
Tech Stack
- Frontend: HTML5, Tailwind CSS, Alpine.js (responsive dashboard hosted on AWS Amplify)
- Backend: AWS Serverless (Lambda, API Gateway, AWS AppSync)
- API: GraphQL with AWS AppSync
- Authentication: AWS Cognito
- Database: Amazon DynamoDB
- Storage: Amazon S3
- AI/ML: Amazon Bedrock Nova Premier
- Email Processing: Postmark for inbound parsing and outbound notifications
- Infrastructure as Code: AWS CDK (TypeScript)
Postmark Integration
Postmark works seamlessly with corporate email systems, making it an ideal solution for businesses of all sizes, but it didn't work with my gmail account. After reaching out to the DEV team about this challenge, they were kind enough to provide me with a complimentary DEV++ membership for one year that includes 2 free domains (.tech and .fun), which helped me test this integration thoroughly for this blog post.
Note: While your Postmark account is in test mode, you can only send and process 100 emails, which is sufficient for testing but requires an upgrade for production use.
The system leverages Postmark in two powerful ways:
1. Inbound Email Processing
I configured Postmark's inbound webhook to trigger my AWS API Gateway endpoint whenever an email with a resume attachment arrives. The webhook payload is processed by a Lambda function that:
- Extracts the resume attachment
- Stores it in Amazon S3
- Triggers the AI analysis process
https://your-api-gateway-id.execute-api.us-east-1.amazonaws.com/prod/webhook
Domain Configuration
I configured Postmark as my email server for the subdomain mail.viaan.tech by adding the appropriate MX records as per Postmark documentation.
This setup allows the system to receive emails at addresses like [email protected] and process them automatically through the Postmark webhook.
2. Outbound Notifications
After the AI analyzes each resume, the system sends a beautifully formatted email notification using Postmark's API:
def send_postmark_email(analysis):
"""Send email notification via Postmark API"""
try:
candidate_name = analysis.get('candidate_name', 'Unknown Candidate')
overall_score = analysis.get('overall_score', 0)
html_body = create_html_email_body(analysis)
email_data = {
"From": FROM_EMAIL,
"To": NOTIFICATION_EMAIL,
"Subject": f"🎯 Resume Analysis Complete: {candidate_name} (Score: {overall_score})",
"HtmlBody": html_body,
"TextBody": f"Resume analysis complete for {candidate_name}. Overall Score: {overall_score}. View full analysis in your dashboard.",
"MessageStream": "outbound"
}
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
"X-Postmark-Server-Token": POSTMARK_SERVER_TOKEN
}
response = requests.post(POSTMARK_API_URL, json=email_data, headers=headers)
except Exception as e:
logger.error(f"Error sending email: {str(e)}")
return False
Processing Flow
- Email with resume attachment sent to monitored Postmark address
- Postmark processes email and triggers webhook to API Gateway
- AWS Lambda extracts attachment and stores in S3
- S3 processor detects new file and triggers analysis
- Amazon Bedrock (Nova Premier) analyzes resume content
- Results stored in DynamoDB and displayed in dashboard
- Notification email sent via Postmark with analysis summary
Key Features
AI Analysis Capabilities
- Contact Information: Name, email extraction
- Technical Skills: Comprehensive skill identification
- Experience Assessment: Level and years calculation
- Fit Analysis: High/Medium/Low fit assessment
- Scoring: 0-100 overall candidate score
- Strengths: Top 3-5 candidate strengths
- Recommendations: Improvement suggestions
Dashboard Features
- Real-time Search: Search across names, skills, experience
- Score Range: Filter by AI score (0-100)
- Experience Level: Entry, Junior, Mid, Senior, Lead
- Years of Experience: Min/Max range filtering
- Skills Matching: Comma-separated skill requirements
- Multiple Views: Grid and table formats with sorting options
- Export: CSV download of filtered results
Challenges and Solutions
The biggest challenge was creating a seamless flow from email receipt to AI analysis. Postmark's webhook reliability and comprehensive payload made this possible, allowing me to extract attachments and trigger the analysis pipeline without any manual intervention.
Another challenge was cost management at scale. I implemented several optimizations:
- S3 Intelligent Tiering for storage
- DynamoDB On-Demand pricing
- Lambda memory optimization
- CloudWatch monitoring for unused resources
Cost Considerations
For small to medium businesses (~5,000 MAU):
- Amazon Bedrock: ~$20.00 (1,000 resumes)
- Lambda: ~$1.25 (10,000 invocations)
- S3: ~$0.50 (5GB storage)
- DynamoDB: ~$2.50 (on-demand)
- AppSync: ~$4.00 (1 million requests)
- Amplify: ~$3.00 (moderate traffic)
- Cognito: ~$2.75 (5,000 MAU)
- CloudWatch: ~$2.00 (moderate logging)
- Total: ~$33.00/month
For enterprise scale (~50,000 MAU), costs scale to approximately $300/month with higher usage across all services.
Conclusion
This project demonstrates the power of combining Postmark's email processing capabilities with Amazon Bedrock Nova Model to create a seamless, automated workflow that transforms the hiring process. By leveraging Postmark's inbound email parsing, I was able to create a system that eliminates manual resume processing and provides instant, AI-powered insights to hiring managers.
The serverless architecture ensures the system can scale from small businesses to enterprise needs while maintaining cost efficiency and high performance.
Transform your hiring process with AI-powered automation, advanced analytics, and infinite scalability
Top comments (3)
This is brilliant! 🙌
The Postmark + Bedrock Nova Premier combo is innovative, and the way you tied it all together with serverless and real-time AI is chef’s kiss.
As someone aspiring to be an AWS Community Builder, this definitely pushes me to level up. Bookmarked for inspo and learning! 💻⚡
This is seriously impressive. You tackled every stage of the resume pipeline from email ingestion to AI analysis to clean dashboard delivery. Love how you used Postmark’s inbound parsing with AWS’s full serverless stack. It’s a smart, scalable setup. The way you tied in Bedrock’s Nova model for scoring and insights makes this feel like something real companies could plug into tomorrow.
Also appreciate the transparency around cost and the fallback you mentioned with Gmail. Super thoughtful build all around. Definitely bookmarking this to dissect later.
growth like this is always nice to see, but sometimes i wonder if more ai in hiring could miss out on the real vibe a person brings you think tech can ever really capture that or nah
Some comments may only be visible to logged-in visitors. Sign in to view all comments.