DEV Community

Cover image for Your Client’s GST Bills Never Leave the Laptop: BillBook
Hiya Lukka
Hiya Lukka

Posted on AI-assisted

Your Client’s GST Bills Never Leave the Laptop: BillBook

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built
BillBook turns GST bill photos into verified, import-ready rows for Tally or Excel. It runs entirely in your browser, so client data never leaves the laptop.

Picture a small accounting practice in the last week of the month. A pile of supplier bills, some photographed at an angle, some in Hindi or Gujarati, all waiting to be typed into Tally by hand. It’s slow, error-prone work, and it’s billed by the hour.

The obvious fix is to upload every bill to a cloud AI. For an accountant that’s a non-starter. Those bills carry a client’s vendors, GSTINs and margins. And a per-bill API cost eats the thin margin on exactly the small clients who need the help most.

BillBook takes the other route:

Drop a bill (photo or PDF) and a Gemma model of your choice reads it on your own device. Pick a smaller one for older laptops or a larger one for harder bills.
Get a structured row: vendor, GSTIN, invoice number, date, taxable value, CGST, SGST, IGST and total.
See a status on every row. Only rows marked OK are safe to import without a look.
Edit any cell and the checks re-run instantly.
Export to CSV for Tally or Excel.
Works for English, English + Hindi, and English + Gujarati bills.

Who would pay:

GST practitioners, bookkeepers and small CA offices handling bills for several small-business clients. They bill for data entry today. BillBook cuts the time per bill and costs ₹0 per bill to run.

The side hustle:

A freelancer or student bookkeeper can offer “bill digitisation” to local businesses at a flat monthly fee. There’s no API bill and no server to maintain, so the margin is the whole fee.

Demo

🔗 Live app: https://hiyalukka.github.io/Bill-Book/

Needs a WebGPU browser (Chrome or Edge). The first model load takes a few minutes, then it’s cached locally.

Code

🧾 BillBook: bills in, books out

Turn a photo or PDF of an Indian GST bill into a clean, verified row ready for Excel or Tally. An open-weight AI model reads the bill inside your browser, so the bill itself is never uploaded anywhere.

Live demo → ·

Built for the DEV × Hacktoberfest Week 3 challenge, Side Hustle: open-source AI that someone would actually pay for.


The problem

A small accountant or shopkeeper receives bills as WhatsApp photos, crumpled paper, and inconsistent PDFs. Someone then retypes vendor, GSTIN, date, taxable amount, CGST/SGST/IGST, and total into a sheet by hand. It is slow, boring, and one wrong digit can cause a GST mismatch.

Sending client financial documents to a cloud AI is often not an option, and per-bill API fees eat into a small tool's margin.

What BillBook does

  1. Cleans the image (grayscale, contrast, sensible resizing).
  2. Reads the text…

How I Built It

BillBook is a static site hosted on GitHub Pages, with no backend. All inference happens in the user’s browser.

Open-weight stack

Models: a picker offering different gemma and qwen models, running on-device via WebGPU.
Text from the bill: OCR engine, or "Gemma reads the image directly", with English, Hindi and Gujarati options
Frontend: html, hosted on GitHub Pages

Why a model picker instead of one fixed model?:

Users have very different hardware. A small Gemma loads fast on a modest laptop but misses more fields. A larger one is more accurate but needs more memory and a longer first download. Rather than guess for everyone, BillBook lets the user choose.

Gemma is a small model running in a browser tab, and small models make mistakes. In accounting, a confidently wrong ₹11,800 is worse than no answer. So extraction is only half the pipeline. Every row passes three independent checks before it earns an OK:

GSTIN checksum. A GSTIN carries a check character, so a hallucinated or misread number fails validation.
Tax arithmetic. Taxable value plus CGST, SGST and IGST must reconcile to the total.
Grounding. Every number Gemma outputs must appear in the scanned text. If the model invents a figure that isn’t on the bill, it’s caught.

The checks are plain deterministic code, so Gemma can be wrong without the user being misled. Failed rows are flagged for review instead of silently imported. Editing a cell re-runs all three checks, so the human fix and the machine verification live in one loop. It also makes the model picker safe: switching to a smaller model is fine because its mistakes get flagged.

Limits I’m upfront about. PDFs process page 1 only. Handwritten or badly skewed bills fail more often, which is what the status column is for. [Add anything else you found.]

Why Does Open Innovation Matter?

Four things BillBook does only because Gemma’s weights are open:

Privacy by architecture, not by policy:
A closed API means sending financial documents to someone else’s servers and trusting their terms. With Gemma running in the browser, the data physically can’t leave the device. For accountants, that turns “can I use AI on client data?” into a yes.
₹0 per bill is a real business model. Per-token pricing punishes high-volume, low-margin work like bill entry. Local inference makes the marginal cost zero, which is what lets a student or freelancer run this as a side hustle.
Open weights let me design around the model’s weaknesses. Because Gemma runs on the user’s own machine, I could watch how it fails on real bills and build the verification layer around those failures. With a hosted API I’d be hoping the vendor’s next update doesn’t change its behaviour on my bills.
Users choose the trade-off, not a vendor. With a closed API you get whichever model the provider serves, at whatever price they set. With open Gemma weights, BillBook offers a size choice and each user picks speed versus accuracy for their own hardware.

My First User

A small grocery shop owner in my neighbourhood. His shop handles supplier bills every week, and he keeps the records by hand.

I showed him BillBook on my laptop and walked him through a sample bill. His reaction was about three problems he already lives with:

Time: Writing up bills by hand takes a long stretch of his day, and the work is tedious and complicated.

Fragile records: Paper records aren’t permanent. A bill can be lost, damaged or misplaced, and then the record is gone.

Where the data goes: He liked that the bills are read on the device and don’t go to anyone else’s server. For a shop owner, supplier prices and purchase volumes are business information he wants to keep private.

What struck me is that he didn’t ask about the AI. He cared about the three things above.

Honest status: he hasn’t paid for it, and this was a first demo, not a long-term trial.

Prize Categories

Build with gemma category

Top comments (0)