This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
Every kirana store, stationery shop and tuition teacher in India runs on a khata, a handwritten ledger of who owes what. The hard part isn't the bookkeeping. It's asking a neighbour you've served for years to pay up without sounding rude, so the reminder gets postponed and the shop loses money.
KhataPing reads a simple ledger CSV, works out who owes what and how long it has been pending, and writes a respectful WhatsApp reminder in Hindi, Marathi, Hinglish or English. The tone follows the balance: friendly under two weeks, polite up to a month, firm after that. Never threatening. The shopkeeper edits the message and taps "Open in WhatsApp". They always press send themselves.
I've been building tools for kirana owners (my earlier project, BikriTracker, predicts their sales), and the same pain keeps coming up: money that is owed but never chased.
Example output for a customer who has owed Rs 3,000 for 125 days (Hinglish, firm tone, offline template):
Namaste Imran Shaikh ji, Patil Kirana Store se yaad dilana tha ki aapke khate mein ₹3,000 baaki hai. Ye 125 din se pending hai. Please is hafte tak payment kar dein, ya bata dein kab tak ho payega. Thank you!
Code
Aakif-Kohari
/
khataping
Polite khata (credit ledger) reminders in Hindi, Marathi, Hinglish & English - written by an open-weight Gemma model running locally. Hacktoberfest 2026 Week 2: Side Hustle.
KhataPing
Polite khata reminders for small shops, written by an open-weight model that runs on the shopkeeper's own laptop.
Built for the Hacktoberfest Open-Source AI Challenge: Week 2 - Side Hustle.
The problem
Every kirana, tailor, stationery shop and tuition teacher in India runs a khata - a hand-kept ledger of who owes what. Chasing the money is awkward: nobody wants to sound rude to a neighbour they've served for ten years, and the person who forgets to ask loses real money.
KhataPing reads a simple ledger CSV, works out who owes what and for how long, and writes a respectful WhatsApp reminder in the customer's language - Hindi, Marathi, Hinglish or English - with the tone matched to how overdue the balance is.
Why it can be a small paid tool
- A real recurring pain: late khata payments are a cash-flow problem for the shop, every month.
- Private…
How I Built It
- Open-weight model: Gemma, run locally through Ollama. The model tag is a setting, so any Gemma size works.
- Streamlit for the UI, plain Python for everything else.
-
The model never does arithmetic. Balances, ageing and sorting live in a tested
ledger.py. Payments settle the oldest credit first, so "days pending" means the age of the oldest unpaid credit. - The model's output is checked before anyone sees it. A reply is accepted only if it contains the exact pending amount and nothing threatening (police, court or legal talk, in English, Hindi and Marathi). Otherwise the app uses a built-in template instead.
- It works without the model. If Ollama isn't running, four languages and three tones of offline templates keep the tool usable.
- 41 pytest cases cover FIFO settlement, overpayment, malformed CSVs, Indian digit grouping (12,34,567), and the case where the model changes the amount.
The lesson: when the subject is money, the model's job should be the smallest part of the system, and the system should still work when the model is wrong or missing.
Why Does Open Innovation Matter?
- Privacy. A khata is a list of named neighbours and what they owe. A tool that sends that to a third-party API is a poor trade for the shopkeeper. With a local open-weight model, names, phone numbers and balances never leave the shop's laptop.
- Cost. Reminders are short, so a small local model is enough, and there is no per-message fee. That makes a small monthly price (my guess, untested) viable for a shop.
- Control. I can swap the model with one setting, so the shop isn't tied to one vendor's pricing or availability.
Where it fell short: small local models are uneven in Marathi and Hindi, which is why the human edits before sending and why the plain, safe templates exist.
Prize Categories
- Best Use of Gemma
Top comments (0)