Case study · Fintech

Approve the run. Hold the one payout that shouldn’t go.

Ferrow, payout approvals for finance teams. Designed end to end, shipped as a prototype that runs.

Scope
Flow, identity, system, product
Platforms
Web and iOS
Built on
shadcn/ui, Geist, React
Deliverable
Figma and a working prototype
00Overview

One changed bank account, hidden in 148 payouts.

It showed up as row two of a table, at the same weight as the other 147. Approvers reviewed everything, so they reviewed nothing.

148 payouts. One of them changed.

Northwind Logistics · $18,420.00

10

Human steps, down from 10

3

Tool, down from three

0

Screens mapped, web and mobile

0

Decision for 147 unchanged payouts

01The flow as it stood

Ten steps, three tools, zero warnings.

Walked as it really happened. A red pin wherever an approver lost the thread.

FigJam board of the legacy approval flow: ten steps from a CSV upload to money landing in the wrong account, with five friction points marked.
Drag to explore →
  1. 1Context lost at the door
  2. 2Everything weighs the same
  3. 3All or nothing
  4. 4The review leaves the product
  5. 5The one signal was hidden
02Where it got hard

Five places where two good requirements collided.

None of the hard parts were visual. Each one was decided before a screen was drawn.

01

Cooling period vs Friday payroll

Isolate, never block. The batch goes; the changed payee waits.

02

One approval record vs 147 good payouts

Split, don’t untick. Held rows become a linked child batch.

03

Controls vs approver fatigue

Show what changed first. Everything else is one line.

04

Dual control vs an approver away

Delegate before the absence. Time-boxed and logged.

05

Approving on a phone vs approving blind

Mobile approves the unflagged, never the flagged.

03The flow, rebuilt

The run is only as slow as its one real exception.

Seven steps, one tool. Every fix answers a red pin.

FigJam board of the redesigned approval flow with a branch for the held payout, verified by call or moved to a held batch.
Drag to explore →
  1. 1Arrives in context
  2. 2Weight follows risk
  3. 3Split, not all or nothing
  4. 4The check stays in the product
  5. 5The signal is computed

Bank detail change, with a 72-hour cooling period

45 screens mapped across web and mobile

04Identity

A treasury product that keeps its nerve.

White and soft slate, one verdigris that means “ours”, and amber for the payout that waits.

The F is a batch.

Stem, batch, payouts, and the one square held back.

05Five directions

Five ways to approve a batch with one bad payout in it.

Same data, same components. They differ in structure, never in styling.

B · Exception first

The held payout rises above the batch, old and new account side by side. Release only ever counts what is ready.

06Design system

shadcn/ui, with a different temper.

Every Ferrow token is a shadcn/ui token first. Drag to switch the theme.

Direction B in the light theme
The same frame with the Ferrow collection set to Dark
LightDark
07Flows and states

Every flow wireframed, with the real copy.

Drag the boards. Nothing in hi-fi had to rewrite a word.

Wireframes of the batch approval flow with the verification branch
Drag to explore →
Wireframes of the payee bank detail change flow
Drag to explore →
Wireframes of roles, policy proposals, self-approval blocking and delegation
Drag to explore →
08The product

One run, from review to settled.

Direction B through the whole run. Every number matches the prototype to the cent.

The changed account leads the screen
Verified by a call to the number on file
The release says what goes and who signs next
The second approver sees the same evidence
Each rail reports on its own
The audit record writes itself

Close up

Close up of the account comparison: the account paid until Wednesday next to the new account that has never been paid
Close up of the release confirmation: amount, source account, send time and approvals
Close up of the second approver view: one approvals trail and the verified Northwind row

Approve between meetings. Verify at your desk.

Face ID to release. The dock turns into the approval status, so nothing on the screen moves.

A bank detail change, checked and held

Six exceptions become a queue

Controls and the states nobody scopes

Policy change proposal waiting for another approver
A broken file fixed row by row
Delegation with separation of duties
Not enough funds in the account
The month-end exception queue
A partial failure on one payment rail
An empty approvals inbox
Payee bank detail change with a cooling period
09Prototype

A prototype that runs, not a mockup that clicks.

Real shadcn/ui components and Ferrow tokens. Every video on this page is the prototype, recorded at 60 fps.

0

Routes, from the inbox to the audit log

0

People to switch between

0

Scenarios, empty to partial failure

0

Payouts, $412,380.00 to the cent

10Launch page

A launch page built from the product.

Real screens, real components. Keep scrolling.

ferrow.com
Ferrow landing page heroFerrow landing page feature gridFerrow landing page controls sectionFerrow landing page mobile section
11What we test next

Three assumptions that need evidence.

On the prototype, with finance operators, with tasks rather than opinions.

Assumption 1

The queue threshold

Is five exceptions where approvers lose track, or three?

Assumption 2

The mobile limit

Do approvers accept desktop-only verification, or work around it?

Assumption 3

The call-back step

Does the call get made under Friday pressure?

Have a workflow where one row decides everything?

We redesign the path to the action and hand it back as a working prototype in five days.