<?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: Indu</title>
    <description>The latest articles on DEV Community by Indu (@sriindu).</description>
    <link>https://dev.to/sriindu</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%2F4155562%2Ffdfef2c6-2fc8-4357-bd6b-6ef8b7124bf6.jpg</url>
      <title>DEV Community: Indu</title>
      <link>https://dev.to/sriindu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sriindu"/>
    <language>en</language>
    <item>
      <title>GreenBreak AI 🌱 — Less Scrolling, More Living!</title>
      <dc:creator>Indu</dc:creator>
      <pubDate>Sat, 10 Oct 2026 11:05:37 +0000</pubDate>
      <link>https://dev.to/sriindu/greenbreak-ai-less-scrolling-more-living-3l2e</link>
      <guid>https://dev.to/sriindu/greenbreak-ai-less-scrolling-more-living-3l2e</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/t/hf26challenge"&gt;#hf26challenge&lt;/a&gt; &lt;a href="https://dev.to/t/devchallenge"&gt;#devchallenge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What if we used our screen breaks to reconnect with the outdoors instead of scrolling through another feed?&lt;/p&gt;

&lt;p&gt;That's the idea behind &lt;strong&gt;GreenBreak AI&lt;/strong&gt; — a project that encourages people to step away from their screens and enjoy small, meaningful outdoor activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌱 The problem
&lt;/h2&gt;

&lt;p&gt;We spend a lot of time looking at screens, even when we only intended to check something for a few minutes. Taking a break can easily turn into more scrolling.&lt;/p&gt;

&lt;p&gt;I wanted to build something that makes it easier to choose an outdoor activity instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌿 What GreenBreak AI does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personalized break plans:&lt;/strong&gt; Generate outdoor activities based on the available time, activity type, and difficulty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local AI generation:&lt;/strong&gt; Uses Ollama with the &lt;code&gt;gemma2:2b&lt;/code&gt; model to generate break-plan suggestions locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template fallback:&lt;/strong&gt; If the local model is unavailable or returns an invalid response, the application can fall back to predefined activity templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily nature missions:&lt;/strong&gt; Encourages users to complete small outdoor activities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress tracking:&lt;/strong&gt; Stores activity progress in browser local storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple: make it easier to replace a few minutes of scrolling with a refreshing break outdoors.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 How I built it
&lt;/h2&gt;

&lt;p&gt;GreenBreak AI combines a Python backend with a web frontend.&lt;/p&gt;

&lt;p&gt;When a user requests a break plan, the backend sends a structured generation request to a locally running Ollama service. The model's response is validated before being returned to the frontend. If AI generation fails, the application can use the template-based fallback.&lt;/p&gt;

&lt;p&gt;This approach keeps the core experience available even when the local model cannot generate a response.&lt;/p&gt;

&lt;h3&gt;
  
  
  The local AI integration
&lt;/h3&gt;

&lt;p&gt;I used &lt;strong&gt;Gemma 2 2B (&lt;code&gt;gemma2:2b&lt;/code&gt;) through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of relying on a paid, hosted AI API, the application can generate suggestions using a model running on the user's own computer. This avoids per-request cloud inference charges, although running the model still requires suitable local hardware and resources.&lt;/p&gt;

&lt;p&gt;The model is distributed under Google's Gemma Terms of Use. It is an open-weight model with specific license conditions, so I am not claiming that it is OSI-approved open-source software.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python, FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Ollama, Gemma 2 2B&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; HTML, CSS, JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation:&lt;/strong&gt; Pydantic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress storage:&lt;/strong&gt; Browser local storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; Pytest&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Run it locally
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Clone the repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Sri-Indu/GreenBreak-AI.git
&lt;span class="nb"&gt;cd &lt;/span&gt;GreenBreak-AI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Install the dependencies
&lt;/h3&gt;

&lt;p&gt;Create and activate a Python virtual environment if desired, then install the project's requirements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Set up Ollama
&lt;/h3&gt;

&lt;p&gt;Install Ollama and make sure the &lt;code&gt;gemma2:2b&lt;/code&gt; model is available locally.&lt;/p&gt;

&lt;p&gt;If you do not already have the model, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma2:2b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it is already installed, you do not need to download it again. Ensure the Ollama service is running.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Start the backend
&lt;/h3&gt;

&lt;p&gt;From the project directory, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; uvicorn backend.main:app &lt;span class="nt"&gt;--host&lt;/span&gt; 127.0.0.1 &lt;span class="nt"&gt;--port&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Open the frontend
&lt;/h3&gt;

&lt;p&gt;Follow the frontend instructions in the repository README to open the application locally.&lt;/p&gt;

&lt;p&gt;If Ollama is unavailable, the template fallback can provide break plans instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Testing
&lt;/h2&gt;

&lt;p&gt;I ran the Python test suite after integrating local AI generation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;67 Python tests passed&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;JavaScript syntax check completed without errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These results verify the tested application behavior. Actual AI generation also depends on the local Ollama service and model being available.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Project links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/Sri-Indu/GreenBreak-AI" rel="noopener noreferrer"&gt;https://github.com/Sri-Indu/GreenBreak-AI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1m0QsAE5tY1_h85-CpulkI_5whhALjc4h/view?usp=drivesdk" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1m0QsAE5tY1_h85-CpulkI_5whhALjc4h/view?usp=drivesdk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌍 Why open innovation matters
&lt;/h2&gt;

&lt;p&gt;I wanted to explore how AI could support healthier digital habits without requiring a paid hosted AI API.&lt;/p&gt;

&lt;p&gt;Local inference gives developers an opportunity to experiment with AI on their own machines, understand how model integration works, and build useful applications with fewer external service dependencies.&lt;/p&gt;

&lt;p&gt;This project also helped me learn about structured model responses, backend validation, error handling, and fallback behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  💚 The goal
&lt;/h2&gt;

&lt;p&gt;A short break outside can be more meaningful than another few minutes scrolling.&lt;/p&gt;

&lt;p&gt;With GreenBreak AI, I hope to make those small breaks easier to plan — one outdoor activity at a time.&lt;/p&gt;

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

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

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
    </item>
    <item>
      <title>I built PrepMate, an AI interview coach for a friend preparing for SDE interviews 🤝</title>
      <dc:creator>Indu</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:26:49 +0000</pubDate>
      <link>https://dev.to/sriindu/i-built-prepmate-an-ai-interview-coach-for-a-friend-preparing-for-sde-interviews-51l</link>
      <guid>https://dev.to/sriindu/i-built-prepmate-an-ai-interview-coach-for-a-friend-preparing-for-sde-interviews-51l</guid>
      <description>&lt;p&gt;This is my submission for the &lt;strong&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;PrepMate&lt;/strong&gt;, a privacy-first AI interview preparation assistant for a friend preparing for software engineering interviews.&lt;/p&gt;

&lt;p&gt;The problem is simple: interview preparation is often generic. A candidate may have a specific resume, a specific target job, and specific weaknesses, but still practice the same questions as everyone else.&lt;/p&gt;

&lt;p&gt;PrepMate makes the preparation personalized.&lt;/p&gt;

&lt;p&gt;The user provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A resume&lt;/li&gt;
&lt;li&gt;A target job description&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PrepMate then analyzes the candidate against the role and provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strengths&lt;/li&gt;
&lt;li&gt;Skill gaps&lt;/li&gt;
&lt;li&gt;Relevant interview topics&lt;/li&gt;
&lt;li&gt;A personalized preparation plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I didn't want it to stop at resume analysis.&lt;/p&gt;

&lt;p&gt;PrepMate also conducts an &lt;strong&gt;adaptive mock interview&lt;/strong&gt;. It evaluates the candidate's answer and uses that evaluation to decide what kind of question should come next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1KgmF-Niv3vzn9R8DcbTcSfDngYByDHfn/view?usp=drivesdk" rel="noopener noreferrer"&gt;Watch the PrepMate demo&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Upload a resume and job description&lt;/li&gt;
&lt;li&gt;Analyze the candidate's fit&lt;/li&gt;
&lt;li&gt;Start the mock interview&lt;/li&gt;
&lt;li&gt;Answer the first question&lt;/li&gt;
&lt;li&gt;Receive an AI evaluation&lt;/li&gt;
&lt;li&gt;Generate an adaptive second question&lt;/li&gt;
&lt;li&gt;Complete the interview&lt;/li&gt;
&lt;li&gt;Receive the final feedback report&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The main pipeline is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume + Job Description → PDF Extraction → RAG → Gemma → Personalized Analysis → Adaptive Interview → Final Report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js + TypeScript&lt;/strong&gt; for the frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI + Python&lt;/strong&gt; for the backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FAISS&lt;/strong&gt; for vector search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentence Transformers&lt;/strong&gt; for embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama + Gemma 2B&lt;/strong&gt; for local AI inference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pypdf&lt;/strong&gt; for resume extraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resume and job description are processed in memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adaptive Interview
&lt;/h2&gt;

&lt;p&gt;The interview is intentionally adaptive rather than simply generating a fixed list of questions.&lt;/p&gt;

&lt;p&gt;After each answer, PrepMate evaluates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Correctness&lt;/li&gt;
&lt;li&gt;Depth&lt;/li&gt;
&lt;li&gt;Clarity&lt;/li&gt;
&lt;li&gt;Completeness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on the evaluation, the system can choose strategies such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reinforce a weakness&lt;/li&gt;
&lt;li&gt;Ask a follow-up&lt;/li&gt;
&lt;li&gt;Increase difficulty&lt;/li&gt;
&lt;li&gt;Continue on the same topic&lt;/li&gt;
&lt;li&gt;Move to a new topic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current MVP runs a focused &lt;strong&gt;2-question interview&lt;/strong&gt; followed by a final report.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open-Source AI?
&lt;/h2&gt;

&lt;p&gt;I wanted the core AI functionality to work without depending on a paid proprietary LLM API.&lt;/p&gt;

&lt;p&gt;PrepMate uses the open-weight &lt;strong&gt;Gemma 2B&lt;/strong&gt; model locally through Ollama.&lt;/p&gt;

&lt;p&gt;This makes the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local&lt;/li&gt;
&lt;li&gt;Free to run&lt;/li&gt;
&lt;li&gt;More privacy-friendly&lt;/li&gt;
&lt;li&gt;Easier to experiment with and inspect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The RAG pipeline also runs locally using FAISS and Sentence Transformers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; PrepMate uses the open-weight &lt;strong&gt;Gemma 2B&lt;/strong&gt; model locally through Ollama for resume and job-description analysis, interview question generation, answer evaluation, and personalized feedback.&lt;/p&gt;

&lt;p&gt;Gemma is not just used as a simple chatbot. It is integrated into the core interview-preparation workflow, while the deterministic Python logic controls the adaptive interview strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;Resumes can contain sensitive personal information, so privacy was an important design consideration.&lt;/p&gt;

&lt;p&gt;PrepMate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processes the resume in memory&lt;/li&gt;
&lt;li&gt;Does not permanently store the uploaded PDF&lt;/li&gt;
&lt;li&gt;Keeps interview session state in memory&lt;/li&gt;
&lt;li&gt;Uses local Ollama/Gemma for AI inference&lt;/li&gt;
&lt;li&gt;Does not require a paid LLM API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The demo uses fictional sample candidate data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building PrepMate helped me understand how different AI components fit together into an actual product rather than just calling an LLM.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;PDF document processing&lt;/li&gt;
&lt;li&gt;Embeddings and vector search&lt;/li&gt;
&lt;li&gt;RAG&lt;/li&gt;
&lt;li&gt;Local LLM inference&lt;/li&gt;
&lt;li&gt;Structured JSON generation&lt;/li&gt;
&lt;li&gt;Adaptive interview logic&lt;/li&gt;
&lt;li&gt;FastAPI APIs&lt;/li&gt;
&lt;li&gt;Next.js frontend integration&lt;/li&gt;
&lt;li&gt;Testing an AI-powered application end-to-end&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important design choice was keeping the interview strategy deterministic in Python while using Gemma for natural-language question generation and evaluation.&lt;/p&gt;

&lt;p&gt;This makes the adaptive behavior easier to understand, test, and debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub
&lt;/h2&gt;

&lt;p&gt;💻 &lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/Sri-Indu/PrepMate" rel="noopener noreferrer"&gt;https://github.com/Sri-Indu/PrepMate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source and includes the implementation, setup instructions, and tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Limitations
&lt;/h2&gt;

&lt;p&gt;This is an MVP, so it currently has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 interview questions per session&lt;/li&gt;
&lt;li&gt;No authentication&lt;/li&gt;
&lt;li&gt;No persistent interview history&lt;/li&gt;
&lt;li&gt;No voice input&lt;/li&gt;
&lt;li&gt;No production deployment&lt;/li&gt;
&lt;li&gt;Local Ollama/Gemma setup required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are intentional scope limitations for the challenge rather than unfinished core functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Future versions could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Longer adaptive interviews&lt;/li&gt;
&lt;li&gt;Voice-based interviews&lt;/li&gt;
&lt;li&gt;Persistent candidate history&lt;/li&gt;
&lt;li&gt;More advanced interview strategies&lt;/li&gt;
&lt;li&gt;Production deployment&lt;/li&gt;
&lt;li&gt;Support for additional open-weight models&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I built PrepMate because I wanted to solve a real problem for someone preparing for SDE interviews instead of building another generic AI chatbot.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Give a candidate a preparation plan based on their actual profile, then help them improve through an adaptive interview.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building this project also helped me understand how RAG, embeddings, local LLMs, structured generation, and application logic can work together as one complete AI product.&lt;/p&gt;

&lt;p&gt;Built for the &lt;strong&gt;Hacktoberfest 2026 Build for a Friend Challenge&lt;/strong&gt; 🤝&lt;/p&gt;

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