WebCV is a modern, full-stack application that connects job seekers with employers through automated job scraping, AI-powered CV text extraction, keyword matching, and a comprehensive applicant tracking dashboard.
The project has been organized into a professional, clean, and modular folder structure:
├── backups/ # Database backups and archive files
├── docs/ # System design, ML documentation, and guides
│ ├── DEPLOYMENT.md # Server and deployment instructions
│ ├── FRONTEND_DOCUMENTATION.md
│ ├── ML_DOCUMENTATION.md # CV extraction and matching algorithms
│ ├── MIGRATION_COMMANDS.md # Flask-Migrate CLI command list
│ └── SYSTEM_DOCUMENTATION.md
│
├── backend/ # Flask backend service (Python)
│ ├── app/ # Core application blueprints, models, and routes
│ │ ├── routes/ # Blueprints for authentication, jobs, etc.
│ │ └── models.py # SQLAlchemy schemas (PostgreSQL)
│ │
│ ├── scraper/ # BongThom Selenium job scraper package
│ │ ├── auto_scraper.py # Scraper engine
│ │ ├── scheduler.py # Daily cron job trigger (APScheduler)
│ │ └── run_scraper_now.py# Manual execution script
│ │
│ ├── scripts/ # Maintenance and developer utility scripts
│ │ ├── seed.py # Populates initial data
│ │ ├── check_jobs.py # Database queries check helper
│ │ └── check_notifications.py
│ │
│ ├── logs/ # Centralized logs folder (ignored by git)
│ ├── config.py # App configurations
│ ├── run.py # Gunicorn / Flask entry point
│ └── requirements.txt # Python dependencies
│
├── src/ # Next.js frontend app (React / TypeScript)
│ ├── pages/ # File-system router routes and page views
│ ├── components/ # Reusable UI components (Navbar, Layouts, etc.)
│ ├── lib/ # Fetch API helpers and shared types
│ └── styles/ # Global CSS styles
│
├── ml/ # Machine Learning service codebase (FastAPI)
│ ├── data/ # Job description dataset for Cosine indexing
│ ├── src/ # Core vectorizer and layout parsing modules
│ └── main.py # API route entrypoint
│
├── docker-compose.yml # Main multi-container composer file
└── Dockerfile # Next.js production build container
Make sure you have Docker installed, then boot the entire stack (Database, Backend, Worker, Frontend, and Nginx proxy):
docker compose up --build -dAccess points:
- Frontend App: http://localhost (Proxy handles port forwarding)
- Backend API: http://localhost/api
- Navigate to root and install dependencies:
npm install
- Start the local server:
The site will be available on http://localhost:3000.
npm run dev
- Move to the backend folder:
cd backend - Execute setup helper to configure virtual environment and
.envtemplate:- On Linux/macOS:
bash setup.sh - On Windows:
setup.bat
- On Linux/macOS:
- Edit the newly generated
.envfile to customize database links. - Run migrations and seed files:
flask db upgrade python -m scripts.seed
- Start Flask development server:
python run.py
When running backend scripts or the scraper manually outside of Docker, execute them as python package modules from the backend/ directory:
- Seed database:
python -m scripts.seed
- Execute job scraper immediately:
python -m scraper.run_scraper_now
- Launch scraper scheduler:
python -m scraper.scheduler
- Verify database notifications count:
python -m scripts.check_notifications