This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
Why I Built
Living in India, we heavily utilise UPI for payments. The introduction of UPI, and 10-minute delivery apps have made spending money so easy and comfortable that it has made spendings get a little out of hand. We don't realise how much money we're spending on a day-to-day basis. I noticed my dear friend/colleague Anmol also struggling to keep track of where his money went.
I personally have been using an Excel tracker for last few years. But I knew Anmol. He wouldn't find it appealing to manually categorize his expenses and create a budget. He's a guy who loves automations. He's the one who introduced me to the iOS Shortcuts app in the past. That got my gears turning. I knew I could use it to trigger an automation whenever a message arrives from a particular sender. I knew Anmol would want something that works seamlessly and requires minimal effort on his part.
What I Built
I built a privacy focused finance tracker (pfft...). How it stands out from the rest?
- No manual entries required. It automatically reads bank transactions through your text messages.
- Built with privacy in mind. The app never requests access to read all your messages. Just the ones you allow. Using "Automations" in the iOS Shortcuts app. The app only processes the messages you permit, ensuring your financial data remains private.
- Uses AI to auto categorise transactions.
Demo
Click here to watch the video demo
Code
pfft
Privacy Focused Finance Tracker. A personal finance tracker for India. An iPhone app reads bank SMS (ICICI, Axis), files each transaction into a category and asks you only when it isn't sure. The model that does the filing is open-weight and runs on a Mac at home, so no AI company sees your spending.
How it works
iPhone (Shortcuts automation on a bank SMS)
-> iOS app "Log Transaction" intent
-> POST /api/v1/ingest (Next.js API on Vercel)
-> parse the SMS, store it in Supabase
-> rules and your own filing history first
-> otherwise ask the model (Tailscale Funnel -> llama.cpp llama-server, Qwen3-4B-Instruct, on a Mac's GPU)
-> notification: what it was filed as, or "what was this for?"
Most transactions never reach the model. A description you've used before, a merchant rule, a payment that recurs every month or a…
How I Built It
Building this project required several moving parts.
- parser: I created message parsers that extract key information such as transaction amount, merchant name, and date from incoming SMS messages.
- tagger: The categorisation is done by Qwen3-4B-Instruct, an open-weight model, served by llama.cpp's llama-server running on my own computer.
- A beautiful iOS App: Let's be honest, liquid glass feels absolutely amazing to use.
Why Does Open Innovation Matter?
Privacy. SMS Transactions are sensitive and valuable data. By keeping the processing local and using open-weight models, users retain control over their financial information without relying on third-party servers.
My project idea is not unique. There are many products that do this. For example CRED Money. But they are highly invasive. They access your entire banking history, credit records, sometimes even full access to your email account to parse account statements.
What I Learned
- New tech. This is my first time using an open-weight model. I learned how to set up a local model on my machine.
- Cloud vs Local. Running models on the cloud is kinda slow and made me appreciate the speed and efficiency of my local Apple M2 Chip.
- Tunneling. First time tunneled my Mac to the cloud. Learned how to securely expose local services using Tailscale Funnel.
- Size matters. I tried a 1.7B model to go faster. It read the prompt 2.5 times faster, then ignored the length limit and wrote a massive piece of junk; 75% of the answers were unusable. The 4B model was the smallest one that behaved.
- Hosting. I tried hosting on Render, but the latency was too high for my use case, so I reverted to running the model locally.
Anmol's Concern
Anmol, just like myself...is also a developer. The first question he asked me was, you're logging my transactions in your database? Privacy my foot!
I assured him that on-device storage is on its way. I used a cloud database for the initial implementation but even my eventual goal is to keep all the data on-device to maximise privacy. At least for now I've swapped out my Supabase credentials for his. So he can sleep peacefully knowing I don't have eyes on his bank balance 👀
Thanks to Anmol
Fun fact: Me being a web developer, this project was originally going to be a web app. But Anmol loves the Apple ecosystem. I knew he'd appreciate a clean liquid glass style apple design. He is always showing me examples of various apps in his phone "Look their UI is so clean, so beautiful", he says. So I knew this would be a big factor for him.
I have never built a native iOS app in my lifetime. So thank you Anmol for pushing my boundaries as well with this project.
Thank you for having the kind of taste that made me rebuild a webhook into a full-fledged iOS app.
Top comments (0)