- Role
- Sole developer: product, Android development and AI integration.
- Platform
- Android
- Timeline
- 2026
- Status
- Live on Google Play



Overview
A voice expense tracker for Android: say an expense, or let payment alerts from the banking apps you choose come in, and each becomes a categorised transaction.
Problem
Expense tracking fails at data entry: typing every purchase into a form, and bank alerts that get swiped away and never logged. Onetap turns speech and payment notifications into structured transactions, so logging mostly happens by itself.
What I built
- Voice capture: say what you spent and the description, amount and category come back filled in
- Bank automation: payment alerts from apps you choose become transactions
- Uncertain results are held for review, never guessed
- Category budgets with mid-month alerts
- Separate lists, each with its own currency
- Ledger encrypted on the device with a Keystore-held key
- CSV and PDF export, Google Drive backup and restore
Engineering
01
Read only what the user chose
The notification listener drops anything not from an app the user added before its text is read. Card and account numbers are masked on the phone, and one-time codes are never stored or sent.
02
Never lose a payment
Each alert is written to an encrypted inbox before any network call, retried with WorkManager when the phone is offline, and fingerprinted so it is never recorded twice.
03
No API key in the APK
Speech and text go through Supabase Edge Functions that hold the model key, rebuild every request, and cap usage per day.
Architecture & technology
- Kotlin
- Speech-to-text
- LLM parsing
- Notification listener
- WorkManager
- Supabase Edge Functions
- Android Keystore
- Google Drive API




