Most finance apps are rear-view mirrors - they tell you, in increasingly beautiful charts, what you already spent. Sahara inverts that. You name a goal, and every surface in the app reorganises to answer one question: how much sooner can I get there, and what would I have to change?
Open any banking or budgeting app and you get the same thing: a balance, a spend breakdown, and a chart of the past. All of it accurate, none of it actionable. The user already knows they spent too much on coffee. What they cannot see is whether the thing they actually want is getting closer or further away.
Each had a conventional option that would have looked more like the category, and would have made Sahara another rear-view mirror.
Every capability answers the same thing - how much sooner do I get there - from a different angle.
The system is deliberately narrow: two typefaces, one accent, one dark surface, and a 32px radius applied without exception. Restraint is what keeps a money app from feeling either clinical or gaudy.
A single 32px radius token runs across cards, chips, inputs and buttons. Uniform softness is what produces the calm; varying it would introduce a hierarchy the layout already handles.
Playfair appears only where a number matters - maturity returns, wealth totals, section titles. Because it is never used for body copy, its presence marks importance by itself.
Near-black cards are reserved for the total wealth panel and the asset allocator. In an otherwise warm, light interface, darkness is the strongest emphasis available.
Sahara is a working React build that wraps to Android through Capacitor - the same bundle serves the web and the mobile package, which is why every layout is designed at phone width first.
"The brief I set myself was to build a finance app that plans instead of reports. That sounds like a feature difference and it is actually an information-architecture one. Once the goal becomes the organising idea, the transaction list - the most-used screen in every banking app I have ever designed for - becomes the least important surface in the product. Moving it to the bottom of the dashboard felt wrong for about a day, and then it felt obviously right."
"Attaching the AI to specific numbers is the decision I would defend hardest. A chat box would have demoed better and been used twice. An insight that says you reach this four months earlier if you change this one thing is the whole product in a sentence, and it only works because it is anchored to something the user already cares about."
Every screen below is captured from the running React build at 390×844 - step through with the arrow keys, or click any screen to open it full size.