<?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: Srigouri Siddani</title>
    <description>The latest articles on DEV Community by Srigouri Siddani (@srigouri).</description>
    <link>https://dev.to/srigouri</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%2F4128466%2F380b2578-6427-4272-ac01-8fd1211c0f6e.png</url>
      <title>DEV Community: Srigouri Siddani</title>
      <link>https://dev.to/srigouri</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/srigouri"/>
    <language>en</language>
    <item>
      <title>CrisisIQ: An AI Investigation Workspace for Incidents That Don't Agree With Each Other</title>
      <dc:creator>Srigouri Siddani</dc:creator>
      <pubDate>Sun, 04 Oct 2026 18:29:32 +0000</pubDate>
      <link>https://dev.to/srigouri/crisisiq-an-ai-investigation-workspace-for-incidents-that-dont-agree-with-each-other-23m5</link>
      <guid>https://dev.to/srigouri/crisisiq-an-ai-investigation-workspace-for-incidents-that-dont-agree-with-each-other-23m5</guid>
      <description>&lt;p&gt;This is a submission for the Sanity Challenge, Path Two: Vibe-Code Something Strange&lt;br&gt;
What I Built&lt;br&gt;
Incident investigations rarely fail because there isn't enough information.&lt;br&gt;
They fail because there is too much information, coming from different places, with different versions of what happened.&lt;br&gt;
So I built CrisisIQ, an incident investigation workspace that uses structured Sanity content as its evidence layer and Gemini as an investigation agent.&lt;br&gt;
Instead of simply asking an AI:&lt;br&gt;
"What caused this incident?"&lt;/p&gt;

&lt;p&gt;CrisisIQ is designed around a different question:&lt;br&gt;
"What does the available evidence actually support?"&lt;/p&gt;

&lt;p&gt;The app lets an investigator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reconstruct an incident timeline&lt;/li&gt;
&lt;li&gt;inspect individual evidence records&lt;/li&gt;
&lt;li&gt;compare conflicting claims&lt;/li&gt;
&lt;li&gt;identify contradictions&lt;/li&gt;
&lt;li&gt;keep uncertainty visible&lt;/li&gt;
&lt;li&gt;ask an AI investigation agent questions about the underlying Sanity knowledge base&lt;/li&gt;
&lt;li&gt;retrieve relevant structured content before generating an answer
The first case is a fictional incident called PulsePay: The 37-Minute Outage.&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%2F75aloyfueblaj2dzjx5o.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%2F75aloyfueblaj2dzjx5o.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo&lt;br&gt;
🚀 Live Demo:&lt;br&gt;
&lt;a href="https://crisis-chmb8ibjr-northstar-e8ce.vercel.app/" rel="noopener noreferrer"&gt;https://crisis-chmb8ibjr-northstar-e8ce.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The deployed app contains:&lt;br&gt;
Authentication → Investigation Workspace → Timeline → Evidence → Contradiction Analysis → AI Investigation&lt;/p&gt;

&lt;p&gt;Main investigation workspace &lt;br&gt;
The interface was intentionally designed to feel more like an internal investigation tool than a generic AI chatbot.&lt;br&gt;
The investigator can move between the incident overview, timeline and evidence without losing the context of the case.&lt;br&gt;
Evidence &amp;amp; contradiction view&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%2Ffat7k2jb7ca2rfn7qhkk.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%2Ffat7k2jb7ca2rfn7qhkk.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the important design decisions was to show competing explanations instead of forcing a single root cause.&lt;br&gt;
For example, a deployment record may indicate that a rollback happened at one time while monitoring data suggests the incident started earlier.&lt;br&gt;
The UI makes that disagreement visible.&lt;br&gt;
AI Investigation&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%2Fbmymoa8gftqd2q4ai1vm.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%2Fbmymoa8gftqd2q4ai1vm.png" alt=" " width="800" height="430"&gt;&lt;/a&gt; &lt;br&gt;
The investigation agent is not supposed to simply answer from the information displayed in the frontend.&lt;br&gt;
Its intended flow is:&lt;/p&gt;

&lt;p&gt;Investigator&lt;br&gt;
     ↓&lt;br&gt;
CrisisIQ&lt;br&gt;
     ↓&lt;br&gt;
Gemini&lt;br&gt;
     ↓&lt;br&gt;
Sanity Context MCP&lt;br&gt;
     ↓&lt;br&gt;
Sanity Knowledge Base&lt;br&gt;
     ↓&lt;br&gt;
Retrieved evidence&lt;br&gt;
     ↓&lt;br&gt;
Evidence-grounded response&lt;/p&gt;

&lt;p&gt;That distinction was important to the project.&lt;br&gt;
Code&lt;br&gt;
The complete project is available here:&lt;br&gt;
GitHub:&lt;br&gt;
CrisisIQ GitHub Repository&lt;br&gt;
The repository contains the frontend, API route and deployment configuration used for the project.&lt;br&gt;
My Build Process&lt;br&gt;
This is probably the most interesting part of the project.&lt;br&gt;
I didn't start with a perfectly designed architecture.&lt;br&gt;
I started with a rough idea:&lt;br&gt;
"What if an AI could investigate an incident instead of just summarizing it?"&lt;/p&gt;

&lt;p&gt;From there, I used an AI-native development workflow to progressively turn the idea into a working application.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Starting with the investigation concept
The first version was focused on the basic incident dashboard:&lt;/li&gt;
&lt;li&gt;incident overview&lt;/li&gt;
&lt;li&gt;timeline&lt;/li&gt;
&lt;li&gt;evidence&lt;/li&gt;
&lt;li&gt;conflicting claims&lt;/li&gt;
&lt;li&gt;investigation interface
The goal was to make the product feel like a tool an actual incident analyst might use.
I deliberately avoided making it look like another generic chatbot with a text box in the middle of the screen.&lt;/li&gt;
&lt;li&gt;Giving the content structure
The next step was figuring out what the AI should actually investigate.
Instead of putting everything directly into frontend code, the project separates the case interface from the knowledge used for investigation.
That led to the Sanity layer.
The conceptual content model became:
Content                  Purpose
Incident             Main investigation context
Timeline Event           Reconstruct what happened
Evidence             Store supporting source material
Claim                    Represent an explanation or statement
Contradiction            Connect competing evidence
Investigation Context    Provide structured information to the agent&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This made Sanity more than a place to store text.&lt;br&gt;
It became the knowledge layer behind the investigation experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Going beyond a normal Sanity frontend
This was where the project became more interesting.
Instead of building:
Sanity → React → Display Content&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted:&lt;br&gt;
Sanity&lt;br&gt;
   ↓&lt;br&gt;
Context retrieval&lt;br&gt;
   ↓&lt;br&gt;
AI investigation&lt;br&gt;
   ↓&lt;br&gt;
Custom investigation interface&lt;/p&gt;

&lt;p&gt;The application uses a server-side investigation route and connects the AI layer with the Sanity Context MCP.&lt;br&gt;
The intended architecture is:&lt;br&gt;
CrisisIQ Investigation Flow&lt;/p&gt;

&lt;p&gt;CrisisIQ Investigation UI&lt;br&gt;
        ↓&lt;br&gt;
Investigation API&lt;br&gt;
        ↓&lt;br&gt;
Gemini Investigation Agent&lt;br&gt;
        ↓&lt;br&gt;
Sanity Context MCP&lt;br&gt;
        ↓&lt;br&gt;
Sanity Knowledge Base&lt;/p&gt;

&lt;p&gt;CrisisIQ Investigation UI&lt;br&gt;
Users ask questions, explore incidents, review evidence, timelines, contradictions, and AI-generated insights.&lt;/p&gt;

&lt;p&gt;Investigation API&lt;br&gt;
Handles investigation requests, manages context, and securely connects the application to Gemini and Sanity.&lt;/p&gt;

&lt;p&gt;Gemini Investigation Agent&lt;br&gt;
Analyzes the retrieved context, compares evidence, identifies contradictions, and generates evidence-grounded investigation answers.&lt;/p&gt;

&lt;p&gt;Sanity Context MCP&lt;br&gt;
Retrieves relevant structured incident content, evidence, timelines, claims, and related records from Sanity.&lt;/p&gt;

&lt;p&gt;Sanity Knowledge Base&lt;br&gt;
Stores the structured investigation data, including incidents, evidence, timeline events, claims, contradictions, and supporting sources.&lt;/p&gt;

&lt;p&gt;This was the part I cared about most.&lt;br&gt;
I didn't want the AI to pretend it knew the answer.&lt;br&gt;
I wanted it to retrieve evidence first and reason from that evidence.&lt;br&gt;
The Prompts That Worked&lt;br&gt;
One of the biggest lessons from the build was that vague prompts produced vague implementations.&lt;br&gt;
Prompts became much more useful when I described the behavior I wanted, rather than just the technology.&lt;br&gt;
For example:&lt;br&gt;
Build the investigation experience around evidence and contradictions. The AI should not invent a root cause when the available evidence is incomplete. Show competing explanations and make uncertainty visible.&lt;/p&gt;

&lt;p&gt;That produced much better product decisions than simply saying:&lt;br&gt;
"Make an incident management dashboard."&lt;/p&gt;

&lt;p&gt;Another useful pattern was asking the AI to work on one system at a time:&lt;br&gt;
Build the evidence model.&lt;br&gt;
        ↓&lt;br&gt;
 Build the timeline.&lt;br&gt;
        ↓&lt;br&gt;
Build contradiction analysis.&lt;br&gt;
        ↓&lt;br&gt;
  Connect Sanity.&lt;br&gt;
        ↓&lt;br&gt;
Connect the investigation API.&lt;br&gt;
        ↓&lt;br&gt;
  Connect Gemini.&lt;br&gt;
        ↓&lt;br&gt;
      Deploy.&lt;br&gt;
        ↓&lt;br&gt;
      Debug.&lt;/p&gt;

&lt;p&gt;The Prompts That Didn't Work 😭&lt;br&gt;
Not everything worked on the first try.&lt;br&gt;
And honestly, that became one of the most useful parts of the project.&lt;br&gt;
At different stages I ran into issues involving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deployment configuration&lt;/li&gt;
&lt;li&gt;authentication routes&lt;/li&gt;
&lt;li&gt;environment variables&lt;/li&gt;
&lt;li&gt;Sanity Context credentials&lt;/li&gt;
&lt;li&gt;Gemini API configuration&lt;/li&gt;
&lt;li&gt;Vercel deployment behavior&lt;/li&gt;
&lt;li&gt;the investigation API returning no answer&lt;/li&gt;
&lt;li&gt;UI state not matching the backend state
At one point the application itself was working, but the investigation agent returned:
"The investigation service is missing server credentials."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That turned out not to be a frontend problem at all.&lt;br&gt;
The missing server-side configuration was:&lt;br&gt;
SANITY_API_READ_TOKEN&lt;br&gt;
GOOGLE_GENERATIVE_AI_API_KEY&lt;/p&gt;

&lt;p&gt;That debugging process changed how I thought about AI-native development.&lt;br&gt;
The AI can generate a huge amount of code very quickly.&lt;br&gt;
But shipping the product means repeatedly testing what it actually does, reading the error, finding the boundary where it failed, and prompting again.&lt;br&gt;
Course-Correcting Instead of Starting Over&lt;br&gt;
Rather than throwing away the project whenever something broke, I kept narrowing the problem.&lt;br&gt;
For example:&lt;br&gt;
"AI investigation doesn't work"&lt;br&gt;
            ↓&lt;br&gt;
"API returns no answer"&lt;br&gt;
            ↓&lt;br&gt;
"Server credentials missing"&lt;br&gt;
            ↓&lt;br&gt;
"Sanity token / Gemini key configuration"&lt;br&gt;
            ↓&lt;br&gt;
"Verify Vercel environment"&lt;br&gt;
            ↓&lt;br&gt;
        "Redeploy"&lt;br&gt;
            ↓&lt;br&gt;
"Test actual investigation request"&lt;/p&gt;

&lt;p&gt;That iterative loop became a major part of the build.&lt;br&gt;
Why Sanity Matters Here&lt;br&gt;
I didn't want Sanity to be a decorative CMS sitting behind the project.&lt;br&gt;
The idea is that the investigation agent should have access to structured knowledge about an incident rather than relying entirely on whatever happens to be visible in the frontend.&lt;br&gt;
That creates an important separation:&lt;br&gt;
Frontend content&lt;br&gt;
→ what the investigator sees&lt;br&gt;
Sanity content&lt;br&gt;
→ what the investigation system can retrieve&lt;br&gt;
Gemini&lt;br&gt;
→ reasons about the retrieved information&lt;br&gt;
That separation is what makes CrisisIQ more than a dashboard with an AI button attached to it.&lt;br&gt;
What I Focused On&lt;br&gt;
The project was built around four principles:&lt;br&gt;
Principle   Why&lt;br&gt;
Evidence first  Reduce unsupported AI conclusions&lt;br&gt;
Contradictions matter   Real incidents rarely have one clean story&lt;br&gt;
Uncertainty is data Missing evidence should remain visible&lt;br&gt;
AI should investigate, not just summarize   Make the AI useful inside an actual workflow&lt;/p&gt;

&lt;p&gt;What I Would Build Next&lt;br&gt;
If I continued developing CrisisIQ beyond the challenge, I'd take the investigation workflow even further.&lt;br&gt;
Some ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;approval states for investigation conclusions&lt;/li&gt;
&lt;li&gt;human review of AI-generated findings&lt;/li&gt;
&lt;li&gt;incident-to-incident comparison&lt;/li&gt;
&lt;li&gt;automatic evidence clustering&lt;/li&gt;
&lt;li&gt;investigation history&lt;/li&gt;
&lt;li&gt;richer Sanity workflows&lt;/li&gt;
&lt;li&gt;real-time collaborative investigations&lt;/li&gt;
&lt;li&gt;automated incident reports&lt;/li&gt;
&lt;li&gt;evidence confidence scoring
The interesting part is that the content model already gives the application somewhere to grow.
Sanity Project Details
Sanity Project ID:
PASTE YOUR SANITY PROJECT ID HERE&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dataset:&lt;br&gt;
production&lt;/p&gt;

&lt;p&gt;Sanity Context:&lt;br&gt;
Sanity Context MCP&lt;br&gt;
Read-only investigation knowledge retrieval&lt;/p&gt;

&lt;p&gt;The project uses Sanity as the structured knowledge layer for the investigation agent.&lt;br&gt;
Important: I am intentionally not including private API tokens or credentials in this post.&lt;/p&gt;

&lt;p&gt;Agent Session&lt;/p&gt;

&lt;p&gt;Agent Session:&lt;br&gt;
PASTE YOUR PUBLIC DEV AGENT SESSION LINK HERE&lt;br&gt;
The transcript is particularly useful for showing the iterative part of the build: the prompts, failed attempts, debugging and course corrections.&lt;br&gt;
A Few Screens From the Build&lt;br&gt;
Investigation workspace&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%2Fmlrs4m6wi0b6pz3cjr1w.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%2Fmlrs4m6wi0b6pz3cjr1w.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Evidence comparison&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%2F1vvnetodoo81el02e8nb.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%2F1vvnetodoo81el02e8nb.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI investigation&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%2F8842q8u4tx9b4klce7r1.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%2F8842q8u4tx9b4klce7r1.png" alt=" " width="800" height="430"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
The original idea was simple:&lt;br&gt;
Give an AI an incident and ask it to investigate.&lt;br&gt;
But the more I built, the more I realized that the difficult part isn't generating an answer.&lt;br&gt;
It's knowing why you should trust that answer.&lt;br&gt;
That's what I wanted CrisisIQ to explore.&lt;br&gt;
Instead of:&lt;br&gt;
AI says this happened.&lt;/p&gt;

&lt;p&gt;The goal is:&lt;br&gt;
Here is what the evidence says. Here is what conflicts. Here is what is missing. And here is what the AI thinks based on the available evidence.&lt;/p&gt;

&lt;p&gt;That felt like a much more interesting thing to build with Sanity.&lt;br&gt;
Built with: React · TypeScript · Vite · Sanity · Sanity Context MCP · Gemini · Vercel&lt;br&gt;
Path: Sanity Challenge — Path Two: Vibe-Code Something Strange 🚀&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
    <item>
      <title>CrisisIQ: An AI Investigation Agent That Doesn't Guess Where Its Evidence Came From</title>
      <dc:creator>Srigouri Siddani</dc:creator>
      <pubDate>Fri, 02 Oct 2026 06:28:30 +0000</pubDate>
      <link>https://dev.to/srigouri/crisisiq-an-ai-agent-for-real-content-incident-investigation-15g4</link>
      <guid>https://dev.to/srigouri/crisisiq-an-ai-agent-for-real-content-incident-investigation-15g4</guid>
      <description>&lt;p&gt;A submission for the Sanity Challenge — Path One: Ship an Agent That Queries Real Content&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚨 The Problem:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When an investigation depends on multiple sources, the difficult part isn't generating another AI answer.&lt;/p&gt;

&lt;p&gt;It's knowing why the answer should be trusted.&lt;/p&gt;

&lt;p&gt;A useful investigation agent needs to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does the source actually say?&lt;/li&gt;
&lt;li&gt;Which evidence supports this conclusion?&lt;/li&gt;
&lt;li&gt;Are two sources contradicting each other?&lt;/li&gt;
&lt;li&gt;Where did this particular claim come from?&lt;/li&gt;
&lt;li&gt;Can another person inspect the evidence behind the answer?
That's what I built CrisisIQ to explore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧠 What I Built:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CrisisIQ is an AI-powered investigation interface that turns source material into a structured investigation.&lt;/p&gt;

&lt;p&gt;Instead of asking an LLM:&lt;/p&gt;

&lt;p&gt;“What happened?”&lt;/p&gt;

&lt;p&gt;and trusting whatever comes back, CrisisIQ is designed around:&lt;/p&gt;

&lt;p&gt;SOURCE&lt;br&gt;
   ↓&lt;br&gt;
SANITY KNOWLEDGE BASE&lt;br&gt;
   ↓&lt;br&gt;
STRUCTURED CONTENT&lt;br&gt;
   ↓&lt;br&gt;
AGENT QUERY&lt;br&gt;
   ↓&lt;br&gt;
EVIDENCE + CLAIMS&lt;br&gt;
   ↓&lt;br&gt;
INVESTIGATION RESULT&lt;/p&gt;

&lt;p&gt;The important part is that the agent isn't operating on a pile of unstructured text.&lt;/p&gt;

&lt;p&gt;It can work against content that has structure and provenance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👀 The Interface:&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%2Ffxt8ne9s2rcxsz7fjcnz.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%2Ffxt8ne9s2rcxsz7fjcnz.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main interface is intentionally built like an investigation workspace rather than a generic chatbot.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;active investigations&lt;/li&gt;
&lt;li&gt;evidence&lt;/li&gt;
&lt;li&gt;source information&lt;/li&gt;
&lt;li&gt;findings&lt;/li&gt;
&lt;li&gt;conflicting claims&lt;/li&gt;
&lt;li&gt;investigation status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to make the evidence trail part of the interface instead of hiding it behind the AI response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔎 The Interesting Part: Sanity Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where the project becomes a Path One project rather than simply an AI app.&lt;/p&gt;

&lt;p&gt;I pointed Sanity Context at the content used by the investigation.&lt;/p&gt;

&lt;p&gt;That content is distilled into a Knowledge Base that the agent can query through MCP.&lt;/p&gt;

&lt;p&gt;Instead of manually dumping documents into the prompt, the agent can retrieve relevant structured content when it needs it.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          Sanity
            │
            ▼
    ┌────────────────┐
    │ Knowledge Base │
    └───────┬────────┘
            │
            │ MCP
            ▼
    ┌────────────────┐
    │ CrisisIQ Agent │
    └───────┬────────┘
            │
            │ relevant content
            ▼
    ┌────────────────┐
    │ Investigation  │
    └────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fc4o2od4qelp2fttb7ddy.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%2Fc4o2od4qelp2fttb7ddy.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧩 Why Structure Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was the part I found most interesting.&lt;/p&gt;

&lt;p&gt;A normal keyword search can often answer:&lt;/p&gt;

&lt;p&gt;“Find documents mentioning X.”&lt;/p&gt;

&lt;p&gt;But an investigation isn't always that simple.&lt;/p&gt;

&lt;p&gt;Consider:&lt;/p&gt;

&lt;p&gt;Source A&lt;br&gt;
────────&lt;br&gt;
"The incident started at 14:05."&lt;/p&gt;

&lt;p&gt;Source B&lt;br&gt;
────────&lt;br&gt;
"The first alert appeared at 14:17."&lt;/p&gt;

&lt;p&gt;Those aren't necessarily interchangeable facts.&lt;/p&gt;

&lt;p&gt;CrisisIQ can preserve them as separate pieces of evidence instead of flattening everything into one generated paragraph.&lt;/p&gt;

&lt;p&gt;That gives the agent something more useful to reason over:&lt;/p&gt;

&lt;p&gt;Claim&lt;br&gt;
 ├── Evidence&lt;br&gt;
 │    └── Source&lt;br&gt;
 │&lt;br&gt;
 └── Conflicting Evidence&lt;br&gt;
      └── Source&lt;/p&gt;

&lt;p&gt;That's the reason I wanted the content to be structured in the first place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤖 What the Agent Actually Does:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent isn't just a chatbot sitting beside the content.&lt;/p&gt;

&lt;p&gt;A typical investigation looks like:&lt;/p&gt;

&lt;p&gt;User:&lt;/p&gt;

&lt;p&gt;"What evidence supports the reported timeline?"&lt;br&gt;
        ↓&lt;br&gt;
Agent queries Sanity Context&lt;br&gt;
        ↓&lt;br&gt;
Relevant content retrieved&lt;br&gt;
        ↓&lt;br&gt;
Agent identifies supporting evidence&lt;br&gt;
        ↓&lt;br&gt;
Sources remain attached&lt;br&gt;
        ↓&lt;br&gt;
CrisisIQ presents the investigation&lt;/p&gt;

&lt;p&gt;The important part is the middle.&lt;/p&gt;

&lt;p&gt;The agent retrieves the content instead of relying entirely on what was placed in its initial prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚔️ When Sources Disagree:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where I wanted the project to go beyond a simple RAG demo.&lt;/p&gt;

&lt;p&gt;Suppose the Knowledge Base contains:&lt;/p&gt;

&lt;p&gt;Claim A&lt;/p&gt;

&lt;p&gt;Source A reports that the event occurred at 14:05.&lt;/p&gt;

&lt;p&gt;Claim B&lt;/p&gt;

&lt;p&gt;Source B reports that the first observed event was at 14:17.&lt;/p&gt;

&lt;p&gt;CrisisIQ doesn't need to pretend one sentence magically resolves the disagreement.&lt;/p&gt;

&lt;p&gt;Instead, the conflicting evidence can remain visible:&lt;/p&gt;

&lt;p&gt;14:05 — Source A&lt;/p&gt;

&lt;p&gt;14:17 — Source B&lt;/p&gt;

&lt;p&gt;That makes the uncertainty part of the investigation rather than something the model quietly hides.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🏗️ The Data Model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The structured content behind the experience looks roughly like:&lt;/p&gt;

&lt;p&gt;Incident Case&lt;br&gt;
│&lt;br&gt;
├── Incident ID&lt;br&gt;
├── Summary&lt;br&gt;
├── Severity&lt;br&gt;
├── Status&lt;br&gt;
│&lt;br&gt;
├── Evidence[]&lt;br&gt;
│   ├── Detail&lt;br&gt;
│   ├── Source&lt;br&gt;
│   ├── Source URL&lt;br&gt;
│   └── Confidence&lt;br&gt;
│&lt;br&gt;
├── Timeline[]&lt;br&gt;
│&lt;br&gt;
├── Findings[]&lt;br&gt;
│   ├── Finding&lt;br&gt;
│   ├── Reasoning&lt;br&gt;
│   └── Sources&lt;br&gt;
│&lt;br&gt;
└── Contradictions[]&lt;br&gt;
    ├── Claim A&lt;br&gt;
    ├── Claim B&lt;br&gt;
    └── Resolution&lt;/p&gt;

&lt;p&gt;This is important because the agent isn't simply retrieving a giant blob of text.&lt;/p&gt;

&lt;p&gt;It is working with relationships between pieces of information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 A Real Investigation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started with a question that required information from the underlying content rather than something that could be answered from the UI itself.&lt;/p&gt;

&lt;p&gt;Then the agent queried the available content.&lt;/p&gt;

&lt;p&gt;The useful part was seeing the answer come back with the underlying information still connected to its source.&lt;/p&gt;

&lt;p&gt;The final interface presents the result as an investigation rather than just a chat response.&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%2Fus2wvjz8leyzglu041pl.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%2Fus2wvjz8leyzglu041pl.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 The Code:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project is open source:&lt;/p&gt;

&lt;p&gt;CrisisIQ on GitHub&lt;/p&gt;

&lt;p&gt;The important pieces are separated into:&lt;/p&gt;

&lt;p&gt;CrisisIQ/&lt;br&gt;
│&lt;br&gt;
├── api/&lt;br&gt;
│   └── chat&lt;br&gt;
│&lt;br&gt;
├── path-two/&lt;br&gt;
│   ├── schemaTypes/&lt;br&gt;
│   ├── src/&lt;br&gt;
│   └── sanity.config.ts&lt;br&gt;
│&lt;br&gt;
└── ...&lt;/p&gt;

&lt;p&gt;The application handles the investigation experience, while Sanity handles the structured content layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 Demo:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Live demo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://vercel.com/login?next=%2Fsso-api%3Furl%3Dhttps%253A%252F%252Fcrisis-iq-overview-northstar-e8ce.vercel.app%252F%26nonce%3Dc01162bc202e4a04377fd6e8251b7cbc582db0f417e3df3a3eb9be9bd8f60710" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;vercel.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Srigouri08" rel="noopener noreferrer"&gt;
        Srigouri08
      &lt;/a&gt; / &lt;a href="https://github.com/Srigouri08/CrisisIQ" rel="noopener noreferrer"&gt;
        CrisisIQ
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      AI-powered incident investigation agent using Gemini and Sanity Context MCP.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CrisisIQ&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;CrisisIQ is an incident investigation dashboard for turning scattered operational records into a clear, evidence-grounded investigation. It helps teams reconstruct what happened, compare conflicting accounts, and keep uncertainty visible instead of jumping to an unsupported root cause.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Case #001&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The first dashboard case is fictional &lt;strong&gt;PulsePay — The 37-Minute Outage&lt;/strong&gt;. Its timeline and evidence panels are demonstration content; the investigation agent does not receive those panels as evidence and determines conclusions from content retrieved through Sanity Context.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Investigation workflow&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Evidence retrieval:&lt;/strong&gt; collect relevant source material through Sanity Context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeline reconstruction:&lt;/strong&gt; arrange reported events into a sequence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contradiction analysis:&lt;/strong&gt; compare conflicting claims and the records that support or challenge them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncertainty detection:&lt;/strong&gt; keep gaps and competing explanations visible rather than hardcoding a root cause.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Architecture&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;CrisisIQ → Gemini → Sanity Context MCP → Sanity Knowledge Base → evidence&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The browser chat sends messages to &lt;code&gt;POST /api/chat&lt;/code&gt;. Locally, Vite…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Srigouri08/CrisisIQ" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Demo note: Some investigation functionality depends on the configured model/API credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 What Sanity Changed About the Build:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest thing I learned from this project is that retrieval isn't the interesting part by itself.&lt;/p&gt;

&lt;p&gt;The interesting part is what happens when the retrieved information already has structure:&lt;/p&gt;

&lt;p&gt;content&lt;br&gt;
  ↓&lt;br&gt;
relationships&lt;br&gt;
  ↓&lt;br&gt;
provenance&lt;br&gt;
  ↓&lt;br&gt;
retrieval&lt;br&gt;
  ↓&lt;br&gt;
reasoning&lt;/p&gt;

&lt;p&gt;That gives the agent something much better to work with than a flat collection of documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ What I Would Improve Next:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are still things I'd like to take further:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;richer source provenance&lt;/li&gt;
&lt;li&gt;more complex conflicting-claim resolution&lt;/li&gt;
&lt;li&gt;larger Knowledge Bases&lt;/li&gt;
&lt;li&gt;better investigation timelines&lt;/li&gt;
&lt;li&gt;stronger evaluation of retrieved evidence&lt;/li&gt;
&lt;li&gt;more automated investigation workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the core experiment works:&lt;/p&gt;

&lt;p&gt;Can an agent become more useful when it queries structured, source-linked content instead of treating the web or documents as one giant text box?&lt;/p&gt;

&lt;p&gt;That's what I wanted to explore with CrisisIQ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📌 Sanity Project Details:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sanity Project ID:&lt;br&gt;
0cub7gdo&lt;/p&gt;

&lt;p&gt;Dataset:&lt;br&gt;
production&lt;/p&gt;

&lt;p&gt;Sanity Context:&lt;br&gt;
CrisisIQ uses Sanity Context MCP to retrieve structured incident-investigation content from the Sanity Knowledge Base. The agent queries this content during investigations and uses the retrieved sources to compare evidence, identify conflicting claims, and ground its responses in the underlying Sanity content.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
    <item>
      <title>What if a Journal Could Help You Reflect? Building MindMate with Google Gemini</title>
      <dc:creator>Srigouri Siddani</dc:creator>
      <pubDate>Wed, 16 Sep 2026 17:29:10 +0000</pubDate>
      <link>https://dev.to/srigouri/what-if-a-journal-could-help-you-reflect-building-mindmate-with-google-gemini-i4e</link>
      <guid>https://dev.to/srigouri/what-if-a-journal-could-help-you-reflect-building-mindmate-with-google-gemini-i4e</guid>
      <description>&lt;h1&gt;
  
  
  What if a Journal Could Help You Reflect?
&lt;/h1&gt;

&lt;p&gt;Student life can get noisy.&lt;/p&gt;

&lt;p&gt;Between classes, deadlines, assignments, exams, friendships, and everything happening in between, sometimes you just need a quiet place to put your thoughts.&lt;/p&gt;

&lt;p&gt;That idea became &lt;strong&gt;MindMate&lt;/strong&gt; — a simple AI-powered journaling application I built to make everyday journaling a little more meaningful.&lt;/p&gt;

&lt;p&gt;Instead of only storing what you write, MindMate uses &lt;strong&gt;Google Gemini&lt;/strong&gt; to provide a small moment of reflection after you journal.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌱 The idea behind MindMate
&lt;/h2&gt;

&lt;p&gt;Journaling is already a way to slow down and understand your thoughts.&lt;/p&gt;

&lt;p&gt;I wanted to explore a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if a journal could help you reflect on what you wrote?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;MindMate lets users write private journal entries and then receive an AI-generated reflection covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💭 Mood&lt;/li&gt;
&lt;li&gt;📝 A short summary&lt;/li&gt;
&lt;li&gt;🔎 Main topics&lt;/li&gt;
&lt;li&gt;💜 A supportive suggestion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to replace human connection or professional support.&lt;/p&gt;

&lt;p&gt;It's simply to create a small pause between &lt;strong&gt;“I wrote this”&lt;/strong&gt; and &lt;strong&gt;“I understand this.”&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ What I built
&lt;/h2&gt;

&lt;p&gt;MindMate combines a private journaling experience with an AI reflection layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 Private by design
&lt;/h3&gt;

&lt;p&gt;Users sign in through &lt;strong&gt;Firebase Authentication&lt;/strong&gt;, while journal entries are stored in &lt;strong&gt;Cloud Firestore&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Firestore security rules restrict access so authenticated users can access their own journal data.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✍️ Write naturally
&lt;/h3&gt;

&lt;p&gt;There is no complicated format to follow.&lt;/p&gt;

&lt;p&gt;Users can simply open their journal and write whatever is on their mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  💭 AI-powered reflection
&lt;/h3&gt;

&lt;p&gt;After submitting an entry, MindMate sends the journal content to the backend, where &lt;strong&gt;Google Gemini&lt;/strong&gt; analyzes it and generates a structured reflection.&lt;/p&gt;

&lt;p&gt;The response includes the user's mood, a short summary, important topics, and a supportive suggestion.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Where Google Gemini comes in
&lt;/h2&gt;

&lt;p&gt;Google Gemini is the core AI component of MindMate.&lt;/p&gt;

&lt;p&gt;The application uses Google's GenAI SDK from the backend to send journal content for analysis.&lt;/p&gt;

&lt;p&gt;The basic flow looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Journal Entry → Node.js + Express Backend → Google Gemini → AI Reflection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I kept the Gemini API key on the backend using environment variables rather than exposing it in the frontend.&lt;/p&gt;

&lt;p&gt;This was also an important part of the project for me: I didn't just want to make something that worked — I wanted to understand how to integrate an AI API responsibly into a real application.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Under the hood
&lt;/h2&gt;

&lt;p&gt;Here is the technology stack behind MindMate:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React + Vite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication&lt;/td&gt;
&lt;td&gt;Firebase Authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Cloud Firestore&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Node.js + Express&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Google Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API SDK&lt;/td&gt;
&lt;td&gt;Google GenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Render&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The frontend and backend are deployed separately, with the backend handling the Gemini API interaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  👩‍💻 Building this as a student
&lt;/h2&gt;

&lt;p&gt;One of the most interesting parts of building MindMate wasn't just the AI integration.&lt;/p&gt;

&lt;p&gt;It was everything around it.&lt;/p&gt;

&lt;p&gt;I had to work with authentication, database security rules, API routes, environment variables, CORS, deployment, and connecting multiple services together.&lt;/p&gt;

&lt;p&gt;It made the project feel less like a small coding exercise and more like a real application.&lt;/p&gt;

&lt;p&gt;There were definitely moments where something broke and I had absolutely no idea why. 😭&lt;/p&gt;

&lt;p&gt;But fixing those problems was probably where I learned the most.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔮 What's next?
&lt;/h2&gt;

&lt;p&gt;MindMate is still a small project, and there is a lot I would like to explore.&lt;/p&gt;

&lt;p&gt;Some ideas for future versions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More detailed journaling insights&lt;/li&gt;
&lt;li&gt;Long-term reflection patterns&lt;/li&gt;
&lt;li&gt;Better accessibility&lt;/li&gt;
&lt;li&gt;A more polished mobile experience&lt;/li&gt;
&lt;li&gt;More ways to organize and revisit journal entries&lt;/li&gt;
&lt;li&gt;Stronger privacy-focused features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me, the project is less about building a “perfect” AI product and more about exploring how AI can fit naturally into something people already do.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌸 Try MindMate
&lt;/h2&gt;

&lt;p&gt;You can try the live application here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://mindmate-1sxd.onrender.com" rel="noopener noreferrer"&gt;https://mindmate-1sxd.onrender.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And the source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Srigouri08/MindMate" rel="noopener noreferrer"&gt;https://github.com/Srigouri08/MindMate&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;MindMate started with a simple idea: &lt;strong&gt;make journaling feel a little more reflective.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building it taught me that AI doesn't always need to be complicated or flashy.&lt;/p&gt;

&lt;p&gt;Sometimes, a useful AI experience can start with something as simple as giving someone a better way to understand what they already wrote.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build small. Learn loudly. ✦&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MindMate is a student-built project and is not a substitute for professional mental-health care.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>gemini</category>
      <category>react</category>
    </item>
  </channel>
</rss>
