The starting point
FinancePro is a finance platform for a business that bills and pays in more than one currency. It was not a commission: it was built for a problem of my own, running personal finances alongside those of a company that bills in dollars, spends in pesos and operates in Mexico.
Before, everything lived in a spreadsheet rebuilt every month: a tab per account, one per category, one summary, and an exchange-rate column updated by hand. Three currencies, fourteen accounts, and a company whose entries had to be separated from the personal ones row by row.
What broke was not efficiency but trust in the numbers. The past would not hold still: with a single exchange-rate cell, updating it in August rewrote March, and that makes the most basic question in a business impossible, whether this month was better than the last. The close arrived well into the following month, when the decision that depended on that number had already been made blind. And with no written rule, a personal expense paid from the company account was resolved differently depending on the month.
Buying something off the shelf was not enough. Personal aggregators assume one currency and one country, and do not model a company. Accounting tools do model it, but they are systems of record: they look backwards, and their multi-currency solves the accounting conversion, not the business question. None accepts the founding premise: that the person and the company are the same economy, and you have to be able to see them together and apart without switching tools.
What had to be solved
The currency of truth. Every entry is fixed to the exchange rate of the day it happened, and that value is never touched again. It sounds obvious, but it forces you to accept something uncomfortable: historical balances stop adding up against today's rate. The alternatives were discarded for what they broke. Converting everything at the current rate, which is what the spreadsheet did, gives balances that are coherent today but destroys comparison between months. A period average smooths the jumps, but invents a number that never occurred and makes it impossible to reconcile against a real statement. The entry's own date is the only one that allows an audit: every figure corresponds to something that happened. When today's value is needed, it is shown separately and labelled, without replacing the original.
Personal and business without a separate dashboard. Duplicating the application into two modes was the easy path, and it was discarded because half the useful questions cross both worlds. Ownership was solved as a rule of the model and not as a screen filter: an entry belongs to the company if it is marked as such or if it lives in an account the company owns. Being a single rule, no screen can contradict another. Above it sits one single scope control, and the user always knows what they are looking at because there is only one place where that is chosen.
Showing the future without promising it. Projecting forces you to separate what is committed, what is likely and what is assumed. The projection is built on what is already recorded and is always drawn dotted against the solid lines of the past: that distinction does the work a disclaimer does not, because nobody mistakes a dotted line for a fact. Beside it sits a simulator where you change one assumption, a client paying late or a new fixed cost, and see the effect. It is a tool for thinking, not a forecast to believe.
Density. A finance screen carries many numbers and turns illegible. It was solved in three levels: four large figures at the top answering "how am I doing" at a glance; below, collapsible sections that each answer one question and remember whether you left them open; and inside, the detail. The secondary is not removed, it is folded. Every section shares the same anatomy, so the position of the controls never changes.
Colour that already means something. In finance, green and red are taken: they are income and expense. That forced them out of play for everything else, so the series palette was built without either and validated as a set on white for the hardest case, a pie chart where every slice touches all the others, checking their separation under color blindness too. Where a number is good or bad depending on context, color never travels alone: a word or a percentage goes with it.
Making entry not feel like a chore. Every finance tool dies the day you stop entering things. The form proposes today's date, the most used account and the day's rate already resolved, suggests the category from what you typed, and attaches the invoice in the same step, reading its data.
The design decisions
Type. A single family for text and interface, Geist across four weights, with headings on tightened tracking. For every figure, Geist Mono. A display serif for headings was discarded: it gave character, but fought with the reading of dense tables.
Colour. Page ground #F6F7F9, an off-white leaning slightly cool rather than a neutral gray; cards in pure white so they float without needing a heavy shadow; ink #0A0B0F, borders #E1E4EA, secondary text #6C717F. One single accent, electric blue #0A60FF, with its wash #EBF2FF for active states. Semantics: expense #E4494C, income #0D9668. Chart series run in a fixed order and never cycle. The dark blue sidebar of the early version was discarded: it stole weight from the single accent and made everything else look muted.
The numbers. This is where the most detail was spent. Every figure is set in a monospaced face with tabular figures, so columns align by position and an amount does not change width when it updates. Amounts are always right-aligned. A negative is not shown in parentheses, as in classic accounting, because that is illegible to anyone who is not an accountant: it takes a minus sign and red. And an amount in a foreign currency is shown in its own currency, large and with its symbol, and below, in smaller type and secondary color, the dollar equivalent preceded by a ≈: that symbol says "this is an approximation as of today" and stops anyone reading it as the real amount.
Spacing and form. A 4 pixel scale with steps at 4, 8, 12, 16 and 24. Base corner radius of 12 pixels, 16 on cards and 8 on inner controls; every form field shares one radius so none looks like it came from another family. Minimal shadow: the border separates, not the shadow.
Navigation and motion. A fixed sidebar with three groups instead of one long list; top tabs were discarded, since with nine destinations they forced an overflow menu. Of motion, almost none: 150 ms color transitions and the section expansion, with no entrance animation on the numbers, which in a tool opened twenty times a day only gets in the way.
The result
FinancePro has been in daily use since March, without interruption, holding three currencies, fourteen accounts and the separation between personal and company in one place.
The spreadsheet rebuilt every month no longer exists. Closed months stopped moving, and one closed today is worth the same a year from now, which made it possible for the first time to compare periods, from weeks to years, on one chart. Whether the business is profitable on its own stopped depending on a row-by-row review and became a rule of the system. And the month close stopped being a spreadsheet chore: today it is a report that generates itself with its receipts.