An intelligent resume parsing platform that extracts structured data from resumes using OCR, NLP, and AI.
- Backend: FastAPI (Python 3.11+) with WebSocket support
- Frontend: React 18+ with TypeScript and WebSocket hooks
- Database: PostgreSQL with JSONB
- AI/ML: Tesseract OCR, spaCy NLP, OpenAI GPT-4
- Deployment: Railway (backend), Vercel (frontend)
- Testing: Pytest (backend), Vitest (frontend)
- Multi-format support (PDF, DOCX, DOC, TXT)
- Real-time parsing progress via WebSocket
- NLP-based entity extraction
- Confidence scoring
- Review and edit parsed data
- Shareable links with configurable expiration
- Export to PDF with professional formatting
- Social sharing (WhatsApp, Telegram, Email)
- Access tracking and share revocation
resume-parser/
|-- backend/ # FastAPI application
| |-- app/
| | |-- api/ # API routes & WebSocket handlers
| | |-- models/ # SQLAlchemy models & progress types
| | |-- services/ # Business logic (parser, orchestrator, export)
| | |-- core/ # Storage, config, database
| | `-- main.py # FastAPI app entry
| |-- tests/
| | |-- unit/ # Unit tests
| | |-- integration/ # Integration tests
| | `-- e2e/ # End-to-end tests
| `-- requirements.txt
|-- frontend/ # React application
| |-- src/
| | |-- components/ # React components
| | |-- pages/ # Page components
| | |-- hooks/ # Custom React hooks (WebSocket)
| | |-- services/ # API client
| | `-- lib/ # Utilities
| `-- package.json
`-- docs/
`-- plans/
cd backend
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Download spaCy model
python -m spacy download en_core_web_sm
# Setup environment
cp .env.example .env
# Edit .env with your configuration
# Run development server
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000Backend will be available at http://localhost:8000
cd frontend
# Install dependencies
npm install
# Setup environment
cp .env.example .env
# Edit .env if needed (defaults to http://localhost:8000)
# Run development server
npm run devFrontend will be available at http://localhost:3000
Backend:
cd backend
source .venv/bin/activate
python -m pytest tests/ -vFrontend:
cd frontend
npm test -- --run
npm run type-check- Upload - Upload resume (PDF, DOCX, DOC, TXT) at http://localhost:3000
- Processing - Watch real-time parsing progress via WebSocket
- Review - Review extracted data with confidence scores, make corrections
- Share - Create shareable links, export to PDF, or share via social media
Connection:
ws://localhost:8000/ws/resumes/{resume_id}
Progress Update Message:
{
"type": "progress_update",
"stage": "text_extraction | nlp_parsing | ai_enhancement | complete",
"progress": 50,
"status": "Extracting text...",
"estimated_seconds_remaining": 15
}POST /v1/resumes/{resume_id}/shareResponse:
{
"share_token": "uuid-v4-token",
"share_url": "http://localhost:3000/share/uuid-v4-token",
"expires_at": "2026-03-20T12:00:00"
}PDF:
GET /v1/resumes/{resume_id}/export/pdfReturns PDF file with Content-Type: application/pdf
WhatsApp:
GET /v1/resumes/{resume_id}/export/whatsapp{
"whatsapp_url": "https://wa.me/?text=..."
}Telegram:
GET /v1/resumes/{resume_id}/export/telegram{
"telegram_url": "https://t.me/share/url?url=&text=..."
}Email:
GET /v1/resumes/{resume_id}/export/email{
"mailto_url": "mailto:?subject=...&body=..."
}GET /v1/share/{share_token}Returns resume data without authentication. Status codes:
200- Success403- Share has been revoked404- Share not found410- Share has expired
DELETE /v1/resumes/{resume_id}/shareResponse:
{
"message": "Share revoked successfully",
"resume_id": "resume-id"
}Backend (.env):
DATABASE_URL- PostgreSQL connection stringREDIS_URL- Redis connection for CeleryOPENAI_API_KEY- OpenAI API key (optional)SECRET_KEY- Secret key for signingALLOWED_ORIGINS- CORS allowed origins
Frontend (.env):
VITE_API_BASE_URL- Backend API base URLVITE_WS_BASE_URL- WebSocket base URL
- Unit tests: 67 tests
- Integration tests: 50 tests
- E2E tests: 4 tests
- Component tests: 31 tests
- Type check: Passed (TypeScript strict mode)
MIT