This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
Tallyroll turns a pile of paper bills into one clean spreadsheet. You drop in photos of a restaurant's supplier bills and receipts, and it reads each one, sorts it into a kitchen category (vegetables, meat, dairy, gas, rent and so on), and flags anything it is unsure about.
Restaurant owners spend hours at month end sorting a shoebox of bills for the accountant. Cloud tools mean uploading who they buy from and what they pay. With Tallyroll, the owner drops in the photos and gets a spreadsheet with date, vendor, category, total and tax, ready for the accountant.
Who would pay: small restaurants and cafes, [your pricing idea, e.g. a one-time setup fee].
Demo
Code
Tallyroll
A private bill sorter for small restaurants. Drop in photos of supplier bills and receipts. Gemma, an open-weight model running on your own computer through Ollama, reads each one, sorts it into a kitchen category, flags anything doubtful, and exports one spreadsheet for your accountant.
No cloud. No per-bill fee. No account. Works offline.
Run it (Windows)
Full beginner guide: WINDOWS-GUIDE.txt. The short version:
- Install Python (tick "Add python.exe to PATH") and Ollama.
- Double-click
setup-model.bat(downloads Gemma once). - Double-click
start.bat.
macOS / Linux: ollama pull gemma3:4b && python3 server.py
No packages to install. The server uses only the Python standard library; Pillow is used if present (straightens and shrinks phone photos).
How it works
browser (static/) --raw image--> server.py --/api/chat + JSON schema--> Ollama (Gemma, local)
|
+--> normalise: numbers, dates, currency, category, sanity checks
+--> data/receipts.json + data/images/ (your computer only)
- Structured output.…
How I Built It
-
Model: Gemma (open-weight, vision-capable), running locally through Ollama. It reads the bill photo directly, so there is no separate OCR step. I used
[gemma3:4b or gemma4:e4b]. - Backend: a small Python server with no packages to install. It sends the photo and a strict prompt to Gemma with a JSON schema, so the answer comes back in a fixed shape (vendor, date, total, tax, category, line items, confidence).
- Clean-up layer: it fixes number and date formats and marks a bill "Check" when the date or total is missing, the items don't add up, the photo is blurry, or it looks like a duplicate. Unit tests for this run in GitHub Actions.
- Frontend: one web page with a receipt-printer animation, a ledger with a side panel to correct any bill next to its photo, a category breakdown, and CSV export for Excel.
- Demo mode: a built-in mode replays 8 made-up sample bills without a model, and tags them "demo".
I built this with AI assistance (Claude) and tested it on real bills on my own laptop.
Why Does Open Innovation Matter?
- Privacy: a restaurant's bills show who they buy from and what they pay. They never leave the owner's computer.
- Cost: there's no per-bill fee, so a small business pays only for electricity.
- Offline: it works with no internet, and my demo is recorded with Wi-Fi off.
- No lock-in: the model is one setting, so the owner can switch to a better Gemma later by changing one line.
- Room to grow: because the weights are open, the model could later be fine-tuned on local suppliers' bills. I haven't done that yet.
My First User
I sat with Meena, who runs a 12-table family restaurant, and ran 14 of last month's real supplier bills through Tallyroll on my laptop while she watched.
- Result: 11 bills were read correctly. 2 were flagged "Check" (one with a smudged date, one that looked like a duplicate). 1 had a wrong total that was not flagged. It took about 40 seconds per bill.
- What she said: "I usually lose a whole Sunday on this. If I only have to fix three bills instead of typing fourteen, that's worth something."
- What went wrong: the wrong total was on a crumpled butcher bill, where Gemma read an 8 as a 3. She spotted it only because the photo was right beside the numbers.
- What she asked for next: a Hindi version of the screen, and a way to send the month's sheet straight to her accountant.
- Would she pay? "Maybe, if it never mixes up numbers." She said ₹500 a month felt fair, but she'd want to try it for a month first.
Prize Categories
- Best Use of Gemma

Top comments (0)