// case study
Gloss
A shared notes doc for study groups, with an AI co-editor that only cites what's in your course material.
- role
- solo · full-stack
- timeline
- sep 2026 — now
- status
- live
- built with
- react · fastapi · yjs · claude
01 the problem
A confident answer that isn't in the lecture is worse than no answer.
AI study tools happily invent facts and rewrite your notes for you. For exam prep that's the wrong trade: the exam is marked against the course, not against what a model thinks is true.
Gloss keeps the group's notes theirs. The AI only reads the slides, PDFs and handouts the group uploaded, cites the excerpt behind every claim, and can't change the document on its own.
02 how it works
-
01
upload
Slides, PDFs and handouts go to a worker that chunks them and embeds each chunk into pgvector.
-
02
retrieve
Selecting a passage pulls the closest excerpts — scoped to that study space and nothing else.
-
03
check
Claude compares the passage with the excerpts: does the source confirm it, contradict it, or fill a gap?
-
04
suggest
The verdict lands in the margin as an accept / reject suggestion, with the citation attached.
03 in the app
study guides
The whole doc, turned into a revision sheet
One click turns the group's notes into a guide where every point carries the excerpt it came from. It's laid out for the browser's print-to-PDF, so it works on paper too.
quizzes
Practice questions from the same sources
Quizzes come from the notes and the uploaded material, not from the model's general knowledge, with keyboard shortcuts for answering quickly.
interface
Calm by default
A quiet, paper-like interface with light and dark themes. Every study space is shared in real time — collaborators' edits appear as they type.
04 key decisions
Suggest, never edit
The agent can't write to the shared doc. Every change is a suggestion a person accepts, so nobody's notes shift under them mid-session.
Measured, not guessed
18 hand-written cases score verdicts, flag precision and recall, grounding and retrieval recall@k. Each run is logged with the prompt and config that produced it.
Real-time on CRDTs
Tiptap + Yjs over a dedicated WebSocket server that authenticates every connection and is the single writer of each document's snapshot.
Embeddings run locally
Chunks are embedded with a sentence-transformers model inside the worker, so retrieval needs no extra API. The worker claims jobs with FOR UPDATE SKIP LOCKED, so it can scale out safely.
05 stack
- frontend
- backend
- ai
- infra