I'm Momin, and I'm building CVFit on my own from Ottawa. It helps you tailor a resume to a job description using only experience you've already confirmed. Full disclosure: this is my product. This post explains how it works, including the parts that are still rough.
I started for two reasons. First, the existing tools were expensive. The paid monthly plans I checked cost US$24 to US$49.95 a month (there's a table further down). Second, I needed help with something more basic. My experience was spread across roles, projects and scattered notes, and every job post wanted a different slice of it. Recruiters, and the screening software in front of them, look for the few things that matter most to that particular posting. I wanted AI to help me understand my own history and bring out the parts a given job cares about, without making up the parts I don't have.
That last part turned out to be the real engineering problem.
Why ChatGPT resume tailoring can quietly inflate your experience
Try this: paste your resume and a job ad into a general chatbot and ask it to tailor the resume. The output usually reads well. Then read it closely. "Helped with the migration" has become "led the migration". A percentage has appeared that you never measured. A tool you used once in a hackathon is now listed as a core skill.
The model isn't being malicious. You asked it to make this resume fit this job, and the shortest path to "fits" is to round up. But you're the one who has to defend every line, in a screening call and later on the job. And each chat starts from zero, so the model doesn't remember what you corrected last time. You end up catching the same inflation on every application.
To be fair to the DIY route: for one or two applications, a chatbot plus a careful read is cheap, flexible and works fine. What I wanted on top of that was:
- evidence that persists across applications, so I confirm a fact once,
- a review step that shows every change, not a wall of new text,
- questions instead of guesses when the job asks for something I haven't shown.
How CVFit tailors a resume to a job description from evidence
The short version: CVFit doesn't treat your resume as a document to rewrite. It treats it as evidence.
Your career as a graph
CVFit stores your history as a knowledge graph with five layers:
Company → Role → Project → Evidence Statement → Capability
Every metric, technology and milestone hangs off a specific organisation, role and set of dates. A capability only exists in the graph if there's an evidence statement underneath it. "Kubernetes" isn't a tag floating at the bottom of your resume. It's attached to the project where you actually used it.
You start from the resume you already have, and CVFit parses it into the graph. Most resumes leave things out, so there's also a "career interviewer" chat that asks you about past projects and turns your informal notes into evidence statements and capabilities. It adds to the graph without overwriting what's already there.
The Experience Library shows the same data three ways: a visual Connections canvas, the Assistant chat, and an exportable Master CV. This short video shows the graph view:
Tailoring from evidence, not from the job ad
When you add a target job, CVFit extracts its requirements and checks them against your graph. The tailored resume emphasises the skills, projects and evidence that employer asked for, in an ATS-friendly structure that follows North American (including Canadian) resume norms.
The rule I designed around is simple. Every sentence in a tailored CV either comes from evidence in your knowledge graph, or it's an edit you made yourself through the assistant. CVFit doesn't add skills, credentials or achievements you haven't confirmed. If the job asks for something it can't find, it flags a gap or asks you a targeted question. If you do have that experience and just never wrote it down, you answer, and it becomes evidence in your graph for every future application. If you don't have it, it stays a gap, and you know before you apply.
You approve every change
Nothing goes out without your review. You get a line-by-line diff where you can accept, reject or edit each bullet. A "Final Edit" chat knows your career history and the target job, so you can ask it to reword or expand a section. Then you export to PDF, Word (DOCX) or Markdown. Exports are free on every plan.
If you want the walkthrough, here's how to tailor your resume to a job description with CVFit.
One honest caveat: this lowers the risk of invented content, but it can't make a language model incapable of mistakes. The model can still misread your history. That's why the review step isn't optional.
Match scores that cite your own CV
Before building the score, I listed what I didn't want:
- Keyword overlap. It rewards stuffing buzzwords into a resume, and it misses equivalents. "Deployed microservices on AWS EKS" shows Kubernetes experience even if the word "Kubernetes" never appears.
- Soft skills counted like hard requirements. "Team player" shouldn't weigh the same as "PostgreSQL".
- Penalties for nice-to-haves. Missing a "preferred" item shouldn't sink a strong candidate.
- Asking an LLM for a 0–100 number. I found it gives different scores on identical runs, with no trail back to your actual experience.
Here's how it works instead, when you have a knowledge graph:
- An LLM extracts the job's technical requirements and labels each one required or preferred. Generic traits like "communication", "fast learner" or "problem solving" are filtered out.
- A backend lookup, using vector embeddings plus alias matching, searches your graph for supporting evidence.
- Each requirement gets one of four states: already in your selected CV, available from your knowledge graph, needs your confirmation, or a true gap.
- The score is plain arithmetic over the required items only:
required = [r for r in coverage if r.priority == "required"]
covered = sum(
r.status in {"already_in_selected_cv", "available_from_knowledge_graph"}
for r in required
)
score = round(100 * covered / len(required))
Preferred items show up as bonuses or informational gaps, but they don't count against you. "Needs confirmation" doesn't count as covered until you confirm it. A bare company name or job title is never credited as evidence on its own. The UI groups scores into three bands: 75% and up, 50–74%, and under 50%. Every match points to the evidence behind it, and every gap is something you can act on.
Limits worth knowing:
- The free public checker has no graph to look at. It uses a constrained LLM pass over your CV and the job description, with the output clamped to 0–100. It's less deterministic than the graph path.
- A badly formatted job description that doesn't separate must-haves from nice-to-haves can make everything look "required".
- Analysis takes a few seconds, because requirement extraction and embeddings aren't free.
- The score measures coverage of the job's stated requirements. It doesn't predict whether you'll hear back.
There's more detail on how the match score works.
What's under the hood
I'll keep this short:
-
Postgres does most of the heavy lifting.
pgvectorstores 768-dimensionembeddinggemmaembeddings, so I don't depend on a commercial embedding API. Job search combinestsvectorfull-text search with vector search. - Generation uses OpenAI models. Several GPT-5.6 models handle different tasks, all routed through one central LLM gateway. The free and paid plans use the same models; they differ only in usage limits.
- There's a job index of 10,000+ Canadian and US tech jobs. It's pulled from employers' career portals and from job-alert emails that users forward to a personal alias. Closed roles are hidden periodically, and you can search it in plain language ("remote SRE with Kubernetes in Toronto").
- Your data: neither CVFit's own API and processes nor its LLM API integrations use your data to train models. Resumes are encrypted at rest.
How it compares to Jobscan, Teal, Rezi and Kickresume (sourced prices)
I checked each vendor's own pricing page on Oct 17, 2026. This compares the cheapest month-to-month paid plan with month-to-month. Prices change, so check before you buy.
| Tool | Cheapest monthly paid plan (verified Oct 17, 2026) | Source |
|---|---|---|
| CVFit Pro | US$9.99/mo | cv-fit.click/pricing |
| Kickresume Premium | US$24/mo | kickresume.com/en/pricing |
| Teal+ | US$29 per 30 days | tealhq.com/pricing |
| Rezi Pro | US$29/mo | rezi.ai/pricing |
| Jobscan Premium | US$49.95/mo (sales tax added) | app.jobscan.co/plan |
Annual plans are cheaper per month. On annual billing, Kickresume works out to US$8/mo (US$96/yr) and Zety to US$5.95/mo (US$71.40/yr). Both are cheaper per month than CVFit Pro, and CVFit doesn't have an annual plan. Jobscan also has a 3-month plan at US$89.95 (about US$29.98/mo). All prices are in US dollars as shown on each vendor's page.
CVFit's free Community plan includes 10 tailored jobs and 50 AI calls a month, 5 CV Assistant and 2 Job Search Assistant queries a day, and free PDF/DOCX/Markdown export. The details are on CVFit pricing (US$9.99/mo).
Where other tools are better:
- Jobscan: its match rate is its core product, with ATS and recruiter findings on every scan. It also has a job tracker, AI Job Match and paid interview practice. If you want a deep ATS scan, it does more than CVFit does today. Its free plan gives you 5 resume scans a month, and it exports PDF or DOCX free from its resume builder.
- Kickresume: it has a "Conservative" tailoring mode that it says "won't invent or oversell", with a change report. So I'm clearly not the only one who thinks this problem matters. It's also free for verified students, and its annual plan is cheaper per month than CVFit.
- Teal: if your main problem is tracking a lot of applications, Teal is a better fit. CVFit has no application tracker.
What it doesn't do yet
- The model can misread your history. Review every line; the tool is built around you doing that.
- It's focused on tech roles (sales and marketing only at tech companies), on Canadian and US tech jobs, and on English.
- It doesn't auto-apply or send mass applications, by design.
- There's no application tracker, form autofill or interview prep.
- There's no annual plan.
- It's not open source or self-hostable.
What I'd really like feedback on:
- Where does the grounding break for your resume?
- Do gap questions help, or do they get annoying?
- Does the graph view make sense to you?
Try it: free resume match checker
If you want to see this on your own resume, the free resume match checker compares your resume with a job description and shows the evidence-backed matches and gaps, with no signup. It uses the direct-CV path described above, without a graph. More demo videos are on the CVFit YouTube channel.
I'll be in the comments, and "this broke on my resume" is the most useful thing you can tell me.
Top comments (0)