UğurcanEser
WorkBudgetory

Budgetory

A multi-currency personal finance app for iPhone and Android

Overview

Budgetory is my own personal finance app for iPhone and Android. You record income and expenses in any of 15 currencies, and the app shows your balance, trends and spending by category in the currency you choose. I designed the architecture and built both the mobile app and its backend on my own.

It is live on the App Store for iPhone. New versions for both iOS and Android are currently in review.

What it does

  • Tracks income and expenses, budgets, savings goals, accounts and transfers between them
  • Recurring transactions and subscriptions, which the server adds in the user’s own time zone
  • Credit cards with installment purchases, debts, and holdings such as gold, silver and foreign currency
  • A safe-to-spend forecast, also available as a home-screen widget on iOS and Android
  • Receipt scanning with the system document scanner, up to five photos per transaction
  • Splitting one payment across several categories
  • A monthly recap, reminder notifications and CSV export
  • Face ID lock and an option to hide amounts on screen
  • Daily exchange rates from the European Central Bank, cached on the device
  • Charts and category breakdowns
  • Six languages: English, Turkish, German, French, Spanish and Russian
  • Accessibility support for VoiceOver, TalkBack, large text and Reduce Motion

How it works

  • Offline first. Lists sync with the server, and the app stays usable without a connection. IDs are generated on the client, and writes use PUT with idempotency keys, so a retried request never creates a duplicate.
  • Widget without network calls. The app writes a JSON snapshot into a shared App Group through a custom native module and precomputes the days up to the end of next month, so the widget never has to call the server. The medium widget has shortcuts to add an expense or income.
  • Native modules. Custom Swift and Kotlin modules power the home-screen widget, app-icon quick actions, the document scanner and the recents preview.
  • Over-the-air updates. JavaScript updates ship through EAS Update, with fingerprint-based runtime versions so an update only reaches builds with a compatible native layer.

Stack

  • App: Expo SDK 53, React Native 0.79 on the New Architecture, React 19, TypeScript, NativeWind, React Navigation, Reanimated, react-native-svg charts, i18next, Firebase Authentication
  • Backend: Python 3.12, FastAPI, SQLAlchemy, PostgreSQL with Alembic migrations, Firebase ID-token authentication

Quality

  • About 147 Jest and React Native Testing Library test files in the app
  • 17 pytest test files in the backend
  • GitHub Actions CI in both repositories

What’s next?

All work