iPhone
Liquid GlassA real UITabBar: genuine Liquid Glass on iOS 26, not a Flutter drawing of it. The system owns the chrome; we just fill the screen.
- Dynamic Island Live Activities
- Home-screen quick actions
- Siri & App Intents
- Spotlight
The app forks by operating system into purpose-built navigation shells. An iPhone gets a real UITabBar. An iPad gets a floating glass sidebar. An Android tablet gets a Material rail. The wrist gets its own Swift app. Nobody gets a phone layout blown up to fill a bigger screen.
One ledger. Four shells. The screen decides which one you get: a landscape phone gets the large-screen UI, not a tall layout on its side.
LayoutProfileResolved from OS + size class at launch, and re-resolved on rotation.
A real UITabBar: genuine Liquid Glass on iOS 26, not a Flutter drawing of it. The system owns the chrome; we just fill the screen.
A floating Liquid Glass sidebar inset over the content, under a glass top bar. Settings open as a proper two-pane master/detail, never a phone screen stretched wide.
A Material bottom nav with the pill indicator, and the Material 3 puck for pull-to-refresh. It behaves the way an Android app is supposed to behave.
A Material 3 Expressive navigation rail and an extended FAB, on deliberately opaque surfaces. Glass is an iPad material. Putting it here would be a costume.
Flutter does not run on watchOS, so the wrist is pure Swift. A real, hand-built SwiftUI app, not a port and not a mirror of the phone.
Small, medium and large. Your Safe-to-Spend, today’s burn and the month’s shape, on the home screen, before you open anything.
Not shipped yet. When it lands it will be a Mac app, a real one, with the same rule: no stretched layouts.
Every ISO 4217 legal tender, generated straight from CLDR, the Unicode dataset the ISO list itself is published from. When CLDR ships a change, we re-run the script. Nobody edits a list.
The same number, in eight places. KWD renders as د.ك, not the three letters “KWD”, and the euro reads differently in Germany than it does in France.
de-DE · EUR1.234,56 €
dot groups, comma decimal
fr-FR · EUR1 234,56 €
same euro, thin-space groups
en-IN · INR₹1,23,456.78
lakh grouping, 2,2,3
ja-JP · JPY¥12,345
no minor unit at all
ar-KW · KWD1,234.500 د.ك
three decimals · native symbol
de-CH · CHFCHF 1'234.50
apostrophe groups
en-US · USD$1,234.56
the boring one
ar-SA · SAR١٬٢٣٤٫٥٦ ر.س
RTL, Arabic-Indic digits
Amounts are kept in the currency they were entered in, with a base-normalised figure captured at write time. So when the exchange rate moves (and it always moves), last month’s total does not move with it.
Search the country, not the code. Nobody knows what SZL is.
An unknown region falls back to USD. Never to INR. That would be an assumption about you.
Not machine-passed strings in a right-aligned layout. The whole interface mirrors: navigation, charts, swipe actions, the lot.