A portfolio engine that only states checked facts
The engine behind this site, in which every fact comes from one checked source, a chat answers with its sources or says it does not know, and each job posting gets its own page.
In one sentence
The site you are reading runs on an engine in which every fact about me comes from one checked source: the pages, the chat, the pages for job postings and my CVs all draw on it, and nothing else.
Who it is for
- A recruiter gets a page made for their job posting: a short course about me, every requirement matched with evidence, and the requirements I do not meet listed openly.
- A hiring manager can ask the chat. It answers with the sources under each answer, or says it does not know.
- I get a process in which I write in one place and cannot publish a fact I have not confirmed.
How a fact gets onto the page
I write in my notes. A build turns them into a profile package: every fact is a separate claim with its own identifier, a word-for-word quote from the text and a status. Only claims I confirmed, or that the code confirms, go in.
The build stops when a claim has no quote, when a number in English differs from the number in Polish, when a number is written as a word, or when a name I have ruled out appears. CVs and course pages carry a fingerprint of the package they were made from, so I can see when one is out of date.
Pages for a job posting
A new posting becomes a subdomain. The engine reads the requirements from the posting without a model and matches each one to up to 3 claims above a calibrated threshold. A requirement with no match stays a gap and appears on the page as one. The recruiter goes through a short course built from my work, with a test after each lesson, and can open the CV made for that posting.
A CV goes through the same checks as the page: every point names its claims, and a separate check reads the PDF the way an applicant tracking system does.
The chat
The chat looks for evidence in a graph of my experience, writes an answer and has a second model check it sentence by sentence against that evidence before it reaches the reader. Below the answer it lists the quotes it used. Some topics are closed: pay, opinions about companies and people, and the name of a client I keep anonymous.
Measured on the real model: no facts from outside the package, 3.3% of answers falling back to "I don't know" and 9.5 s for the slowest 5% of answers.
What did not work at first
- A test model hid a weak chat. All tests passed on a stand-in model. On the real one about 40% of answers fell back, because the checking model saw less context than the writing one and rejected true facts. I rebuilt the chat around that finding and added tests that run on the live model.
- A change of look must not change the site. Design concepts run only on a preview subdomain, and a gate in CI compares 60 views of the live site, light and dark, desktop and phone, before anything is merged.
- Measuring on the server, building elsewhere. After an agent built an image on the home server once, the rule became: the server only runs ready images, and the source code never goes there.
How it was built
Since 1 October 2026 I have rebuilt the site with AI agents: an agent in the cloud prepares pull requests, a local agent reviews, deploys and measures, and I make the decisions. 216 of 235 commits of this rebuild were written with Claude. The course screens came from my own design process, Gatefold.
My role
I came up with, designed and built the engine myself, working with AI agents.
Contact
- [email protected]
- linkedin.com/in/eofek
Questions about: A portfolio engine that only states checked facts