Consumer fintechLive productMobile-first web appDesigned and built solo

Tendd

Forgotten subscriptions cost the most to the people who never look. I designed a tracker they can bear to open, then built it and put it live.

Tendd · live homepage, app on a local buildRecorded Sep 2026 · 1440 × 900 and 390 × 760 @2x00:00 / 00:22
The problem
Subscription trackers open with “connect your bank” and a big total. The people who lose the most to forgotten subscriptions are exactly the ones who close that screen.
The goal
Get someone who avoids their finances to see every recurring charge in the first session, then turn 6 to 10 percent of them into paying users, without ever charging for the moment they save money.
What I did
Research, jobs, the journey, the architecture and a full design system. Then the product itself in Next.js, Supabase, Plaid and Stripe, with every product decision written down as it was made.
What it gave
A live product five weeks after the first line of product code: sign-in, the Guided Reveal, cancel guides, alerts, trends and a Pro plan wired to Stripe. 2,506 automated checks run across every screen before a change ships.
RoleProduct design and build, soloTimelineJun to Sep 2026Built withNext.js · Supabase · Plaid · StripeStage12 of 12then built
01 The problem

Nobody opens a money app to feel worse.

Subscription creep is not an information problem. Almost everyone knows, roughly, that too much leaves their account every month. They do not look because looking feels bad, and every product in the category makes it feel worse at the very first step: connect your bank, then here is your total.

For the business that is the whole problem, because activation happens on exactly that screen. The category's answer so far has been to make money from the pain: the best-known tracker takes 35 to 60 percent of the first year's savings on the bills it negotiates, so it earns more when the user's problem is more expensive. The person this product is for has decided, reasonably, that not looking is cheaper than the anxiety of looking. A design that opens with a demand and ends with a number loses her in thirty seconds.

02 The bet

Pace the truth, and never show a number without a handle.

I mapped the retreat before designing the entrance. The current journey has a pit in its fourth phase, made of three things stacked together: statement codes she cannot map to real services, a bank connection demanded before any value has been shown, and a full list arriving at once. Each one is survivable. Together they end the session.

So the product turns on one decision, the Guided Reveal. The total is never the opening move. A count comes first, because a count is neutral. Then categories with logos she recognises, which fixes the cryptic codes. Only then the total, and it arrives together with the first thing she can cancel. The same facts, in an order she can stay in the room for.

AS-IS · THE WALL Connect your bank before anything Full list + total, all at once Retreat TO-BE · THE GUIDED REVEAL Arrive, no demand Choose your path STEP 1 You have 14 STEP 2 Categories, logos STEP 3 · PAIRED $192.90 a month Cancel this one first Calm list Return hook: she comes back because something got smaller, not because a badge told her to
The as-is wall and the to-be reveal, drawn from the journey map. Same data, same three facts. The only difference is order, pacing, and whether a number ever arrives without a handle attached to it.
03 The product

From a design file to a product people sign in to.

The design sprint closed with all twelve stages done: 17 screens and 58 pages, every state drawn as its own page, a component system and a written handoff. Then the design system was lifted into Next.js and checked value by value against the design files. All 510 computed values came out identical, so the product started from the design rather than from an interpretation of it.

What runs today: sign-in by email link or Google, the Guided Reveal, a manual path with presets, bank reading through Plaid, alerts and a weekly digest by email, trends, CSV export, account deletion, and the Pro plan through Stripe Checkout and the Stripe portal. Bank connection runs in Plaid's sandbox and payments in Stripe's test mode until the company is registered. Nothing else is simulated.

Screen recording390 × 760 @2x00:00 / 00:20
The app, recorded on a phone. Left, the Guided Reveal: count, categories, then the total with a first cancellation attached. Right, the cancel guide, which is free on every plan, ending on what the cancellation gave back.

The homepage had to make the product's argument before the product could. It was chosen from six explorations after four rounds of notes: fourteen real services fall into a whirlpool, the list forms out of it, and as three of them are cancelled the monthly total steps down, $192.90 to $144.92, in arithmetic that can be checked. It reads completely with JavaScript off and with WebGL unavailable, and it holds still for anyone who asked their device for less motion.

Tendd home on desktop: the monthly total, subscriptions grouped by category with a cost per category, and a notice about a price change.
Home. Every category carries its own monthly cost, so the total breaks apart without a click.
Tendd subscription detail: the service, its price, next charge, the name it takes on a bank statement, recent charges and a cancel control.
Detail. The statement line is there because a bank statement rarely names the thing you signed up for.
Tendd trends: the monthly total as a line from August to September, beside a panel on what Tendd Pro adds.
Trends. What the total did, month by month, and what Pro adds to it.
Tendd cancel guide for Netflix: when access ends, four steps on netflix.com, and an I cancelled it button.
Cancel guide, free on every plan. A route out, never a trap.
04 Decisions

Six calls, and what each one cost.

D1

Gradual reveal, and every number arrives with an action.

Count, then categories, then the total with a first move. It is locked at the architecture level, so every screen downstream inherits it rather than remembering it.

CostA user who wants the headline number now waits two steps for it.

D2

A full manual path, so the bank is never the entry gate.

Manual entry with presets ships alongside the bank connection. A person who will not hand an aggregator their accounts still gets the whole product.

CostManual users see fewer subscriptions than a bank scan finds, and they are harder to convert.

D-Gate

Free shows the count, the total and three names. The rest are Pro.

The hardest call in the project, and a reversal of three earlier decisions that had kept free visibility uncapped. The case for it: the free user still gets the number that matters and the unlimited manual path, and the three names are taken from three different categories, not the three most expensive, so the free screen informs rather than frightens. Both objections to it are in the decision log next to it.

CostThe paywall now sits on the first screen after a bank scan, which the original design ruled out.

D3

Cancelling is never paid, and leaving Pro is as easy as joining.

Cancel guides are free on every plan. Leaving Pro goes through Stripe's portal with no reason asked and no counter-offer, an undo called Keep Pro carries no discount, and a mistaken charge is refunded in full within 14 days. The one subscription Tendd controls cannot be the hard one to leave.

CostEvery retention trick the category relies on.

D4

Tendd never cancels on the user's behalf.

Doing it would mean holding the password to somebody's Netflix. Pro opens a direct link to each service's own cancel page instead, for eleven services so far, and the promises the product could not keep were taken off the Pro list.

CostA weaker headline than competitors who claim to cancel for you.

D5

No analytics, of any kind.

A product that asks for read access to someone's bank account does not also watch what they click. The sentence on the homepage is “read-only, we cannot move your money”, and the rest of the product has to be as boring about data as that line promises.

CostThe targets below cannot be counted until a measure exists that keeps that promise.

05 What it gave

A product that exists, and bets that can now be tested.

Shipped

5 weeksFrom the first line of product code to a live, signed-in product
510/510Design values carried into code unchanged
2,506Automated checks per run: 23 routes, 7 widths, 2 themes
35Product decisions logged with the reason, P1 to P35

Built to move

35–40%[?] New users who see their full list in session one
6–10%[?] Free to Pro within 90 days
$15–30[?] Saved a month per user, two to four times the price of Pro
30/60%[?] Still active at 30 days, free and paid

The bets come from the research and are written with a test and a threshold each. None is measured yet: the product has no users on record, and by D5 it has no tracking that would count them. What design could own before launch, it now owns: every path to those numbers exists and works.

06 Still open

The one question design cannot answer.

[?] Does an avoider actually look, and does she feel calmer afterwards. Everything in this product rests on that assumption. It is carried as an open question from the first journey map to the live app, and it closes only with people who genuinely avoid their finances, not with people who enjoy budgeting apps.

[?] Launch. Real bank connections and real payments wait on one thing, a registered company. The product is ready for both switches.

07 Artifacts

The design files the product was built from.

The product's code is private. The design it was built from is public, frozen on the day the product took over, and complete through handoff.

Next case

Stack