Skip to content
yalt8826.com
← projects/
projects/tyche/finishedin daily useandroid

Tyche

An Android expense tracker that reads bank SMS, never touches the internet, and makes sorting a month of spending take a few drags.

Built solo · Sept 2026

01 / overview

Built for two people. Both use it every day.

My sister and I wanted to know where our money was going without typing in every payment or handing our bank messages to someone's server. Tyche reads the transaction SMS our banks already send, turns them into expenses, and keeps everything on the phone.

It's named after Tyche, the Greek goddess of fortune.

0internet permission: nothing can leave the phone
83real transactions found in the first 21 days of messages
102promos and OTPs correctly ignored
2people using it daily
02 / screens

A month of spending, at a glance.

These are my real numbers. Other people's names and UPI IDs are pixelated.

01Home: this month, items to confirm
02Transactions, coloured by tag
03Income vs spending and the trend
04Where the money goes, with insights
05Budgets and daily burn
03 / sms to transaction

From a bank message to a tagged expense.

Every incoming SMS goes through a short funnel. Messages from senders that aren't on the bank allowlist are dropped before anything is written to disk.

receiveSMS_RECEIVED
live capturedebug-only back-fill of older messages
filterbefore any disk write
bank sender allowlistdrop promos and OTPs
extractKotak · Bank of Baroda
amountaccount maskUTRbalancemerchant / UPI IDdate
storeRoom (SQLite)
review inboxtagsbudgets
04 / drag to tag

The one interaction I cared most about.

Confirming transactions one at a time is the reason most expense apps get abandoned. In Tyche's review inbox, you long-press a payee card and it lifts into a circle with the payee's initial and amount, while your tags orbit around it. Drop it on a tag and every transaction from that payee is tagged at once.

feelReal haptics

A 20 ms buzz on lift, 18 ms as you pass over a tag, 45 ms on drop. Tested on the phone and tuned until it felt right.

forgivingHard to miss

Tags catch the card from 2.2× their visible size, a miss springs back, and every drop can be undone.

rebuiltVersion two, from device feedback

The first version moved a square card. On a real phone the card hid under the tags, so it became a circle in an overlay above everything.

05 / no internet, at all

A privacy promise the build itself keeps.

Lots of finance apps say your data stays on your phone. Tyche's Android manifest doesn't request the internet permission, so the operating system won't let it open a network connection at all. The privacy screen explains exactly what is read and why, and it can't claim anything the build doesn't guarantee.

Built with Kotlin, Jetpack Compose and Room. Line and bar charts use Vico; the donut, budget gauges and income-vs-spending chart are drawn by hand on a Compose canvas, because those interactions are the product.

06 / first real run

Pointed at 21 days of real messages.

Using a debug-only back-fill tool, I ran Tyche over the last 21 days of my own messages. It stored 91 bank messages, ignored 102 promotions and one-time passwords, and turned the rest into 83 transactions waiting in the review inbox. Since then it has picked up every new payment as the SMS arrives.

07 / download

Try it on your phone.

Tyche isn't on the Play Store. If you'd like to try it, you can install the same build my sister and I use.

~/downloads

$ file tyche-1.0.0-alpha1.apk

version
1.0.0-alpha1 (debug build)
size
67 MB
needs
Android 10+
sha256
00286b90b81876dc43667991d7215b74830714a07799bd23a78235adf7e2e480

$ cat CAUTION

This is an unofficial alpha debug build of a personal project, installed outside the Play Store. It's provided as is, with no warranty of any kind. By installing it you accept that you use it entirely at your own risk, and that I'm not responsible for any loss of data, money, or damage to your device that may result.

Tyche asks to read your SMS so it can find bank messages. It has no internet permission, so nothing it reads can leave your phone. You'll need to allow installs from unknown sources.