Skip to content

boipelo-codes/PrepCheck

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

99 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PrepCheck

AI-Powered Work Readiness Screener

Revolutionising career readiness assessment with AI-powered CV analysis and personalised recommendations.

PrepCheck is an intelligent career readiness platform that provides instant, actionable feedback on CVs. Using advanced AI (Google Gemini), it analyses CVs across five critical dimensions and offers specific recommendations to help job seekers stand out in a competitive market.

πŸ’‘ Why We Created PrepCheck

Traditional CV feedback is:

-Expensive: Career counselling costs R400+ per session, CV analysis R300+.
-Slow: Wait days or weeks for professional review.
-Generic: One-size-fits-all advice lacking specificity.
-Inaccessible: Not financially accessible to students and career changers.

PrepCheck solves this by providing instant, intelligent, personalised feedback at no cost, making professional CV analysis accessible to everyone.

Try PrepCheck now - No installation required!
πŸ”— Live Demo: PrepCheck

Click the link above to start receiving personalised CV analyses! πŸ’•πŸŽ¨πŸŒŸ

🎨 Features

✨ Key Features:
πŸ” Comprehensive CV Analysis

Five-Bucket Scoring System (100 points total):

  • CV Professionalism and Formatting (20 points).
  • Projects and Experience (20 points).
  • Technical Skills (20 points)
  • Soft Skills (20 points).
  • Education & Certifications (20 points).

πŸ€– PrepPal AI Assistant

  • Conversational AI that answers follow-up questions in real-time.
  • Spelling-tolerant and context-aware.
  • Maintains conversation history for relevant responses.
  • Sound notifications for enhanced UX.
  • Animated robot avatar with smooth animations.

πŸ“Š Visual Analytics

  • Radial charts for score visualisation.
  • Progress indicators for each bucket.
  • Dark/light mode with system detection.
  • Responsive design (mobile-first approach).

πŸ“„ PDF Report Generation

  • Professional branded reports.
  • Complete score breakdown with visual elements.
  • Actionable recommendations.
  • Top priority improvements highlighted.

πŸ”’ Security & Privacy

  • CVs processed securely and not stored.
  • Environment variable-based configuration.
  • Kubernetes secrets for sensitive data.
  • CORS protection and input validation.

βš™ How PrepCheck Works

  1. User uploads their CV in either PDF or Word format.
  2. Backend verifies if the file is an appropriate CV.
  3. Once passed verification- the backend sends this file to Gemini's API.
  4. The AI returns a personalised CV analysis.
  5. Users can chat to PrepPal for more information on the CV analysis.

πŸ’Œ Themes

  • Light mode: light blues and purples with black font.
  • Dark mode: dark blues and purples with white font.

πŸ“· Preview

Landing page: 2025-11-21 (5)
Users are prompted to upload a CV for analysis

2025-11-21 (7) *Dark mode*

Generated CV Analysis
2025-11-21 (8)
After CV file is verified- CV Analysis is done

2025-11-21 (17) *Dark mode*

PrepPal 2025-11-21 (12) Light mode

2025-11-21 (19) *Dark mode*

β›“ Tech Stack

πŸ›  Technology Stack
Frontend

React 18 - Modern UI library with hooks.
Vite - Lightning-fast build tool.
Framer Motion - Smooth animations.
Recharts - Data visualisation.
Lucide React - Icon library.
Axios - HTTP client.

Backend

Node.js v20 - JavaScript runtime.
Express.js - Web framework.
Multer - File upload handling.
pdf-parse - PDF text extraction.
Mammoth - DOCX text extraction.
@google/generative-ai - Gemini API SDK.

AI/ML

Google Gemini 2.0 Flash - Large language model.
Natural Language Processing.
Structured JSON output generation.
Conversational AI capabilities.

DevOps

Docker - Containerisation.
Kubernetes - Container orchestration.
GitHub Actions - CI/CD automation.
Docker Hub - Container registry.

πŸ–₯ How to Run

Note: PrepCheck is already live at PrepCheck
These instructions are for running the project on your local machine for development.

Prerequisites

Node.js v20 or higher.
Docker Desktop (for containerisation).
Kubernetes cluster (Minikube for local, OpenShift for production).
Google Gemini API key Get one here.

1. Clone the Repository
Open your terminal and run:

git clone https://github.com/MmelIGaba/PrepCheck.git  
cd PrepCheck

2. Install Backend Dependencies

cd backend  
npm install

3. Configure Environment Variables

Create a .env file in the backend folder.
Copy the content from .env.example into your new .env file.
Add your own Gemini API key:

PORT=5000  
GEMINI_API_KEY=your_actual_gemini_api_key_here

4. Start the Backend Server:

npm run dev

The backend will run on http://localhost:3000 by default.

5. Serve the Frontend
Open a new terminal window:

cd frontend  
npm install

6. Configure Environment Variables
Create a .env file in the server folder.
Copy the content from .env.example into your new .env file.
Add VITE_API_URL

VITE_API_URL=http://localhost:5000

7. Serve the Frontend
Open a new terminal window:

cd frontend
npm run dev

Or use the Live Server extension in VS Code.
The frontend will run on http://localhost:3000.

8. Open in Browser
Navigate to http://localhost:3000 and start analysing your CV!

πŸš€ Docker Deployment

Building Images
Backend:

cd backend  
docker build -t mmeligab/prepcheck-backend:latest .

Frontend:

cd frontend  
docker build -t mmeligab/prepcheck-frontend:latest .  

Using Docker Compose

*Start all services*   
docker-compose up -d  

*View logs*  
docker-compose logs -f  

*Stop services*  
docker-compose down

Access the application at http://localhost:80

Pushing to Docker Hub

*Login to Docker Hub*  
docker login

*Push images*    
docker push mmeligab/prepcheck-backend:latest  
docker push mmeligab/prepcheck-frontend:latest

Docker Hub Repository: mmeligab/prepcheck

πŸš€ Deployment

This project is deployed using:

  • Frontend: Render (serves static files from frontend/ folder).
  • Backend: Render (Node.js/Express server from backend/ folder).

Deploy Your Own Instance:

Backend (Render):

  1. Create an account at Render.
  2. New Web Service β†’ Connect Git repo.
  3. Root Directory: backend.
  4. Build: npm install.
  5. Start: npm start.
  6. Add GEMINI_API_KEY environment variable.

Frontend (Render):

  1. Create an account at Render.
  2. New Static Site β†’ Connect Git repo.
  3. Root Directory: frontend.
  4. Publish Directory: dist.
  5. Build: npm install & npm run build.
  6. Add VITE_APP_URL with backend Render URL environment variable.

πŸ“‚ API Documentation

Base URL

Production: https://prepcheck-prepcheck.apps.<cluster-name>.com  
Development: http://localhost:5000

Endpoints

1. Health Check

GET /api/health

Response:

{   
  "status”:β€œok”,β€œmessage”:β€œServer is running!”   
}

2. Analyse CV

POST /api/analyse  
Content-Type: multipart/form-data

Request Body:

cv (file): PDF or DOCX file (max 10MB)

{  
  "success": true,  
  "analysis": {  
    "overall_score": 75,  
    "summary": "Your CV shows strong technical skills...",  
    "buckets": [  
      {  
        "name": "CV Professionalism & Formatting",  
        "score": 15,  
        "strengths": ["Clear structure", "Professional layout"],  
        "recommendations": ["Add contact information", "Use consistent formatting"]  
      }  
      // ... 4 more buckets  
    ],  
    "top_priorities": [  
      "Expand on project descriptions",  
      "Add quantifiable achievements",  
      "Include relevant certifications"  
    ]  
  }  
}  

Error Responses

{  
  "error": "This is not a CV. Please upload a proper CV/Resume.",  
  "type": "invalid_cv"  
}

3. PrepPal Chat

POST /api/chat  
Content-Type: application/json

Request Body:

{  
  "message": "How can I improve my CV?",  
  "conversationHistory": [  
    {  
      "role": "user",  
      "content": "What's my score?"  
    },  
    {  
      "role": "assistant",  
      "content": "Your overall score is 75/100."  
    }  
  ]  
}

Response

{  
  "success": true,  
  "reply": "To improve your CV, focus on quantifying your achievements..."  
}

File Upload Constraints

  • Supported formats: PDF (.pdf), DOCX (.docx).
  • Maximum size: 10MB.
  • Validation: Must contain CV-related content.

Rate Limiting

-Google Gemini Free Tier: 1,500 requests/day.
-No rate limiting on API endpoints (controlled by Gemini).

πŸ“Š System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ USER INTERFACE β”‚
β”‚ (Web Browser / Mobile) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ HTTPS
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ FRONTEND (React + Vite) β”‚
β”‚ β€’ React 18 with hooks β”‚
β”‚ β€’ Framer Motion animations β”‚
β”‚ β€’ Recharts visualisation β”‚
β”‚ β€’ Dark/light mode support β”‚
β”‚ β€’ Responsive design β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ REST API (HTTP/JSON)
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ BACKEND (Node.js + Express) β”‚
β”‚ β€’ RESTful API endpoints β”‚
β”‚ β€’ File upload handling β”‚
β”‚ β€’ Text extraction (PDF/DOCX) β”‚
β”‚ β€’ CV validation layer β”‚
β”‚ β€’ Error handling & logging β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ API Calls (HTTPS)
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ AI SERVICE (Google Gemini 2.0) β”‚
β”‚ β€’ Natural language processing β”‚
β”‚ β€’ Structured JSON generation β”‚
β”‚ β€’ Conversational AI (PrepPal) β”‚
β”‚ β€’ Context understanding β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ DOCKER CONTAINERS β”‚
β”‚ β€’ Frontend: Nginx Alpine β”‚
β”‚ β€’ Backend: Node 22 Bullseye β”‚
β”‚ β€’ Multi-stage builds β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ KUBERNETES ORCHESTRATION β”‚
β”‚ β€’ Deployments (3 replicas/service) β”‚
β”‚ β€’ Services (load balancing) β”‚
β”‚ β€’ Secrets (API keys) β”‚
β”‚ β€’ ConfigMaps (configuration) β”‚
β”‚ β€’ Rolling updates (zero-downtime) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”’ Security Notes

⚠️ Never commit .env files - They contain sensitive API keys.
βœ”οΈ Always use an .env.example as a template for team members.
βœ”οΈ Regenerate API keys if accidentally exposed.
βœ”οΈ Use environment variables for all secrets.

πŸ“„ License

This project was created as part of a coding bootcamp group's AI-Powered Low-Code App- Containerised DevOps Capstone.

πŸ“ž Support

If you encounter any issues:

  • Check that your Gemini API key is valid.
  • Ensure both frontend and backend servers are running.
  • Check browser console for errors.

πŸ‘©πŸ½β€πŸ’» The CloudCTRL Team

Name Role Profile
Mmeli Dyantyi Scrum Master GitHub
Nqobile Masombuka Fullstack Developer GitHub
Boipelo Ngakane Fullstack Developer GitHub

Made with πŸ’œ by CloudCTRL.

About

AI powered Work Readiness Screener.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 66.9%
  • CSS 32.0%
  • Other 1.1%