{"slug": "study-saathi-a-local-ai-study-companion-built-for-a-friend", "title": "Study Saathi — A Local AI Study Companion Built for a Friend", "summary": "A developer built Study Saathi, a local AI study companion that converts uploaded PDF and TXT notes into summaries, practice MCQs, and flashcards. The app runs entirely on-device via Ollama with the qwen3:1.7b model, using a React + Vite frontend and a Python FastAPI backend with PyMuPDF for PDF extraction, deliberately avoiding RAG, vector databases, authentication, or cloud AI APIs.", "body_md": "*This is a submission for the [Hacktoberfest Weekend Challenge: Build for a Friend](https://dev.to/challenges/hacktoberfest-weekend-2026-10-01)*\n\nA friend of mine is preparing for university exams. Like many students, they have to go through long PDFs and notes and often struggle with a simple question:\n\n**\"Where do I even start?\"**\n\nSo I built **Study Saathi**, a simple local AI-powered study assistant that turns study notes into useful revision material.\n\nThe workflow is simple:\n\n**Upload Notes → AI Summary → Practice MCQs → Flashcards**\n\nStudy Saathi currently supports PDF and TXT study material and provides three main features:\n\nThe AI is instructed to use the uploaded study material as the primary source and avoid introducing unrelated information.\n\nThe main goal was not to build a huge AI platform, but to solve a real problem for a real student with a small, useful application.\n\n🎥 **Watch the Study Saathi Demo:**\n\n[https://drive.google.com/file/d/1zy5ISFlc8K4PAys0SUK0gh9VlSftoCIa/view?usp=sharing](https://drive.google.com/file/d/1zy5ISFlc8K4PAys0SUK0gh9VlSftoCIa/view?usp=sharing)\n\nThe demo shows the complete workflow:\n\nThe AI inference runs locally on my machine instead of using a cloud AI API.\n\nGitHub Repository:\n\n[https://github.com/NipunGoel02/StudySaathi](https://github.com/NipunGoel02/StudySaathi)\n\n```\nStudySaathi/\n│\n├── backend/\n│   ├── main.py\n│   ├── ollama_service.py\n│   ├── pdf_parser.py\n│   └── requirements.txt\n│\n├── frontend/\n│   └── React + Vite application\n│\n├── sample_notes/\n│   ├── Computer_Networks_Notes.pdf\n│   └── Operating_Systems_Notes.txt\n│\n├── README.md\n└── start.bat\n```\n\n`main.py`\n\nContains the FastAPI backend and API endpoints.\n\n`ollama_service.py`\n\nHandles communication with the local Ollama server and generates summaries, MCQs, and flashcards using the local AI model.\n\n`pdf_parser.py`\n\nExtracts text from uploaded PDF and TXT study material.\n\n| Component | Technology | \n|---|---|\n| Frontend | React + Vite + Tailwind CSS | \n| Backend | Python + FastAPI | \n| PDF Processing | PyMuPDF | \n| Local AI Runtime | Ollama | \n| AI Model | qwen3:1.7b | \n| Database | None | \n\nThe application intentionally has a simple architecture.\n\nThere is no RAG pipeline, vector database, authentication system, or cloud AI API in the current version.\n\n```\n                    ┌─────────────────────┐\n                    │       Student       │\n                    └──────────┬──────────┘\n                               │\n                               ▼\n                    ┌─────────────────────┐\n                    │    React Frontend   │\n                    │    Vite + Tailwind  │\n                    └──────────┬──────────┘\n                               │\n                               ▼\n                    ┌─────────────────────┐\n                    │    FastAPI Backend  │\n                    │      Python         │\n                    └──────────┬──────────┘\n                               │\n                     ┌─────────┴─────────┐\n                     │                   │\n                     ▼                   ▼\n             ┌──────────────┐    ┌──────────────┐\n             │ PyMuPDF      │    │ TXT Parser   │\n             │ PDF Extract  │    │              │\n             └──────┬───────┘    └──────┬───────┘\n                    │                   │\n                    └─────────┬─────────┘\n                              │\n                              ▼\n                    ┌─────────────────────┐\n                    │       Ollama        │\n                    │   Local AI Runtime  │\n                    └──────────┬──────────┘\n                               │\n                               ▼\n                    ┌─────────────────────┐\n                    │     qwen3:1.7b      │\n                    │    Local AI Model   │\n                    └──────────┬──────────┘\n                               │\n                 ┌─────────────┼─────────────┐\n                 ▼             ▼             ▼\n             Summary          MCQs       Flashcards\n```\n\nThe most important part of Study Saathi is that the AI runs locally.\n\nI used **Ollama** as the local AI runtime and `qwen3:1.7b` as the model.\n\nThe model is small enough to run efficiently on my NVIDIA RTX 3050 with 4 GB VRAM.\n\nDuring testing, Ollama reported the model running at 100% GPU on my system.\n\nThe application communicates with Ollama locally through:\n\n```\nhttp://localhost:11434\n```\n\nThe default model is:\n\n```\nDEFAULT_MODEL = \"qwen3:1.7b\"\n```\n\nStudy Saathi has separate generation logic for:\n\nFor structured content such as MCQs and flashcards, the backend asks the model to return structured JSON so that the frontend can reliably display the generated content.\n\nFor example, an MCQ is represented as:\n\n```\n{\n  \"q\": \"What is the role of the OS scheduler?\",\n  \"a\": \"Manages process execution order\",\n  \"b\": \"Handles file storage\",\n  \"c\": \"Controls network packets\",\n  \"d\": \"Manages GPU memory\",\n  \"answer\": \"A\"\n}\n```\n\nThe backend also includes parsing and retry handling for generated content.\n\nThe backend exposes the following endpoints:\n\n```\nGET  /health\nPOST /upload\nPOST /summary\nPOST /mcqs\nPOST /flashcards\n```\n\nThe basic flow is:\n\n```\nUpload Notes\n     ↓\nExtract Text\n     ↓\nSend Text + Prompt to Ollama\n     ↓\nqwen3:1.7b Generates Content\n     ↓\nBackend Parses Response\n     ↓\nReact Displays Result\n```\n\nFor this project, open innovation is important because it makes local AI practical for everyday users.\n\nStudy material can be processed locally through Ollama instead of being sent to a third-party AI API.\n\nThis is especially useful for students who may have personal notes, assignments, or other private documents.\n\nStudy Saathi does not require an OpenAI, Gemini, or other cloud AI API key for its core AI functionality.\n\nThe model runs directly on the user's machine.\n\nAfter downloading the model, local inference does not involve paying for every AI request.\n\nA relatively small open-weight model such as `qwen3:1.7b` can run locally on consumer hardware.\n\nIn my setup, it runs fully on the NVIDIA RTX 3050 GPU.\n\nUsing Ollama as the runtime makes it easier to experiment with different compatible local models without redesigning the entire application.\n\nThis means the application is not tightly dependent on a single cloud AI provider.\n\nThe goal of Study Saathi was to make a useful tool for a student, not to build another application that requires:\n\n```\nAccount\n   ↓\nAPI Key\n   ↓\nCloud Request\n   ↓\nUsage Limits\n   ↓\nAPI Cost\n```\n\nInstead, the workflow can be:\n\n```\nInstall Ollama\n      ↓\nDownload Local Model\n      ↓\nRun Study Saathi\n      ↓\nUpload Notes\n      ↓\nStudy\n```\n\nThat simplicity is what I wanted to demonstrate with this project.\n\nBuilding Study Saathi helped me understand that local AI does not always require a complicated architecture.\n\nFor a focused use case, a small local model combined with a simple backend can already provide a useful AI experience.\n\nI also learned how to:\n\nThere are several things I would like to add in future versions:\n\nThese features are planned improvements and are not part of the current implementation.\n\nStudy Saathi uses Ollama as the local AI runtime for running the model directly on the user's machine.\n\nThe project uses an open-weight AI model together with open-source technologies to build a practical local AI application.\n\nStudy Saathi started with a simple problem:\n\n**My friend had notes, but didn't know how to efficiently revise them.**\n\nInstead of building a complicated platform, I built a small local AI tool that turns those notes into:\n\n**Summary + MCQs + Flashcards**\n\nThe project demonstrates how open-weight AI and local inference can be used to build useful applications for real people without requiring a cloud AI API.\n\n**Built for a friend. Built locally. Built with open AI technology.**\n\n🎥 **Demo:**\n\n💻 **GitHub:**", "url": "https://wpnews.pro/news/study-saathi-a-local-ai-study-companion-built-for-a-friend", "canonical_source": "https://dev.to/nipun_goel_720eefc9d5f127/study-saathi-a-local-ai-study-companion-built-for-a-friend-1ka5", "published_at": "2026-10-04 17:04:51+00:00", "updated_at": "2026-10-04 17:12:50.585245+00:00", "lang": "en", "topics": ["ai-tools", "large-language-models", "ai-products", "generative-ai"], "entities": ["Study Saathi", "Ollama", "qwen3:1.7b", "FastAPI", "React", "Vite", "PyMuPDF", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/study-saathi-a-local-ai-study-companion-built-for-a-friend", "markdown": "https://wpnews.pro/news/study-saathi-a-local-ai-study-companion-built-for-a-friend.md", "text": "https://wpnews.pro/news/study-saathi-a-local-ai-study-companion-built-for-a-friend.txt", "jsonld": "https://wpnews.pro/news/study-saathi-a-local-ai-study-companion-built-for-a-friend.jsonld"}}