From 99b80c818b509650a1e617ceed0c2766600bd943 Mon Sep 17 00:00:00 2001 From: Mmeli Date: Mon, 24 Nov 2025 10:03:53 +0200 Subject: [PATCH 1/4] README file added --- README.md | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/README.md b/README.md index 8b13789..7f59142 100644 --- a/README.md +++ b/README.md @@ -1 +1,170 @@ +# PrepCheck +PrepCheck is an AI-powered career readiness screener application designed to analyze CVs and provide insightful feedback. It consists of a modern React frontend and a Node.js/Express backend integrated with Google Gemini AI for advanced CV analysis. + +--- + +## Table of Contents + +- [App Overview](#app-overview) +- [Technologies](#technologies) +- [Features](#features) +- [Getting Started - Development Setup](#getting-started---development-setup) +- [Testing](#testing) +- [Docker & Containerization](#docker--containerization) +- [CI/CD Pipeline](#cicd-pipeline) +- [Hosting](#hosting) +- [License](#license) + +--- + +## App Overview + +The PrepCheck application allows users to upload their CVs/resumes in PDF or DOCX format for AI-powered parsing and analysis. The backend extracts the textual content from the CV and sends it to Google Gemini AI for analysis to deliver personalized career readiness insights. Additionally, the app features a chat assistant for interactive querying. + +The frontend is a React-based UI built with Vite and Tailwind CSS, providing a performant and responsive user experience including visualization and document upload. + +--- + +## Technologies + +### Backend +- Node.js with Express framework +- File upload handling with Multer +- CV parsing with `pdf-parse` and `mammoth` (for DOCX) +- AI integration via Google Generative AI SDK +- Environment configuration with `dotenv` +- Testing with Jest and Supertest + +### Frontend +- React 18 with Vite as the build tool +- Styling with Tailwind CSS +- HTTP requests with Axios +- Animations using Framer Motion +- Visualization using Recharts +- PDF generation using jsPDF +- Tested with relevant unit and e2e testing tools + +--- + +## Features + +- **CV Upload and Analysis:** Upload PDF or DOCX CV files for AI-driven analysis. +- **AI Chat Assistant:** Interactive chat for career-related questions. +- **Health Check API:** Endpoint to verify backend server status. +- **Robust Validation:** File size limits and format validation (max 10MB). +- **Responsive Frontend:** Fast, intuitive user interface with charts and dashboards. + +--- + +## Getting Started - Development Setup + +### Backend + +1. Navigate to the `backend` directory: + ```bash + cd backend + ``` +2. Install dependencies: + ```bash + npm install + ``` +3. Start the development server with hot reload: + ```bash + npm run dev + ``` +4. The backend server will run by default on `http://localhost:5000`. + +### Frontend + +1. Navigate to the `frontend` directory: + ```bash + cd frontend + ``` +2. Install dependencies: + ```bash + npm install + ``` +3. Start the development server: + ```bash + npm run dev + ``` +4. The frontend app will run by default on `http://localhost:5173`. + +--- + +## Testing + +### Backend Tests + +- Located in `backend/tests/` +- Run backend tests using Jest: + ```bash + npm test + ``` + +### Frontend Tests + +- Located under `frontend/tests/` +- Use your preferred test runner as configured for React/Vite stack. + +--- + +## Docker & Containerization + +PrepCheck uses Docker to containerize both the backend and frontend for easy deployment and consistent environment: + +- **Backend Dockerfile:** + - Uses `node:22-alpine` base image. + - Installs dependencies with production optimizations. + - Exposes port `5000`. + - Starts with `node server.js`. + +- **Frontend Dockerfile:** + - Multi-stage build with `node:22-alpine` for building the React app via Vite. + - Production image served by `nginx:stable-alpine`. + - Exposes port `80`. + +- **docker-compose.yaml** orchestrates both services: + - Backend listens on host port `6000` mapping to container port `5000`. + - Frontend serves on host port `80`. + - Frontend service waits on backend healthcheck to ensure readiness. + +To build and run containers locally with Docker Compose: + +```bash +docker-compose up --build +``` + +--- + +## CI/CD Pipeline + +PrepCheck leverages GitHub Actions for continuous integration and deployment: + +- The workflow triggers on pushes and pull requests to the `main` branch. +- Uses Docker Buildx to build and push the backend Docker image. +- Pushes to Docker Hub repository `mmeligab/prepcheck-backend`. +- Configured with caching for efficient image builds. +- Authentication uses GitHub Secrets for Docker Hub credentials. + +This pipeline ensures automated testing, building, and pushing of Docker images on update. + +--- + +## Hosting + +The application is designed to be hosted in a Docker-compatible environment: + +- Run backend and frontend as separate containers managed via `docker-compose`. +- Backend exposed on port `6000` on the host. +- Frontend exposed on port `80` and depends on the backend being healthy before starting. +- Suitable for deployment on cloud platforms supporting Docker (e.g., AWS ECS, Azure Container Instances, DigitalOcean, or a VPS server with Docker installed). + +--- + +## License + +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. + +--- From d4a0984832477aa96e404d9c5aa94f5b91de8411 Mon Sep 17 00:00:00 2001 From: Mmeli Date: Mon, 24 Nov 2025 10:10:08 +0200 Subject: [PATCH 2/4] Added team section --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 7f59142..df8091a 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,12 @@ The application is designed to be hosted in a Docker-compatible environment: - Frontend exposed on port `80` and depends on the backend being healthy before starting. - Suitable for deployment on cloud platforms supporting Docker (e.g., AWS ECS, Azure Container Instances, DigitalOcean, or a VPS server with Docker installed). +--- +## Devs + +- Tech Lead Frontend / Backend: (Nqobile){https://github.com/n-qobile} +- Writer: (Boipelo){https://github.com/boipelo-codes} +- DevOps: (Mmeli){https://github.com/MmelIGaba} --- ## License From 2ef846fc19ac0962c3c8eacee46f17a09fba33af Mon Sep 17 00:00:00 2001 From: Mmeli Date: Mon, 24 Nov 2025 10:12:26 +0200 Subject: [PATCH 3/4] Added team section, hyperlinks --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index df8091a..30d5420 100644 --- a/README.md +++ b/README.md @@ -164,9 +164,10 @@ The application is designed to be hosted in a Docker-compatible environment: --- ## Devs -- Tech Lead Frontend / Backend: (Nqobile){https://github.com/n-qobile} -- Writer: (Boipelo){https://github.com/boipelo-codes} -- DevOps: (Mmeli){https://github.com/MmelIGaba} +- Tech Lead Frontend / Backend: [Nqobile](https://github.com/n-qobile) +- Writer: [Boipelo](https://github.com/boipelo-codes) +- DevOps: [Mmeli](https://github.com/MmelIGaba) + --- ## License From 143bd7e8d7992150b05a260d0be72665f37a4f75 Mon Sep 17 00:00:00 2001 From: Mmeli Date: Mon, 24 Nov 2025 10:15:05 +0200 Subject: [PATCH 4/4] Personal website links --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 30d5420..97e16f4 100644 --- a/README.md +++ b/README.md @@ -164,9 +164,9 @@ The application is designed to be hosted in a Docker-compatible environment: --- ## Devs -- Tech Lead Frontend / Backend: [Nqobile](https://github.com/n-qobile) +- Tech Lead Frontend / Backend: [Nqobile](https://nqobile-portfolio.onrender.com/) - Writer: [Boipelo](https://github.com/boipelo-codes) -- DevOps: [Mmeli](https://github.com/MmelIGaba) +- DevOps: [Mmeli](https://personal-site-zeta-silk.vercel.app/) ---