<?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: Himanshu Gangwar</title>
    <description>The latest articles on DEV Community by Himanshu Gangwar (@shadowxor).</description>
    <link>https://dev.to/shadowxor</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%2F4153376%2Fc5fa3fcf-e0de-4a44-81cd-18bf2c88be9c.png</url>
      <title>DEV Community: Himanshu Gangwar</title>
      <link>https://dev.to/shadowxor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shadowxor"/>
    <language>en</language>
    <item>
      <title>MemoryMate — An AI Memory Assistant Built for a Friend</title>
      <dc:creator>Himanshu Gangwar</dc:creator>
      <pubDate>Sat, 03 Oct 2026 05:47:30 +0000</pubDate>
      <link>https://dev.to/shadowxor/memorymate-an-ai-memory-assistant-built-for-a-friend-370n</link>
      <guid>https://dev.to/shadowxor/memorymate-an-ai-memory-assistant-built-for-a-friend-370n</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;MemoryMate&lt;/strong&gt;, a personal AI memory assistant designed for a friend who often forgets small but important details about people, conversations, events, and shared experiences.&lt;/p&gt;

&lt;p&gt;The idea came from a simple problem: &lt;strong&gt;we remember major moments, but the small details that make relationships meaningful are often the easiest to forget.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MemoryMate gives users one place to store those details and interact with them through an AI-powered interface.&lt;/p&gt;

&lt;p&gt;It can help users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Save and organize personal memories&lt;/li&gt;
&lt;li&gt; Store information about important people&lt;/li&gt;
&lt;li&gt; Keep track of events and meaningful dates&lt;/li&gt;
&lt;li&gt; Explore memories through a timeline&lt;/li&gt;
&lt;li&gt; Ask questions about their stored memories through AI&lt;/li&gt;
&lt;li&gt; View insights from their memories&lt;/li&gt;
&lt;li&gt; Find information without manually searching through scattered notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to replace human memory. It's to create a &lt;strong&gt;digital extension of memory&lt;/strong&gt; that helps people remember the details that matter.&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%2F2zwiw1uawbwh9zdshktk.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%2F2zwiw1uawbwh9zdshktk.png" alt=" " width="799" height="436"&gt;&lt;/a&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%2F66zojdib4gs6xq8qmwne.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%2F66zojdib4gs6xq8qmwne.png" alt=" " width="800" height="429"&gt;&lt;/a&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%2Fjdhl3ti9edn0gstxbn9s.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%2Fjdhl3ti9edn0gstxbn9s.png" alt=" " width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt;&lt;br&gt;
 &lt;a href="https://www.loom.com/share/497bfac79f464d27ae43e3e38195eaf4" rel="noopener noreferrer"&gt;Watch the MemoryMate Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://memorymate-frontend.onrender.com" rel="noopener noreferrer"&gt;https://memorymate-frontend.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application is deployed as a full-stack application:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React Frontend → FastAPI Backend → MongoDB Atlas&lt;/strong&gt;&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/himanshugangwar5752-demo/MemoryMate" rel="noopener noreferrer"&gt;https://github.com/himanshugangwar5752-demo/MemoryMate&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MemoryMate/
│
├── frontend/
│   ├── src/
│   │   ├── components/
│   │   ├── pages/
│   │   ├── context/
│   │   └── services/
│   ├── package.json
│   └── vite.config.js
│
├── backend/
│   ├── app/
│   │   ├── api/
│   │   ├── core/
│   │   ├── database/
│   │   ├── schemas/
│   │   └── main.py
│   ├── tests/
│   └── requirements.txt
│
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  A small example of the backend API
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;APIRouter&lt;/span&gt;

&lt;span class="n"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;APIRouter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@router.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/health&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;health_check&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;healthy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MemoryMate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And the frontend communicates with the backend through a centralized API service:&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;API_BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_API_BASE_URL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&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="nx"&gt;API_BASE_URL&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;endpoint&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="p"&gt;{&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&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 separation keeps the frontend, backend, and AI functionality modular and makes the application easier to extend.&lt;/p&gt;




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

&lt;p&gt;MemoryMate is a full-stack application built with:&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;React&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vite&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React Router&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend contains the main MemoryMate experience, including the dashboard, AI chat, memories, people, events, timeline, analytics, settings, and profile sections.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FastAPI&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pydantic&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;REST APIs for application functionality and authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MongoDB Atlas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MongoDB stores the persistent application data so memories aren't limited to a user's browser session.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI
&lt;/h3&gt;

&lt;p&gt;The AI component uses &lt;strong&gt;Gemma&lt;/strong&gt;, an open-weight model.&lt;/p&gt;

&lt;p&gt;Instead of treating the AI as a separate chatbot, MemoryMate is designed around the idea of connecting AI with the user's stored memories.&lt;/p&gt;

&lt;p&gt;A simplified version of the concept looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
MemoryMate UI
  ↓
FastAPI API
  ↓
Memory / Context Retrieval
  ↓
Gemma
  ↓
AI Response
  ↓
User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This architecture allows the AI experience to be built around the actual purpose of the application: &lt;strong&gt;helping users interact with their own memories.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;p&gt;I deployed the project using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Render&lt;/strong&gt; → React frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render&lt;/strong&gt; → FastAPI backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB Atlas&lt;/strong&gt; → Database&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Open innovation mattered to this project because I wanted to understand what happens when AI is treated as a component that can be experimented with and adapted rather than simply calling a closed AI API.&lt;/p&gt;

&lt;p&gt;Using an &lt;strong&gt;open-weight model such as Gemma&lt;/strong&gt; gave me the opportunity to explore how an AI model can be integrated into a product built around a specific problem.&lt;/p&gt;

&lt;p&gt;For MemoryMate, this is particularly interesting because the application deals with personal information.&lt;/p&gt;

&lt;p&gt;Open models create possibilities for developers to experiment with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different inference providers&lt;/li&gt;
&lt;li&gt;Custom AI workflows&lt;/li&gt;
&lt;li&gt;Memory retrieval strategies&lt;/li&gt;
&lt;li&gt;Prompt and context design&lt;/li&gt;
&lt;li&gt;Future local or self-hosted inference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API can make AI integration convenient, but open innovation gives developers more freedom to understand and control the technology underneath the application.&lt;/p&gt;

&lt;p&gt;For me, the biggest takeaway was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI becomes much more interesting when it is built around a real human problem instead of being added just because a project needs AI.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;I used AI-assisted development throughout the project for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exploring the application architecture&lt;/li&gt;
&lt;li&gt;Debugging frontend and backend issues&lt;/li&gt;
&lt;li&gt;Improving the UI&lt;/li&gt;
&lt;li&gt;Working through deployment problems&lt;/li&gt;
&lt;li&gt;Iterating on features&lt;/li&gt;
&lt;li&gt;Reviewing implementation decisions&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  Render
&lt;/h3&gt;

&lt;p&gt;MemoryMate is deployed on &lt;strong&gt;Render&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React frontend → Render Static Site&lt;/li&gt;
&lt;li&gt;FastAPI backend → Render Web Service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application uses MongoDB Atlas as its persistent database.&lt;/p&gt;




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

&lt;p&gt;MemoryMate started with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if an AI assistant could help us remember the small things about the people and experiences that matter to us?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We already have tools for remembering tasks, passwords, appointments, and files.&lt;/p&gt;

&lt;p&gt;MemoryMate explores a different kind of memory — &lt;strong&gt;human memory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's still an evolving project, but building it taught me that the most meaningful AI applications don't necessarily need to solve huge problems.&lt;/p&gt;

&lt;p&gt;Sometimes, solving one small problem for one person is enough to build something worth sharing.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Built for a friend. Built around memory. Built with open innovation. *&lt;/em&gt;&lt;/p&gt;

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