FitForJob is an intelligent AI-powered job application assistant that helps job seekers create personalized, professional application materials. By analyzing your resume and job descriptions, it generates tailored cover letters, interview responses, LinkedIn messages, and more - all designed to maximize your chances of landing your dream job.
- Smart Resume Parsing: Upload PDF resumes and extract structured data using AI
- Intelligent Content Generation: Create personalized application materials based on job requirements
- Multi-Format Outputs: Generate various types of application content:
- Professional cover letters (300-400 words)
- Company interest statements
- "Why you're a good fit" explanations
- Value proposition descriptions
- LinkedIn outreach messages
- Quick application form answers
- Interview preparation questions (5-7 tailored questions)
- Responsive Design: Works seamlessly on desktop and mobile devices
- Real-time Progress: Live status updates during resume parsing and content generation
- Content Management: View, copy, edit, and regenerate any generated content
- History Tracking: Save and manage all your application responses
- User Authentication: Secure account management with Clerk
- Dark Theme: Modern, eye-friendly dark interface
- Fallback AI Models: Automatic failover between primary and backup AI models
- Content Regeneration: Regenerate specific sections without starting over
- Form Validation: Comprehensive input validation with helpful error messages
- Analytics Integration: Usage tracking with PostHog for insights
- Optimized Performance: Fast loading with Turbopack and optimized animations
- Framework: Next.js 15 with App Router
- Build Tool: Turbopack for fast development
- Styling: Tailwind CSS 4 with custom configuration
- UI Components: ShadCN UI (New York style) with Radix UI primitives
- Icons: Lucide React icon library
- Animations: Motion library for smooth transitions
- Forms: React Hook Form with Zod schema validation
- File Upload: React Dropzone for drag-and-drop functionality
- Notifications: React Hot Toast and Sonner for user feedback
- Runtime: Node.js with Next.js API routes
- AI Provider: Groq with LLama 3.3 (70B) and LLama 3.1 (8B) models
- AI SDK: Vercel AI SDK for structured content generation
- PDF Processing: pdf-parse for resume text extraction
- Database: MongoDB with Mongoose ODM
- Authentication: Clerk for user management and protected routes
- Language: TypeScript for type safety
- Linting: ESLint with Next.js configuration
- Code Formatting: Prettier for consistent code style
- Package Manager: PNPM for efficient dependency management
- Analytics: PostHog for user behavior tracking
- Deployment: Optimized for Vercel deployment
- Node.js 18+
- PNPM (recommended) or npm/yarn
- MongoDB database (local or cloud)
- Groq API account
- Clerk account for authentication
- PostHog account for analytics (optional)
-
Clone the repository
git clone https://github.com/YourUsername/job-interview-ai.git cd job-interview-ai -
Install dependencies
pnpm install # or npm install # or yarn install
-
Environment Configuration
Create a
.env.localfile in the root directory with the following variables:# Clerk Authentication (Required) NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_your_clerk_publishable_key CLERK_SECRET_KEY=sk_test_your_clerk_secret_key CLERK_WEBHOOK_SECRET=whsec_your_clerk_webhook_secret # MongoDB Database (Required) NEXT_PUBLIC_MONGODB_URL=mongodb://localhost:27017/fitforjob # or for MongoDB Atlas: # NEXT_PUBLIC_MONGODB_URL=mongodb+srv://username:password@cluster.mongodb.net/fitforjob # Groq AI API (Required) GROQ_API_KEY=gsk_your_groq_api_key # AI Model Configuration (Optional - defaults provided) PRIMARY_MODEL=llama-3.3-70b-versatile FALLBACK_MODEL=llama-3.1-8b-instant # PostHog Analytics (Optional) NEXT_PUBLIC_POSTHOG_KEY=phc_your_posthog_key NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
-
Database Setup
Ensure your MongoDB instance is running. The application will automatically create the necessary collections and indexes.
-
Start the development server
pnpm dev # or npm run dev # or yarn dev
-
Access the application
Open http://localhost:3000 in your browser.
pnpm build
pnpm start- Authentication: Users sign in through Clerk authentication system
- Resume Upload: Upload a PDF resume which gets parsed using pdf-parse library
- AI Processing: Resume text is structured using Groq's LLama 3.1 model into JSON format
- Job Details: Users enter job title, company, tech stack, job description, and optional company details
- Content Generation: The system uses Groq's LLama 3.3 model to generate personalized application materials
- Review & Edit: Users can view, copy, and regenerate specific sections as needed
- Save & Manage: All responses are saved to MongoDB and accessible through the history page
- PDF Processing:
/api/parse-resumeextracts and structures resume data - Content Generation:
/api/generatecreates tailored application materials - Content Regeneration:
/api/regenerateallows updating specific sections - Data Persistence: Responses saved to both local storage and MongoDB
- Fallback System: Automatic failover between AI models for reliability
job-interview-ai/
βββ app/ # Next.js App Router
β βββ (auth)/ # Authentication routes
β β βββ sign-in/[[...sign-in]]/
β β βββ sign-up/[[...sign-up]]/
β βββ api/ # API endpoints
β β βββ generate/ # Main content generation
β β βββ parse-resume/ # Resume parsing
β β βββ regenerate/ # Content regeneration
β β βββ webhooks/ # Clerk webhooks
β βββ create/ # Job application form
β βββ history/ # Response history
β βββ response/[id]/ # Individual response view
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
β βββ loading.tsx # Loading UI
β βββ page.tsx # Landing page
βββ components/ # React components
β βββ ui/ # ShadCN UI components
β βββ JobForm.tsx # Main application form
β βββ Navbar.tsx # Navigation component
β βββ PostHogProvider.tsx # Analytics provider
β βββ ResponseSection.tsx # Response display
β βββ ResumeUploader.tsx # File upload component
βββ hooks/ # Custom React hooks
β βββ useAppState.ts # Application state management
β βββ useJobFormSubmit.ts # Form submission logic
β βββ useResumeManager.ts # Resume handling
βββ lib/ # Utility libraries
β βββ actions/ # Server actions
β βββ models/ # MongoDB models
β βββ store/ # State management
β βββ db.ts # Database connection
β βββ prompt.ts # AI prompts
β βββ schema.ts # Zod schemas
β βββ storage.ts # Local storage utilities
β βββ types.ts # TypeScript types
β βββ utils.ts # Helper functions
βββ sections/ # Landing page sections
β βββ FeatureHighlight.tsx
β βββ FeatureSection.tsx
β βββ FinalCTASection.tsx
β βββ HeroSection.tsx
βββ public/ # Static assets
β βββ favicon.png
β βββ fitforjob-og.png
β βββ logo.png
βββ components.json # ShadCN configuration
βββ middleware.ts # Route protection
βββ next.config.ts # Next.js configuration
βββ package.json # Dependencies
βββ tailwind.config.js # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
- Sign Up/Sign In: Create an account or sign in using Clerk authentication
- Navigate to Create: Click "Get Started Now" or go to
/create - Upload Resume: Drag and drop or click to upload your PDF resume
- Fill Job Details: Enter job title, company, tech stack, and job description
- Generate Content: Click "Generate AI Responses" to create personalized materials
- Review Results: View generated content in organized tabs
- Copy & Use: Copy any section to use in your applications
- Regenerate: Click regenerate on any section to get alternative versions
- Save History: All responses are automatically saved to your history
- Detailed Job Descriptions: Provide complete job descriptions for better targeting
- Accurate Tech Stack: List relevant technologies and skills
- Company Research: Add company details for more personalized responses
- Resume Quality: Ensure your PDF resume is well-formatted and complete
Extracts and structures resume data from uploaded PDF files.
Request:
- Method:
POST - Content-Type:
multipart/form-data - Body:
resume(File) - PDF file up to 10MB
Response:
{
"fullName": "John Doe",
"contactInformation": {
"email": "john@example.com",
"phone": "+1234567890",
"linkedin": "linkedin.com/in/johndoe",
"portfolioUrl": "johndoe.dev"
},
"summary": "Experienced software engineer...",
"education": [...],
"workExperience": [...],
"skills": {
"technicalSkills": ["JavaScript", "React", "Node.js"],
"softSkills": ["Leadership", "Communication"]
},
"projects": [...],
"certifications": [...],
"languages": [...],
"achievements": [...]
}Generates personalized job application materials based on resume and job details.
Request:
- Method:
POST - Content-Type:
multipart/form-data - Body:
jobTitle(string) - Position titlecompany(string) - Company nametechStack(string) - Required technologiesdescription(string) - Job descriptioncompanyDetails(string, optional) - Additional company infoparsedResume(string) - JSON string of parsed resume
Response:
{
"applicationMaterials": {
"interestInCompany": "I'm excited about...",
"coverLetter": "Dear Hiring Manager...",
"whyFit": "My experience in...",
"valueAdd": "I would bring...",
"linkedinSummary": "Experienced developer...",
"shortAnswer": "I'm interested because..."
},
"interviewPrep": {
"questions": [
"Tell me about your experience with React",
"How do you handle challenging deadlines?",
"..."
]
}
}Regenerates a specific section of application materials.
Request:
- Method:
POST - Content-Type:
application/json - Body:
{
"field": "coverLetter",
"data": {
"jobTitle": "Software Engineer",
"company": "Tech Corp"
},
"parsedResume": "..."
}Response:
{
"field": "coverLetter",
"output": "Dear Hiring Manager, I am writing to express..."
}# Install dependencies
pnpm install
# Start development server with Turbopack
pnpm dev
# Run linting
pnpm lint
# Build for production
pnpm build
# Start production server
pnpm start- TypeScript: Full type safety across the application
- ESLint: Code quality and consistency enforcement
- Prettier: Automatic code formatting
- Turbopack: Fast development builds and hot reloading
The application uses MongoDB with the following collections:
- responses: Stores generated application materials
- users: User profile information (managed by Clerk)
- Fork this repository
- Connect your GitHub account to Vercel
- Import the project
- Add environment variables
- Deploy
Ensure all required environment variables are set in your deployment platform:
- Clerk authentication keys
- MongoDB connection string
- Groq API key
- PostHog analytics key (optional)
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes: Follow the existing code style and patterns
- Add tests: Ensure your changes are tested
- Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request: Describe your changes and their benefits
- Follow TypeScript best practices
- Use existing component patterns
- Maintain responsive design principles
- Add proper error handling
- Include JSDoc comments for complex functions
- Follow the established file structure
- UI/UX improvements
- Additional AI model integrations
- Performance optimizations
- Test coverage improvements
- Documentation enhancements
- Accessibility improvements
This project is licensed under the MIT License - see the LICENSE file for details.
- Vercel AI SDK for AI integration
- ShadCN UI for beautiful components
- Clerk for authentication
- Groq for fast AI inference
- MongoDB for data persistence
Built with β€οΈ by Rith Banerjee
For questions or support, please open an issue or contact your-email@example.com.