CVoria
An AI job-search app I built end to end. My own privacy model removes most personal details before a CV reaches any LLM.
- Elin Bergqvist [NAME_1]
- elin.b@example.se [EMAIL_1]
- +46 70 000 00 00 [PHONE_1]
- Storgatan 1 [ADDRESS_1]
- 19900101-0000 [GOV_ID_1]
- Senior accountant Senior accountant
- Excel, IFRS Excel, IFRS
My privacy model removes 97% of core personal details, like names, emails and phone numbers, before an LLM sees the CV, for about $0.11 per 1,000 CVs.
Gemini and GPT left fewer readable (7 and 17 of 757, against my 23) and were more precise, but they see the full CV and cost 8 to 200 times as much. Open-source redactors removed 61 to 86%. Counting every kind of detail, mine removed 93%. 200 fictional CVs in 17 languages.
Hosted LLMs the full CV goes to the provider
Mine self-hosted in Stockholm
Open source runs on your hardware
AI judges preferred my cover letters in 95% of blind comparisons.
57 of 60, judged blind by ChatGPT, Claude and Gemini on 5 Swedish job ads.
- B2B sales 12
- Care work 12
- Developer 12
- Digital marketing 9
- Warehouse work 12
Average score from the judges, out of 10
How it was built and measured +
- The model. A 307M-parameter token classifier fine-tuned from mmBERT-base, a multilingual encoder. It tags 13 kinds of personal detail, from names and ID numbers to health data and work-permit status. Trained on about 6,600 generated CVs plus 1,400 reformatted copies, mostly English and Swedish, and no real person’s CV. A detail gets the same placeholder everywhere, and CVoria puts the real one back where the answer needs it, such as a letter signature.
- Serving. CPU only, on AWS Lambda in Stockholm, about 0.64 s per CV in my run logs. An int8 embedding table halves the file from 1.23 GB to 641 MB with no loss on the benchmark (24 details left readable before, 23 after). If the model can’t be reached, the request is refused rather than sent unredacted.
- Benchmark. 200 fictional CVs in 17 languages, written by two AI models that each labelled the other’s CVs blind. The answer keys follow CVoria’s own written redaction rules. I locked the test set and scoring with checksums before any system ran. The test set, every system’s outputs and the scoring scripts are public; the model isn’t. Results on real CVs can differ.
- Where it loses. Names in unusual forms, such as “Kothapalli, V.”, health and religion (27 of 72 left readable) and work-permit status (10 of 21), where both hosted LLMs did much better. 65 of its 1,122 removals (5.8%) weren’t personal details, such as employment dates.
- Cover letters. 60 blind judgments against standard prompts in ChatGPT, Claude and Gemini and against V1, with an average score of 7.72 against 5.80. All 3 losses came from one marketing job, where my letter was more careful about requirements the CV didn’t back up. V1 used Claude Haiku 4.5 and the current version uses Gemini Flash 3.5, so part of the gain is the model change. Gemini was also the strictest judge, at 18 of 20. It’s a small sample, and it measures judged quality, not interviews.
- Chrome extension. In development. On an employer’s application form it fills in your details, attaches the CV in the job ad’s language and drafts answers from your CV, asking for a few rough words when the CV doesn’t hold the answer. It handles custom dropdowns, sliders, date pickers and autocomplete fields, and never submits. The clip is a demo form with a fictional applicant.
- Live interview. In beta. A video interviewer asks questions by voice through Gemini Live while MuseTalk lip-syncs the avatar at 720p on an AWS GPU. The clip shows the next design of the interview screen in a staged session, with the avatar before lip-sync and no voice agent running. Next, the GPU starts when someone begins an interview and shuts itself down when idle, with per-session tokens and a monthly time limit.
- Cost estimates. From my benchmark run logs: hosted LLMs at list API prices (Gemini 3.8 Flash at its introductory price, about $44 per 1,000 CVs at the 2027 rate) and mine on AWS Lambda at 10 GB of memory. Open-source tools are free to run, and their compute isn’t included.