vinh huynh / projects

// 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
A study space with a lecture uploaded. The agent caught a wrong claim in the notes — slow start is exponential, not linear — and quoted the source.

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

  1. 01

    upload

    Slides, PDFs and handouts go to a worker that chunks them and embeds each chunk into pgvector.

  2. 02

    retrieve

    Selecting a passage pulls the closest excerpts — scoped to that study space and nothing else.

  3. 03

    check

    Claude compares the passage with the excerpts: does the source confirm it, contradict it, or fill a gap?

  4. 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
  • react
  • typescript
  • tiptap
  • yjs
  • vite
backend
  • fastapi
  • node websockets
  • postgres
  • pgvector
ai
  • claude api
  • sentence-transformers
infra
  • supabase
  • railway
  • vercel
  • docker