{"slug": "i-built-my-friend-an-ai-interviewer-that-remembers-where-he-struggles", "title": "I Built My Friend an AI Interviewer That Remembers Where He Struggles", "summary": "A developer built InterviewMirror, an adaptive AI technical interviewer that analyzes a candidate's answers, detects conceptual weaknesses, and stores them in MongoDB Atlas so later interview sessions probe the same concepts with different questions. The project, created for a friend preparing for technical interviews, uses Google's Gemma as its intelligence layer and ElevenLabs for spoken interviewer questions, with source code published on GitHub.", "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\nMost interview preparation platforms remember your score.\n\n**InterviewMirror remembers something more important:**\n\nI built InterviewMirror for my friend **Tharun**, who was preparing for technical interviews.\n\nHe was already studying, solving coding problems, and practicing interview questions. But we noticed a recurring problem: answering the first question wasn't always the difficult part.\n\nThe difficult part was what came next.\n\n**\"Why?\"**\n\n**\"How does it work internally?\"**\n\n**\"What happens if we change this?\"**\n\n**\"Can you explain it another way?\"**\n\nThose follow-up questions often exposed gaps that a simple question bank couldn't identify.\n\nThere was another problem.\n\nIf Tharun struggled with a particular concept during one practice session, the next session didn't necessarily know about it.\n\nSo I asked:\n\n**What if an interviewer could remember where you struggled and use that information to make your next interview better?**\n\nThat became **InterviewMirror**.\n\nInterviewMirror is an **adaptive AI technical interviewer** that analyzes a candidate's answers, identifies weaknesses, remembers them, and uses that memory to influence future interviews.\n\nThe core idea is simple:\n\n**Your previous interview changes your next interview.**\n\nA traditional interview practice loop looks like:\n\ntext\n\nQuestion\n\n   ↓\n\nAnswer\n\n   ↓\n\nNext Question\n\nInterviewMirror turns it into:\n\nQuestion\n\n   ↓\n\nAnswer\n\n   ↓\n\nAnalyze\n\n   ↓\n\nRemember\n\n   ↓\n\nAdapt\n\n   ↓\n\nImprove\n\nA Simple Example\n\nSuppose Tharun is asked:\n\nExplain how HashMap works internally in Java.\n\nHis answer is partially correct, but he struggles when the interviewer asks about collision handling.\n\nInterviewMirror identifies:\n\nWeakness detected: HashMap collision handling\n\nThat weakness becomes part of his interview memory.\n\nDuring a future interview, InterviewMirror doesn't simply ask the same question again.\n\nIt can approach the same underlying concept from a different scenario:\n\nYou're designing a cache where many keys may map to the same bucket. How could that affect performance, and how would Java handle heavy collisions?\n\nSame concept.\n\nDifferent challenge.\n\nThat is the behavior I wanted to build.\n\nI didn't want to give Tharun another question bank.\n\nI wanted to give him an interviewer that remembers.\n\nDemo\n\nLive Demo: [https://interviewmirror-xlks.onrender.com/](https://interviewmirror-xlks.onrender.com/)\n\nGitHub: [https://github.com/Harini-7228/interviewmirror](https://github.com/Harini-7228/interviewmirror)\n\nThe most important part of InterviewMirror isn't the first question.\n\nIt's what happens after the interview.\n\nThe Adaptive Interview Loop\n\nThe core loop looks like this:\n\nINTERVIEW #1\n\n     ↓\n\nWeakness detected\n\n     ↓\n\nMongoDB Atlas\n\n     ↓\n\nWeakness remembered\n\n     ↓\n\nINTERVIEW #2\n\n     ↓\n\nDifferent question\n\n     ↓\n\nSame underlying concept tested\n\nThe objective isn't to make candidates memorize previous questions.\n\nIt is to help them improve the concepts they repeatedly struggle with.\n\nCode\n\nThe complete source code is available on GitHub:\n\n[https://github.com/Harini-7228/interviewmirror](https://github.com/Harini-7228/interviewmirror)\n\nThe project is structured around several core components:\n\nGemma: The Intelligence Layer\n\nGemma is the core AI layer of InterviewMirror.\n\nIt is used for:\n\nThis makes Gemma part of the core product behavior, rather than an optional AI feature.\n\nMongoDB Atlas: The Memory Layer\n\nMongoDB Atlas provides the persistent memory behind InterviewMirror.\n\nThe application stores relevant information such as:\n\nElevenLabs: Giving the Interviewer a Voice\n\nInterviews are conversations, not just text fields.\n\nInterviewMirror integrates ElevenLabs to provide spoken interviewer questions.\n\nThe interaction becomes:\n\nGemma\n\n  ↓\n\nInterview Question\n\n  ↓\n\nElevenLabs\n\n  ↓\n\nSpoken Interviewer\n\n  ↓\n\nCandidate\n\nThis makes the experience feel closer to an actual interview.\n\nRender: Making It Real\n\nInterviewMirror is deployed on Render and is publicly accessible.\n\nLive application:\n\n[https://interviewmirror-xlks.onrender.com/](https://interviewmirror-xlks.onrender.com/)\n\nInstead of keeping the project as a local prototype, I wanted people to be able to actually interact with the system.\n\nWhy Does Open Innovation Matter?\n\nThe interesting part of InterviewMirror isn't simply that it uses AI.\n\nIt's how AI is used.\n\nI could have built a basic interface that sends a prompt to an AI model and displays the response.\n\nThat would have produced another AI wrapper.\n\nInstead, InterviewMirror uses Gemma as part of an adaptive learning loop:\n\nGenerate\n\n   ↓\n\nEvaluate\n\n   ↓\n\nDetect\n\n   ↓\n\nRemember\n\n   ↓\n\nAdapt\n\n   ↓\n\nGenerate Again\n\nThe model's output influences what the candidate experiences next.\n\nThat makes the AI a core component of the application rather than a decorative feature.\n\nUsing an open-weight model also creates room for experimentation around the model layer without making the entire application dependent on one proprietary AI provider.\n\nThe interview engine, memory system, scoring system, and user experience can evolve independently.\n\nFor me, that's what open innovation means in this project:\n\nNot simply using an open model.\n\nBut using it to build something that can continue to evolve around the model.\n\n**Prize Categories**\n\nInterviewMirror uses the following technologies as meaningful parts of the final implementation.\n\n**Gemma**\n\nGemma powers the core AI interview experience, including question generation, answer evaluation, weakness detection, contextual follow-ups, and interview analysis.\n\n**MongoDB Atlas**\n\nMongoDB Atlas provides persistent interview memory and stores information that can influence future interviews.\n\n**ElevenLabs**\n\nElevenLabs provides the voice layer for the AI interviewer.\n\n**Render**\n\nRender hosts the publicly accessible application.\n\nEach technology has a specific role in the product rather than simply being included as a technology showcase.\n\nWhat I Learned:\n\nBuilding InterviewMirror changed the way I think about AI applications.\n\nInitially, the idea sounded simple:\n\n\"Build an AI interviewer.\"\n\nBut there are already many tools that can ask interview questions.\n\nThe more interesting question became:\n\nWhat should the interviewer remember?\n\nA question is temporary.\n\nA score is only a snapshot.\n\nBut a recurring weakness is valuable information.\n\nThat changed the architecture of the entire project.\n\nGemma analyzes the candidate's response.\n\nMongoDB Atlas preserves meaningful interview history.\n\nThe next interview uses that history.\n\nThe candidate receives feedback and another opportunity to improve.\n\nThis created a much more meaningful AI loop:\n\nPast Performance\n\n       ↓\n\nUnderstand Weakness\n\n       ↓\n\nRemember\n\n       ↓\n\nAdapt Future Interview\n\n       ↓\n\nPractice Again\n\n       ↓\n\nImprove\n\nBuilding for a Friend Changed My Approach\n\nInstead of starting with a technology and asking:\n\n\"What can I build with this?\"\n\nI started with a person and asked:\n\n\"What problem does my friend actually have?\"\n\nThat led to a much more focused product.\n\nI wasn't trying to build another AI interview platform.\n\nI was trying to solve one specific problem:\n\nHow can I help my friend practice the things he repeatedly struggles with?\n\nThat's what InterviewMirror became.\n\n**What's Next**\n\nInterviewMirror is still evolving.\n\nThe next areas I want to explore include:\n\n**Final Thought**\n\nWhen I started InterviewMirror, I thought I was building an AI interviewer for my friend.\n\nBut the project made me realize something:\n\nThe most useful interviewer isn't necessarily the one that asks the hardest questions.\n\nIt's the one that notices:\n\n\"You struggled here last time.\"\n\nAnd then says:\n\n\"Let's try again — but differently.\"\n\nThat's InterviewMirror.\n\n**Your previous interview changes your next interview.**\n\nPlease, Like, Share, Comment down your thoughts on this post!!", "url": "https://wpnews.pro/news/i-built-my-friend-an-ai-interviewer-that-remembers-where-he-struggles", "canonical_source": "https://dev.to/harini_ef7af7d386db6b1eb6/i-built-my-friend-an-ai-interviewer-that-remembers-where-he-struggles-m79", "published_at": "2026-10-04 22:32:06+00:00", "updated_at": "2026-10-04 22:42:08.943769+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-agents", "ai-tools", "developer-tools"], "entities": ["InterviewMirror", "Tharun", "Gemma", "MongoDB Atlas", "ElevenLabs", "GitHub", "Harini-7228"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-built-my-friend-an-ai-interviewer-that-remembers-where-he-struggles", "markdown": "https://wpnews.pro/news/i-built-my-friend-an-ai-interviewer-that-remembers-where-he-struggles.md", "text": "https://wpnews.pro/news/i-built-my-friend-an-ai-interviewer-that-remembers-where-he-struggles.txt", "jsonld": "https://wpnews.pro/news/i-built-my-friend-an-ai-interviewer-that-remembers-where-he-struggles.jsonld"}}