A production-ready platform that helps candidates tailor resumes, track job applications, and auto-fill job portal forms using AI insights.
- Backend (Node.js + Express + GraphQL) – Resume parsing, job analysis, AI optimization through OpenAI, JWT auth, MongoDB persistence, Redis caching, S3 file storage.
- Frontend (React + TypeScript + Vite) – Secure dashboard for resume management, job tracker, AI suggestions, and application pipeline views.
- Chrome Extension (Manifest v3 + React) – Detects supported job portals, auto-fills profile data, and fetches tailored AI suggestions from the backend.
- Infrastructure – Dockerized services, docker-compose for local development, Jenkins CI/CD pipeline, Kubernetes manifests for AWS EKS (via Rancher), TLS termination through ACM, centralized logging/monitoring hooks.
apps/
backend/ Express API + GraphQL server
frontend/ React dashboard (Vite)
extension/ Chrome extension (MV3)
packages/
shared-types/ Shared TypeScript domain models
shared-utils/ Cross-cutting utilities
infra/
docker/ Service-specific Dockerfiles
k8s/ Kubernetes manifests
nginx/ Nginx reverse proxy config
env/ Environment templates
scripts/ Automation hooks (future)
- Node.js 20+
- npm 10+
- Docker & Docker Compose (for containerized local dev)
- OpenAI API key, AWS credentials (S3), MongoDB and Redis endpoints for production
cp env/.env.example .env.local # adjust secrets as needed
docker-compose up --buildServices:
- Backend: http://localhost:4000 (REST under
/api, GraphQL at/graphql) - Frontend: http://localhost:5173
- MongoDB: mongodb://localhost:27017/resume_optimizer
- Redis: redis://localhost:6379
- MinIO (S3-compatible dev bucket): http://localhost:9000 (console at :9001)
The compose stack provisions the S3 bucket automatically and wires environment variables for the backend container.
npm install --workspaces --include-workspace-root
# Shared libraries
npm run build --workspace packages/shared-types
npm run build --workspace packages/shared-utils
# Backend API
env $(cat env/.env.example | xargs) npm run dev --workspace apps/backend
# Frontend dashboard
npm run dev --workspace apps/frontend
# Vite dev server on http://localhost:5173 (proxy → backend http://localhost:4000)
# Chrome extension
npm run dev --workspace apps/extension
# load apps/extension/dist via chrome://extensions (Developer mode → Load unpacked)All backend variables are defined in env/.env.example, including JWT secrets, OpenAI model, Redis/Mongo URIs, AWS S3 configuration, and CORS origins.
- REST – Documented via
apps/backend/src/docs/openapi.yaml(see API Reference below). Health endpoint available at/api/health. - GraphQL – Schema composed under
apps/backend/src/graphql/schema.ts. Key entry points:- Query:
me,resumes,jobs,applications - Mutation:
register,login,uploadResume,createJob,optimizeResume, etc.
- Query:
# REST (OpenAPI → HTML using redocly)
npx redoc-cli bundle apps/backend/src/docs/openapi.yaml -o docs/api.html
# GraphQL schema SDL
npx graphql-cli print-schema --endpoint http://localhost:4000/graphql
# Run all unit/integration tests
npm run test --workspaces
# Sample scoped runs
npm run test --workspace apps/backend
npm run test --workspace packages/shared-utils- Backend – Jest-powered unit tests for services (
auth.service,resume.parser) and HTTP integration tests (/api/health). - Shared utilities – Vitest suite covering helper functions.
- Additional integration/e2e scenarios (Mongo/Redis/OpenAI) can be executed with docker-compose profile specific test stacks.
- Detects LinkedIn, Lever, Greenhouse, and Workday job pages and extracts title/company/description.
- Provides floating panel to:
- Autofill applicant info (name, email, phone, location, LinkedIn) using stored profile values.
- Invoke
POST /jobs+POST /ai/optimizeto fetch ATS score, missing keywords, STAR bullet suggestions.
- Popup UI stores API base URL, JWT, resume ID, and profile fields in Chrome sync storage.
Jenkinsfiledefines stages: checkout → install → lint → test → build → Docker build/push → kubectl deploy.- Docker images tagged per build and pushed to
registry.example.com/resume-optimizer(replace with your registry + credentials IDs). - Pipeline publishes test results (
apps/backend/coverage/junit.xml) and cleans workspace after each build.
Manifests under infra/k8s/ include:
- Namespace, ConfigMap, and Secret definitions for backend configuration/secrets.
- Deployments/Services for backend (
resume-backend), frontend (resume-frontend), Redis, and MongoDB (stateful set with PVC). - Ingress (ALB-compatible) with TLS via AWS ACM.
Apply stack:
kubectl apply -f infra/k8s/namespace.yaml
kubectl apply -f infra/k8s/backend-config.yaml
kubectl apply -f infra/k8s/backend-secret.yaml
kubectl apply -f infra/k8s/mongo-statefulset.yaml
kubectl apply -f infra/k8s/redis-deployment.yaml
kubectl apply -f infra/k8s/backend-deployment.yaml
kubectl apply -f infra/k8s/frontend-deployment.yaml
kubectl apply -f infra/k8s/ingress.yamlIntegrate Fluent Bit / CloudWatch (or ELK) and Prometheus/Grafana to capture logs/metrics from pods (hooks included as commentary in manifests).
- JWT access + refresh tokens with configurable lifetimes.
- Passwords stored as bcrypt hashes, refresh tokens hashed before persistence.
- S3 uploads enforce server-side AES-256 encryption and signed download URLs.
- Environment secrets sourced from Kubernetes Secrets / Jenkins credentials.
- CORS restricts origins to configured frontend + extension IDs.
- Redis caches AI results for six hours to reduce OpenAI usage while avoiding stale data.
- Background job orchestrator (BullMQ) for long-running parsing/AI tasks.
- Integration with LinkedIn/Google OAuth (placeholders in AuthService).
- Advanced ATS scoring using embeddings and semantic diffing.
- Notification system (email/Slack) for follow-up reminders.
- Observability stack (Grafana dashboards illustrated for ATS score trends, queue depth, API latency).
For contribution guidelines, open issues or submit PRs with linted/tested changes. Documentation updates and deployment automation scripts are welcome additions.