<?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: Tanishq</title>
    <description>The latest articles on DEV Community by Tanishq (@tanishq_siva).</description>
    <link>https://dev.to/tanishq_siva</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%2F4150735%2F01ccd48f-c7cb-43a5-9533-ad9d2827c15a.png</url>
      <title>DEV Community: Tanishq</title>
      <link>https://dev.to/tanishq_siva</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tanishq_siva"/>
    <language>en</language>
    <item>
      <title>I Built RecallixAI So Meetings Don’t Forget What Happened</title>
      <dc:creator>Tanishq</dc:creator>
      <pubDate>Tue, 29 Sep 2026 18:04:04 +0000</pubDate>
      <link>https://dev.to/tanishq_siva/i-built-recallixai-so-meetings-dont-forget-what-happened-3kel</link>
      <guid>https://dev.to/tanishq_siva/i-built-recallixai-so-meetings-dont-forget-what-happened-3kel</guid>
      <description>&lt;p&gt;Most meeting tools can record what was said. I wanted RecallixAI to remember what actually matters after the meeting—commitments, decisions, unresolved questions, and follow-ups.&lt;/p&gt;

&lt;p&gt;How RecallixAI works&lt;/p&gt;

&lt;p&gt;RecallixAI connects four main components:&lt;/p&gt;

&lt;p&gt;Chrome extension captures Google Meet captions.&lt;br&gt;
FastAPI backend manages meetings, notes, and sessions.&lt;br&gt;
Gemini converts transcripts and notes into structured meeting outcomes.&lt;br&gt;
Hindsight stores and retrieves long-term meeting memory.&lt;/p&gt;

&lt;p&gt;The basic flow is:&lt;/p&gt;

&lt;p&gt;Capture → Analyze → Remember → Recall → Act&lt;/p&gt;

&lt;p&gt;The browser extension stays intentionally lightweight:&lt;/p&gt;

&lt;p&gt;async function pushCaptionToBackend(speaker, text) {&lt;br&gt;
  await fetch(&lt;code&gt;${API_BASE_URL}/api/stream/caption&lt;/code&gt;, {&lt;br&gt;
    method: "POST",&lt;br&gt;
    headers: {"Content-Type": "application/json"},&lt;br&gt;
    body: JSON.stringify({&lt;br&gt;
      meeting_id: getMeetingId(),&lt;br&gt;
      speaker,&lt;br&gt;
      text,&lt;br&gt;
      timestamp: new Date().toISOString()&lt;br&gt;
    })&lt;br&gt;
  });&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The backend owns the actual meeting state rather than putting business logic inside the extension.&lt;/p&gt;

&lt;p&gt;Why Hindsight matters&lt;/p&gt;

&lt;p&gt;I deliberately separated temporary meeting state from long-term memory.&lt;/p&gt;

&lt;p&gt;During a meeting, I need the current transcript and notes. Afterward, I need answers to questions like:&lt;/p&gt;

&lt;p&gt;"What did Sarah and I agree on last time?"&lt;/p&gt;

&lt;p&gt;That is where Hindsight on GitHub becomes important.&lt;/p&gt;

&lt;p&gt;Instead of treating every transcript as something to search later, RecallixAI extracts useful information first:&lt;/p&gt;

&lt;p&gt;class MeetingAnalysis(BaseModel):&lt;br&gt;
    summary: str&lt;br&gt;
    promises_by_us: List[str]&lt;br&gt;
    promises_by_them: List[str]&lt;br&gt;
    missed_or_pending_followups: List[str]&lt;br&gt;
    note_discrepancies: List[str]&lt;/p&gt;

&lt;p&gt;That information is then retained in Hindsight:&lt;/p&gt;

&lt;p&gt;self.client.retain(&lt;br&gt;
    bank_id=bank_id,&lt;br&gt;
    content=content,&lt;br&gt;
    context=context,&lt;br&gt;
    document_id=doc_id,&lt;br&gt;
    metadata=metadata&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;Before the next meeting, I can recall that context:&lt;/p&gt;

&lt;p&gt;result = hindsight_service.recall_prep_context(&lt;br&gt;
    user_id=req.user_id,&lt;br&gt;
    attendee_email=req.attendee_email&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;The Hindsight documentation was useful here because it treats memory as more than basic transcript retrieval. The system can retain relevant knowledge and recall it later in the context of a new interaction. This is the same distinction described in agent memory.&lt;/p&gt;

&lt;p&gt;A simple example&lt;/p&gt;

&lt;p&gt;Suppose I promise to send pricing information by Thursday, while my notes accidentally say Friday.&lt;/p&gt;

&lt;p&gt;RecallixAI can identify that discrepancy, store the commitment in Hindsight, and surface it before my next conversation with that person.&lt;/p&gt;

&lt;p&gt;The important part isn't the summary.&lt;/p&gt;

&lt;p&gt;It's the continuity.&lt;/p&gt;

&lt;p&gt;What I learned&lt;br&gt;
Memory should be designed around future questions, not just stored data.&lt;br&gt;
Live state and long-term memory should be separate systems.&lt;br&gt;
LLM output needs a structured contract before other services consume it.&lt;br&gt;
Good memory depends on what you retain. Storing everything creates noise.&lt;br&gt;
Automation should follow understanding. First determine what happened, then trigger actions.&lt;/p&gt;

&lt;p&gt;The architecture is deliberately simple:&lt;/p&gt;

&lt;p&gt;Google Meet → FastAPI → Gemini → Hindsight → Meeting preparation → Actions&lt;/p&gt;

&lt;p&gt;I don't want RecallixAI to remember everything.&lt;/p&gt;

&lt;p&gt;I want it to remember the things that change what happens next.&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%2Fndsc0k24tk81apnpz1pi.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%2Fndsc0k24tk81apnpz1pi.png" alt=" " width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>backend</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
