Skip to content
Platforms

Native everywhere.
Stretched nowhere.

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.

The WealthWise watch app: three rings for today's spend, with the day's total in the middle.
WealthWise on iPad: a sidebar of every section, with net worth, cash flow, the health score and budgets side by side on one canvas.
The WealthWise home screen: a 20-day logging streak, this month's cash flow, and an active trip to Dubai.
9:41

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.

One decisionLayoutProfile

Resolved from OS + size class at launch, and re-resolved on rotation.

compactBottom tab bar: UITabBar on iOS, Material nav bar on Android
largeFloating glass sidebar (iPad) · navigation rail + extended FAB (Android)
watchA separate, native SwiftUI application
landscape phonePromoted to the large-screen shell, never a squashed portrait

iPhone

Liquid Glass

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.

  • Dynamic Island Live Activities
  • Home-screen quick actions
  • Siri & App Intents
  • Spotlight

iPad

iPadOS shell

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.

  • Floating glass sidebar
  • Two-pane settings
  • Landscape-first

Android

Material 3

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.

  • Quick Settings tile
  • App Shortcuts
  • Sharesheet
  • M3 puck refresh

Android tablet

M3 Expressive

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.

  • Navigation rail
  • Extended FAB
  • No glass, on purpose

Apple Watch

Native SwiftUI

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.

  • Face complications
  • Crown-driven rewind
  • Independent app

iOS widgets

WidgetKit

Small, medium and large. Your Safe-to-Spend, today’s burn and the month’s shape, on the home screen, before you open anything.

  • Small
  • Medium
  • Large

macOS

Coming soon

Not shipped yet. When it lands it will be a Mac app, a real one, with the same rule: no stretched layouts.

On the home screen, before you open anything.

WidgetKit in three sizes, reading the same on-device ledger. No fetch, no spinner. The numbers are already there.

SAFE TO SPEND1,240
per day · 12 days left
THIS MONTH84,210
Global

153 currencies.
None typed by hand.

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.

0
legal tenders
from CLDR, not a spreadsheet

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.

Germany
de-DE · EUR

1.234,56 €

dot groups, comma decimal

France
fr-FR · EUR

1 234,56 €

same euro, thin-space groups

India
en-IN · INR

₹1,23,456.78

lakh grouping, 2,2,3

Japan
ja-JP · JPY

¥12,345

no minor unit at all

Kuwait
ar-KW · KWD

1,234.500 د.ك

three decimals · native symbol

Switzerland
de-CH · CHF

CHF 1'234.50

apostrophe groups

United States
en-US · USD

$1,234.56

the boring one

Saudi Arabia
ar-SA · SAR

١٬٢٣٤٫٥٦ ر.س

RTL, Arabic-Indic digits

History stays still

A €50 dinner is stored as €50.

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.

Live rate1 EUR = ₹94.10
Recomputed at today’s rate2,84,120June changes every time you look at it
WealthWise2,84,120June is June. It was settled the day it happened.
Currency picker153 searchable
Fr.
Swiss Franc
CHF
kr
Swedish Krona
SEK
L
Swazi Lilangeni
SZL

Search the country, not the code. Nobody knows what SZL is.

First launch, no setup
IndiaINR
GermanyEUR
JapanJPY
Unknown regionUSD

An unknown region falls back to USD. Never to INR. That would be an assumption about you.

Five languages. Full RTL.

Not machine-passed strings in a right-aligned layout. The whole interface mirrors: navigation, charts, swipe actions, the lot.

  • EnglishSafe to spend
  • हिन्दीसुरक्षित खर्च
  • EspañolDisponible para gastar
  • FrançaisDisponible à dépenser
  • العربيةالمتاح للإنفاقRTL