<?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: Dhanush Gowda</title>
    <description>The latest articles on DEV Community by Dhanush Gowda (@dhanush_gowda_0affeff0dba).</description>
    <link>https://dev.to/dhanush_gowda_0affeff0dba</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%2F4161411%2Fdb1b9e46-87cc-4793-b770-183d9b27e6e6.png</url>
      <title>DEV Community: Dhanush Gowda</title>
      <link>https://dev.to/dhanush_gowda_0affeff0dba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhanush_gowda_0affeff0dba"/>
    <language>en</language>
    <item>
      <title>A receipt sorter that never leaves your laptop (Gemma + Ollama)</title>
      <dc:creator>Dhanush Gowda</dc:creator>
      <pubDate>Wed, 14 Oct 2026 04:47:31 +0000</pubDate>
      <link>https://dev.to/dhanush_gowda_0affeff0dba/a-receipt-sorter-that-never-leaves-your-laptop-gemma-ollama-2644</link>
      <guid>https://dev.to/dhanush_gowda_0affeff0dba/a-receipt-sorter-that-never-leaves-your-laptop-gemma-ollama-2644</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Challenge, Week 2: Side Hustle.&lt;/p&gt;

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

&lt;p&gt;Freelancers collect receipts and invoices from many places: email PDFs, phone photos, app screenshots. At tax time someone has to type each one into a spreadsheet. Those documents hold client names, rates and payment details, and many freelancers don’t want them uploaded to a service they don’t control.&lt;/p&gt;

&lt;p&gt;Local Receipt Sorter is a small app that runs entirely on the user’s own computer. You drop in receipts, it reads the vendor, date, invoice number, currency, subtotal, tax and total, flags anything suspicious, and exports a CSV or Excel file for the accountant. It also suggests a clean filename for each document, like 2026-03-04_acme-cloud_1180.00.pdf.&lt;/p&gt;

&lt;p&gt;The side hustle idea: sell it to freelancers as [a one-time license / a monthly fee of X / a done-for-you service for X per batch].&lt;/p&gt;

&lt;p&gt;Demo&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%2Fw8bvgz1ve8c0sz9wpsl0.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%2Fw8bvgz1ve8c0sz9wpsl0.png" alt=" " width="800" height="312"&gt;&lt;/a&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%2Fvs68k7duzmvnbtrp2cfm.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%2Fvs68k7duzmvnbtrp2cfm.png" alt=" " width="800" height="473"&gt;&lt;/a&gt;&lt;br&gt;
Code&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/DhanushGowdaDev" rel="noopener noreferrer"&gt;
        DhanushGowdaDev
      &lt;/a&gt; / &lt;a href="https://github.com/DhanushGowdaDev/Local-Receipt-Sorter" rel="noopener noreferrer"&gt;
        Local-Receipt-Sorter
      &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;Local Receipt Sorter&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Drop in receipts and invoices; get a reviewed CSV/Excel. Runs fully offline.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Install Ollama (&lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;https://ollama.com&lt;/a&gt;), then: &lt;code&gt;ollama pull gemma3:4b&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;streamlit run app.py&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Use a bigger model with &lt;code&gt;RECEIPT_MODEL=gemma3:12b streamlit run app.py&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Measure accuracy&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Put 30-50 receipts and a &lt;code&gt;labels.json&lt;/code&gt; in &lt;code&gt;eval_set/&lt;/code&gt;, then &lt;code&gt;python eval.py eval_set&lt;/code&gt;.&lt;/p&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/DhanushGowdaDev/Local-Receipt-Sorter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;How I Built It&lt;br&gt;
Model: a Gemma vision model (gemma3:4b) served locally through Ollama. Documents never leave the machine.&lt;br&gt;
Structured output: the model’s answer is forced into a JSON schema, so every field comes back in a predictable shape.&lt;br&gt;
Checks instead of self-reported confidence: small models are poor at judging their own accuracy, so I didn’t ask the model how sure it was. A rule-based checker flags missing fields, bad or future dates, non-positive totals, and rows where subtotal plus tax doesn’t equal the total.&lt;br&gt;
Review before export: every row appears in an editable table, so the user fixes mistakes before the file is exported.&lt;br&gt;
Stack: Python, PyMuPDF for PDFs, Streamlit for the interface, pandas for export.&lt;br&gt;
What I Found&lt;/p&gt;

&lt;p&gt;I tested it on 25 documents: 15 PDFs, 10 photos and 15 screenshots. .&lt;/p&gt;

&lt;p&gt;One result I liked: my first test files were order pages that can generate an invoice, not actual invoices, and they had no date. I assumed the empty date column was a model failure and loosened my prompt. Then I realized the model was right: there was no date to read. I changed the prompt to say “never invent a date, vendor or amount” so it stays that way.&lt;/p&gt;

&lt;p&gt;Why Open Innovation Matters&lt;br&gt;
Privacy is the product. The documents are read by a model running on the user’s own computer.&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%2Fhppqmdtnykfaxbeessyh.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%2Fhppqmdtnykfaxbeessyh.png" alt=" " width="800" height="492"&gt;&lt;/a&gt;&lt;br&gt;
I turned off Wi-Fi and it still worked.&lt;br&gt;
No per-document fee. There’s no API bill that grows with each receipt, so a flat price can work.&lt;br&gt;
I can change it. I can swap in a larger Gemma model with one setting, tighten the prompt, or fine-tune later for a specific kind of invoice.&lt;/p&gt;

&lt;p&gt;I did not compare it against a closed model, so I’m not claiming it’s better. The claim is smaller: a small open model, running locally, can do a useful part of this job.&lt;/p&gt;

&lt;p&gt;Limits&lt;br&gt;
I tested only 25 documents, so these results show it works, not how often.&lt;/p&gt;

&lt;p&gt;What’s Next&lt;/p&gt;

&lt;p&gt;More test documents, a larger model, fine-tuning for a niche such as GST invoices, a first paying user&lt;/p&gt;

&lt;p&gt;Prize Category&lt;/p&gt;

&lt;p&gt;Best Use of Gemma. The whole project runs on Gemma through Ollama.&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>SurgiPlan</title>
      <dc:creator>Dhanush Gowda</dc:creator>
      <pubDate>Sat, 10 Oct 2026 08:19:00 +0000</pubDate>
      <link>https://dev.to/dhanush_gowda_0affeff0dba/surgiplan-1f5h</link>
      <guid>https://dev.to/dhanush_gowda_0affeff0dba/surgiplan-1f5h</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  SurgiPlan — AI-Powered Operating Room Scheduling
&lt;/h3&gt;

&lt;p&gt;SurgiPlan is an intelligent hospital scheduling system designed to optimize operating room allocation and hospital resource utilization.&lt;/p&gt;

&lt;p&gt;Hospitals must coordinate surgeries while considering surgical priority, staff availability, equipment requirements, operating room capacity, and recovery beds. Managing these constraints manually can be challenging.&lt;/p&gt;

&lt;p&gt;SurgiPlan uses constraint-based optimization to generate feasible schedules and includes an emergency surgery workflow and an AI copilot for scheduling assistance.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live Application:&lt;/strong&gt; &lt;a href="https://surgiplan-frontend.vercel.app" rel="noopener noreferrer"&gt;https://surgiplan-frontend.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend Health Check:&lt;/strong&gt; &lt;a href="https://surgiplan.onrender.com/api/health" rel="noopener noreferrer"&gt;https://surgiplan.onrender.com/api/health&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/DhanushGowdaDev/SurgiPlan" rel="noopener noreferrer"&gt;https://github.com/DhanushGowdaDev/SurgiPlan&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built SurgiPlan using the following technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React, TypeScript, Vite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python and FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimization:&lt;/strong&gt; Google OR-Tools with the CP-SAT solver&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB Atlas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Integration:&lt;/strong&gt; Google GenAI SDK with Gemma integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Vercel for the frontend and Render for the backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The scheduling engine models resource constraints to help assign surgeries to operating rooms while accounting for staff, equipment, and recovery-bed requirements.&lt;/p&gt;

&lt;p&gt;The application also includes an emergency workflow and an AI copilot.&lt;/p&gt;

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

&lt;p&gt;Open innovation makes it possible for developers to inspect, adapt, and build upon existing technologies rather than starting from scratch.&lt;/p&gt;

&lt;p&gt;In SurgiPlan, open-source tools such as FastAPI and Google OR-Tools provide a flexible foundation for backend development and constraint optimization. This allows the scheduling logic to be customized for different resource requirements and operational constraints.&lt;/p&gt;

&lt;p&gt;Using modular components also makes it easier to experiment with new optimization strategies and improve the system over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;Not included.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Render — Best Use of Render&lt;/li&gt;
&lt;li&gt;Gemma — Best Use of Gemma&lt;/li&gt;
&lt;li&gt;MongoDB — Best Use of MongoDB Atlas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;These categories are relevant only if the implementation satisfies each partner's requirements. Verify the Gemma integration and demonstrate how MongoDB Atlas contributes to the application before claiming those categories.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SrgiPlan</title>
      <dc:creator>Dhanush Gowda</dc:creator>
      <pubDate>Sat, 10 Oct 2026 08:14:42 +0000</pubDate>
      <link>https://dev.to/dhanush_gowda_0affeff0dba/srgiplan-2o38</link>
      <guid>https://dev.to/dhanush_gowda_0affeff0dba/srgiplan-2o38</guid>
      <description>&lt;h1&gt;
  
  
  SurgiPlan — AI-Powered Operating Room Scheduling &amp;amp; Resource Optimization
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;SurgiPlan&lt;/strong&gt; is an intelligent hospital scheduling system designed to optimize operating room allocation and improve the use of critical hospital resources. Inspired by railway block scheduling, it helps coordinate surgeries while considering operating room availability, surgical priority, staff availability, equipment requirements, and recovery-bed capacity.&lt;/p&gt;

&lt;p&gt;The system uses constraint-based optimization to generate feasible surgical schedules and help hospitals manage competing demands more efficiently. It also includes an emergency surgery workflow and an AI copilot to assist users with scheduling-related questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent Scheduling:&lt;/strong&gt; Optimizes operating room assignments and surgery timings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Management:&lt;/strong&gt; Accounts for staff, equipment, operating rooms, and recovery beds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emergency Mode:&lt;/strong&gt; Supports adding urgent surgical cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Copilot:&lt;/strong&gt; Provides an AI-powered interface for scheduling assistance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Dashboard:&lt;/strong&gt; Offers a centralized interface to view surgeries, rooms, and resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React, TypeScript, Vite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python, FastAPI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimization Engine:&lt;/strong&gt; Google OR-Tools (CP-SAT)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB Atlas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Google GenAI SDK with Gemma integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Vercel (frontend) and Render (backend)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://surgiplan-frontend.vercel.app" rel="noopener noreferrer"&gt;https://surgiplan-frontend.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/DhanushGowdaDev/SurgiPlan" rel="noopener noreferrer"&gt;https://github.com/DhanushGowdaDev/SurgiPlan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend API:&lt;/strong&gt; &lt;a href="https://surgiplan.onrender.com/api/health" rel="noopener noreferrer"&gt;https://surgiplan.onrender.com/api/health&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SurgiPlan explores how constraint optimization and AI can help tackle complex resource-allocation problems in healthcare. The goal is to make operating room scheduling more structured, resource-aware, and adaptable to changing hospital needs.&lt;/p&gt;

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