This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
Pocket Bookkeeper sorts bank and UPI statement lines into freelancer-style categories: software, internet and phone, travel, food, office, ads, bank and taxes, personal, and income. You paste a month of transactions, and it gives you category totals, a "business-looking spend" figure and a CSV download.
The people who would pay for it are freelancers and tiny shops who spend an evening labelling statement lines before tax time or before sending numbers to an accountant. It could work as a small paid tool, or as a per-month cleanup service where I run it for someone and hand back the sorted sheet.
The key point is that a bank statement is about the most private data a freelancer has. Pocket Bookkeeper never uploads it anywhere.
Demo
https://jhashashwat25-creator.github.io/pocket-bookkeeper/
Tap "Try sample data", then "Sort my expenses". The first run downloads a model of about 23 MB, and your browser caches it after that. It runs on a phone.
Code
Pocket Bookkeeper
Paste bank or UPI statement lines and get them sorted into freelancer-style categories (software, internet, travel, food, office, ads, bank and taxes, personal, income), with totals and a CSV download. A small open-source AI model does the sorting on your own device, so your statement never leaves your phone or laptop.
Built for the Hacktoberfest Open-Source AI Challenge: Week 2 (Side Hustle) on DEV.
Live demo: https://YOUR-USERNAME.github.io/pocket-bookkeeper/
Who it's for
Freelancers and tiny shops who dump a month of statement lines into a spreadsheet and spend an evening labelling them before tax time or before sending numbers to an accountant. It could be sold as a small paid tool or as a per-month cleanup service.
The open-source AI at its core
- Model: all-MiniLM-L6-v2 (ONNX build by Xenova), Apache-2.0, about 23 MB quantized.
- Runtime: Transformers.js (Apache-2.0), running on WebAssembly in the browser.
- How it works: every transaction description…
The whole app is three files: index.html, README.md and an MIT LICENSE.
How I Built It
- Model: all-MiniLM-L6-v2 (Apache-2.0), a small embedding model, about 23 MB quantized.
- Runtime: Transformers.js, running on WebAssembly in the browser. There is no backend and no API key.
- How it sorts: each category has a few example phrases, such as "uber trip" or "github subscription". The model turns every transaction and every example into a vector, and each transaction goes to the category with the closest example. If nothing is close enough, the row is marked "Unsure" and outlined in red so the user can fix it with a dropdown.
- Parsing: a small amount of plain JavaScript pulls the date, amount and description out of messy lines, including UPI reference numbers.
- Output: category totals, a summary, and a CSV download.
I picked an embedding model instead of a chat model on purpose. It's tiny, fast, works on a phone, and can't invent text, which suits a job where being wrong about money matters. My first project this month used a larger chat model that crashed phone browsers, and this is the lesson I took from that.
I used Claude to help write the code and README, then tested it myself.
Why Does Open Innovation Matter?
- Privacy you can check: because the model runs in the browser, there is no server for statement data to reach. Anyone can read the source and confirm it.
- Zero running cost: there is no per-statement API bill, so the tool could be priced or given away without worrying about usage costs.
-
Customizable without training: the categories and example phrases are plain text in
index.html. Add phrases that look like your own statements, such as your shops, apps and clients, and the sorting improves immediately. A closed API wouldn't let me tune it this way. - No lock-in: a closed API would mean a backend, a key to protect and a bill, and it would break whenever the provider changed pricing or terms. With open weights, the model ships with the page and keeps working.
Limits
It's a sorting aid, not tax advice. Odd statement formats may need a quick manual fix, and merchants it hasn't seen may land in "Unsure".
Top comments (0)