Skip to main content

About

A portfolio project exploring retrieval-augmented generation with verifiable citations.

The problem

Ask a language model about your own documents and you get an answer that sounds right. Whether it is right, and which sentence in which file it came from, is usually left to you to work out — which means checking it costs about as much as not having asked.

CiteSeek answers from documents you upload, and every claim carries a numbered citation. Clicking one opens the source document at the exact passage the answer used, highlighted in place. The point is not that the answer is confident; it is that you can check it in one click.

The guarantee

When nothing in your documents is relevant, the answer says so and cites nothing — and it cannot do otherwise. Passages are retrieved before the model is involved, and if none clear the relevance threshold the model is never called at all. There is no text to hallucinate a citation into, because no text is generated.

That is the difference between a rule the system enforces and an instruction a model is asked to follow. Citations are resolved against passages the server retrieved, so a marker pointing at something that was not retrieved renders as plain text rather than as a link to nowhere.

How it is built

Next.js and TypeScript, Postgres with pgvector for search, and Google’s Gemini for embeddings and generation. Everything runs in the EU, and the privacy page says exactly what is stored and who else sees it.

The code is public, along with the reasoning: architectural decisions are recorded as they were made, including the ones that turned out to be wrong.

Who built it

Lucian Patrascu, a senior frontend engineer, as a way of learning the parts of this stack that are not frontend — retrieval, embeddings, database design, and the operational side of running it.

It is a portfolio project rather than a company. Nothing is sold, and nothing about it is a commitment.

Try the demoRead the source