π Executive Summary
This case study chronicles the transformation of Upshores, a platform designed to help job seekers craft optimized resumes and land global remote jobs. We built a production-grade full-stack web application featuring AI-powered resume generation, user subscription management, a multi-role dashboard, and dynamic job listings using a scalable and secure architecture.
Key Results:
- π§ AI resume generation delivering ATS-optimized resumes within seconds
- βοΈ Fully managed authentication system with JWT and Google OAuth
- π Scalable MongoDB data model for user profiles, resumes, and subscription plans
- π³ Stripe-integrated subscription + pay-per-credit billing system
- π Secure file export options (PDF/DOCX) for generated resumes
- π§ͺ Seamless frontend-backend integration with robust CRUD and mutation logic
π¨ THE PROBLEM
Business Challenge
Upshores aimed to offer a resume-building platform with global appeal, but several challenges existed at the outset:
Pain Points:
- No existing resume-generation infrastructure
- AI-generated resumes lacked structure or job-targeting logic
- Manual resume formatting was time-consuming for users
- Users had no account system to store resume drafts or histories
- No payment structure to monetize advanced AI capabilities
Technical Challenges
- No backend system β no database or API logic for resume storage, updates, or retrieval
- Unscalable resume format logic β required a structured, templated, data-driven approach
- No billing system β needed both subscription and pay-per-credit monetization
- No CI/CD or deployment strategy
- Auth friction β needed Google OAuth and JWT flows
- Complex document rendering β resumes needed to export to PDF and DOCX
Business Impact
- Limited market entry due to infrastructure gaps
- Time-consuming manual resume creation process
- No user retention due to lack of profiles or storage
- Lost revenue opportunities due to lack of billing logic
π‘ THE SOLUTION
Solution Overview
We built a full-stack web application using modern technologies, with server-side rendering, rich text editing, AI resume generation, and secure Stripe billing for monetization.
π§± TECHNOLOGY STACK
π§ Backend
- Language: Node.js (ES Modules)
- Framework: Express.js
- Database: MongoDB + Mongoose ODM
- Auth: JWT-based + Google OAuth 2.0
- File Export:
html-pdf,html-docx-js - AI Resume Generation: Claude AI (via AWS Bedrock)
- Email: Nodemailer + Gmail SMTP
- Billing: Stripe (subscription + credit-based purchases)
- CI/CD: GitHub Actions
π¨ Frontend
- Framework: React.js (Vite + TypeScript)
- Styling: Tailwind CSS
- Routing: React Router DOM
- State Management: React Query + Redux Toolkit
- Rich Text Editor: React Quill
- PDF Preview:
@react-pdf/renderer - Notifications:
react-toastify - Charts: Recharts for resume analytics
π οΈ IMPLEMENTATION
Database Schema Design
User Schema:
{
email,
passwordHash,
googleId,
subscriptionStatus,
currentCredits,
refreshToken,
...
}
Resume Schema:
{
userId,
templateId,
title,
workExperience: [...],
education: [...],
skills: [...],
generatedHtml,
downloadHistory,
...
}
Subscription Schema:
{
userId,
stripeCustomerId,
subscriptionType,
currentPeriodStart,
currentPeriodEnd,
cancelAtPeriodEnd,
}
Authentication Implementation
- Google OAuth Integration
- JWT Auth Flow (Access + Refresh Tokens)
- Secure Cookie-Based Sessions for Refresh Token
Endpoints:
/api/auth/login/api/auth/google/api/auth/refresh-token/api/auth/logout
Resume Generation Pipeline
- User selects job title and job description
- Sends input to backend prompt generator
- AWS Claude AI is called with resume-generation prompt
- Response parsed and rendered into structured HTML template
- Stored in MongoDB under user profile
Stripe Billing Flow
- Subscription Plans: Basic (Free), Pro (Monthly/Yearly)
- One-Time Purchases: Buy extra resume generation credits
- Webhooks Listened:
checkout.session.completedcustomer.subscription.updatedcustomer.subscription.deleted
- Frontend Logic:
- Display current plan, renewals, cancel toggle
- Buy credits modal with two price options
- Security:
- Backend validates webhook signatures and updates DB
Deployment Strategy
Frontend (Vite App):
- Hosted on AWS Amplify
- Optimized for speed using pre-rendering and dynamic route splitting
Backend (Node/Express App):
- Deployed on AWS EC2 (Ubuntu 22.04)
- Nginx reverse proxy + PM2 process manager
.envsecrets securely stored via AWS SSM- Deployed using GitHub Actions
π THE RESULTS
Performance Improvements
| Feature | Before | After |
|---|---|---|
| Resume Generation | Manual editing | 5s AI-generated resumes |
| Resume Downloads | N/A | 1-click PDF + DOCX export |
| Resume Saving | Not available | Versioned resume history |
| Auth | Email-only | Google OAuth + JWT |
| Deployment | Manual | GitHub CI/CD Pipeline |
Cost Analysis
Monthly Costs:
βββ AWS EC2 (t3.medium) $15.00
βββ AWS Amplify (frontend hosting) Free tier
βββ MongoDB Atlas (Shared Cluster) $10.00
βββ Claude AI (AWS Bedrock) ~$20.00
βββ Stripe Fees ~2.9% + $0.30/txn
βββ Domain + Email (Gmail) $6.00
Total Infrastructure: ~$51/month
π SECURITY ACHIEVEMENTS
- β JWT-based secure access token flow
- β Secure cookies for refresh tokens
- β Role-based access to dashboard
- β Stripe webhook signature validation
- β Rate-limiting on sensitive endpoints
- β Environment variable encryption via AWS
π BUSINESS IMPACT
- π Launched to early adopters within 30 days
- π 1000+ resumes generated in beta
- πΈ Monetization started with both recurring and one-time payments
- π Reduced resume-writing time for users from hours to under 10 minutes
- π¬ Increased email signups via resume download gating
π§ KEY LEARNINGS & BEST PRACTICES
What Worked Well
- Modular schema design enabled easy feature addition
- JWT + Google OAuth combo delivered seamless UX
- Stripe integration supported multiple pricing strategies
- Prompt engineering with Claude AI gave high-quality resume outputs
- React Query + Tailwind simplified UI responsiveness
Challenges Overcome
- Docx export compatibility required multiple libraries before success
- AI prompt tuning took multiple iterations to align with resume formatting
- Credit-based billing was tricky to sync across Stripe + DB state
- Real-time resume preview and export without UI lags needed optimization
π Conclusion
Upshores was built with scalability, monetization, and usability in mind from day one. By combining modern DevOps, AI tools, and thoughtful UX design, we created a platform that helps job seekers globally produce polished, job-targeted resumes in minutesβnot hours.
This is just the beginning for Upshores. The infrastructure is ready to scale, and the foundation is solid for future integrations, such as LinkedIn import, resume scoring, and job matching AI.