Case study 02

Cadence

A subscription tracker that tells you before the money leaves, not after, in the currency you actually earn.

Type
Self-directed
Platform
Mobile web
Status
Working prototype · 2026
Role
Product design, UI, build

Context

Small charges, spread across a month, add up quietly.

Streaming, music, cloud storage, a gym, a design tool: each one is a few dollars, each one renews on its own date, and most of them are billed in a currency the person paying does not earn. Nobody decides to spend a hundred and forty dollars a month on subscriptions; it happens one renewal at a time. Cadence is a full prototype of a tracker built around the moment that matters, the few days before a charge, when there is still time to cancel.

Three Cadence screens: sign in, the home screen with the monthly balance and upcoming renewals, and the full subscription list.
Sign in, home and the subscription list

Problems

The hurdles, named plainly.

Four things stop people from keeping track of what they pay for.

Challenge

Make adding a subscription take three fields, make every price legible in the local currency, and warn people while there is still time to cancel.

Approach

Design principles

01

Ask only what the user knows

The name, the price and the date. The logo, the brand colour and the category are worked out from the name, so there is no picker for any of them.

02

Warn on the user's clock

Reminders arrive at a time the user chooses, three days before a renewal and a month before a yearly one, rather than whenever the app happens to be opened.

03

Keep the destructive action quiet

Cancelling is always one tap away but never the loudest thing on a screen, and it asks once, in plain words, before anything is removed.

Adding

Three fields, and the rest fills itself in.

Typing "Netflix" is enough for Cadence to attach the real logo, Netflix's red and the streaming category; a service it does not know gets a colour generated from its name and a best guess at the category. The country chosen at sign-up sets a second currency, so the price field answers the question people actually have, how much that is in cedis, as they type. Every dropdown is a scroll wheel, and the value under the centre line lights up while the wheel is still moving, not only when it stops. A missing field turns red, shakes once and says what it needs, in place of the browser's own pop-up.

The add subscription form three ways: empty fields marked in red with messages, a filled form showing the price converted to cedis, and the date wheel open.
Inline errors, the price in cedis, and the date wheel

The subscription

Everything about one charge, on one screen.

Opening a subscription leads with the price, highlighted in the brand's gold, and says when the next charge lands in words rather than a date to decode: "Next billing in 6 days". The latest receipt opens as a sheet with its own reference number, and the billing history lists every charge of the past year with a running total, each one opening the same receipt. Cancelling sits at the bottom of the page in red, and its confirmation reads "Keep it" or "Cancel it", never "Cancel" and "Cancel subscription" side by side.

A subscription's detail screen, its receipt sheet with the date, plan, payment method and receipt number, and a year of billing history.
Detail, the latest receipt, and a year of charges

Introducing

Reminders that arrive when you asked for them.

Every notification has a delivery time: its notice day at the reminder time set in Settings. Until then it does not exist; when the time comes, a banner slides in, the bell picks up a dot, and tapping either opens the full message, with the amount, the date and the card it will be charged to. A payment that was due and not updated turns into an overdue notice the next morning. The explanation of how it all works lives behind a small ⓘ beside the reminder time, instead of as a paragraph under it.

The notifications list with unread dots, a renewal reminder opened as a message, and Settings with the reminder time explained in a tooltip.
The inbox, a reminder in full, and the reminder time

Around the edges

Where the money goes, and a switch that means it.

Analytics answers "when" as well as "how much": a bar per month, past months in ink, this month in coral and the coming months as a grey forecast, so a heavy October is visible in September. Turning renewal reminders off really does silence them. The inbox says so, keeps showing overdue payments, which are not reminders, and offers the way back to Settings.

The analytics screen with a monthly spend chart of past, current and forecast months, and the payment history below it.
Monthly spend, past to forecast
Settings with renewal reminders switched off, and the notifications screen explaining that only overdue payments will show.
Reminders off, and the inbox saying so

Live prototype

This one actually runs.

The frame holds the real React build, not a recording. Type a service's name into the add form and its logo and colour appear on Home. Open a subscription for its receipt and a year of charges. Tap the bell for the reminders due this week.

Subscriptions, settings and what has been read are all saved on the device, so leaving and coming back picks up where you left off.

Open it full size for the same build with an index of every screen, from sign-up onwards.

Where it got to

17 screens, clickable end to end: sign up, add, track, get reminded and cancel, with everything saved between visits.

Alternatives

The routes not taken.

The subscription screen began with editable category chips and two large cards side by side, "Cancel subscription" and "Edit details". The chips asked the user to maintain something the app had already worked out, so categories went back to being detected silently. The two cards gave cancelling the same weight as editing; cancelling became a quiet red button at the foot of the page and editing a pencil in the header. The reminder settings went the same way: a line of explanation under the time became an ⓘ beside it, because the explanation is needed once and the setting every time.

Reflection

Project takeaways.

Final notes

Cadence is a prototype, not a live service. There is no bank connection, so billing history and receipts are estimated from each subscription's cycle and current price, and without a server reminders can only be delivered while the app is open; anything that came due in between is waiting, with the bell's dot, the next time it is. Everything else, from the currency conversion to the read state of every notification, works and persists on the device.