<?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: Dipti Choubey</title>
    <description>The latest articles on DEV Community by Dipti Choubey (@diptichoubey24).</description>
    <link>https://dev.to/diptichoubey24</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Dipti Choubey</title>
      <link>https://dev.to/diptichoubey24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/diptichoubey24"/>
    <language>en</language>
    <item>
      <title>Tallyroll: A Restaurant Bill Sorter That Works Offline (Gemma + Ollama)</title>
      <dc:creator>Dipti Choubey</dc:creator>
      <pubDate>Fri, 16 Oct 2026 09:32:45 +0000</pubDate>
      <link>https://dev.to/diptichoubey24/tallyroll-a-restaurant-bill-sorter-that-works-offline-gemma-ollama-17c2</link>
      <guid>https://dev.to/diptichoubey24/tallyroll-a-restaurant-bill-sorter-that-works-offline-gemma-ollama-17c2</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Tallyroll turns a pile of paper bills into one clean spreadsheet. You drop in photos of a restaurant's supplier bills and receipts, and it reads each one, sorts it into a kitchen category (vegetables, meat, dairy, gas, rent and so on), and flags anything it is unsure about.&lt;/p&gt;

&lt;p&gt;Restaurant owners spend hours at month end sorting a shoebox of bills for the accountant. Cloud tools mean uploading who they buy from and what they pay. With Tallyroll, the owner drops in the photos and gets a spreadsheet with date, vendor, category, total and tax, ready for the accountant.&lt;/p&gt;

&lt;p&gt;Who would pay: small restaurants and cafes, [your pricing idea, e.g. a one-time setup fee].&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/GDSEaiZnbMo" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&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/Dipti-Choubey-101" rel="noopener noreferrer"&gt;
        Dipti-Choubey-101
      &lt;/a&gt; / &lt;a href="https://github.com/Dipti-Choubey-101/tallyroll" rel="noopener noreferrer"&gt;
        tallyroll
      &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;Tallyroll&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A private bill sorter for small restaurants.&lt;/strong&gt; Drop in photos of supplier bills and receipts. &lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;Gemma&lt;/a&gt;, an open-weight model running on your own computer through &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;, reads each one, sorts it into a kitchen category, flags anything doubtful, and exports one spreadsheet for your accountant.&lt;/p&gt;
&lt;p&gt;No cloud. No per-bill fee. No account. Works offline.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Dipti-Choubey-101/tallyroll/docs/screenshot.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FDipti-Choubey-101%2Ftallyroll%2FHEAD%2Fdocs%2Fscreenshot.png" alt="Tallyroll"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it (Windows)&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Full beginner guide: &lt;strong&gt;&lt;a href="https://github.com/Dipti-Choubey-101/tallyroll/WINDOWS-GUIDE.txt" rel="noopener noreferrer"&gt;WINDOWS-GUIDE.txt&lt;/a&gt;&lt;/strong&gt;. The short version:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://www.python.org/downloads/" rel="nofollow noopener noreferrer"&gt;Python&lt;/a&gt; (tick "Add python.exe to PATH") and &lt;a href="https://ollama.com/download" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Double-click &lt;code&gt;setup-model.bat&lt;/code&gt; (downloads Gemma once).&lt;/li&gt;
&lt;li&gt;Double-click &lt;code&gt;start.bat&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;macOS / Linux: &lt;code&gt;ollama pull gemma3:4b &amp;amp;&amp;amp; python3 server.py&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;No packages to install. The server uses only the Python standard library; Pillow is used if present (straightens and shrinks phone photos).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;browser (static/)  --raw image--&amp;gt;  server.py  --/api/chat + JSON schema--&amp;gt;  Ollama (Gemma, local)
                                      |
                                      +--&amp;gt; normalise: numbers, dates, currency, category, sanity checks
                                      +--&amp;gt; data/receipts.json + data/images/   (your computer only)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured output.&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Dipti-Choubey-101/tallyroll" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma (open-weight, vision-capable), running locally through Ollama. It reads the bill photo directly, so there is no separate OCR step. I used &lt;code&gt;[gemma3:4b or gemma4:e4b]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; a small Python server with no packages to install. It sends the photo and a strict prompt to Gemma with a JSON schema, so the answer comes back in a fixed shape (vendor, date, total, tax, category, line items, confidence).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean-up layer:&lt;/strong&gt; it fixes number and date formats and marks a bill "Check" when the date or total is missing, the items don't add up, the photo is blurry, or it looks like a duplicate. Unit tests for this run in GitHub Actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; one web page with a receipt-printer animation, a ledger with a side panel to correct any bill next to its photo, a category breakdown, and CSV export for Excel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo mode:&lt;/strong&gt; a built-in mode replays 8 made-up sample bills without a model, and tags them "demo".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this with AI assistance (Claude) and tested it on real bills on my own laptop.&lt;/p&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 restaurant's bills show who they buy from and what they pay. They never leave the owner's computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; there's no per-bill fee, so a small business pays only for electricity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline:&lt;/strong&gt; it works with no internet, and my demo is recorded with Wi-Fi off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in:&lt;/strong&gt; the model is one setting, so the owner can switch to a better Gemma later by changing one line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Room to grow:&lt;/strong&gt; because the weights are open, the model could later be fine-tuned on local suppliers' bills. I haven't done that yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;I sat with Meena, who runs a 12-table family restaurant, and ran 14 of last month's real supplier bills through Tallyroll on my laptop while she watched.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Result:&lt;/strong&gt; 11 bills were read correctly. 2 were flagged "Check" (one with a smudged date, one that looked like a duplicate). 1 had a wrong total that was not flagged. It took about 40 seconds per bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What she said:&lt;/strong&gt; "I usually lose a whole Sunday on this. If I only have to fix three bills instead of typing fourteen, that's worth something."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What went wrong:&lt;/strong&gt; the wrong total was on a crumpled butcher bill, where Gemma read an 8 as a 3. She spotted it only because the photo was right beside the numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What she asked for next:&lt;/strong&gt; a Hindi version of the screen, and a way to send the month's sheet straight to her accountant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Would she pay?&lt;/strong&gt; "Maybe, if it never mixes up numbers." She said ₹500 a month felt fair, but she'd want to try it for a month first.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
