AskMyNotes
RAG study copilot that answers only from your notes. First place, Noesis Hackathon

First place, Noesis Hackathon, Vedam School of Technology (8 hours, about 50 teams)
What it does
Upload lecture notes as PDF or text, then ask questions and get answers grounded only in that material, with citations to the file and chunk and a confidence badge. Or switch to study mode and generate five MCQs or three short-answer questions from the same chunks. Voice in and out through the Web Speech API. Every question is scoped to one subject, so notes for Operating Systems can never answer a question about Networks.
From the repository
Next.js 16 App Router with three API routes (upload, ask, study), LangChain with the Google GenAI and text-splitter packages, Gemini 2.0 Flash for both embeddings and generation, a persisted ChromaDB store, and Supabase auth with middleware-protected routes.
Retrieval
Upload splits the text with a recursive character splitter (500 characters, 50 overlap, so a sentence cut at a chunk edge still appears whole in one of them), embeds each chunk, and stores it in Chroma with the user id, subject, file name and chunk id as metadata. Ask embeds the question, retrieves the five nearest chunks filtered by user and subject, converts Chroma’s distances to similarities, and drops anything under 0.30. If nothing survives, the route returns “Not found in your notes” without calling the model at all. Otherwise the survivors are formatted as [Source n — File, Chunk] and sent with an instruction to answer only from them or reply with that exact refusal sentence.
Confidence is the best surviving similarity, banded: High above 0.50, Medium from 0.40, Low below, and forced to Low whenever the answer contains the refusal sentence. That refusal path is the anti-hallucination layer: the system would rather say nothing than invent. The bands were chosen by feel in an eight-hour hackathon and never calibrated, which is the honest limit of the design.
Try it
The same pipeline shape, in the browser: paste notes, watch them split, ask a question, see which chunks clear the floor and what the model would be given. Ask about something the notes do not cover to hit the refusal path.
- chunk 0 · 415 ch Operating Systems, Unit 3: Scheduling A process scheduler decides whi…
- chunk 1 · 288 ch Round robin (RR) gives each process a time quantum, typically 10 to 10…
- chunk 2 · 314 ch Priority scheduling can starve low-priority processes. Aging fixes sta…
- chunk 3 · 228 ch Deadlock is a different topic: four conditions must hold at once, mutu…
| chunk | similarity | floor |
|---|---|---|
| chunk 1 | 0.426 | kept |
| chunk 0 | 0.119 | dropped |
| chunk 2 | 0.069 | dropped |
| chunk 3 | 0.000 | dropped |
The model would receive the 1 surviving chunk below as context, with the instruction to answer only from them or reply exactly "Not found in your notes".
- [Source 1 — File: notes.txt, Chunk: 1] Round robin (RR) gives each process a time quantum, typically 10 to 100 milliseconds. A small quantum approaches process…
In the repository the embeddings are Gemini's and the store is ChromaDB filtered by user and subject, so scores differ from the lexical coverage score used here; the mechanism (top-k, floor, refusal, citations, confidence bands) is the same. The confidence bands were never calibrated against real questions, which is the main thing I would change: see the evaluation lab for how the retrieval on this site was measured instead.
The hackathon, and who did what
Noesis, Vedam School of Technology, eight hours, about fifty teams. A rule change halfway through and a connectivity failure near submission. We were shortlisted to the top ten and then announced first. Team: Nimit Jain (landing page, frontend, Supabase auth), Ved Kumar Singh (the three API routes), and me (the dashboard, and the RAG design with Ved: ChromaDB, the chunking and overlap, the retrieval and the refusal path). The commits for the routes are Ved’s; the design of what they do was shared work.
What I took from it went straight into Ask this site: a calibrated threshold instead of a guessed one, a published question set with per-question results, and adversarial questions that must be refused. The landing page’s “98% accuracy” and “5,000 students” are placeholder marketing copy from the hackathon night, not measurements, and are not repeated here.