Disputes · Dec 2025 – Oct 2026
Disputes, in two weeks
When a cardholder disputes a payment, a merchant has days to respond with evidence, and the case can climb through three network levels. I rebuilt how that works, for the merchant and for the operations team that reviews every case.
- Role
- Lead frontend
- When
- Dec 2025 – Oct 2026
- Where
- PayGlocal
- Stack
- Next.jsTypeScriptZustandTanStack Query
The situation
The old screen was a table of chargebacks. Merchants could not tell what was expected of them or by when, and the operations team handled reviews, representations and debits outside the product. Each level (dispute, pre-arbitration, arbitration) has its own rules, amounts and deadlines.
What I built
- Action cards for each network level, driven by status: what happened, what is needed, and the deadline in days or hours.
- Accept in full, accept part of the amount (with the remainder calculated live), or contest with evidence.
- Evidence upload that suggests the right documents for the dispute reason.
- An operations console: review documents, request more, represent to the bank, push or approve debits and penalties, close a case in either party’s favour.
- Maker-checker approvals, so the person who requests a debit cannot also approve it.
- Fifteen notification emails, including bulk versions that list many cases in one message.
- Later, a full case view with AI-assisted document review in the new operations console.
Sample case · CB-0001 · not real data
Cardholder says the goods never arrived
- Amount
- $1,240.00
- Respond in
- 7 days
- Dispute
- Pre-arbitration
- Arbitration
Case timeline
Decisions
Map every backend status to a screen state, including the ones that “never happen”
There were dozens of internal and external statuses across three levels. I wrote a fallback for every level so an unexpected status shows a safe, readable state instead of an empty card.
Make the AI earn its place
For the AI review I agreed a few rules with the team: approval stays disabled until the insights exist, insights are never generated silently, and the screen says when they are out of date.
One deadline language
Every card speaks the same way about time: days left, then hours left, then overdue. Merchants see it on the table, the card and in the reminder emails.
Outcome
| What | Before | After | Change |
|---|---|---|---|
| First merchant release | — | 2 weeks | 13K+ lines |
| Network levels covered | 1 table | 3 + compliance | staged |
| Notification emails | 0 | 15 | +15 |
| Dispute win rate after launch |