Inspiration
Every AI study tool does the same thing when you're wrong: it re-explains the right answer, just more patiently. But a wrong answer is rarely a knowledge gap — it's a broken chain of reasoning. I wanted a tutor that diagnoses why I went wrong before it tells me what's right
What it does
Notebooks → Sub-notebooks: hierarchical workspaces, one AI tutor per sub-notebook, scoped only to that chapter's notes + chat history Misconception Forensics: paste/photograph a wrong solution → AI reconstructs your reasoning chain, names the root misconception, shows a side-by-side "Your Path vs. Correct Path," then locks the full explanation behind 2–3 diagnostic questions you must answer first File upload (PDF/image/text) into tutor memory, one-click quiz generation, and a tab to save/play YouTube videos per chapter
How I built it
Next.js 14 (App Router) + TypeScript + Tailwind, shadcn/ui-style components on Radix primitives. Zero backend: notebooks/chat/quizzes/forensics cases in localStorage, uploaded files in IndexedDB (via idb), PDF text extraction client-side with pdfjs-dist. Three stateless API routes (/chat, /forensics, /quiz) hit a provider-agnostic callAI() layer — plain fetch, no SDKs — currently running Gemini 2.5 Flash, swappable to Claude/GPT with one env var.
Challenges I ran into
Making the diagnostic gate real, not decorative: with no backend, anything sent to the client can be inspected. I split Forensics into two separate model calls — analyze (reasoning + misconception + questions, explanation intentionally never generated) and reveal (only called after the gate opens) — so there's nothing to leak early. Normalizing 3 LLM APIs behind one interface: Anthropic's content blocks, OpenAI's image_url, and Gemini's inlineData + "model" role all needed reconciling without leaking provider-specific shapes into the app code. Accomplishments that I'm proud of Shipped a fully working, zero-backend MVP covering every priority feature solo — including a forensics gate that's architecturally enforced, not just prompted for. Migrated the entire AI layer from Anthropic/OpenAI to Gemini live with zero UI changes, proving the abstraction actually holds.
What I learned
Isolating storage behind an async interface from day one (even for localStorage) makes a future real-backend swap a non-event. And treating "gate the AI's output" as an API-design problem — not a prompting problem — is what actually makes it trustworthy.
What's next for Noteloom
Real backend (Supabase) for accounts + cross-device sync, OCR fallback for scanned PDFs, spaced-repetition scheduling for quiz/forensics questions, streaming responses, and a cross-notebook analytics view surfacing recurring misconceptions instead of just per-chapter ones.
Built With
- nextjs
- radix
- shadcnui
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.