<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sanchali Torpe</title>
    <description>The latest articles on DEV Community by Sanchali Torpe (@sanchali_torpe_2860608bc4).</description>
    <link>https://dev.to/sanchali_torpe_2860608bc4</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4148911%2Ff45b8a7a-ca96-40c1-90bd-506c57106205.png</url>
      <title>DEV Community: Sanchali Torpe</title>
      <link>https://dev.to/sanchali_torpe_2860608bc4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sanchali_torpe_2860608bc4"/>
    <language>en</language>
    <item>
      <title>I Built FriendMind: A Private AI Study Companion for a Friend</title>
      <dc:creator>Sanchali Torpe</dc:creator>
      <pubDate>Sat, 03 Oct 2026 13:34:29 +0000</pubDate>
      <link>https://dev.to/sanchali_torpe_2860608bc4/i-built-friendmind-a-private-ai-study-companion-for-a-friend-14d4</link>
      <guid>https://dev.to/sanchali_torpe_2860608bc4/i-built-friendmind-a-private-ai-study-companion-for-a-friend-14d4</guid>
      <description>&lt;h1&gt;
  
  
  🧠 I Built FriendMind: A Private AI Study Companion for a Friend
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;A document-grounded AI study companion that helps students learn from their own notes, test their understanding, and discover what they need to revise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Built for the &lt;strong&gt;Hacktoberfest 2026 DEV Weekend Challenge — “Build for a Friend.”&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 The Problem
&lt;/h2&gt;

&lt;p&gt;I started this project with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What could I build that would actually make studying easier for someone I know?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One problem kept coming up: having notes isn't the same as knowing what you actually understand.&lt;/p&gt;

&lt;p&gt;A student can read a PDF, revise a chapter, and still not know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which concepts they truly understand&lt;/li&gt;
&lt;li&gt;Whether they can explain something without looking at their notes&lt;/li&gt;
&lt;li&gt;Where they're making mistakes&lt;/li&gt;
&lt;li&gt;What they should revise next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A generic chatbot could answer questions, but I wanted something more personal.&lt;/p&gt;

&lt;p&gt;Something that could &lt;strong&gt;work with the student's own study material&lt;/strong&gt; and then help them test themselves.&lt;/p&gt;

&lt;p&gt;That's how &lt;strong&gt;FriendMind&lt;/strong&gt; started.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What is FriendMind?
&lt;/h2&gt;

&lt;p&gt;FriendMind is a &lt;strong&gt;local-first AI study companion&lt;/strong&gt; that turns a student's PDFs into an interactive learning workflow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Upload Notes
     ↓
Index &amp;amp; Embed
     ↓
Semantic Search
     ↓
Ask Questions
     ↓
Generate Quiz
     ↓
Evaluate Answers
     ↓
Find Weak Topics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of simply chatting with an AI, the student can study from their own material, test their understanding, and identify what needs more revision.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Current Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📄 PDF upload and processing&lt;/li&gt;
&lt;li&gt;🔎 Semantic search over uploaded notes&lt;/li&gt;
&lt;li&gt;🧠 Retrieval-Augmented Generation (RAG)&lt;/li&gt;
&lt;li&gt;🤖 Local AI with Gemma 3&lt;/li&gt;
&lt;li&gt;🛡️ Protection against unsupported answers&lt;/li&gt;
&lt;li&gt;📝 AI-generated quizzes&lt;/li&gt;
&lt;li&gt;🎚️ Easy / Medium / Hard difficulty&lt;/li&gt;
&lt;li&gt;🔢 5 or 10 question quizzes&lt;/li&gt;
&lt;li&gt;✅ Semantic answer verification&lt;/li&gt;
&lt;li&gt;📊 Weak-topic detection&lt;/li&gt;
&lt;li&gt;💾 Persistent document storage&lt;/li&gt;
&lt;li&gt;♻️ Duplicate upload protection&lt;/li&gt;
&lt;li&gt;🌙 Responsive light/dark interface&lt;/li&gt;
&lt;li&gt;🔒 Local-first architecture&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔎 Asking Questions From My Own Notes
&lt;/h2&gt;

&lt;p&gt;One of the main ideas behind FriendMind is &lt;strong&gt;document-grounded question answering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a student asks a question, FriendMind doesn't simply send that question to an LLM.&lt;/p&gt;

&lt;p&gt;It first searches the student's uploaded material for relevant information.&lt;/p&gt;

&lt;p&gt;The simplified flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Student Question
       ↓
Semantic Search
       ↓
Relevant Note Chunks
       ↓
Retrieved Context
       ↓
Gemma 3
       ↓
Grounded Answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows the assistant to answer questions based on the material the student is actually studying.&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 Turning Notes Into a Quiz
&lt;/h2&gt;

&lt;p&gt;After studying, the student can generate a quiz from their uploaded material.&lt;/p&gt;

&lt;p&gt;They can choose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;5 or 10 questions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easy, Medium, or Hard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But generating questions was only half of the problem.&lt;/p&gt;

&lt;p&gt;I also wanted FriendMind to evaluate answers in a way that reflects &lt;strong&gt;understanding&lt;/strong&gt;, rather than simply matching exact words.&lt;/p&gt;

&lt;p&gt;That led to one of the most important parts of the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Semantic Answer Verification
&lt;/h2&gt;

&lt;p&gt;Consider these two answers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expected answer:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Binary search has logarithmic time complexity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Student answer:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Binary search runs in O(log n).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The wording is different, but the concept is the same.&lt;/p&gt;

&lt;p&gt;A strict text comparison could fail to recognize that.&lt;/p&gt;

&lt;p&gt;FriendMind therefore uses &lt;strong&gt;semantic similarity&lt;/strong&gt; to evaluate natural-language answers.&lt;/p&gt;

&lt;p&gt;The goal is to ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Does the student's answer communicate the expected concept?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;rather than:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Did the student use exactly the same words?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This makes the quiz evaluation more flexible for natural student responses.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Finding Weak Topics
&lt;/h2&gt;

&lt;p&gt;FriendMind doesn't stop at marking an answer right or wrong.&lt;/p&gt;

&lt;p&gt;It can use incorrect answers to identify areas where the student may need more revision.&lt;/p&gt;

&lt;p&gt;The learning loop becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Study
  ↓
Ask Questions
  ↓
Take Quiz
  ↓
Evaluate Understanding
  ↓
Identify Weak Topics
  ↓
Revise
  ↓
Try Again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't just tell the student what they got wrong. Help them understand what to work on next.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🔓 Why Open-Source AI Matters
&lt;/h1&gt;

&lt;p&gt;Open-source AI isn't just a technology choice in this project.&lt;/p&gt;

&lt;p&gt;It directly affects &lt;strong&gt;privacy and control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;FriendMind uses &lt;strong&gt;Gemma 3&lt;/strong&gt;, an open-weight model, through &lt;strong&gt;Ollama&lt;/strong&gt; for local inference.&lt;/p&gt;

&lt;p&gt;The core architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Student PDF
    ↓
Local Processing
    ↓
Local Embeddings
    ↓
ChromaDB
    ↓
Semantic Retrieval
    ↓
Ollama
    ↓
Gemma 3
    ↓
Answer / Quiz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A student's study material can contain lecture notes, assignments, personal notes, and exam preparation material.&lt;/p&gt;

&lt;p&gt;I didn't want the core workflow to require sending all of that material to a closed cloud AI service.&lt;/p&gt;

&lt;p&gt;With the local-first approach, the core AI workflow can run on the student's own computer.&lt;/p&gt;

&lt;p&gt;It also gives the project more control over the model layer: the application isn't permanently tied to a single hosted AI API.&lt;/p&gt;

&lt;p&gt;For a tool designed around personal study material, &lt;strong&gt;privacy, ownership, and control matter.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🏗️ How I Built It
&lt;/h1&gt;

&lt;p&gt;The architecture is intentionally straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────────┐
                    │   FriendMind UI │
                    │  HTML/CSS/JS    │
                    └────────┬────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │     FastAPI     │
                    │     app.py      │
                    └────────┬────────┘
                             │
             ┌───────────────┼───────────────┐
             ▼               ▼               ▼
       PDF Processing    RAG Engine     Quiz Engine
                             │               │
                             ▼               ▼
                    Sentence Transformers
                             │
                             ▼
                         ChromaDB
                             │
                             ▼
                          Ollama
                             │
                             ▼
                          Gemma 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🛠️ Tech Stack
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Python, FastAPI, Uvicorn&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI/ML:&lt;/strong&gt; Sentence Transformers, RAG, Semantic Similarity&lt;br&gt;&lt;br&gt;
&lt;strong&gt;LLM:&lt;/strong&gt; Ollama, Gemma 3&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Vector Database:&lt;/strong&gt; ChromaDB&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Document Processing:&lt;/strong&gt; pypdf&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; HTML, CSS, Vanilla JavaScript&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Development:&lt;/strong&gt; Git, GitHub, VS Code, PowerShell&lt;/p&gt;


&lt;h1&gt;
  
  
  🎥 Demo
&lt;/h1&gt;

&lt;p&gt;FriendMind currently runs locally using Ollama and Gemma 3.&lt;/p&gt;

&lt;p&gt;The demo shows the complete workflow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload PDF → Ask a question → Generate quiz → Answer → Semantic evaluation → Weak-topic detection&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ▶️ FriendMind Demo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=pd66-1qTa40" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=pd66-1qTa40&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The screen recording demonstrates the actual working application rather than a mockup.&lt;/p&gt;


&lt;h1&gt;
  
  
  📸 Screenshots
&lt;/h1&gt;

&lt;p&gt;The repository contains screenshots of the working application in &lt;code&gt;docs/screenshots/&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Upload Study Material
&lt;/h3&gt;

&lt;p&gt;Show the FriendMind PDF upload interface here.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ask a Question
&lt;/h3&gt;

&lt;p&gt;Show a grounded question and response here.&lt;/p&gt;
&lt;h3&gt;
  
  
  Take a Quiz
&lt;/h3&gt;

&lt;p&gt;Show the generated quiz here.&lt;/p&gt;
&lt;h3&gt;
  
  
  Review Results
&lt;/h3&gt;

&lt;p&gt;Show semantic evaluation and weak-topic results here.&lt;/p&gt;


&lt;h1&gt;
  
  
  🔐 Privacy by Design
&lt;/h1&gt;

&lt;p&gt;FriendMind follows a local-first approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PDF
 ↓
Your Computer
 ↓
ChromaDB
 ↓
Local Embeddings
 ↓
Ollama / Gemma 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The core AI workflow can run locally without requiring study material to be sent to a cloud LLM provider.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧪 What I Learned
&lt;/h1&gt;

&lt;p&gt;Building FriendMind taught me that building an AI application isn't just about connecting an LLM to a frontend.&lt;/p&gt;

&lt;p&gt;The interesting problems appeared around the model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do I keep answers grounded in the user's documents?&lt;/li&gt;
&lt;li&gt;How do I avoid unsupported answers?&lt;/li&gt;
&lt;li&gt;How do I generate useful questions from context?&lt;/li&gt;
&lt;li&gt;How do I evaluate answers when wording differs?&lt;/li&gt;
&lt;li&gt;How do I turn quiz mistakes into useful revision feedback?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The semantic verification layer was particularly interesting.&lt;/p&gt;

&lt;p&gt;It changed the problem from:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Are these two strings similar?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Do these two answers express the same concept?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That distinction becomes especially important when AI is being used for learning.&lt;/p&gt;




&lt;h1&gt;
  
  
  🚀 What's Next?
&lt;/h1&gt;

&lt;p&gt;FriendMind is still a starting point.&lt;/p&gt;

&lt;p&gt;Some improvements I'd like to explore are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Topic-wise quizzes&lt;/li&gt;
&lt;li&gt;More document formats&lt;/li&gt;
&lt;li&gt;Improved citations&lt;/li&gt;
&lt;li&gt;Learning analytics&lt;/li&gt;
&lt;li&gt;Personalized revision plans&lt;/li&gt;
&lt;li&gt;Conversation history&lt;/li&gt;
&lt;li&gt;Hybrid retrieval&lt;/li&gt;
&lt;li&gt;Streaming responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this challenge, however, I wanted to keep the scope focused on solving one real problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  ❤️ Why I Built It
&lt;/h1&gt;

&lt;p&gt;I didn't start with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What AI application can I build?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I started with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“What could actually make studying easier for someone I know?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changed the direction of the project.&lt;/p&gt;

&lt;p&gt;Instead of building another general-purpose chatbot, I built something around a student's actual workflow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;their notes → their questions → their quiz → their mistakes → their revision.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's what &lt;strong&gt;Build for a Friend&lt;/strong&gt; meant to me.&lt;/p&gt;




&lt;h1&gt;
  
  
  💻 Source Code
&lt;/h1&gt;

&lt;p&gt;The complete source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;sanchalitorpe13/FriendMind&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the application source code, setup instructions, architecture, and screenshots.&lt;/p&gt;




&lt;h1&gt;
  
  
  🛠️ Built for a Friend. Built for Learning. Built with AI.
&lt;/h1&gt;

&lt;p&gt;FriendMind is my submission for the &lt;strong&gt;Hacktoberfest 2026 DEV Weekend Challenge — Build for a Friend.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. 💙&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Hacktoberfest 2026 DEV Weekend Challenge — Build for a Friend&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Partner Category
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FriendMind uses &lt;strong&gt;Gemma 3&lt;/strong&gt; as its local AI model through Ollama.&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #weekendchallenge #hf26challenge #gemma
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>gemmachallenge</category>
    </item>
  </channel>
</rss>
