<?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>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>
