<?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: Himanish Varada</title>
    <description>The latest articles on DEV Community by Himanish Varada (@himanish_varada).</description>
    <link>https://dev.to/himanish_varada</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%2F4158266%2Fd05c8539-7e0b-46f2-b775-f22a5a5e4b8b.png</url>
      <title>DEV Community: Himanish Varada</title>
      <link>https://dev.to/himanish_varada</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/himanish_varada"/>
    <language>en</language>
    <item>
      <title>Built Kirana Khata to help local shopkeepers easily manage udhaar using voice commands in Hindi, Telugu, and English! Powered by Gemma, TabPFN, and MongoDB Atlas. Check out how it works and let me know what you think! 🤝✨</title>
      <dc:creator>Himanish Varada</dc:creator>
      <pubDate>Mon, 05 Oct 2026 12:37:22 +0000</pubDate>
      <link>https://dev.to/himanish_varada/built-kirana-khata-to-help-local-shopkeepers-easily-manage-udhaar-using-voice-commands-in-hindi-24jn</link>
      <guid>https://dev.to/himanish_varada/built-kirana-khata-to-help-local-shopkeepers-easily-manage-udhaar-using-voice-commands-in-hindi-24jn</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m" class="crayons-story__hidden-navigation-link"&gt;Kirana Khata – Voice-powered udhaar ledger using Gemma + TabPFN + MongoDB on Render (built with GitHub Copilot)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/himanish_varada" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4158266%2Fd05c8539-7e0b-46f2-b775-f22a5a5e4b8b.png" alt="himanish_varada profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/himanish_varada" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Himanish Varada
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Himanish Varada
                
                
              
              &lt;div id="story-author-preview-content-4799945" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/himanish_varada" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4158266%2Fd05c8539-7e0b-46f2-b775-f22a5a5e4b8b.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Himanish Varada&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 5&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m" id="article-link-4799945"&gt;
          Kirana Khata – Voice-powered udhaar ledger using Gemma + TabPFN + MongoDB on Render (built with GitHub Copilot)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>mongodb</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Kirana Khata – Voice-powered udhaar ledger using Gemma + TabPFN + MongoDB on Render (built with GitHub Copilot)</title>
      <dc:creator>Himanish Varada</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:58:24 +0000</pubDate>
      <link>https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m</link>
      <guid>https://dev.to/himanish_varada/kirana-khata-voice-powered-udhaar-ledger-using-gemma-tabpfn-mongodb-on-render-built-with-3f3m</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;
  
  
  The book that takes hours
&lt;/h3&gt;

&lt;p&gt;My friend &lt;strong&gt;Yaswanth&lt;/strong&gt; runs &lt;strong&gt;Mini Mart&lt;/strong&gt;, a neighbourhood shop. Like most small shops, it runs on credit (udhaar), and every customer's balance lives in a handwritten book.&lt;/p&gt;

&lt;p&gt;The book isn't the problem. The time is. When the shop is busy, he can't write down every entry, and when he needs to know what a customer owes, finding and adding up the entries takes hours.&lt;/p&gt;

&lt;p&gt;I asked what he needed. His answer was simple: &lt;em&gt;an app to enter ledgers and data, one that his dad could also use.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That last part shaped everything. If someone who has used a paper book all his life can't use it, it isn't done.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Kirana Khata&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Say it or type it the way you'd say it.&lt;/strong&gt; For example "ramesh ne 500 uda diya", in Hindi or English. Gemma reads the sentence into a customer, an entry type (credit or payment) and an amount. Yaswanth or his dad checks it and presses Save. Nothing is saved without confirmation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speak button.&lt;/strong&gt; Entries can be spoken, not just typed, which matters when your hands are busy at the counter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Balances in one view.&lt;/strong&gt; Total owed, number of customers, total collected, and each customer's balance with no adding up by hand, plus a list of recent entries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Who may pay late?"&lt;/strong&gt; Each payment is matched to the customer's oldest open credit. Anything unpaid after 14 days counts as late. The app shows each customer's average time to pay and a risk bar, so Yaswanth knows whom to remind first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import CSV&lt;/strong&gt;, so old records don't have to be typed in again.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;🎥 Video demo: &lt;a href="https://youtu.be/pgAJx0Mwspc" rel="noopener noreferrer"&gt;https://youtu.be/pgAJx0Mwspc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 Live app: &lt;a href="https://khataapp-qtof.onrender.com" rel="noopener noreferrer"&gt;https://khataapp-qtof.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Heads up:&lt;/strong&gt; the live site runs on a free server that sleeps when idle, so the first load can take about a minute. The hosted version has no AI model attached, so it reads entries with built-in rules. The video shows the full Gemma-powered version running locally.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&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/Hak-36" rel="noopener noreferrer"&gt;
        Hak-36
      &lt;/a&gt; / &lt;a href="https://github.com/Hak-36/KhataApp" rel="noopener noreferrer"&gt;
        KhataApp
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;Kirana Khata&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A voice-friendly credit ledger (khata) for small shops. Local Gemma reads entries in English, Hindi, Telugu or mixed;
code checks every amount and does all the maths; the shopkeeper confirms each entry.&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;pip install -r requirements.txt
ollama pull gemma3:4b
uvicorn app.main:app --reload        # http://127.0.0.1:8000
python -m pytest -q
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Optional: &lt;code&gt;MONGODB_URI=...&lt;/code&gt; stores entries in MongoDB Atlas. &lt;code&gt;KHATA_LLM=none&lt;/code&gt; skips Gemma (instant, rules only).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Stage 2: TabPFN, voice, import&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pip install tabpfn&lt;/code&gt; (or &lt;code&gt;pip install tabpfn-client&lt;/code&gt;) turns on the "Who may pay late?" screen. Without it a simple baseline runs and the page says so.&lt;/li&gt;
&lt;li&gt;Import: CSV with columns date, customer, kind (credit/payment), amount. &lt;code&gt;python scripts/make_synthetic_csv.py&lt;/code&gt; makes FAKE data for trying the screen only.&lt;/li&gt;
&lt;li&gt;Deploy: &lt;code&gt;render.yaml&lt;/code&gt; (set &lt;code&gt;MONGODB_URI&lt;/code&gt; in Render).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Hak-36/KhataApp" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;h3&gt;
  
  
  Reading a sentence like "ramesh ne 500 uda diya"
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"ramesh ne 500 uda diya"  (typed or spoken, Hindi or English)
          │
          ▼
  Gemma (gemma3:4b) via Ollama, running locally
          │          └── if the model isn't available → rule-based parser
          ▼
  { customer: "Ramesh", kind: "payment", amount: 500 }
          │
          ▼
  Shopkeeper checks the fields → Save → MongoDB Atlas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rule-based backup matters. If the model isn't running, the app still works. That's why the hosted Render version, which has no Ollama server, still reads entries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Predicting who pays late
&lt;/h3&gt;

&lt;p&gt;Each customer's payment history is turned into simple signals, and scikit-learn and NumPy produce a "chance of paying late" for each customer. The bars are colour-coded: under 40% low, 40–70% medium, over 70% high. Customers are sorted by risk, so the first name on the list is the first person to remind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools I used
&lt;/h3&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;Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;FastAPI + Uvicorn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open-source AI&lt;/td&gt;
&lt;td&gt;Gemma (gemma3:4b) via Ollama, with rules as backup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice&lt;/td&gt;
&lt;td&gt;ElevenLabs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late-payment prediction&lt;/td&gt;
&lt;td&gt;scikit-learn, NumPy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;MongoDB Atlas (free tier), with in-memory fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Render, deployed from GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Development&lt;/td&gt;
&lt;td&gt;GitHub Copilot as my coding assistant&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What went wrong while deploying
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;My first deploy failed because uvicorn couldn't find my app. The code lives in an &lt;code&gt;app/&lt;/code&gt; folder, so the start command had to point into it instead of a top-level &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;MongoDB Atlas refused Render's connection until I added &lt;code&gt;0.0.0.0/0&lt;/code&gt; to the IP Access List. After that, the logs showed "Connected to MongoDB".&lt;/li&gt;
&lt;li&gt;Render has no Ollama server, so the hosted version uses the rule-based parser by design.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; A shop's credit book lists who owes how much, which is sensitive in a neighbourhood. Because Gemma is open-weight and runs locally, customer names and amounts don't need to go to a third-party API to be read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; There is no per-entry fee. For a small shop, a pay-per-request API would eat into the margins this tool is meant to protect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience.&lt;/strong&gt; Because the parser falls back to rules, the ledger keeps working even when the model or the internet isn't available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API wouldn't have given me all three.&lt;/p&gt;

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

&lt;p&gt;I'm entering the categories that match the tools I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best use of Render:&lt;/strong&gt; the app is deployed on Render from a GitHub repo, connected to MongoDB Atlas, with a live demo link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best use of ElevenLabs:&lt;/strong&gt; ElevenLabs powers the voice entry, so a shopkeeper can speak an entry instead of typing it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best use of MongoDB Atlas:&lt;/strong&gt; all ledger entries and balances are stored in Atlas, with an in-memory fallback if it's unreachable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best use of GitHub Copilot:&lt;/strong&gt; Copilot helped me write and debug the code during the weekend.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building for a Friend
&lt;/h2&gt;

&lt;p&gt;Yaswanth's first reaction was that it would make his days easier and more efficient.His Dad was obsessed with this.&lt;/p&gt;

&lt;p&gt;Building for a real person gave me one simple test for every decision: &lt;em&gt;can his dad use this without help?&lt;/em&gt; That kept the screen plain, the buttons clear, and the main action to one sentence.&lt;/p&gt;

&lt;p&gt;If you run a shop or know someone who does, how do you keep track of credit today? I'd like to hear in the comments.&lt;/p&gt;

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