"Quillboard" — Notes That Answer Back

A notes app where you can ask questions of your own notes. Documents are chunked, embedded and stored in Postgres with pgvector; every answer cites the passages it came from, and the model is told to say "not in your notes" rather than guess. Includes offline editing, markdown import and per-user row-level security. (Sample project — replace with your own.)
- My role
- Solo — product, retrieval pipeline, front end
- Built for
- Sample case study · replace with your own
“A model that may only quote what was retrieved cannot invent what was never written.”
The Brief
Note-taking apps are good at storing and bad at remembering. After a few hundred notes, finding the one with the answer means remembering the exact words you used months ago.
The obvious fix — paste everything into a chatbot — fails in a specific way: the model fills gaps with plausible text, and with personal notes you cannot tell the real parts from the invented ones.
The Approach
Retrieval does the finding, the model does the reading. Notes are split into overlapping chunks, embedded, and stored in Postgres with pgvector. A question is embedded the same way, the nearest chunks come back with their note titles, and only those chunks are shown to the model.
The model is instructed to answer from the passages or say there is nothing relevant, and a verification pass removes any quoted phrase that does not appear in a cited passage. What reaches the reader is an answer whose every claim links back to a note.
How It Works
- 01Questiontyped or spoken
- 02Embedsame model as the notes
- 03pgvectortop-k chunks, per-user filter
- 04Claudeanswer from passages only
- 05Verifierdrop unsupported quotes
Key Decisions
Row-level security, not application checks
Every table enforces user_id = auth.uid() in the database, so a bug in the API cannot leak another person’s notes into a prompt.
Chunks overlap on purpose
Fixed-size chunks with a 15% overlap kept sentences that straddle a boundary retrievable, at a small storage cost.
"Not in your notes" is a first-class answer
The interface celebrates an honest empty result instead of hiding it, which turned out to be what made people trust the other answers.
Learned the Hard Way
BrokeEarly answers cited the right note but paraphrased it into something the note did not say.
FixedAdded the verification pass and switched the prompt from "summarise" to "quote, then explain".
BrokeVery short notes were never retrieved because their chunks had too little context.
FixedPrefixed every chunk with its note title and tags before embedding.
- Sample figures — replace them with numbers you have measured.
- Retrieval quality was checked on a small hand-written question set, not a benchmark.
- Offline editing works; offline search does not.