A 0 → 1 operations app, built around one question.
I was asked to design a few dashboard cards. I ended up answering the merchant's real question: is my money right?
Merchants run their own store from this app. The partner platform, covered in the companion case, is where partners manage every merchant.
- Role
- Product designer → product owner
- Scope
- Research · PRD · UX/UI · QA · GTM support · AI direction
- Timeline
- Jul 2025 to present
- Surfaces
- iOS · Android
Is my money right?
Asked to design a few dashboard cards, I ended up owning the product 0 → 1, research through ship, and rebuilt it around the merchant's real question.
3×
adoption in two months, early partners
Data-truth layer, then two scenarios
Locked time semantics so the numbers are trustworthy, then restructured the app around two natural-language merchant workflows.
~85%
engaged sessions
Live on iOS + Android · shipped foundation, restructure in progress, AI prototyped.
It started as dashboard cards.
Every card looked like a visual task. Every card was really a product question.
I was brought in to design a few merchant-facing dashboard cards. Each one looked like a small visual task, and each one raised a product question I could not answer from the design file: what does this number actually mean, what time range is it counting, what does an empty card mean. So I wrote the first PRD, the product spec, to settle those questions, and the work grew from a UI task into owning the product.
Every card pulled the same way. The surface question was about pixels. The real question underneath was about whether a merchant could trust the number enough to act on it.
- What should this card show?
- What does this metric actually mean?
- What time range is selected?
- When do Day / Week / Month start and end?
- Why is data empty?
- Is this no data, a failed sync, or invalid time logic?
- Should we add more charts?
- Does the merchant trust the numbers enough to act?
Principle
In a payment product, a metric card is a trust contract. The merchant either believes the number, or stops trusting the product behind it.
The cards that started it, shipped: each one is a definition made visible — a metric, its period, its freshness.
Listening, continuously.
Position on your data advantage, not on the adjacent market.
Research was not a phase. From launch through every iteration we ran partner interviews, merchant feedback rounds, and workshops, and the inputs kept feeding decisions. The surface requests were fragmented: tips by employee, fee breakdowns, transaction search, refunds from the phone, batch close, which is the end-of-day settlement that sends a day’s sales to the bank. The root was always the same, though: the feeling that money is out of control.
A market signal sealed it. Generic growth-analytics features showed under 1-in-10 paid retention in the field. We considered leaning into accounting and rejected it: bookkeeping already has dedicated tools, and we are a payments company. Our unfair advantage is the transaction data flowing through our own payment stack. So the product moved off the generic pitch and onto the merchant’s own words.
positioned as
“See your business grow.”
repositioned as
“Is my money right?”
Raw asks · interviews, feedback rounds, workshops
- “tips by employee”
- “fee breakdowns”
- “find one transaction”
- “refund from the phone”
- “batch close, early”
What kept repeating
Watch — is something wrong?
Odd tips, fee surprises, failed payments found too late.
Act — fix it from here
Refunds, finding one payment, closing the day from a phone.
Meanwhile: generic growth analytics held under 1-in-10 paid retention in the field.
the root, in the merchant’s words
“Is my money right?”
Every fragmented ask traced back to money feeling out of control.
The call: pause before scaling.
Scaling an untrusted product doesn't just burn users. It burns the partners who recommend it.
The app was already live on iOS and Android with early partners, and the early signal was good. Adoption roughly tripled over two months inside that early-partner group.
Then I was asked to push downloads and adoption. Testing said the product was not ready to scale: unclear refresh states, inconsistent time logic, numbers merchants could not explain. In payments, scaling a product people do not yet trust does not just burn users. It burns the partners who put their name behind it. I recommended pausing the growth push and fixing the foundation first. The CEO aligned on a foundation sprint.
- Decision
- Pause the growth push. Fix the foundation before scaling adoption.
- Why
- Testing showed merchants could not yet explain the numbers, and data people do not trust will not survive scale.
- Trade-off
- Slower short-term growth, in exchange for long-term partner trust.
- Result
- The CEO aligned on a foundation sprint.
Principle
Do not scale what users do not yet trust.
The data truth layer.
In fintech, data definitions are truth definitions.
A time filter is not a UI control. It is a promise about what the number means.
Case A · the 23:59 decision
A same-day custom range could come back empty or misleading, because the end time defaulted to 00:00. The system was treating a date as a single instant. The merchant meant a full business day. So I worked the boundary problem all the way through, and rejected every clever answer before settling on the plain one.
Options evaluated · 4 ruled out, 1 chosen
end = startreturns empty resultsend = start + 1harbitrary, explains nothingforce two different daysbreaks same-day queriescross-day rollovermidnight stays ambiguous
00:00 to 23:59It matches how a merchant thinks about a business day, and support can explain it in one sentence.
It is not technically perfect. A day does not really end at 23:59. But it is the clearest boundary a merchant and a support agent can both point to, so that is the one we shipped.
Case B · time semantics, locked
Day, Week, Month, and Year stopped being loose labels and became product definitions: each runs from the start of the period at 00:00 to the latest synced time. Now product, engineering, sales, and support all explain the same number the same way.
Day
00:00 → latest sync
Week
00:00 → latest sync
Month
00:00 → latest sync
Year
00:00 → latest sync
Case C · range versus freshness
I split two questions that used to share one label. They are different trust questions, so they never collapse into a single number. And when a sync fails, the app keeps the last good data with its freshness label, instead of dropping the merchant onto a blank screen.
The selected range
What period you are looking at. The window you chose, and nothing about how current it is.
Last updated
How fresh the data is. The moment of the last successful sync, kept visible even when the latest one failed.
I also defined event tracking, so future prioritization could weigh partner anecdotes against what merchants actually do in the app.
Principle
Every definition you refuse to pin down becomes a support ticket.
The restructure: two scenarios, then the app around them.
Most of this layer is not AI. That is the point.
With the data trustworthy, the next move was not “add AI features.” We restructured the app around two scenario families pulled from real merchant workflows, and most of what changed is not AI at all. The scenarios define the workflow. AI fills only the gaps where it genuinely helps.
Both scenarios start from the same place: the merchant is away from the counter, with only a phone.
status · working prototype, not shipped
Scenario 1 · Watch, anomalies surface themselves
A terminal goes offline and every card payment starts to decline. That pattern should flag itself right away, not wait to be found at close-out. The same goes for a single odd transaction: a missing tip, or a tip far below normal. Catch it early, cap the loss.
- 1
Anomaly flagged
A terminal goes offline and card payments start declining. The pattern flags itself, instead of waiting for close-out.
- 2
Tap the summary
One summary card says what changed and roughly how much is at stake.
- 3
See the breakdown
Where the drop is concentrated, read by terminal and by hour.
- 4
Filtered transactions
Only the affected payments, already filtered down. No hunting.
- 5
Transaction detail
One payment, with its status and reason in plain words.
- 6
Suggested action
The next eligible step is offered, scoped to what this payment can actually do. It is never taken automatically.
Scenario 2 · Act, find one transaction and fix it
A customer calls asking for a refund. The merchant is not at the store and will not open a computer. They search the way they remember it, in plain language, pick from the matches, review the drafted refund, and confirm.
- 1
Natural-language request
The merchant types how they remember it, not a filter query.
- 2
Multi-match results
A short list of payments that fit the description.
- 3
Select the transaction
The merchant picks the right one from the matches.
- 4
Drafted action
The refund is drafted, not sent, with the amount and reason pre-filled.
- 5
Review
The merchant checks the amount, the payment, and the reason.
- 6
Confirm
Nothing moves until a person confirms it.
- 7
Receipt + audit
A receipt for the customer, and a record of what was suggested, chosen, and confirmed.
Guardrails
No silent execution
AI can suggest, draft, and explain. It can never silently move money. Every payment action is human-confirmed.
Status-aware eligibility
Available actions follow the transaction’s state. Invalid ones disable before the merchant reaches a risky step.
Audit trail
Each action records what was suggested, what was chosen, who confirmed, when, and the final state.
Principle
When the user is away from their tools, natural language is the interface.
Outcome and takeaways.
No metric pileup. Three things carry over.
Trust before intelligence
The data layer had to be believable before any of the rest could stand on it. Clarity came first; intelligence came after.
Earned ownership
A UI task became a product because someone wrote the PRD, did the research, and made the calls. That someone was me.
Play to your data advantage
The repositioning came from evidence, and from refusing a market that was not ours to win.
Companion case, same employer, different surface: the partner platform, where partners onboard and manage every merchant.

