DEV Community

Rahul Tapase
Rahul Tapase

Posted on

Hacktoberfest 2026, online and offline: five local-AI builds and two Mumbai Hack Days

This is a submission for the MLH x DEV Writing Challenge

What I Built

KhataLens, built in one afternoon at Hacktoberfest Hack Day Mumbai on Saturday 17 October.

Almost every kirana shop keeps an udhaar khata next to the till: a notebook where the shopkeeper writes down who took what on credit, and "jama" when they pay. It works until he needs a total. Then he re-adds pages of handwriting, with the same customer scattered across pages, and then has to ask a neighbour for money without it getting awkward.

Free ledger apps exist, but they ask him to type every entry into a phone, on top of the notebook he already keeps. KhataLens starts from the notebook:

  1. Photograph the pages. Gemma 4 reads every handwritten line into an editable ledger that sits next to the photo.
  2. Fix any misread in place. Corrected rows are tagged, and balances update as you type.
  3. Get the hisaab. One balance per customer across all pages (udhaar minus jama), sorted by who owes most.
  4. Send a polite reminder. Gemma drafts a short, respectful Hinglish message with the customer's name and exact amount. The shopkeeper sends it on WhatsApp himself.
  5. Export the ledger and balances as CSV for Excel.

It all runs on the shop's own computer. Gemma 4 E2B runs locally in Ollama, so the photos, names and amounts never leave it. A khata is other people's financial data, and that was the point I cared about most.

What I learned: don't let the model's label be the final answer. My first version asked Gemma for customer, amount and udhaar/jama directly, and it read two short "Pooja jama 100" lines as udhaar. That adds ₹100 to her balance instead of taking it off, which is the worst mistake a khata app can make. The fix was to have Gemma copy the whole line first, and then let code decide udhaar or jama from payment words in that line. After that, all 24 lines on my three test pages came out right in each of three runs.

Demo

KhataLens needs Ollama on the same machine, so there's no hosted demo. Setup is one model pull and two npm commands, all in the README.

KhataLens: three handwritten khata pages read into one ledger, each row tagged with the page it came from
Three handwritten pages, one ledger. The photo stays next to the table, and each row is tagged P1, P2 or P3 so the shopkeeper can go back to the paper.

The hisaab across three pages and a Hinglish payment reminder drafted by Gemma
₹540 to collect across six customers, and a reminder Gemma drafted. Code checks that the draft has the right name, amount and shop name before it's shown.

KhataLens

Photograph a page of a handwritten udhaar khata. Gemma 4 reads it on your laptop, turns it into an editable ledger, totals what each customer owes, and drafts a polite Hinglish payment reminder you can copy or open in WhatsApp. Nothing is sent automatically and nothing leaves the laptop.

Built for Best Use of Gemma 4 at Hacktoberfest 2026 Mumbai.

KhataLens: three khata pages read into one ledger, each row tagged with its page

The problem

Small shops across India run on credit. A regular customer takes atta today and pays at the end of the week, and the shopkeeper writes it in a paper udhaar notebook: date, name, item, amount and "jama" when money comes back. Working out who owes how much means re-adding pages of handwriting, and asking for money is awkward, so dues slip.

Existing ledger apps expect the shopkeeper to retype everything. KhataLens starts from the notebook he already keeps.

What it does

  1. Photos in. Take or drop one…

The full write-up, with the schema, guardrails and limitations, is in my KhataLens post.

Partner Technologies

Gemma 4 (Google DeepMind). Hacktoberfest 2026 was about open-source AI, and Gemma was one of its featured partners. Even the Navi Mumbai Hack Day page linked the Gemma 4 docs. KhataLens uses gemma4:e2b through Ollama's /api/chat for two jobs:

  • Reading handwriting. The photo is downscaled in the browser to a 1280 px JPEG and sent with a JSON schema in Ollama's format field, so Gemma must answer as structured data. Thinking is off and temperature is 0.1. On my laptop's 4 GB RTX 2050, a page takes about 6 to 9 seconds once the model is loaded.
  • Writing reminders. At most 60 words of Roman-script Hinglish in one of three tones, with no threats, shaming or legal words. If a draft misses the name, the exact amount or the shop name, it retries once and then falls back to a fixed template.

The schema change that fixed the jama bug:

properties: {
  // Exact transcription first: the model reads the whole line before splitting it,
  // and the app can check it for payment words itself.
  line: { type: "string" },
  customer: { type: "string" },
  amount: { type: "number" },
  kind: { type: "string", enum: ["udhaar", "jama"] },
  date: { type: ["string", "null"] },
  item: { type: ["string", "null"] },
},
Enter fullscreen mode Exit fullscreen mode

A small open model was the right fit here. One model on a 4 GB GPU covers both vision and Hinglish writing, reading a page costs nothing, and it keeps working without internet until the WhatsApp step. A large hosted model would probably read messy handwriting better. KhataLens makes up for that by keeping the photo and the editable row side by side, so a misread costs a two-second fix.

Hackathon Experience

My Hacktoberfest 2026 ran in two places at once: online every week, and offline at Hack Days around Mumbai.

Online: a new build every week

Hacktoberfest's DEV challenge gave one prompt for the whole month, to build something with open-source AI at its core, plus a new theme every Monday. I entered all five rounds, and every entry ran Gemma 4 locally through Ollama:

Round Theme What I built
Launch Weekend Build for a Friend Tuition Register: my mom's tuition register, typed in Hinglish, offline
Week 1 Touch Grass Log Off: one real place nearby and one small thing to do there
Week 2 Side Hustle KhataLens, built at Hack Day Mumbai
Week 3 Slow and Steady PrepMate: a spoken mock interview with a scorecard at the end
Week 4 Ghost in the Machine Ghost Words: a horror card game about fake dictionary words

The weekly rhythm was what made it work for me. A theme drops on Monday, you have a week, and you publish. Each build followed the same routine: write a plan, get the model call working on real input before any UI, then build around it. Between builds there were the Hacktoberfest livestreams, like Open Source Ready Live and "How we built Hacktoberfest", and the sticker book filling up as I went.

Offline: two Hack Days I loved

Hack Day Navi Mumbai x AITD Events, Sunday 4 October. My first in-person Hacktoberfest event. It was a hands-on afternoon open to beginners: an introduction to Hacktoberfest 2026, a session on open source and open-source AI, then a hands-on contribution sprint with mentors around. I left with the Hacktoberfest T-shirt.

Hacktoberfest Hack Day Mumbai, Saturday 17 October. Organised by Hackerspace Mumbai and hosted by Paytm at its office in Waterstones Corporate Park. The organisers' recap describes what made it different better than I can. There were no keynotes and no panels: a short introduction, the rules, and then building. More than 500 people registered, and the organisers reviewed applications to get a room of builders rather than an audience.

Builders at laptops in Paytm's office during Hacktoberfest Hack Day Mumbai, next to a Paytm Inference banner
Hack Day Mumbai at Paytm's office. Photo: Shutterbug Times.

The format I'll remember is the progress checkpoint every 30 minutes. Builders posted what they had built, what was blocking them and what came next, publicly on the event's LinkedIn page and an X thread. My commit log from that afternoon reads like the checkpoints:

  • 3:51 PM: project scaffolded
  • 3:56 PM: Gemma 4 reading a khata page into entries
  • 3:59 PM: editable ledger with balances
  • 4:04 PM: Hinglish reminders
  • 4:13 to 4:57 PM: design pass, CSV export, dark mode, README
  • 5:13 to 5:46 PM: several pages into one ledger, steadier jama reading

The schedule said submissions closed at 4:30 PM and the day ended at 5:30. The recap says people kept building, and that judging conversations ran until about 8:30 PM. I was one of the people who kept building: the multi-page support came after five.

By the end there were 18 projects, and KhataLens is listed in the recap among the practical-AI ones. The overall winner was Kavach by Kratik Jain, an offline scam-call guard that runs local AI, and ZeroResidual by Gaurav Patil got special recognition. It was good to see how many projects kept the AI on the device. The recap names local-first AI as the main trend of the day, and that's how I'd been building all month.

Paytm's engineers spent the afternoon walking around, looking at projects and watching people work, and some participants were invited to interviews. Thanks to the volunteers who ran it: Lokesh on photos and video, Vansh on checkpoint verification, and Prashant, Bipul and Nimai on everything else.

Keep this format, please

Online and offline worked because they did different jobs. The weekly online rounds made me ship something every week. The Hack Days put me in a room with people building the same kind of thing, with a deadline a few hours away. I loved both fests, and I hope MLH and Hacktoberfest keep this format next year: weekly themed rounds online, and local Hack Days you can walk into with a laptop.

Top comments (0)