A modern, AI-powered resume builder application built with the MERN stack (MongoDB, Express.js, React.js, Node.js). Create professional resumes with ease using AI assistance and a beautiful, intuitive interface.
🌐 Live Demo: resumegpt-psi.vercel.app
AI Resume Builder is a full-stack application that helps users create professional resumes with the assistance of AI. The application features a modern UI, real-time preview, and AI-powered content suggestions. Users can customize their resumes with different themes, sections, and layouts.
- 🤖 AI-powered content suggestions for resume sections
- 🎨 Multiple theme options with customizable colors
- 📱 Responsive design for all devices
- 🔄 Real-time preview of resume changes
- 📝 Multiple resume sections:
- Personal Details
- Professional Summary
- Work Experience
- Education
- Skills
- Achievements
- Certificates
- 🔒 User authentication and authorization
- 💾 Auto-save functionality
- 📤 Export resume to PDF
- 🌙 Dark mode support
- Frontend: React.js, Tailwind CSS, Shadcn UI
- Backend: Node.js, Express.js
- Database: MongoDB
- Authentication: Clerk
- AI Integration: Gemini API
AI_Resume_Builder/
├── Frontend/ # Frontend React application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── context/ # React context providers
│ │ ├── service/ # API service functions
│ │ ├── utils/ # Utility functions
│ │ └── App.jsx # Main application component
│ └── package.json
│
├── Backend/ # Backend Node.js application
│ ├── controllers/ # Route controllers
│ ├── db/ # Database models and connection
│ ├── middleware/ # Custom middleware
│ ├── routes/ # API routes
│ └── server.js # Main server file
│
└── README.md
VITE_API_URL=http://localhost:3000
VITE_GOOGLE_AI_API_KEY=your_googleai_api_key
VITE_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
VITE_CLERK_SIGN_IN_URL=/sign-in
VITE_CLERK_SIGN_UP_URL=/sign-up
VITE_CLERK_AFTER_SIGN_IN_URL=/
VITE_CLERK_AFTER_SIGN_UP_URL=/
PORT=3000
MONGO_URL=your_mongodb_connection_string
CLERK_SECRET_KEY=your_clerk_secret_key
-
Clerk Dashboard Configuration:
- Go to Clerk Dashboard
- Select your application
- Navigate to "JWT Templates"
- Create a new template for your application
- Set the signing algorithm to "RS256"
- Add your backend URL to the allowed origins
-
Environment Variables:
- Ensure all Clerk environment variables are properly set in your deployment platform
- Frontend variables should be prefixed with
VITE_ - Backend variables should be set without any prefix
-
CORS Configuration:
- Add your frontend domain to the allowed origins in Clerk dashboard
- Configure your backend to accept requests from your frontend domain
-
Common Issues:
- If authentication is not working after deployment:
- Verify all environment variables are correctly set
- Check if the Clerk publishable key matches your application
- Ensure your domain is added to Clerk's allowed origins
- Verify the JWT template is properly configured
- If authentication is not working after deployment:
-
Development vs Production:
- Use different Clerk applications for development and production
- Update environment variables accordingly
- Test authentication flow in both environments
- Endpoint:
POST /api/user - Description: Creates a new user or returns existing user if email already exists
- Request Body:
{ "name": "string", "email": "string" } - Response (New User):
{ "message": "User created successfully", "user": { "_id": "string", "name": "string", "email": "string", "resumes": [] } } - Response (Existing User):
{ "message": "User already exists", "user": { "_id": "string", "name": "string", "email": "string", "resumes": [] } }
- Endpoint:
GET /api/user - Description: Retrieves user information by email
- Query Parameters:
email: User's email address
- Response (User Found):
{ "_id": "string", "name": "string", "email": "string", "resumes": [] } - Response (User Not Found):
null
- Endpoint:
POST /api/resume - Description: Creates a new resume with default template data
- Request Body:
{ "email": "string", "title": "string" } - Response:
{ "message": "Resume created successfully", "resumeId": "string" }
- Endpoint:
GET /api/resume - Description: Retrieves all resumes for a specific user
- Query Parameters:
email: User's email address
- Response:
{ "message": "Resumes fetched successfully", "resumes": [ { "_id": "string", "title": "string", "firstName": "string", "lastName": "string", "jobTitle": "string", "address": "string", "phone": "string", "email": "string", "themeColor": "string", "summery": "string", "experience": [...], "education": [...], "skills": [...], "achievements": [...], "certificates": [...] } ] }
- Endpoint:
GET /api/resume/:resumeId - Description: Retrieves a specific resume by ID
- URL Parameters:
resumeId: ID of the resume to fetch
- Response:
{ "message": "Resume fetched successfully", "data": { "_id": "string", "title": "string", "firstName": "string", "lastName": "string", "jobTitle": "string", "address": "string", "phone": "string", "email": "string", "themeColor": "string", "summery": "string", "experience": [...], "education": [...], "skills": [...], "achievements": [...], "certificates": [...] } }
- Endpoint:
PUT /api/resume/:resumeId - Description: Updates an existing resume
- URL Parameters:
resumeId: ID of the resume to update
- Request Body:
{ "data": { "firstName": "string", "lastName": "string", "jobTitle": "string", "address": "string", "phone": "string", "email": "string", "themeColor": "string", "summery": "string", "experience": [ { "id": "number", "title": "string", "companyName": "string", "city": "string", "state": "string", "startDate": "string", "endDate": "string", "currentlyWorking": "boolean", "workSummery": "string" } ], "education": [ { "id": "number", "universityName": "string", "startDate": "string", "endDate": "string", "degree": "string", "major": "string", "description": "string" } ], "skills": [ { "category": "string", "items": ["string"] } ], "achievements": [ { "id": "number", "title": "string", "description": "string", "date": "string" } ], "certificates": [ { "id": "number", "title": "string", "issuer": "string", "date": "string", "link": "string" } ] } } - Response:
{ "message": "Resume updated successfully", "updatedResume": { // Updated resume object } }
- Endpoint:
DELETE /api/resume/:resumeId - Description: Deletes a specific resume
- URL Parameters:
resumeId: ID of the resume to delete
- Response:
{ "message": "Resume deleted successfully" }
All endpoints may return the following error responses:
400 Bad Request: Invalid request data404 Not Found: Resource not found500 Internal Server Error: Server-side error
- Clone the repository
- Install dependencies:
# Frontend cd MERN-2 npm install # Backend cd ../MERN-2-backend npm install
- Set up environment variables
- Start the development servers:
# Frontend npm run dev # Backend npm run dev
We welcome contributions to AI Resume Builder! Here's how you can help:
- Fork the repository
- Create a new branch (
git checkout -b feature/amazing-feature) - Make your changes
- Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the existing code style and conventions
- Write clear, descriptive commit messages
- Include tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
This project is licensed under the MIT License - see the LICENSE file for details.
- OpenAI for providing the AI capabilities
- Shadcn UI for the beautiful component library