Transform your resume into a stunning, professional portfolio with the power of AI
Profilix is a cutting-edge Next.js application that empowers users to create professional portfolios effortlessly. Simply upload your resume as a PDF, and our AI-powered engine leverages Google Gemini to intelligently parse your information and generate a polished, portfolio-ready profile. All your data is securely stored in MongoDB.
- ⚡ Instant Portfolio Generation - Upload → Parse → Polish in minutes
- 🤖 AI-Powered Parsing - Google Gemini intelligently extracts resume data
- 🎨 Fully Customizable - Edit and refine your portfolio before publishing
- 🔐 Secure & Scalable - Enterprise-grade authentication and data persistence
- 📱 REST API Ready - Integrate seamlessly with external tools
| Feature | Description |
|---|---|
| 👤 User Authentication | Seamless registration and session management via Clerk |
| 📄 PDF Resume Parsing | Intelligent extraction using Google Gemini AI |
| ✏️ Portfolio Editor | Edit and customize your generated portfolio |
| 💾 Data Persistence | Secure MongoDB storage for users and portfolios |
| 🔌 REST APIs | Full-featured endpoints for automation and integration |
| 🎯 Production-Ready | Built with best practices and modern architecture |
|
Frontend |
Backend & Infrastructure |
|
State & Utilities |
Development Tools |
portfilio-generator/
├── app/ # Next.js App Router
│ ├── api/ # REST API endpoints
│ │ ├── v1/ # Version 1 routes
│ │ │ ├── ai/parse/ # Resume parsing endpoint
│ │ │ ├── auth/register/ # User registration
│ │ │ └── user/ # User management
│ │ └── v2/ # Version 2 (future)
│ ├── (web)/
│ │ ├── create/portfolio/ # Portfolio creation flow
│ │ └── preview/portfolio/ # Portfolio preview
│ ├── [slug]/ # Dynamic portfolio routes
│ └── layout.tsx # Root layout
├── components/ # React components
│ ├── layout/ # Layout components
│ ├── portfolio/ # Portfolio-specific components
│ └── ui/ # Reusable UI components
├── lib/ # Utility functions
│ ├── db.ts # Database connection
│ └── utils.ts # Helper utilities
├── models/ # Mongoose schemas
│ ├── user.model.ts # User schema
│ └── portfolio.model.ts # Portfolio schema
├── store/ # State management
│ └── useUserStore.ts # Zustand user store
└── public/ # Static assets
Ensure you have the following installed and configured:
| Requirement | Version | Setup |
|---|---|---|
| Node.js | 18+ | Download |
| npm | 8+ | Included with Node.js |
| MongoDB | Latest | Local or Atlas |
| Google Gemini API Key | - | Get Key |
| Clerk API Keys | - | Get Keys |
git clone https://github.com/Sujal-Raj/portfilio-generator.git
cd portfilio-generatornpm installCreate a .env.local file in the project root:
# Authentication (Clerk)
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
# AI & Parsing (Google Gemini)
GEMINI_API_KEY=your_google_gemini_api_key
# Database (MongoDB)
MONGODB_URI=your_mongodb_connection_string
⚠️ Security Note: Never commit.env.localto version control. Add it to.gitignore.
npm run devOpen http://localhost:3000 in your browser to see the application.
| Command | Purpose |
|---|---|
npm run dev |
Start development server with hot reload |
npm run build |
Build for production |
npm start |
Run production build |
npm run lint |
Run ESLint checks |
npm run format |
Format code with Prettier |
npm test |
Run tests (if configured) |
- Development:
http://localhost:3000/api - Production:
https://yourdomain.com/api
| Method | Endpoint | Description |
|---|---|---|
POST |
/v1/auth/register |
Register a new user |
Example Request:
POST /v1/auth/register
{
"email": "user@example.com",
"password": "secure_password"
}| Method | Endpoint | Description |
|---|---|---|
POST |
/v1/ai/parse |
Parse resume PDF using Gemini AI |
Example Request:
curl -X POST http://localhost:3000/api/v1/ai/parse \
-F "resume=@resume.pdf"| Method | Endpoint | Description |
|---|---|---|
GET |
/v1/user |
Get user profile |
GET |
/v1/user/[slug] |
Get user by slug |
POST |
/v1/user/portfolio/publish |
Publish portfolio |
📖 Full API Documentation: See Postman Collection for complete endpoint details.
A Postman collection is included in the repository for quick API testing:
# Import postman_collection.json into Postman
# All endpoints are pre-configured with examplesProblem: Getting 404 errors on API routes
Solution:
- Ensure the development server is running (
npm run dev) - Verify the route exists in
app/api/ - Restart the server after adding new route files
- Check the URL for typos
Problem: Cannot connect to MongoDB
Solution:
- Verify
MONGODB_URIis correct in.env.local - Ensure MongoDB is running (local or check Atlas connection)
- Whitelist your IP in MongoDB Atlas (if using cloud)
- Check network connectivity
Problem: Resume parsing fails with Gemini errors
Solution:
- Verify
GEMINI_API_KEYis valid and active - Check API quotas and usage limits
- Ensure API is enabled in Google Cloud Console
- Test with a simple request first
Problem: Authentication not working
Solution:
- Confirm
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYis correct - Verify
CLERK_SECRET_KEYmatches your environment - Check Clerk dashboard for app configuration
- Clear browser cache and cookies
We welcome contributions from the community! Please follow our guidelines:
📖 See Contributing.md for detailed contribution instructions.
Quick Start for Contributors:
- 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.
- 🎯 Built with Next.js
- 🔐 Authentication by Clerk
- 🤖 AI powered by Google Gemini
- 💾 Database by MongoDB
- 💅 Styled with Tailwind CSS
Made with ❤️ by the Profilix Team