stefangaller.at

trexpense.png

Trexpense

In short

  • Type: Flutter App
  • Time period: 2019 – present
  • Downloads (April 2025):
    • Android: ~ 10.000
    • iOS: ~ 18.800
  • Daily users: Around 700
  • Monetization: Subscriptions

Website App Store Play Store

The Problem

In early 2019, my girlfriend and I started a world trip. We had saved a budget and wanted to travel for several months. The question was, how could we best keep track of our expenses?

For us, it was clear that an app would be the most comfortable solution to record all costs. However, we weren’t convinced by any of the existing apps. Either they didn’t have a suitable budget function, or the categories didn’t align with our wishes. So I decided to develop an app according to our exact requirements.

The following features were important to us:

  • Offline capability: The app must also work when we don’t have internet.
  • Custom categories: We want to be able to categorize expenses.
  • Currency conversion: How much are the expenses in euros?
  • Who paid?: We want to know who paid for what.
  • Daily budget: We want to be able to set a daily budget for each country.

The Solution

With these requirements in mind, I also decided to use a new framework for implementation: Flutter. Before that, I had primarily developed for Android, but cross-platform frameworks had always intrigued me (and often disappointed me).

So during our journey, Trexpense (TRavel Expense) gradually grew. Although initially intended only for our own use, I decided to make the app available to other travelers through the stores.

More and more users took a liking to Trexpense, and so the first requests for additional features came in.

To finance the project, I also started working on a Pro version. This version included additional functions such as statistics and was initially available as a separate paid app.

The app grew steadily and constantly changed. In addition to the PRO version, an in-app purchase and later a subscription model were introduced for continuous revenue. From the original Flutter version 1.0, Trexpense has now reached version 3.29.

By 2025, version 9 of Trexpense has landed in the stores and includes a huge number of features for travelers:

  • Recording expenses by categories, travelers, and payment methods
  • Synchronization of trips between different users
  • Flexible travel budgets
  • Currency conversion
  • CSV and PDF export
  • Statistics and charts
  • Splitting costs between travelers, repaying debts
  • Saving up a budget before the trip
trexpense-overview.png
The app impresses with a clean and tidy design.

Technical Details

Trexpense uses Flutter as a cross-platform solution that allows apps for Android and iOS to be created based on the same code. This was the only way for a single developer to serve both mobile platforms simultaneously.

State Management

BLoC was used as the state management solution at the beginning of the project. Later, BLoC was replaced by Riverpod. After much research and analysis, the approach described in my blog post proved to be more practical for me.

In-App Purchases

At the latest when switching to in-app purchases, it became clear to me that harmonizing digital products between the different apps (Android and iOS) is a challenge, which is why I relied on RevenueCat for this. This handles the validation of purchases and allows me to unlock the right permissions regardless of the app platform.

Database and Cloud Storage

In the basic version of Trexpense, all data is stored locally on the device. The NoSQL database Sembast is used for this. This allows for easy adaptation of the data structure without migrations, albeit at the cost of increased validation effort.

Since the introduction of a cloud option, data is managed in a combination of Sembast and Firebase. This way, Trexpense retains its “offline-first” approach, but can additionally offer data storage in the cloud.

What I Learned

In such a long-lasting project, I was able to gain an incredible amount of experience. By independently carrying out the entire development process from conception to design and deployment, I have the opportunity to experience all aspects of software development.

I can now bring this accumulated knowledge to new projects. Here is a summary of the most important points:

trexpense-change.png
Trexpense has changed over time.

Long-term Maintenance and Further Development

Through the constant development of the app, I’ve learned a lot about data migrations, backward compatibility, and refactoring. This has taught me how to build apps that can also be successful in the long term. Easy extensibility and stability are important factors for this.

I have successfully mastered the following problems, among others:

  • Migration between major version jumps in Flutter
  • Replacement of no longer maintained dependencies and
  • Use of new operating system functions (e.g., widgets)
  • Replacement of the state management solution (from BLoC to Riverpod)

In-App Products and Subscriptions

Over the course of the last few years, Trexpense has also gone through the evolution of app monetization. While in 2019 it was still common to have two versions of the app (one free, one paid), the trend shifted to paid upgrades as in-app purchases.

Trexpense also underwent the transformation to a subscription model in 2024. The new cloud functions in the app can be unlocked as a subscription.

For the management of products and for processing purchases, I have experimented with various possibilities. In the end, I decided to use RevenueCat.

Deployment and Stores

A major gain in knowledge for me was also the automation of the deployment process. While at the beginning of the project I was still uploading the new versions to the stores manually, I soon realized that automation is the more efficient variant.

With the help of Fastlane, the latest versions are now automatically provided in the App Store and Play Store.

Customer Service

Where there are many users, inquiries also accumulate. Since the app rating plays an important role in the visibility of the app, quick and satisfactory handling of criticism and suggestions is essential.

To manage customer contact in the best possible way, I created a dedicated website for Trexpense. This includes an overview of the app’s functions, answers to frequently asked questions, as well as an easy way to make contact.

The 3 Most Important Insights for Future Projects

1. A Good Software Structure is Essential

Only if an app is well structured can it be easily extended with functions years later.

2. Continuous Improvements Instead of a Big Update

Better to get quick feedback on small features than to develop features for half a year that nobody uses.

3. Even a Single Developer Can Successfully Implement Projects

Thanks to cross-platform development, I can successfully implement an app for Android and iOS on my own. Fast, consistent, and cost-effective.

Let's get started!

Contact me for a free initial consultation.

Contact me