on software

Spense.app v0.2

Spense.app is under active development and is not available for public use.
This article is a translation and adaptation of my article in Russian.

Hey everyone! I've finished working on the next version of Spense with a bunch of improvements and as per tradition I'm sharing the most interesting parts.

Accounts and Wallets Page

In the app interface, you can now manage your wallets and view the current balance:

Everything about adding and editing wallets is quite trivial: you can edit the name of the wallet, its comment, currency and base balance. However, during development, I realized I have quite a few accounts that I used to use, which are now closed and I'm not interested in anymore. So, I decided to add a "Close Wallet" button, which moves the wallet to a hidden block, so it doesn't clutter the view.

Wallet Balance

Another feature worth mentioning, which has been around for a while and which I've improved a bit this time around, is the balance calculation. It's funny that almost all modern apps I've tested calculate it incorrectly.

For example:

  • I create a wallet and state that currently it has 100$;
  • I record that yesterday I spent 20$ at the store, because I still remember it and want to record something;
  • the app shows that now I have 80$ in my wallet.

I don't know what the developers are thinking, but this definitely doesn't work for me. What I call the Base balance is a date-bound constant, and from it I can dynamically calculate the current balance at any given time by summing transactions before or after the base balance date.

In the situation described above: if after creating the wallet and entering the base balance information I didn't spend or receive anything else, the balance would still be 100$. But if I want to know what the balance was the day before yesterday, the app will add the spent 20$ and say that the day before yesterday it was 120$. While Spense doesn't actually have an interface yet where you can see the day before yesterday's balance, it's all set up under the hood for that.


Finally, I can record my paycheck! The most challenging part here was coming up with an acceptable interface solution, and I settled on a toggle next to the amount input field.

By default, the toggle is in the ➖ mode, i.e. recording expenses. If you click on it, it turns into ➕, and the list of popular tags corresponding to incoming transactions is updated.

Such a transaction is marked in the list with a green plus ("+ 123.00€"). It make sense to add a minus sign to other transactions, but I decided it was redundant because in my case (and I suppose, for most people) 99% of transactions are expenses, and I don't need additional visual explanation. But highlighting a salary can be nice.

Transfers Between Own Accounts and Wallets

Your salary came in - you put some of it in cash and some of it in a separate savings account. You ran out of money in your wallet - you took some from the stash. Decided to travel somewhere - bought local currency.

It's also nice to keep track of all this, and until now, there was no such function, but now there is. It's handled by the same button, which now has a mode for transferring between wallets:

Yes, I haven't come up with anything better than 🔄 yet.

The most important thing here is that you can specify different amounts for the input and output. Very useful in cases where the currencies are different and/or some commission is lost along the way. The main downside of the current implementation is that both amounts must always be specified, even if they are the same. But I'll fix that later :-)

Also, there are no tags in this interface because usually, a transfer between your own accounts is essentially a separate category of transactions. If you need to explain this transfer in some way, you can add a comment.

Transaction Debit Currency

There are situations when the account is in one currency, but the transaction is made in another. For example, a subscription to ChatGPT costs $24.20 ($20 + taxes), but since my account is in euros, some conversion happens along the way, and in fact, €22.41 is debited, and I would like to keep information about both amounts.

So, I added a caption "Original currency is different" which hides the field for entering the original payment amount:

This data has no effect on the calculations yet, it is just displayed in the transaction history.

Editing and Deleting Transactions

Regarding transaction editing, there are two small but nice improvements:

  • now you can edit old transactions from the "Transactions" page;
  • a large "Delete" button has appeared in the editing form, before which the user is additionally asked whether they really want to delete it.

Transaction Change History

Last time, I made it so that neither wallets nor transactions are truly deleted, to avoid accidentally losing important data. This time I went further and decided to add tracking of changes to transactions. Let's say I ordered a taxi, immediately after that I was charged for the trip and I wrote it down; the ride ended up taking longer than usual, the amount turned out to be higher, and I changed it in the app. Also, sometimes I just make a mistake with the amount and correct it a few days later. And I decided it would be good to at least store the entire change history and have access to it. The main interface doesn't have this feature yet, but in the admin area you can view the history of any transaction.

Transaction change history, view from the admin panel.

Eventually, this will also move into the app itself, so users can recover accidentally deleted transactions or roll them back to the state before the last edit.

Plans for the Next Version

At this point, Spense fully satisfies me as a daily tool for tracking expenses, and I'm ready to start processing the accumulated data and building forecasts. In the next version, I plan to add a separate page with reports, at least one, which will show a forecast for the next 3-6 months based on the data from the last month, half a year, or year. Most likely, this report will not be adapted for mobile, but that's not needed for now.

There's also an idea for a report on transactions for a selected period, but grouping by tags (expense categories) is tricky. For example, the tags "cafe", "lunch", and "grocery" can be combined into one category "Food" to find out how much money was "eaten" last month. On the other hand, you can combine "cafe" and "lunch" into the category "Restaurant food", and "grocery" - into "Home-cooked food", and compare how much more expensive one is than the other. Overall, there is a lot of experimentation to be done here.

And I would like to add up the balances of all accounts to display the total amount. To do this, I'll need to connect to sources of up-to-date data on currency exchange rates and learn how to bring all amounts to one currency. So there is a lot of work to be done there as well.

I'm not sure if all these plans can be implemented in version 0.3, but something will definitely be done.

Stay tuned!