The problem
Tailoring a CV to each job application is repetitive and easy to get wrong when the underlying profile changes from one version to another. AI Job Search UI uses an imported CV as the source of truth, so adaptations stay grounded in the candidate's actual experience.
Import a structured CV
The /cv workspace has an Import tab for uploading a PDF resume up to 10 MB.
Google Gemini extracts personal information, summary, skills, experience,
education, languages, and certifications into a structured profile. A strict
parsing prompt prevents invented details: fields without source data remain
empty.
Users can preview the extracted profile, manage a library of saved CVs, choose an active CV, or delete one. Parsed profiles are stored per browser session in Supabase and the interface explicitly marks the active profile as the source of truth.
Analyze job opportunities
The Generate tab accepts job descriptions from LinkedIn, Indeed, InfoJobs, company career pages, and similar sources. It checks descriptions between 50 and 50,000 characters and persists the current draft in local storage.
The analysis extracts keywords plus required and preferred skills. When an active CV is available, it also evaluates compatibility, including location eligibility such as remote policies or country restrictions. The result separates skills match from the final score, which can include a location penalty, and presents strengths and gaps clearly.
Generate a tailored CV
Users can generate a tailored CV in English or Spanish. The selected language controls the summary, bullet points, and PDF section headings while skill and technology names remain unchanged.
Generated content rewrites and reorders information from the source profile
only; it does not invent skills or experience. The tailored preview includes
adaptation notes for matched keywords, skills, and gaps, then supports PDF
preview and download through @react-pdf/renderer.
Repository
The project is not deployed publicly. Explore the implementation in the AI Job Search UI repository.