<?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: Nagarjun M</title>
    <description>The latest articles on DEV Community by Nagarjun M (@nagarjun_m).</description>
    <link>https://dev.to/nagarjun_m</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%2F4156491%2F9a7f4aa2-4804-4744-81f5-2844763a2646.jpg</url>
      <title>DEV Community: Nagarjun M</title>
      <link>https://dev.to/nagarjun_m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nagarjun_m"/>
    <language>en</language>
    <item>
      <title>InterviewBuddy — A Personalized AI Interview Coach Built for a Friend</title>
      <dc:creator>Nagarjun M</dc:creator>
      <pubDate>Sun, 04 Oct 2026 04:46:51 +0000</pubDate>
      <link>https://dev.to/nagarjun_m/interviewbuddy-a-personalized-ai-interview-coach-built-for-a-friend-4khi</link>
      <guid>https://dev.to/nagarjun_m/interviewbuddy-a-personalized-ai-interview-coach-built-for-a-friend-4khi</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;InterviewBuddy&lt;/strong&gt;, a personalized AI mock interview platform designed for &lt;strong&gt;Parshith Kumar S&lt;/strong&gt;, who is preparing for software engineering interviews.&lt;/p&gt;

&lt;p&gt;The problem I wanted to solve was simple: generic interview chatbots ask generic questions.&lt;/p&gt;

&lt;p&gt;A real interview should be based on the candidate.&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%2Fbzrq3zuo560ag677fnve.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%2Fbzrq3zuo560ag677fnve.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;br&gt;
InterviewBuddy takes a candidate's &lt;strong&gt;resume, target role, optional job description, projects, skills, and previous interview performance&lt;/strong&gt; and uses that information to conduct an adaptive technical interview.&lt;/p&gt;

&lt;p&gt;Instead of simply generating another question, InterviewBuddy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads and structures the candidate's resume.&lt;/li&gt;
&lt;li&gt;Builds a candidate profile from their skills and projects.&lt;/li&gt;
&lt;li&gt;Uses an optional job description to understand role requirements.&lt;/li&gt;
&lt;li&gt;Generates personalized interview questions.&lt;/li&gt;
&lt;li&gt;Evaluates answers across technical accuracy, depth, and clarity.&lt;/li&gt;
&lt;li&gt;Identifies missing concepts and recurring weaknesses.&lt;/li&gt;
&lt;li&gt;Uses retrieval to ground questions in candidate-specific information.&lt;/li&gt;
&lt;li&gt;Adapts subsequent questions based on previous performance.&lt;/li&gt;
&lt;li&gt;Stores persistent weaknesses in PostgreSQL.&lt;/li&gt;
&lt;li&gt;Generates a final interview report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, instead of asking a generic question like "What is REST?", InterviewBuddy can ask a candidate about how they designed REST APIs in their own project.&lt;/p&gt;

&lt;p&gt;That makes the practice session much closer to a real interview.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live application:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://interview-buddy-1-quvm.onrender.com" rel="noopener noreferrer"&gt;https://interview-buddy-1-quvm.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend API / Swagger:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://interview-buddy-v4c5.onrender.com/docs" rel="noopener noreferrer"&gt;https://interview-buddy-v4c5.onrender.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application is fully deployed and supports the complete interview flow from resume onboarding to final evaluation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nagarjunm18/interview-buddy" rel="noopener noreferrer"&gt;https://github.com/nagarjunm18/interview-buddy&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React + TypeScript&lt;/strong&gt; — frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI + Python&lt;/strong&gt; — backend API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt; — candidate profiles, interview sessions, evaluations, and weaknesses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAG pipeline&lt;/strong&gt; — candidate-specific retrieval&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TF-IDF + normalized vectors&lt;/strong&gt; — lightweight semantic retrieval for the deployed free-tier environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Groq + &lt;code&gt;openai/gpt-oss-20b&lt;/code&gt;&lt;/strong&gt; — deployed LLM inference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama + &lt;code&gt;qwen3:4b&lt;/code&gt;&lt;/strong&gt; — local development and experimentation with an open-weight model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render&lt;/strong&gt; — production deployment&lt;/li&gt;
&lt;/ul&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%2Fm2yjgbz8j7ecgeaqtvtx.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%2Fm2yjgbz8j7ecgeaqtvtx.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the most interesting engineering decisions was adapting the retrieval layer for deployment constraints.&lt;/p&gt;

&lt;p&gt;I initially used Sentence Transformers for embeddings. However, the dependency footprint was too large for the 512 MB free deployment environment.&lt;/p&gt;

&lt;p&gt;Instead of abandoning retrieval, I replaced it with a lightweight TF-IDF vectorization approach with normalized vectors. The existing Retriever and similarity-threshold logic could then remain in place.&lt;/p&gt;

&lt;p&gt;This gave me a much smaller deployment while preserving the retrieval pipeline.&lt;/p&gt;

&lt;p&gt;I also designed the LLM layer so that the application could switch inference providers without rewriting the interview orchestration.&lt;/p&gt;

&lt;p&gt;During development I experimented with &lt;strong&gt;Ollama and &lt;code&gt;qwen3:4b&lt;/code&gt; locally&lt;/strong&gt;. For the deployed application, I use &lt;strong&gt;&lt;code&gt;openai/gpt-oss-20b&lt;/code&gt; through Groq&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This separation between the application logic and model provider means the interviewer can evolve without rebuilding the entire system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation was important to InterviewBuddy because I wanted the AI layer to remain replaceable rather than making the entire application dependent on one closed model.&lt;/p&gt;

&lt;p&gt;During development, I was able to run an open-weight model locally with Ollama.&lt;/p&gt;

&lt;p&gt;That gave me the ability to experiment with the model locally, understand the inference pipeline, and keep the LLM layer separate from the rest of the application.&lt;/p&gt;

&lt;p&gt;The deployed version uses &lt;code&gt;gpt-oss-20b&lt;/code&gt;, an open-weight model, through Groq for practical hosted inference.&lt;/p&gt;

&lt;p&gt;This architecture means the core InterviewBuddy system isn't tightly coupled to one proprietary model.&lt;/p&gt;

&lt;p&gt;The model can be changed while keeping the candidate profile, RAG pipeline, interview orchestration, evaluation logic, and persistent memory intact.&lt;/p&gt;

&lt;p&gt;For an interview preparation tool that handles personal resumes and interview history, having control over the model and being able to move between local and hosted inference is particularly valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes InterviewBuddy Different?
&lt;/h2&gt;

&lt;p&gt;The goal wasn't to build another chatbot.&lt;/p&gt;

&lt;p&gt;The important part of InterviewBuddy is the &lt;strong&gt;interview loop&lt;/strong&gt;:&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%2Fxfomqhytt7bo33g5dfyk.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%2Fxfomqhytt7bo33g5dfyk.png" alt=" " width="800" height="364"&gt;&lt;/a&gt;&lt;br&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%2F7uopa4di3b0wb6gfn9y7.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%2F7uopa4di3b0wb6gfn9y7.png" alt=" " width="799" height="363"&gt;&lt;/a&gt;&lt;br&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%2F4iytt9yks90mihboo0oc.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%2F4iytt9yks90mihboo0oc.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A candidate's previous weaknesses can influence future practice sessions.&lt;/p&gt;

&lt;p&gt;That makes the system increasingly personalized instead of treating every interview as an isolated conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Render &amp;amp; GitHub
&lt;/h3&gt;

&lt;p&gt;I am entering the &lt;strong&gt;Best Use of Render&lt;/strong&gt; category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;InterviewBuddy&lt;/strong&gt; uses &lt;strong&gt;Render&lt;/strong&gt; for deploying the React frontend and FastAPI backend, with PostgreSQL for persistent application data. &lt;strong&gt;GitHub&lt;/strong&gt; is used for source-code management, version control, and maintaining the project's development workflow. The GitHub repository is connected to Render for streamlined deployment whenever changes are pushed to the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used the InterviewBuddy application to conduct a complete interview session and verify the end-to-end flow from personalized question generation through answer evaluation and the final report.&lt;/p&gt;

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

&lt;p&gt;I built InterviewBuddy around a problem that is personally meaningful to someone I know: preparing for software engineering interviews can become repetitive when every practice session starts from the same generic questions.&lt;/p&gt;

&lt;p&gt;I wanted to build something that remembers the candidate, understands their projects, identifies their weaknesses, and changes the interview accordingly.&lt;/p&gt;

&lt;p&gt;The result is a small but complete AI interview system that combines &lt;strong&gt;LLM inference, RAG, persistent memory, structured evaluation, adaptive questioning, and a production web application&lt;/strong&gt;.&lt;/p&gt;

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