I built SiviGen because I got tired of a specific kind of dishonesty.
Paste a job description into most “AI CV” tools and they’ll cheerfully add skills you’ve never touched, inflate a job title, or invent a metric that reads well. It looks great in the editor. Then you sit in the interview, someone asks you to walk through the thing you supposedly did, and the whole story falls apart.
That’s the problem SiviGen refuses to have. The entire product is built around one promise: maximise relevance to the job without inventing anything. Not “minimise” fabrication. Not “usually” truthful. Zero invented facts, by design.
Here’s how that actually works under the hood.
Your CV becomes a fact graph
When you upload your CV, SiviGen doesn’t just keep the raw text around to feed back to a model later. It parses your CV once into a structured profile, then enriches that into what we call a fact graph: every role, every bullet point, every skill becomes an atomic, individually-addressable fact.
Think of it as breaking your career into its smallest true statements. “Led a team of five engineers.” “Shipped a payments integration.” “Used PostgreSQL in production.” Each of these is a node the rest of the system can point at.
This matters because it changes the question the AI is allowed to ask. It’s no longer “what would make this candidate look good for this job?” — a question that invites invention. It’s “which of these facts, that we already know are true, are most relevant to this job, and how should we phrase them?”
Tailoring is selection and rephrasing, never creation
When you paste a job description, SiviGen reads it and builds a match plan — a mapping between what the job asks for and what your fact graph actually contains. Then it selects and rewrites.
The keyword there is rewrites, not writes. Rephrasing “Used PostgreSQL in production” as “Operated production PostgreSQL databases supporting core services” is honest work — same fact, sharper framing, aligned to a role that cares about databases. Adding “Expert in Kafka and distributed streaming” when your CV never mentioned Kafka is not, and the pipeline is structured so it simply can’t do that quietly.
Every rewritten line has to trace back to a fact in the graph. If it can’t, it doesn’t belong on the tailored CV.
A separate pass audits every claim
Selection and rephrasing happen in one part of the pipeline. Then a completely separate step does something most tools never bother with: it reads the draft it just produced and extracts every claim from it, as if it were an adversarial reviewer seeing the CV for the first time.
Each extracted claim is checked against your fact graph and labelled:
- Supported — traces cleanly to one or more of your facts.
- Unsupported — nothing in your CV backs it up.
- Contradicted — it actually conflicts with what your CV says.
This is deliberately a second, independent look. The part of the system that writes is not the part that judges. That separation is what keeps the honesty guarantee from being something the writer can talk itself out of.
Scoring is done in code, not guessed by a model
Here’s a design decision I feel strongly about: the scores are computed in plain, deterministic code — not produced by an LLM.
The model’s job is to produce structured facts: this claim is supported, that one is contradicted, this requirement is a strong match. Ordinary TypeScript then turns those facts into four numbers — relevance, truthfulness, and an overall fit score, with clear gating rules.
Why does this matter to you? Two reasons. First, the scores are stable: run the same CV against the same job and you get the same numbers, because a function computed them, not a stochastic model in a good or bad mood. Second, they’re explainable: every score traces back to concrete facts and rules you could read.
And the gating has teeth. A single contradicted claim blocks the result outright. Weak support caps the overall score. The truthfulness guarantee isn’t a suggestion the system tries to honour — it’s wired into how the number is allowed to move.
Why “veridical” is the whole point
There’s a version of this product that would be easier to build and, honestly, flashier in a demo: just let the model write whatever makes the candidate look strongest. It would impress people for about as long as it takes to reach a real interview.
SiviGen exists for the opposite reason. A CV you can’t defend in the room isn’t an asset — it’s a liability with good production values. The goal here is the strongest possible version of your real story: every line true, every claim traceable, and a relevance score you earned rather than faked.
That’s a narrower path than “make something up that fits.” It’s also the only one worth walking.
If that’s the kind of CV you want to send, give it a try.