Case study · our own product
Mony: a paid family finance app in four languages, built and run by the Candora team.
Mony is a money-tracking app for individuals and households. It is not a client project: Mony is our own product, so we can open up its decisions and numbers here.
Context
We wanted a money-tracking app you can use every day in a few taps, for one person or a whole household, with no ads, no selling of data and no request for bank passwords.
Mony comes with a 14-day trial with no card needed, then a subscription of Rp25,000 a month or Rp199,000 a year. After the trial, an account without a subscription can still be opened and its data is not deleted; only new entries stop.


Challenges
- Four languages, one of them right-to-left
- Indonesian, English, Chinese and Arabic in one app, without a separate version for each language.
- Money data must not break when the app is updated
- Each new version can change the structure of a database that already holds users’ records.
- Light on ordinary phones
- Users open Mony on phones and laptops, often on networks that are not always fast.
- Ready for mobile apps
- Android and iOS apps may follow, and the server must not need rewriting when that happens.
Technical decisions
- PWA first
- One web app that can be installed on a phone’s home screen, with a manifest per language. Users do not have to wait for an app store.
- A Go server and an SQLite database
- One program and one database file: easy to run, back up and move.
- Migrations with a backup first
- Before the database structure changes, a backup copy is made. Each step runs in a transaction and is rolled back if it fails, and an older version of the program refuses to open a newer database.
- Language as part of the design
- Text comes from a translation file per language, and the layout direction switches to right-to-left for Arabic.
- An API ready for mobile apps
- Besides web sessions, the server already has tokens for mobile apps and an OpenAPI document that tests keep in line with the code.
- No third-party scripts on public pages
- Mony’s public pages load no outside scripts and set no cookies.
Measured results
- 4 languages
- Indonesian, English, Chinese and Arabic, with right-to-left layout.
- 480 automated tests
- 145 server tests (Go) and 335 interface test cases, counted on 15 October 2026, including data migration tests.
- ± 260 KB
- Size of the mony.candora.id home page on a first visit: HTML, styles, scripts, fonts and images, compressed.
- 0 third-party scripts
- On Mony’s public pages, and its pages set no cookies.
- 14 days
- The no-card trial before a subscription of Rp25,000 a month or Rp199,000 a year.
The numbers above are counted from Mony’s code and from the site build, not estimated. We do not show user numbers.
What we learned
- Plan for right-to-left from day one
- Using logical directions (start and end, not left and right) from the start is far cheaper than flipping the layout later.
- Names in the code affect cost
- Mony’s early schema used Indonesian names. Switching them to English took a full migration and its tests. Now we settle naming conventions before the first line.
- Claims must be checkable
- Every number on this page is counted from the code or the build. What cannot be proven, we do not write.
- If something does not exist yet, we say so
- Mony does not have an app on the Play Store or App Store yet. We state that plainly, here and on the Mony site.