What I Built

Every neighbourhood shop in India runs on udhaar: Sharma ji takes ₹500 of ration now and pays on the 1st. The record of it is a paper notebook or somebody's memory, and the hardest part isn't the writing. It's the asking. Nobody wants to be the one who says "bhaiya, paise?"

Dukaan Munshi (munshi means the shop's clerk) is a private khata that does both. The shopkeeper says or types what happened, in Hindi, Hinglish or English:

Sharma ji ne 500 udhaar liya, Gupta ji ne 200 diye

An open Gemma model running on the shop's own computer turns that into ledger entries and keeps every customer's balance. For anyone who owes money, it writes a WhatsApp reminder in the tone the shopkeeper picks: meethi (soft), seedhi (direct) or mazaakiya (a little funny, never shaming), in Hinglish, Hindi or English. One tap opens WhatsApp with the message ready to send.

Who would pay: a small shop that sells on credit and wants a smarter notebook that costs nothing every month and keeps its customer list at home.

Demo

Try it with nothing to install: https://abhyudaysharma.github.io/Dukaan-Munshi/

The online version runs in a simple mode (no Gemma), so you can see how it looks and feels. Press "demo khata" to load made-up customers. The smart reading and the nicer reminders come from Gemma on your own computer, with the three commands below.

📸

📸

To run it with Gemma (you need Node 18+ and Ollama):

bash
ollama pull gemma3:4b
git clone https://github.com/Abhyudaysharma/Dukaan-Munshi.git
cd Dukaan-Munshi && node server.js

Then open http://localhost:3000. There is nothing else to install.

Code

Dukaan Munshi 📒

Bolo, munshi likh lega. A private khata (credit ledger) for small shops. Say what happened in Hindi, Hinglish or English ("Sharma ji ne 500 udhaar liya, Gupta ji ne 200 diye") and a Gemma model running on the shop's own machine turns it into ledger entries, keeps each customer's balance, and writes a polite WhatsApp reminder for anyone who owes money.

Try it with nothing installed: the live demo works in demo mode (simple rules instead of Gemma). Press "demo khata" to load made-up customers.

home

Why a shop would pay for it

Every kirana shop runs on udhaar, and the khata is usually a paper notebook or someone's memory. Chasing money is the awkward part. Munshi does the writing and the wording, in the shopkeeper's language, and the customer list never leaves the shop.

How it works

  • Capture: type or speak (browser voice typing, hi-IN). Munshi…

How I Built It

The AI part is Gemma (gemma3:4b) running on the shop's own computer through Ollama. The app only ever talks to that local model, never to an online AI service.

A few choices I care about:

  1. You confirm before anything is saved. Money is the wrong place for a silent guess. After the shopkeeper speaks, Munshi shows what it understood (udhaar or jama, the name, the amount) in boxes they can fix. Nothing goes into the khata until they press save.

  2. The app doesn't blindly trust the model. Entries with an unknown type, a zero amount or no name are thrown away. Reminders are cleaned of stray symbols. The names already in the khata are given to the model, so "sharma" goes to the existing "Sharma ji" instead of creating a second customer.

  3. It still works with no model. If Gemma isn't running, a small set of simple rules reads plain notes, and ready-made messages cover the reminders. That's also what lets anyone try the online demo.

  4. Reminders that aren't rude. The model is told never to threaten, shame or invent dates, and to always use the exact amount, written the Indian way (₹12,34,567).

  5. The money maths is careful. ₹0.1 + ₹0.2 comes out as ₹0.3, cash sales never land on a customer, and someone who owes nothing can't be sent a reminder. I wrote a test suite for all of this, and I tried the full flow (speak, check, save, remind) in a real browser.

What's still rough

Gemma's Hindi at this small size is the weakest part, and the simple reader is deliberately basic. Voice typing depends on the browser. The khata lives in one browser, so there's no syncing between devices yet.

Why Does Open Innovation Matter?

A shop's customer list is private. Who owes whom, and how much, is exactly what a shopkeeper won't paste into someone else's cloud. Here the model, the app and the khata all stay on the shop's own computer.
It costs nothing to run. A shop on thin margins won't pay per message. A local model is free, so rewriting a reminder five times costs nothing.
No lock-in. I can swap Gemma for another open model, or change how the reminders sound, without waiting on anyone.
It can be made better for this job. Because the model is open, it can later be tuned on a region's Hindi and local item names.
It works with poor internet. The app opens without a connection, and nothing in the main flow needs an online service.

Where a closed model would honestly win: smoother Hindi and fewer misreadings of messy speech. For a khata, I'll take private, free and editable.

Prize Categories

Best Use of Gemma. Gemma runs on the shop's own computer and is the core of the app: it reads the shopkeeper's notes into entries and writes every reminder. The app checks everything it returns, and you can switch between Gemma versions.

Bolo, munshi likh lega. 📒