How kashif107/resumeguard works
This is an AI resume analyzer with a React client and an Express API backed by PostgreSQL, Redis/BullMQ, Cloudinary, and OpenRouter. The main workflow is authenticated PDF upload, text extraction and persistence, asynchronous scoring, then polling and rendering feedback. Authentication and resume-management routes are distinct supporting stages. The worker combines cached keyword matching with LLM scoring and handles failures through retries and a dead-letter queue. Some frontend wiring is documented in the README but its source was not excerpted; those links cite the README.
Main entry points: scoring.worker.js Scoring Worker · resume.controller.js Resume Controller · api.js API Client · resume.jsx Resume Results UI
Components 34
Client
- Authentication UI
frontend/app/routes/auth.jsx - Resume List UI
frontend/app/routes/home.jsx - Upload UI
frontend/app/routes/upload.jsx - Resume Results UI
frontend/app/routes/resume.jsx - Wipe UI
frontend/app/routes/wipe.jsx - API Client
frontend/app/lib/api.js - File Uploader
frontend/app/components/FileUploader.jsx - Client Utilities
frontend/app/lib/utils.js - Score Summary
frontend/app/components/Summary.jsx - ATS Feedback
frontend/app/components/ATS.jsx - Score Details
frontend/app/components/Details.jsx - Feedback Accordion
frontend/app/components/Accordion.jsx - Score Circle
frontend/app/components/ScoreCircle.jsx - Score Gauge
frontend/app/components/ScoreGauge.jsx - Resume Card
frontend/app/components/ResumeCard.jsx
API and Identity
- Express API
backend/server.js - Auth Routes
backend/routes/auth.routes.js - Auth Controller
backend/controllers/auth.controller.js - JWT Middleware
backend/middleware/auth.middleware.js - User Model
backend/db/models/user.model.js
Resume Intake and Storage
- Resume Routes
backend/routes/resume.routes.js - Upload Middleware
backend/middleware/upload.middleware.js - Resume Controller
backend/controllers/resume.controller.js - PDF Service
backend/services/pdf.service.js - Cloudinary Service
backend/services/cloudinary.service.js - Resume Model
backend/db/models/resume.model.js - PostgreSQL
backend/db/postgres.js
Scoring Pipeline
- Scoring Worker
backend/workers/scoring.worker.js - Scoring Queue
backend/queues/scoring.queue.js - Redis Connection
backend/queues/connection.js - Scoring Service
backend/services/scoring.service.js - Feedback Cache
backend/services/cache.service.js
Other components
- Candidate
- Cloudinary
Connections 37
- Candidate → Authentication UI: uses
README.md - Candidate → Upload UI: submits PDF
README.md - Candidate → Resume List UI: views resumes
README.md - API Client → Express API: calls API
README.md - Upload UI → API Client: uploads and polls
README.md - Resume List UI → API Client: lists resumes
README.md - Resume Results UI → API Client: polls result
README.md - Wipe UI → API Client: requests wipe
README.md - File Uploader → Client Utilities: uses
frontend/app/components/FileUploader.jsx - Resume Results UI → Score Summary: renders
README.md - Resume Results UI → ATS Feedback: renders
README.md - Resume Results UI → Score Details: renders
README.md - Score Details → Feedback Accordion: renders
frontend/app/components/Details.jsx - Score Summary → Score Circle: renders
- Score Summary → Score Gauge: renders
- Resume List UI → Resume Card: renders
- Express API → Auth Routes: mounts
backend/server.js - Express API → Resume Routes: mounts
backend/server.js - Auth Routes → Auth Controller: dispatches
backend/routes/auth.routes.js - Auth Routes → JWT Middleware: protects me
backend/routes/auth.routes.js - Auth Controller → User Model: reads and creates
backend/controllers/auth.controller.js - Resume Routes → JWT Middleware: protects routes
backend/routes/resume.routes.js - Resume Routes → Upload Middleware: parses upload
backend/routes/resume.routes.js - Resume Routes → Resume Controller: dispatches
backend/routes/resume.routes.js - Resume Controller → Cloudinary Service: uploads PDF
backend/controllers/resume.controller.js - Cloudinary Service → Cloudinary: stores asset
- Resume Controller → PDF Service: extracts text
backend/controllers/resume.controller.js - Resume Controller → Resume Model: persists and reads
backend/controllers/resume.controller.js - Resume Controller → Scoring Queue: enqueues job
backend/controllers/resume.controller.js - Resume Model → PostgreSQL: queries
backend/db/models/resume.model.js - Scoring Queue → Redis Connection: uses connection
backend/queues/scoring.queue.js - Scoring Worker → Redis Connection: connects
backend/workers/scoring.worker.js - Scoring Worker → Resume Model: loads and updates
backend/workers/scoring.worker.js - Scoring Worker → PostgreSQL: loads resume
backend/workers/scoring.worker.js - Scoring Worker → Scoring Service: scores resume
backend/workers/scoring.worker.js - Scoring Service → Feedback Cache: checks and writes
backend/services/scoring.service.js - Scoring Worker → PDF Service: builds preview URL
backend/workers/scoring.worker.js