<?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>Forem: SUDHANVA C</title>
    <description>The latest articles on Forem by SUDHANVA C (@sudhanva_c_dfdaa4b816b2d3).</description>
    <link>https://forem.com/sudhanva_c_dfdaa4b816b2d3</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3840500%2F620d5e5b-b44f-4653-94d7-6c227909a00d.png</url>
      <title>Forem: SUDHANVA C</title>
      <link>https://forem.com/sudhanva_c_dfdaa4b816b2d3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sudhanva_c_dfdaa4b816b2d3"/>
    <language>en</language>
    <item>
      <title>I Built a Coding Mentor That Actually Remembers My Mistakes</title>
      <dc:creator>SUDHANVA C</dc:creator>
      <pubDate>Mon, 23 Mar 2026 17:31:38 +0000</pubDate>
      <link>https://forem.com/sudhanva_c_dfdaa4b816b2d3/i-built-a-coding-mentor-that-actually-remembers-my-mistakes-1f3c</link>
      <guid>https://forem.com/sudhanva_c_dfdaa4b816b2d3/i-built-a-coding-mentor-that-actually-remembers-my-mistakes-1f3c</guid>
      <description>&lt;p&gt;“Did it seriously just call me out for that… again?”&lt;/p&gt;

&lt;p&gt;I was staring at my screen while my own app pointed out that I had repeated the same bug for the third time. That’s when it clicked—this wasn’t just another code reviewer anymore. It was starting to behave like a real mentor.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What This System Actually Does&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I built CodeMentor with a simple goal: create a coding assistant that doesn’t forget you.&lt;/p&gt;

&lt;p&gt;Most AI tools are stateless. You ask a question, get an answer, and everything resets. That works for quick help, but it completely breaks the learning loop. Real improvement comes from recognizing patterns—especially the mistakes you keep repeating.&lt;/p&gt;

&lt;p&gt;So instead of building another chatbot, I focused on one idea: memory.&lt;/p&gt;

&lt;p&gt;The system is a React app powered by:&lt;/p&gt;

&lt;p&gt;Groq (LLaMA-3.3-70B) for fast, streaming responses&lt;br&gt;
Hindsight for persistent memory&lt;/p&gt;

&lt;p&gt;Every interaction follows:&lt;/p&gt;

&lt;p&gt;Recall → Analyze → Retain&lt;/p&gt;

&lt;p&gt;Before reviewing your code, it remembers your past. Then it analyzes your current solution. Finally, it stores what just happened.&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.amazonaws.com%2Fuploads%2Farticles%2F5ti35swjprvfipumbvol.jpeg" 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.amazonaws.com%2Fuploads%2Farticles%2F5ti35swjprvfipumbvol.jpeg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;The Core Idea: Memory Changes the Feedback&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The biggest shift is how feedback is generated.&lt;/p&gt;

&lt;p&gt;Instead of reviewing code in isolation, the system first asks:&lt;br&gt;
“What has this person struggled with before?”&lt;/p&gt;

&lt;p&gt;It retrieves past experiences like:&lt;/p&gt;

&lt;p&gt;Off-by-one errors&lt;br&gt;
Missing edge cases&lt;br&gt;
Inefficient loops&lt;/p&gt;

&lt;p&gt;That history is injected into the model before analysis.&lt;/p&gt;

&lt;p&gt;Here’s the core idea in code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Student coding in &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;problem&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;. Problem: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;problem&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bankId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;q&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;memories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;memories&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pulls relevant past mistakes before every review.&lt;/p&gt;

&lt;p&gt;Now instead of:&lt;/p&gt;

&lt;p&gt;“Handle edge cases.”&lt;/p&gt;

&lt;p&gt;You get:&lt;/p&gt;

&lt;p&gt;“You’ve missed edge cases before—this looks like the same pattern.”&lt;/p&gt;

&lt;p&gt;That difference makes feedback feel personal—and much harder to ignore.&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.amazonaws.com%2Fuploads%2Farticles%2F5rdbnaydq8ezhxtcg8wp.jpeg" 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.amazonaws.com%2Fuploads%2Farticles%2F5rdbnaydq8ezhxtcg8wp.jpeg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Turning Code Reviews Into a Learning Loop&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The real value comes after the response.&lt;/p&gt;

&lt;p&gt;Every review generates a short summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What you attempted&lt;/li&gt;
&lt;li&gt;What went wrong&lt;/li&gt;
&lt;li&gt;A quick explanation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gets stored as memory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;hs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;retain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;bankId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;`Mistakes: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;mistakes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;, &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;. Summary: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This turns every interaction into training data for the next one.&lt;/p&gt;

&lt;p&gt;After a few sessions, the system starts to:&lt;/p&gt;

&lt;p&gt;Recognize recurring mistakes automatically&lt;br&gt;
Call out patterns without prompting&lt;br&gt;
Adjust feedback based on your history&lt;/p&gt;

&lt;p&gt;At that point, it stops feeling like a tool and starts feeling like a mentor.&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.amazonaws.com%2Fuploads%2Farticles%2Fcxkmn139x027vsggjz53.jpeg" 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.amazonaws.com%2Fuploads%2Farticles%2Fcxkmn139x027vsggjz53.jpeg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Letting Weaknesses Drive Practice&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once memory worked, the next step was obvious:&lt;/p&gt;

&lt;p&gt;Stop giving random problems. Start giving targeted ones.&lt;/p&gt;

&lt;p&gt;The Challenge system uses your past mistakes to generate personalized exercises.&lt;/p&gt;

&lt;p&gt;If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Miss edge cases → you get edge-case-heavy problems&lt;/li&gt;
&lt;li&gt;Write inefficient code → you get optimization tasks&lt;/li&gt;
&lt;li&gt;Struggle with logic → you get focused drills&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of practicing everything, you practice what you actually need.&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.amazonaws.com%2Fuploads%2Farticles%2F08yyqrx72pw8rfyu5zsv.jpeg" 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.amazonaws.com%2Fuploads%2Farticles%2F08yyqrx72pw8rfyu5zsv.jpeg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Building a Learning Path From History&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The same idea extends to long-term learning.&lt;/p&gt;

&lt;p&gt;Instead of generic roadmaps, the app generates a 6-week plan based on your history.&lt;/p&gt;

&lt;p&gt;It looks at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mistakes you repeat&lt;/li&gt;
&lt;li&gt;Weak concepts&lt;/li&gt;
&lt;li&gt;Progress over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then builds weekly plans with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Topics&lt;/li&gt;
&lt;li&gt;Focus areas&lt;/li&gt;
&lt;li&gt;Goals&lt;/li&gt;
&lt;li&gt;Resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not perfect—but it’s far more relevant than static guides.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Memory Browser (Unexpectedly Useful)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One feature I didn’t expect to matter much was the Memory Browser.&lt;/p&gt;

&lt;p&gt;It lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search past mistakes&lt;/li&gt;
&lt;li&gt;Reflect on your weaknesses&lt;/li&gt;
&lt;li&gt;Manually store insights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reflection mode is especially interesting.&lt;/p&gt;

&lt;p&gt;You can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What are my biggest weaknesses?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it synthesizes an answer from your history.&lt;/p&gt;

&lt;p&gt;It feels less like an AI tool—and more like a learning journal.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What I Learned Building This&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A few things became clear:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory should be structured, not raw logs&lt;/strong&gt;&lt;br&gt;
Short summaries work better than long conversations.&lt;/p&gt;

&lt;p&gt;Prompt design matters more than storage&lt;br&gt;
If memory isn’t injected properly, it’s useless.&lt;/p&gt;

&lt;p&gt;You don’t need a complex stack&lt;br&gt;
This is basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React frontend&lt;/li&gt;
&lt;li&gt;Memory API&lt;/li&gt;
&lt;li&gt;LLM calls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Personalization happens fast&lt;br&gt;
After a few interactions, the system noticeably adapts.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Limitations (And What I’d Improve)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It’s not perfect.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory retrieval isn’t always precise&lt;/li&gt;
&lt;li&gt;Some patterns get overemphasized&lt;/li&gt;
&lt;li&gt;No prioritization of important mistakes&lt;/li&gt;
&lt;li&gt;API keys are exposed client-side&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I improve it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add memory weighting&lt;/li&gt;
&lt;li&gt;Introduce decay for old patterns&lt;/li&gt;
&lt;li&gt;Move everything to a backend&lt;/li&gt;
&lt;li&gt;Improve retrieval relevance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thought&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Most AI tools today are stateless.&lt;/p&gt;

&lt;p&gt;They respond—but they don’t learn.&lt;/p&gt;

&lt;p&gt;Adding memory changes that.&lt;/p&gt;

&lt;p&gt;Once your system can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remember&lt;/li&gt;
&lt;li&gt;Recognize patterns&lt;/li&gt;
&lt;li&gt;Adapt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…it stops being a chatbot.&lt;/p&gt;

&lt;p&gt;It becomes a mentor.&lt;/p&gt;

&lt;p&gt;And once you experience that, going back feels incomplete.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>api</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
