<?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: Apoorva Chittapur</title>
    <description>The latest articles on DEV Community by Apoorva Chittapur (@apoorva_chittapur_55).</description>
    <link>https://dev.to/apoorva_chittapur_55</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%2F4087202%2F6989b6eb-2e05-47fd-a3d6-11b209ec0952.png</url>
      <title>DEV Community: Apoorva Chittapur</title>
      <link>https://dev.to/apoorva_chittapur_55</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apoorva_chittapur_55"/>
    <language>en</language>
    <item>
      <title>I Built a Local AI Study Assistant Using Ollama, ChromaDB, FastAPI and React</title>
      <dc:creator>Apoorva Chittapur</dc:creator>
      <pubDate>Fri, 21 Aug 2026 18:13:08 +0000</pubDate>
      <link>https://dev.to/apoorva_chittapur_55/i-built-a-local-ai-study-assistant-using-ollama-chromadb-fastapi-and-react-23fc</link>
      <guid>https://dev.to/apoorva_chittapur_55/i-built-a-local-ai-study-assistant-using-ollama-chromadb-fastapi-and-react-23fc</guid>
      <description>&lt;p&gt;I Built a Local AI Study Assistant Using Ollama, ChromaDB, FastAPI and React&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;ExamAI&lt;/strong&gt;, a local AI study assistant that lets students upload their study PDFs and ask questions about them.&lt;/p&gt;

&lt;p&gt;The main goal was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Upload your notes → ask a question → get an answer based on your documents.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wanted to build something that could actually be useful for studying while also learning how AI applications work behind the scenes.&lt;/p&gt;

&lt;p&gt;🚀What ExamAI Does&lt;/p&gt;

&lt;p&gt;ExamAI allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload PDF study material&lt;/li&gt;
&lt;li&gt;Extract text from the documents&lt;/li&gt;
&lt;li&gt;Split the content into searchable chunks&lt;/li&gt;
&lt;li&gt;Generate embeddings&lt;/li&gt;
&lt;li&gt;Store the chunks in ChromaDB&lt;/li&gt;
&lt;li&gt;Search for relevant information when a question is asked&lt;/li&gt;
&lt;li&gt;Send the relevant context to a local LLM&lt;/li&gt;
&lt;li&gt;Get an answer through a React interface&lt;/li&gt;
&lt;li&gt;Continue a conversation with follow-up questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that the AI runs locally using &lt;strong&gt;Ollama&lt;/strong&gt;, rather than requiring a paid cloud AI API.&lt;/p&gt;

&lt;p&gt;🧠 Tech Stack&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Axios&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;Uvicorn&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI / RAG
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;ChromaDB&lt;/li&gt;
&lt;li&gt;Sentence Transformers&lt;/li&gt;
&lt;li&gt;PyMuPDF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application follows a basic RAG (Retrieval-Augmented Generation) architecture.&lt;/p&gt;

&lt;p&gt;🔎 How It Works&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PDF
 ↓
Text Extraction
 ↓
Chunking
 ↓
Embeddings
 ↓
ChromaDB
 ↓
User Question
 ↓
Similarity Search
 ↓
Relevant Context
 ↓
Ollama
 ↓
AI Answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of sending the entire PDF to the model every time, ExamAI retrieves the most relevant parts of the document and uses those as context.&lt;/p&gt;

&lt;p&gt;💻 Running It Locally&lt;/p&gt;

&lt;p&gt;The project includes Windows setup and startup scripts to make running it easier.&lt;/p&gt;

&lt;p&gt;After setting up the required dependencies, the application can start the FastAPI backend and React frontend together.&lt;/p&gt;

&lt;p&gt;The project is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/apoorvaapoorva0160-droid/ExamAI" rel="noopener noreferrer"&gt;https://github.com/apoorvaapoorva0160-droid/ExamAI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🛠️ What I Learned&lt;/p&gt;

&lt;p&gt;Building this project taught me much more than just connecting an LLM to a frontend.&lt;/p&gt;

&lt;p&gt;I learned about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAG architecture&lt;/li&gt;
&lt;li&gt;Vector databases&lt;/li&gt;
&lt;li&gt;Embeddings&lt;/li&gt;
&lt;li&gt;PDF processing&lt;/li&gt;
&lt;li&gt;FastAPI APIs&lt;/li&gt;
&lt;li&gt;React frontend/backend communication&lt;/li&gt;
&lt;li&gt;Local LLMs with Ollama&lt;/li&gt;
&lt;li&gt;Conversation context&lt;/li&gt;
&lt;li&gt;Git and GitHub&lt;/li&gt;
&lt;li&gt;Windows automation with &lt;code&gt;.bat&lt;/code&gt; scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also ran into plenty of bugs along the way.&lt;/p&gt;

&lt;p&gt;Some of the biggest lessons came from fixing those bugs rather than writing the initial code.&lt;/p&gt;

&lt;p&gt;🔐 Why Local AI?&lt;/p&gt;

&lt;p&gt;One of the things I like about this project is that the AI processing can happen locally.&lt;/p&gt;

&lt;p&gt;That means students can experiment with the application without needing an API key for a cloud LLM.&lt;/p&gt;

&lt;p&gt;It also made the project a good way for me to understand what actually happens inside a local AI application.&lt;/p&gt;

&lt;p&gt;📌 What's Next?&lt;/p&gt;

&lt;p&gt;ExamAI is still a work in progress.&lt;/p&gt;

&lt;p&gt;Some things I want to improve include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better document management&lt;/li&gt;
&lt;li&gt;Improved retrieval quality&lt;/li&gt;
&lt;li&gt;More accurate answers&lt;/li&gt;
&lt;li&gt;Better multi-document support&lt;/li&gt;
&lt;li&gt;Cleaner UI&lt;/li&gt;
&lt;li&gt;Better error handling&lt;/li&gt;
&lt;li&gt;More robust conversation/session management&lt;/li&gt;
&lt;li&gt;Easier installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd also like to eventually make the project easier for other students to install and use.&lt;/p&gt;

&lt;p&gt;🙌 Feedback Welcome&lt;/p&gt;

&lt;p&gt;This is one of my first serious AI projects, and I'm sharing it because I'd genuinely like feedback from other developers.&lt;/p&gt;

&lt;p&gt;If you have suggestions about the RAG architecture, code structure, retrieval approach, UI, or anything else, I'd love to hear them.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxevugzjhmabdap3jm9jb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxevugzjhmabdap3jm9jb.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;a href="https://github.com/apoorvaapoorva0160-droid/ExamAI" rel="noopener noreferrer"&gt;https://github.com/apoorvaapoorva0160-droid/ExamAI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>react</category>
      <category>fastapi</category>
    </item>
  </channel>
</rss>
