Ines Keller

Fintech mobile app

Poster for Halden. A moss green field holds a huge 4’560.00 labelled Verfügbar, Disponible, Disponibile. Below it an orange field reads Steuern und AHV 1’440.00 and a bone field reads MWST 8.1% 486.00. The heights are the true shares of a CHF 6’486.00 payment.

A Swiss business account for sole traders. The only large number on the screen is the money you can actually spend.

Brief

Halden is a Swiss business account for sole traders: photographers, carpenters, physiotherapists. Its one idea is that every incoming payment is split automatically, so VAT and the money for income tax and AHV sit in a separate balance, and the first number on the screen is what you can spend.

The founders had the splitting logic working and a prototype that looked like every other banking app. They asked me for the product design and the brand. I did all the work against one sample user: Mara Tschanz, a carpenter in Thun, with one oak kitchen to invoice in her first week. Every figure in these images comes from her ledger.

Six app screens in a row on a lichen green field, dated 4 to 14 November 2024: legal disclosure, set-aside rates at 24%, home with CHF 4’000.00 spendable, new invoice for CHF 6’486.00, the sent QR-bill, and the payment split into 4’560.00, 1’440.00 and 486.00. A numbered note sits under each.
Flow, account opening to first split. Six screens, 4 to 14 November.

Constraint

Four limits set the layout. The disclosure required under Halden’s Art. 1b licence could not be shortened or collapsed: 1’087 characters in English. German, French and Italian ran up to 39% longer on short labels and 22% longer on the disclosure. Everything had to work one-handed on a 360 px wide Android phone. And many users open the app on site, with dirty hands, in full sun or in an unlit stairwell.

Decisions

The prototype showed three balances at equal size. Testers added them up, which is the sum the product exists to stop people doing. I made Spendable the only figure above 28 px anywhere in the app, then cut the top of the first screen by true share: the orange block is as tall as the money set aside.

The rule held on the invoice too. In the first test, 5 of 8 people read the largest figure on the form as theirs, and at the time that was the total. The total of CHF 6’486.00 now sits at body size, and the 60 px figure is the CHF 4’560.00 she can spend once it is paid.

Amounts use the Swiss format with an apostrophe every three places. Instrument Sans sets the large figure with tabular numerals. DM Mono carries every column, because Instrument’s punctuation shifted the decimal points by a pixel in a ledger. I rejected the usual smaller Rappen: on a phone in bright light, 6’358.70 at one size was read correctly more often than 6’358 with a raised 70.

New invoice screen at 180% on an orange field. Invoice 2024-001 to Familie Aebi, two lines, net 6’000.00, VAT 8.1% 486.00, total 6’486.00. The largest element is Spendable once paid, 4’560.00, above a three-part bar and a Send invoice block. Notes with leader lines run down the right.
New invoice, 180%.
Set aside screen at 180% on a moss field. An orange header reads Set aside 1’926.00. Below, VAT Q4 2024 486.00 less input tax 71.28 gives estimated due 414.72, file by Fri 28 Feb 2025. Tax and AHV 2024 reads 1’440.00. An outlined button reads Move to Spendable. Notes run down the right.
Set aside, 180%.
“We had three balances on the first screen and called that transparency. Ines took two of them away, and our support inbox got shorter.”
Selina FreiCo-founder, Halden

Text that scrolls

Legal rejected an accordion, since collapsed text does not count as presented. I then tried disabling Continue until the reader reached the end. 3 of 8 testers thought the app had frozen, so that went too. The final layout fixes the title above and a 72 px action below, and the text scrolls between two heavy rules with a visible track. At 360 px wide the English runs to 918 px and the German to 1’080 px. The layout is the same in both. Only the scroll thumb gets shorter.

Specification sheet on bone: eight colour swatches with contrast ratios, a type scale from the 84 px figure 6’358.70 down to a 13 px label, spacing bars from 4 to 72 px, six action states, four field states, an aligned column of amounts, a measured ledger row, and four rules along the bottom.
Interface kit, version 1.4. Tokens, type, spacing, states.

Orange and low light

Orange means one thing in the kit: money or input that needs a second look. Ink on orange measures 5.4:1, and orange on bone only 2.8:1, so it is always a field and never text.

My first low-light version kept the moss green, and it went muddy on a dim screen in a stairwell. Moss is gone in that mode. Text gains a weight step, rules go from 1 to 2 px, and no element moves. I also dropped switching by light sensor, because it flipped back and forth on a site with moving shade. It is a setting now.

The disclosure screen three times at 360 by 800 px, in German, French and Italian, with the action fixed at the bottom of each. Below, a table of ten labels in four languages with length increases from 14% to 39%, and disclosure heights of 918, 1’080, 1’056 and 1’032 px.
String test. German, French, Italian at 360 px.
Home, split and set-aside screens in black and bone on a moss field, above a contrast table reading 15.0:1 standard and 17.6:1 low light for body text. Along the bottom, the figure 6’358.70 and the orange block appear side by side in both modes.
Low-light mode, with measured contrast.
Six screens on a near-black field: empty Set aside at 0.00, an empty invoice ledger, offline home labelled Spendable on 14 Nov, 12:33, an invoice with a missing address, a payment CHF 641.30 over Spendable, and CHF 640.00 from R. Zurbuchen asking Is this income?
Empty and error states, A to F.
App icon, a bone H on a moss square with its lower 29.7% cut to orange, shown large and at 180, 120, 87, 60 and 40 px and in a round mask. Below, notifications in four languages reading 4’560.00 to spend, 1’926.00 set aside, and five widgets showing Spendable 6’358.70.
Icon, notifications, widgets.

Result

In the second round of testing, 9 of 10 sole traders named their spendable amount within 5 seconds. On the prototype it was 3 of 10. Contacts to support about tax money fell 41% in the first three months. No legal string was shortened in any language, and the app needed no layout exception at 360 px.

One thing I would change: Move to Spendable is still too easy to reach. People use it in the last week of a bad month, and the second confirmation does not slow them much. I would show the VAT date on that confirmation.

9 of 10
Named their spendable amount in 5 seconds, up from 3 of 10
41%
Fewer support contacts about tax money in three months
0
Legal strings shortened across four languages
360 px
Narrowest phone tested, with no layout exception

Credits

Design
Ines Keller
Engineering lead
Jonas Imhof
Compliance
Aurelia Bezzola
Translation, DE FR IT
Chiara Monti
User research
Thea Lüthi
Accessibility review
Marc Rochat

Next project

Annual report

Genossenschaft Mittelwasser, 2024