AI-powered CV optimizer that tailors your resume to any job posting for maximum ATS compatibility
Features | Quick Start | How It Works | Tech Stack
75% of resumes are rejected by ATS before a human ever sees them.
Applicant Tracking Systems (ATS) filter candidates based on keyword matches, formatting, and relevance scores. Even highly qualified candidates get filtered out when their resumes don't align with job-specific requirements.
CVForge uses AI to analyze job postings and intelligently optimize your CV to:
- Match the exact keywords and phrases recruiters are looking for
- Maintain your authentic experience while improving relevance
- Export in ATS-friendly formats (PDF/HTML)
|
Import your CV data via structured form or paste JSON directly. Supports all standard resume sections including experience, education, skills, and more. |
Paste any job URL or job description text. AI extracts key requirements, must-have skills, and hidden keywords that ATS systems look for. |
|
AI tailors your CV content to match job requirements while keeping your experience authentic. |
Download your optimized CV as PDF or HTML, ready to submit to any application system. |
- Bun v1.0+ (or Node.js 18+)
- OpenAI API Key
# Clone the repository
git clone https://github.com/yourusername/cvforge-app.git
cd cvforge-app
# Install dependencies
bun install
# Configure environment
cp .env.example .envAdd your API key to .env:
OPENAI_API_KEY=sk-your-key-here
JINA_AI_API_KEY=jina_your-key-here # Optional: for faster job URL scrapingbun devOpen http://localhost:3000 and start optimizing.
┌─────────────────────────────────────────────────────────────────────────────┐
│ CVForge Workflow │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Step │ │ Step │ │ Step │ │ Step │
│ 1 │ ──▶ │ 2 │ ──▶ │ 3 │ ──▶ │ 4 │
│ │ │ │ │ │ │ │
│ CV Input │ │ Job │ │ Optimize │ │ Export │
│ │ │ Analysis │ │ │ │ │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│Form/JSON │ │URL/Text │ │AI Engine │ │PDF/HTML │
│ Import │ │ Scraping │ │Tailoring │ │ Download │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
| Step | Description |
|---|---|
| 1. CV Input | Enter your CV data through a structured form or import existing JSON data |
| 2. Job Analysis | Fetch job posting via URL (using Jina.ai Reader) or paste text directly. AI extracts key requirements, skills, and keywords |
| 3. Optimization | AI tailors your CV content to match job requirements while maintaining authenticity |
| 4. Export | Preview your optimized CV and download as PDF or HTML |
| Layer | Technology | Purpose |
|---|---|---|
| Framework | Next.js 16 | Full-stack React framework with App Router |
| UI | React 19 + Tailwind CSS v4 | Modern component library with utility-first styling |
| Language | TypeScript 5 | Type-safe development |
| AI | Vercel AI SDK + OpenAI | LLM integration for analysis & optimization |
| Scraping | Jina.ai Reader | Job posting URL extraction |
| Validation | Zod | Runtime type validation and schema definitions |
| Forms | React Hook Form | Performant form handling |
cvforge-app/
├── app/
│ ├── actions/ # Server actions for AI operations
│ │ └── cv-actions.ts # Main action handlers
│ └── page.tsx # Application entry point
│
├── components/
│ ├── cv-wizard.tsx # Main wizard orchestrator
│ ├── steps/ # Individual wizard step components
│ │ ├── cv-input-step.tsx
│ │ ├── job-posting-step.tsx
│ │ ├── optimization-step.tsx
│ │ └── preview-step.tsx
│ └── ui/ # Reusable UI primitives
│
├── hooks/
│ └── use-cv-wizard.ts # Wizard state management
│
├── services/
│ ├── job-posting-retriever-service.ts # Web scraping
│ ├── job-posting-analyzer-service.ts # AI job parsing
│ ├── cv-optimizer-service.ts # AI CV enhancement
│ └── cv-renderer-service.ts # PDF/HTML generation
│
├── templates/ # CV HTML templates (modern, minimal)
├── lib/ # Utilities and form helpers
└── schema.ts # Zod schemas (single source of truth)
| Variable | Required | Description |
|---|---|---|
OPENAI_API_KEY |
Yes | OpenAI API key for AI-powered features |
JINA_AI_API_KEY |
No | Jina.ai key for faster URL scraping (works without, but rate-limited) |
bun dev # Start development server at localhost:3000
bun run build # Create production build
bun run start # Start production server
bun run lint # Run ESLint checksContributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your 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 AI, designed for humans.