🚀 AI-Powered CV Parser
An intelligent CV parsing system that uses Claude AI to extract and structure candidate information from resumes with a beautiful, real-time web interface.
🎬 Demo Video
Watch the CV Parser in action with real-time progressive parsing:
✨ See how the parser extracts candidate information step-by-step with beautiful animations and real-time updates!
Note: If the video doesn't play in your browser, you can download it here or view it directly in the repository.
✨ Features
🎯 Smart Extraction
- Multi-format support: PDF, DOC, DOCX, TXT files
- Structured output: Clean JSON with standardized fields
- High accuracy: Powered by Claude 3.5 Sonnet
- Context-aware: Understands CV patterns and formats
🎨 Beautiful Interface
- Progressive parsing: Real-time step-by-step visualization
- Live updates: Watch as information gets extracted
- Smooth animations: Engaging visual feedback
- Responsive design: Works on desktop and mobile
🔄 Real-time Experience
- Step-by-step progress: See each parsing stage
- Visual previews: Know what's being processed
- Auto-scrolling: Follows the parsing progress
- Completion celebration: Clear success indication
🏗️ What Gets Extracted
The system intelligently extracts:
- 👤 Basic Information: Name, email, phone, professional summary
- 🛠️ Technical Skills: Programming languages, frameworks, tools
- 💼 Work Experience: Companies, positions, dates, achievements
- 🎓 Education: Degrees, institutions, dates
- 🚀 Projects & Certifications: Side projects, professional certifications
🛠️ Technology Stack
- Backend: Python, Flask, Server-Sent Events (SSE)
- AI: Claude 3.5 Sonnet via Claude CLI
- Frontend: HTML5, Tailwind CSS, JavaScript
- File Processing: PyPDF2, python-docx
- Data Validation: Pydantic
- Package Management: uv (fast Python package installer and resolver)
📋 Prerequisites
- Python 3.8+
- Claude CLI installed and configured (Setup Guide)
- uv package manager (Install uv)
🚀 Quick Start
-
Clone the repository
git clone https://github.com/yourusername/cv-parser.git cd cv-parser -
Install dependencies
-
Configure Claude CLI
# Make sure Claude CLI is installed and authenticated claude config -
Run the application
-
Open your browser Navigate to
http://localhost:8080
🎮 Usage
📤 Upload & Parse
- Upload a CV file (drag & drop or click to select)
- Choose parsing mode:
- Instant: Quick one-step parsing
- Progressive: Step-by-step with live visualization (recommended)
- Watch the magic happen ✨
📊 View Results
- Live progress: See real-time parsing steps
- Structured data: Clean, organized candidate information
- Export options: JSON format for integration
📁 Project Structure
cv-parser/
├── app.py # Main Flask application
├── src/ # Organized source code
│ ├── config/ # Configuration management
│ ├── models/ # Data models and validation
│ ├── parsers/ # CV parsing engines
│ └── utils/ # Utility functions
├── templates/ # HTML templates
│ ├── base.html # Base template
│ ├── index.html # Upload interface
│ ├── progressive.html # Live parsing UI
│ └── results.html # Results display
├── static/ # Static assets
├── examples/ # Sample files for testing
├── docs/ # Documentation
└── pyproject.toml # Dependencies and config
⚙️ Configuration
Claude Model Selection
The system uses Claude 3.5 Sonnet by default. You can modify the model using environment variables:
export CLAUDE_MODEL="sonnet" export CLAUDE_TIMEOUT="120"
File Upload Limits
Configure in environment or src/config/settings.py:
MAX_FILE_SIZE = 16 * 1024 * 1024 # 16MB ALLOWED_EXTENSIONS = {'txt', 'pdf', 'docx', 'doc'}
📦 Why uv?
This project uses uv for dependency management because it's:
- ⚡ 10-100x faster than pip
- 🔒 Reliable with deterministic dependency resolution
- 🎯 Simple - drop-in replacement for pip
- 🔄 Compatible with standard Python packaging
🔒 Security & Privacy
- No data persistence: Uploaded files are processed and can be automatically cleaned up
- Local processing: All parsing happens on your machine
- Configurable retention: Set your own file cleanup policies
- Secure uploads: File type validation and size limits
🤝 Contributing
Contributions are welcome! Here's how to get started:
- 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
Development Setup
# Clone your fork git clone https://github.com/yourusername/cv-parser.git cd cv-parser # Install development dependencies uv sync # Run in development mode uv run python app.py
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Anthropic for the powerful Claude AI
- Claude Code for the excellent CLI interface
- Tailwind CSS for the beautiful styling
- Flask for the robust web framework
🐛 Issues & Support
Found a bug or need help?
- Create an issue: GitHub Issues
- Check existing issues: Search before creating new ones
- Provide details: Include error messages, CV formats, and steps to reproduce
🎯 Roadmap
- Batch processing: Handle multiple CVs at once
- API endpoints: RESTful API for integration
- Export formats: PDF, Excel, CSV outputs
- Custom fields: User-defined extraction fields
- Templates: CV format templates and matching
- Analytics: Parsing statistics and insights
⭐ Star this repo if it helped you! | 🔗 Share with your network | 🐛 Report issues