<?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: Aniruddh Vijayvargia</title>
    <description>The latest articles on DEV Community by Aniruddh Vijayvargia (@aniruddh_vijayvargia_abc0).</description>
    <link>https://dev.to/aniruddh_vijayvargia_abc0</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%2F4155390%2F856e0675-34e8-4d98-8545-1420ef6e8018.png</url>
      <title>DEV Community: Aniruddh Vijayvargia</title>
      <link>https://dev.to/aniruddh_vijayvargia_abc0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aniruddh_vijayvargia_abc0"/>
    <language>en</language>
    <item>
      <title>I Built Kaagaz for My Father So Important Papers Stop Becoming Forgotten WhatsApp Messages</title>
      <dc:creator>Aniruddh Vijayvargia</dc:creator>
      <pubDate>Fri, 02 Oct 2026 13:44:05 +0000</pubDate>
      <link>https://dev.to/aniruddh_vijayvargia_abc0/i-built-kaagaz-for-my-father-so-important-papers-stop-becoming-forgotten-whatsapp-messages-1d7j</link>
      <guid>https://dev.to/aniruddh_vijayvargia_abc0/i-built-kaagaz-for-my-father-so-important-papers-stop-becoming-forgotten-whatsapp-messages-1d7j</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;h3&gt;
  
  
  Kaagaz — काग़ज़
&lt;/h3&gt;

&lt;p&gt;My father handles a lot of our household paperwork: electricity bills, school fees, insurance renewals, property tax notices, certificates, and increasingly, important messages arriving over WhatsApp or SMS.&lt;/p&gt;

&lt;p&gt;The problem isn't that these papers are difficult to read. The problem is remembering &lt;strong&gt;what actually needs to happen next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Kaagaz&lt;/strong&gt; for him.&lt;/p&gt;

&lt;p&gt;You can show Kaagaz a paper, screenshot, or message, or simply tell it what you received in Hindi, Hinglish, or English.&lt;/p&gt;

&lt;p&gt;Kaagaz:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understands what the document is&lt;/li&gt;
&lt;li&gt;extracts the amount, deadline, required action, and consequence&lt;/li&gt;
&lt;li&gt;shows the exact evidence it used&lt;/li&gt;
&lt;li&gt;explains it in simple language&lt;/li&gt;
&lt;li&gt;asks for confirmation before remembering anything&lt;/li&gt;
&lt;li&gt;reminds you 30, 7, and 1 day before the deadline&lt;/li&gt;
&lt;li&gt;tells the son when an important reminder slips&lt;/li&gt;
&lt;li&gt;detects common scam signals in suspicious messages&lt;/li&gt;
&lt;li&gt;offers to carry yearly renewals into the following year without inventing the next year's amount&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The product loop is deliberately simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand → Confirm → Remember → Follow through → Protect&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The goal wasn't to build another chatbot. It was to build something my father could actually use when a piece of paper or message lands in front of him.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://kaagaz-bx24.onrender.com/" rel="noopener noreferrer"&gt;https://kaagaz-bx24.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The public demo uses &lt;strong&gt;fictional sample papers only&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; &lt;a href="https://kaagaz-bx24.onrender.com/how.html" rel="noopener noreferrer"&gt;https://kaagaz-bx24.onrender.com/how.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ANIRUDDH-001/Kaagaz" rel="noopener noreferrer"&gt;https://github.com/ANIRUDDH-001/Kaagaz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the complete application, evaluation suite, deployment configuration, Temporal workflows, reminder worker, and local/private inference setup.&lt;/p&gt;

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

&lt;p&gt;Open-source AI is at the core of Kaagaz.&lt;/p&gt;

&lt;p&gt;The main reasoning layer is &lt;strong&gt;Gemma 4&lt;/strong&gt;. The public demo uses &lt;strong&gt;Gemma 4 26B&lt;/strong&gt;, while the private family mode can run &lt;strong&gt;Gemma 4 E4B locally through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That distinction is important.&lt;/p&gt;

&lt;p&gt;In public mode, a user can try the full application without setting up a local model.&lt;/p&gt;

&lt;p&gt;In private mode, the same application can run the document understanding locally so that raw family papers and audio do not need to leave the family's machine.&lt;/p&gt;

&lt;p&gt;For voice input, I use &lt;strong&gt;ElevenLabs Scribe v2&lt;/strong&gt; in the public deployment and &lt;strong&gt;Whisper large-v3-turbo&lt;/strong&gt; locally in private mode.&lt;/p&gt;

&lt;p&gt;For readbacks, Kaagaz uses &lt;strong&gt;ElevenLabs multilingual_v2&lt;/strong&gt;, with browser speech as the private-mode fallback.&lt;/p&gt;

&lt;p&gt;The backend is built with &lt;strong&gt;FastAPI and Python&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MongoDB Atlas&lt;/strong&gt; stores the confirmed structured information: obligations, notification inbox state, and household state. Raw document photos and audio are not stored in MongoDB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temporal&lt;/strong&gt; runs the reminder workflows. Each obligation gets its own durable workflow, allowing Kaagaz to wait for dates months in the future, retry notification failures, and handle actions such as done, snooze, repeat, and date updates.&lt;/p&gt;

&lt;p&gt;Because the API is hosted on Render's free tier and can sleep, a lightweight &lt;strong&gt;GitHub Actions&lt;/strong&gt; worker periodically wakes up and drains due reminder work. That means the reminder system doesn't depend on the web process staying awake continuously.&lt;/p&gt;

&lt;p&gt;The frontend is a lightweight mobile-friendly PWA with camera, microphone, push notifications, language switching, and Papa/Son roles.&lt;/p&gt;

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

&lt;p&gt;This project is personal, so privacy and control matter more than simply getting an AI response.&lt;/p&gt;

&lt;p&gt;An important household paper can contain an address, account details, payment information, dates, or other sensitive information. With a closed-only architecture, I would have to send that information to a third-party model every time.&lt;/p&gt;

&lt;p&gt;Open-weight models gave me another option.&lt;/p&gt;

&lt;p&gt;With Gemma running locally, the AI part of Kaagaz can stay on the family's own machine. I can also swap model sizes depending on the hardware: a smaller model for constrained devices, or a larger one when quality matters more.&lt;/p&gt;

&lt;p&gt;That flexibility changed the architecture of the project.&lt;/p&gt;

&lt;p&gt;Open models also made it possible to design the AI layer around &lt;strong&gt;our own validation rules&lt;/strong&gt; rather than treating the model's output as automatically trustworthy.&lt;/p&gt;

&lt;p&gt;For example, Kaagaz doesn't simply accept an extracted date or amount. It keeps the evidence, highlights unsupported values, and requires confirmation before anything becomes a reminder.&lt;/p&gt;

&lt;p&gt;For a family paperwork assistant, that control is more important than having a generic AI chat experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;The hardest part wasn't making an AI understand a document.&lt;/p&gt;

&lt;p&gt;It was deciding what the AI &lt;strong&gt;must never be allowed to assume&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A reminder system amplifies mistakes: if an AI invents a deadline, that mistake can become a notification, then a stored obligation, then a missed payment.&lt;/p&gt;

&lt;p&gt;So I ended up building several safeguards around the model:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence before extraction.&lt;br&gt;&lt;br&gt;
Confirmation before persistence.&lt;br&gt;&lt;br&gt;
Deterministic validation before scheduling.&lt;br&gt;&lt;br&gt;
Durable workflows after scheduling.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also learned that scam detection should not claim that something is "safe." Kaagaz instead shows the specific warning signs it found and lets the user send the warning to their son.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluation
&lt;/h2&gt;

&lt;p&gt;I built a controlled evaluation set containing &lt;strong&gt;26 fictional documents and messages&lt;/strong&gt;, including genuine household paperwork and scam examples, with multiple simulated image conditions plus Hindi, Hinglish, and English instructions.&lt;/p&gt;

&lt;p&gt;The latest documented Gemma evaluation achieved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;412/412&lt;/strong&gt; paper fields exactly correct&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0&lt;/strong&gt; wrong amount/date errors left unhighlighted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;24/24&lt;/strong&gt; scam messages correctly red-warned&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0/80&lt;/strong&gt; genuine papers incorrectly red-warned&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;20/20&lt;/strong&gt; typed instructions correct&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8/8&lt;/strong&gt; synthetic spoken clips correct&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9.7s&lt;/strong&gt; median end-to-end AI time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;13.4s&lt;/strong&gt; p90&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are controlled, synthetic evaluation results, not a claim of real-world accuracy. Real crumpled documents and more sophisticated scams can still be harder.&lt;/p&gt;

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

&lt;p&gt;I am entering the categories that Kaagaz genuinely uses:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma 4 is the core document-understanding model, with both hosted and local inference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Render&lt;/strong&gt; — Render hosts the deployed Kaagaz application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; — Scribe v2 handles public speech-to-text and ElevenLabs multilingual_v2 provides spoken readbacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of MongoDB Atlas&lt;/strong&gt; — Atlas is the application's persistent data layer for confirmed obligations, notification state, and household data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Temporal&lt;/strong&gt; — Temporal provides durable, retryable reminder workflows that can wait months for future deadlines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Use of GitHub Copilot&lt;/strong&gt; — GitHub Actions automates the scheduled reminder worker used by the deployed system.&lt;/p&gt;

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