All checks were successful
Build and Push to Gitea / build-and-push (push) Successful in 1m7s
ResumeLens
ResumeLens is a web app that grades a resume against a job description.
- Backend: Go HTTP API (
/api/analyze) - Frontend: React + Vite
- AI provider: OpenAI (server-side only)
What the project does
- Accepts a PDF resume upload and job description text.
- Extracts text from the PDF on the backend.
- Sends resume text + job description to the LLM.
- Returns structured JSON with score and feedback.
Tech stack
- Go 1.25.x
- Node 20+
- React 19 + Vite 7
- Docker + Docker Compose (optional)
Prerequisites
goinstallednodeandnpminstalledOPENAI_API_KEYset for real analysis calls
Example:
export OPENAI_API_KEY="your_key_here"
Run locally
1) Start backend API
From repo root:
go run ./cmd/server
Backend listens on http://localhost:3000.
2) Start frontend
In another terminal:
cd web
npm ci
npm run dev
Frontend runs on Vite default port (usually http://localhost:5173).
By default in development, frontend calls backend at http://localhost:3000.
Run with Docker Compose
From repo root:
docker compose up --build
- Frontend is exposed at
http://localhost:3005 - Frontend proxies
/apitraffic to the backend container - Backend uses values from root
.env
API contract
POST /api/analyze with multipart/form-data:
resume: PDF filejob_description: plain text
Returns JSON analysis result.
Notes:
- Request size is capped at 10 MB.
- Rate limit is 10 analyze requests per hour per IP.
Tests
Run all default Go tests:
go test ./...
Run tests with race detector:
go test -race ./...
There is an opt-in live OpenAI consistency test. It is skipped by default.
RUN_LIVE_OPENAI_TESTS=1 OPENAI_API_KEY="your_key_here" go test ./internal/services -run TestCallLLM_Live_ScoreConsistencyPlusMinus10 -v
Frontend checks:
cd web
npm run lint
npm run build
Handoff notes
- Verification strategy doc:
doc/verification-strategy.md - Main backend entrypoint:
cmd/server/main.go - API route mount:
internal/api/routes.go - Analyze handler:
internal/handlers/analyze.go - LLM service:
internal/services/analyzer.go
If analysis fails in a fresh environment, first check that OPENAI_API_KEY is set in the backend process environment.
Languages
Go
59.7%
TypeScript
26.5%
CSS
12.1%
Nix
0.8%
Dockerfile
0.4%
Other
0.5%