LumaCV: AI Resume Intelligence
- 30 min -> <60 sec automation
- Multi-LLM failover (Gemini, Claude, Llama)
- Deterministic LaTeX PDF pipeline
- Real-time JD skill gap analysis

Problem: Resume tailoring is a manual, error-prone process that often fails ATS screening due to poor keyword alignment and inconsistent formatting.
Solution: Built an AI-first resume intelligence platform using multi-LLM orchestration to parse resumes, analyze job descriptions, and generate tailored, ATS-optimized resumes with deterministic LaTeX rendering.
Impact: Reduced resume tailoring time from ~30 minutes to under 60 seconds while ensuring consistent formatting, improved keyword coverage, and higher ATS compatibility.
Overview
LumaCV is a full-stack AI system designed to automate resume tailoring at scale. It combines LLM-based parsing, semantic job description analysis, and deterministic LaTeX rendering to produce production-grade resumes with minimal user input. The system is built with reliability in mind, incorporating model failover, rate limiting, and state persistence.
Before / after
Resume Tailoring
Before: Manual rewriting + keyword guessing
After: Automated semantic alignment with JD
Formatting
Before: Inconsistent Word/Docs formatting
After: Deterministic LaTeX-generated PDFs
Time to Output
Before: 20-30 minutes
After: <60 seconds
Stack
Decisions
Key trade-offs and design calls that shaped the final delivery.
External LaTeX service over local compilation
Context: Vercel Hobby tier can't fit LaTeX engines due to size constraints
Decision: Offload PDF compilation to external REST API to stay on free tier without sacrificing output quality
Multi-LLM failover
Context: Single provider downtime blocks users and creates bad experience
Decision: OpenRouter routing with automatic fallback across 4 providers (GPT-4o Mini, Llama, Gemini, Claude)
Client-side PDF parsing
Context: Serverless functions have payload limits and adding file upload handling increases complexity
Decision: Use pdfjs-dist in browser to extract text before sending to APIs, keeping server routes lightweight
Architecture
The primary system boundaries, runtime pieces, and how the project was structured in production.
Next.js 14 App Router + Zustand
Resume Builder Client
Multi-step wizard (Upload PDF + JD → Edit Details → AI Processing → Preview + Score) with persistent client state.
Gemini + OpenRouter
AI Orchestration Layer
Multi-provider failover across GPT-4o Mini, Llama 3.3, Gemini Flash, and Claude 3.5 so degraded vendors don't block resume generation.
External LaTeX API
PDF Compilation
Serverless-compatible PDF rendering—Vercel Hobby tier can't fit LaTeX engines, so compilation is offloaded to external REST API.
Mermaid source. Paste into mermaid.live to visualize the diagram.
flowchart LR
subgraph Input
U[User Resume / JD]
end
subgraph AI
P[LLM Parser]
A[JD Analyzer]
T[Tailoring Engine]
end
subgraph Infra
S[(Supabase Auth)]
Z[Zustand State]
R[Rate Limiter]
end
subgraph Output
L[LaTeX Engine]
PDF[Final Resume]
end
U --> P --> A --> T
T --> L --> PDF
S <--> T
Z <--> U
R --> TPipeline
How changes moved from development through validation and deployment.
Build
VercelAuto-deploy from GitHub, Next.js detected and optimized
Rate Limiting
Upstash RedisPrevent API abuse on LLM endpoints with Redis-backed rate limiting
Deploy
Vercel EdgemaxDuration: 60 for LLM routes, Edge runtime for scoring endpoints
Incidents
Operational failures, rehearsals, or recovery moments that changed how the system was run.
Vercel 10s function timeout on large resumes
P2Resolution: Increased maxDuration to 60s and implemented client-side PDF parsing to reduce payload size
Lesson: Serverless timeouts are hard limits—offload heavy work to client or external services
LaTeX compiler rendering inconsistencies
P3Resolution: Standardized on single external LaTeX service with deterministic templates
Lesson: Browser PDF generation is inconsistent—deterministic LaTeX pipelines ensure predictable output
Live editing box performance issues
P3Resolution: Debounced input handling and virtualized large text areas for smooth real-time preview
Lesson: Live preview features need debouncing and virtualization to handle large documents smoothly