Riffl

Riffl: a spending tracker for people paid in one currency and spending in another

I designed and built it alone. This is how the design went from canvas boards to the shipping app.

Role
Founder, designer, builder
Team
Solo founder
Platform
Android, iOS in TestFlight
Timeline
Jun to Nov 2026
See website
The Home board, live. Hover to watchWatch it collapse and swipe to income.
3,800+commits, design to shipping code
18currencies, each kept as itself
127system icons, drawn for the app

The problem

In Lagos a salary can arrive in dollars while rent leaves in naira and money home goes out in pounds. Spending turns up as an SMS from one bank, a push from another, a paper receipt, or a transfer with no note.

Most trackers expect one currency, a bank feed, and a weekly sit-down to sort it all. The people Riffl is for rarely have the feed and never do the sit-down. So the job was to make recording a purchase quicker than forgetting it.

Three assumptions I designed around

A receipt gets recorded at the till or never

So pulling down on Home opens the camera, and the photo goes straight into the Confirm card.

"Shopping is up this week" beats a pie chart

So the data layer writes the sentence and the screen prints it. Charts sit one tap down.

Nobody should pick one currency

So every book keeps its own currency and every total carries its own symbol.

Who it's for

Tobi, freelance designer, Lagos

Paid in dollars, spends in naira. Did this month's retainer cover the month?

Ama, nurse, Manchester

Paid in pounds, sends naira home. Wants that money to show up somewhere.

Kunle and Funmi, building a house

Hundreds of small payments to contractors. Which stage is over budget?

From the till to the end of the month

SpendCaptureConfirmReview the weekClose the month
BeforeReceipt goes in a pocketTyping every lineFixing wrong fieldsNumbers, no explanationNo idea where it went
In RifflBank alerts read on AndroidPull down on HomeOne editable cardA verdict and a sentenceCategories ranked, then sized

Wireframes first

Before any colour, each screen was blocked out to one question: what does it have to say, and in what order.

Drag it like the board canvas below. Columns follow the journey: first run, Home and capture, review, projects and money.

The canvas

Every screen in the redesign is a column of boards on a design canvas. I signed off each port by putting the board next to the running app. Everything below is the current iOS design.

Drag the canvas in any direction, swipe sideways, or use the arrow keys. It wraps forever. Columns run through the product, from the splash and first run to Plus. Hover a board to play its motion; select one to read it.Tap a board to play it and read it.

Five decisions

Board: Home on the type roles01

One type scale

Each screen had picked its own sizes. I measured a well-made iOS app, wrote a short list of named roles from the Home figure down to chart labels, and moved every screen onto it. Screens stopped looking like they came from different apps, and large text became predictable.

Board: the Sunday report screen with the notification ask02

Ask after the reason

Riffl never opens with a permission prompt. The screen first says what you get, a report every Sunday, and only then does the system ask. Skipping it is one tap.

Board: the Confirm card03

No scan screen

Dropping the screen meant the Confirm card had to look right while half-read. That took extra work on the reading and empty states. What's left is one pull and one tap.

Board: stage bar04

A split bar, not a chart

Kunle and Funmi want to know which stage costs most. One bar split by stage shows it without axes. Tap a stage to focus it.

Board: Home on the income face, period chips above05

Swipe the chips to change period

Week and month move under your finger on the period chips, with no arrow buttons. Swiping the figure is saved for income, so the two gestures don't collide.

Riffl Plus

Ask Riffl

Ask your own spending a question in plain words, typed or spoken. It answers with the figure, the records behind it, and one way back into the app.

  1. Ask"How much did I spend on food this month?"The figure, in its own currency, with the records it came from.
  2. Find"Show me groceries over 40 this year."The matching records, and a door into Activity with that filter set.
  3. Do"I spent 20 on fuel this morning."A proposed record first. Nothing changes until you confirm, and Undo stays one tap away.
Live in the app: from Audit's "Ask your spending" card into the chat
How it answers
  1. Your words become a filterThe question is turned into a filter, not an answer. No language model ever does the arithmetic.
  2. Your phone runs itThe filter runs on the records already on your phone.
  3. Riffl does the mathsRiffl's own engine computes every figure, kept separate per currency, so a naira total never quietly absorbs dollars.
Board: found in your records
FindSix records over 40 this year, totalled.
Board: Activity filtered by the answer
LandedOne tap opens Activity with the filter already set.
Board: add this record?
Do, proposed"Add this?" with the record, and what Riffl assumed, before anything is saved.
Board: record added with Undo
Do, doneAdded to the naira book, with Undo and a way to open it.
Full screen

A sheet that becomes a room

Ask Riffl opens as a sheet over Audit, so you never lose your place. The first question takes it full screen, because a conversation needs the height. Answers sit in the chat as cards, each with its own currency and its own way back into the app.

Board: working it out
Working it outThe reply forms inside the chat, not on a blocking spinner.
Board: two answers in two books
Two books, two answersA follow-up in the naira book gets its own total. The two are never added together.
Board: found in your records
FindA filter, a count, a total, and Activity one tap away.
Not chosenOpening straight to full screen from the tap. The sheet that grows on the first question was chosen instead.
Add and change

Tell it, then confirm it

Ask Riffl can also write. Say what you spent, or what to fix, and it answers with a proposal instead of an action.

  1. A proposal firstEvery add or change arrives as a card with the record, the category, the book and the day. Nothing is saved until you tap.
  2. It shows its guesses"4k" becomes ₦4,000 in the naira book, and the card says so, so a wrong guess is caught before it lands.
  3. Your number, not its mathsIt only uses the number you typed. Moving a record to another book keeps the number and changes the currency. Nothing is converted.
  4. Undo, every timeEach change ends with Undo and a way to open the record. When two records match, it asks which one and changes nothing.
Typed, proposed, added, with Undo
Board: change this record's category?
Change a categoryOnly the category changes. The amount, day and book stay.
Board: move this record to the dollar book?
Move a bookThe number stays and the currency changes.
Board: moved, with Undo
MovedDone, with Undo, and nothing converted.
Board: two records match, which one?
Which one?Two matches, so it asks. Nothing has changed.
Designed, coming next

The orb on the tab bar

Audit is one door. The next is an orb that sits above the capture button on every tab, so a question is always one tap away.

  1. Out of the headerIt started in Home's header. The ruling was that it is primary on Home, not a header icon.
  2. Three places drawnIn the header, floating over the capture button, and inside the tab bar's row. It landed above the capture button, on every tab.
  3. Quiet at restNo label and no badge. At rest it only breathes, a slow beat every few seconds. While the page scrolls its ground clears, and it steps aside when the capture menu opens.
  4. A character, rejectedA mascot version was tried and dropped. A 3D character did not fit a flat interface or the tone of a money app.
Two beats, a tap, and the orb hands over to the sheet
At restOne slow beat, then still.
Board: the orb's ground clears while the page scrolls
ScrollingThe ground behind it clears while the page moves.
Board: the page ends above the orb
The end of the pageThe last row always clears the orb.
Giving wayIt fades as the capture menu rises, rests while it is open, and beats again after.

It says plainly what it won't do: move real money, give investment advice, or delete records. When amounts are hidden, its answers are masked too.

Type, colour, mark

₦1.29MHome figure 44/44
$2,006Big figure 34/36
ProjectsPage title 24/29
BudgetsSection header 17/22
Okiki Fresh Market · ₦18,450Row, amount 15/20
Spent today, inside the day's budget.Body 15/21
Jan Feb Mar AprChart axis 12

Plus Jakarta Sans throughout, with tabular figures for amounts and the currency symbol at 70% size. Geist Mono only on chart axes.

#4B4BC4
#181820
#ECECF3
The Riffl mark

One indigo accent; category colours only on icon tiles. The mark is an R with a plus, for adding an expense, and it is always white on dark.

Icon packs

One drawing language from the mark: a 24 point grid, one 1.75 stroke, round caps and joins. The plus means add and nothing else. App icons, system icons and category tiles are all drawn in it.

Accessibility

Board: budgets at large text, rows stacked
Budgets at the largest text size
  1. Large text

    Rows stack, words stay whole

    When a row would overflow at large sizes, the amount drops under the name instead of cutting it off. Nothing is truncated with an ellipsis.

  2. Reduce Motion

    The collapse calms down

    The Home collapse steps through a short crossfade instead of tracking your finger.

  3. Screen readers

    Actions have names

    Project cards name their actions for screen readers, and a short figure like ₦1.29M is read out as the full amount, 1,284,650 naira.

Multi-currency

Every currency,
its own book.

Naira, dollars, pounds, euros and more. Each keeps its own income, spending and budgets, never blended into one estimate.

  • NGN
  • USD
  • GBP
  • EUR
  • CAD
  • GHS
  • KES
  • ZAR
  • AED
  • INR
  • AUD
  • EGP
  • BRL
  • SAR
  • PHP
  • ARS
  • JPY
  • KWD
What I'll measure, targets not results
<10s
from pull-down to a saved receipt
0 edits
on most confirmed receipts
Weekly
Audit opened without a reminder
Next
  1. Shared expensesSplit a receipt, then groups that stay in sync.
  2. The rest of the redesignThe remaining screens move onto the new system.