Skip to content

About

An expense tracking app that uses voice to label purchases. Useful for doing expense tracking during dead time (like driving and doing chores).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Voice Expense Tracker

Track and categorize your expenses by talking, in your own casual words, while your hands are busy (driving, cooking, cleaning) or whenever you feel like it. The app logs your transactions, gives you a voice page where you tell a model what your latest purchases were, and a statistics page where you see your spending over a period of time.

It works in Arabic and English. The interface switches language, applies appropriate layout, and the voice session speaks and understands both languages.

Problems the Project Attempts to Solve

  1. Manual expense trackers need your hands. You have to open the app, tap and type, so they are unusable exactly when your mind is free but your hands are not. The solution: you speak how you want your latest transactions categorized, so the app becomes usable while driving, cooking, or during any activity that keeps your hands busy without occupying your mind.
  2. One transaction is not always one category. Automatic categorizers rely on the merchant name to label a whole purchase. Supermarket purchase? --> Label it "groceries". But that single purchase can be 60% food and 40% electronics. The solution: you speak splits, so one transaction is divided into multiple categories, each split holding a portion of the amount. Of course you can have a single split transaction.

Functionality

The app doesn't use a banking API: some banks don't offer one, and the aggregators that partner with banks require a registered business to give you access.

So it relies on the SMS messages your bank already sends you. On iOS you set up an automation in the Shortcuts app, whenever a message arrives from the bank's sender, it is forwarded to the server. The server matches the message against templates (regexes) of the known transaction formats. Only Al-Rajhi bank's formats are supported so far.

Note

Everything from the sender is forwarded, including OTPs, but anything that doesn't match a transaction template is never saved in the database.

Logged transactions stay in a pending state. The user starts a voice session, the pending transactions are read out to them, and they say how each one should be categorized.

Stack

Backend

  • .NET 10 Web API
  • EF Core with Postgres database
  • Google GenAi API for transaction categorizer model.

Frontend

  • React Native 0.86 with Expo SDK 57. Running the project on Expo Go app for iOS.
  • expo-router for file-based routing
  • React Native Paper (Material 3)
  • i18next for Arabic and English, with RTL layout
  • expo-audio for recording and playback
  • axios for API calls.

AI

  • Gemini 3.5 Flash-Lite for splitting transactions.
  • Gemini 3.1 Flash TTS

Issues

  • Categories have only one name column. As a result of that, if user categorizes using English and Arabic they could end up with the same category twice, one in each language like (Coffee and قهوة). Also, the category name is the same no matter what the app current locale is, so users could end up with an Arabic category name displayed while their app uses English locale.

About

An expense tracking app that uses voice to label purchases. Useful for doing expense tracking during dead time (like driving and doing chores).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages