B2B Retail · Mobile POS
Mobile point-of-sale app for retail merchants — quick card & QR payments, transaction history, and a simplified end-of-day reconciliation flow that fits in 3 minutes.
ROLE
Sole UX/UI Designer
PLATFORM
iOS · Android
PROCESS
7-step full UX cycle
OUTPUT
30+ screens · design system
Project overview
EzPOS is a mobile fintech payment product for retail merchants — handling card payments, QR checkout, transaction history, and daily reconciliation from a single phone the merchant carries between the counter, the market stall, and delivery runs.
This wasn't a visual redesign — it was a payment workflow problem. Every screen has to serve a merchant who is often holding a product in one hand and the phone in the other, in a noisy environment, on an unstable network, with a customer waiting.
I led the end-to-end UX process — competitive analysis of mPOS.vn, Payoo, and Square, moodboarding, user flows, wireframing, prototyping, design system, high-fidelity UI, and developer handoff. The visual identity leans dark with a green accent — chosen after moodboarding for outdoor legibility at market stalls and small-shop storefronts.
DOMAIN
Retail · Mobile POS
PRODUCT
Mobile payment app for merchants
ROLE
Sole UX/UI — research, UX, UI, dev handoff
PLATFORM
Mobile (iOS / Android)
PROCESS
7 steps — competitor analysis → high-fi UI
OUTPUT
30+ screen mobile app + design system
The problem
Small retail merchants juggle cash, cards, QR payments, and receipts — all while the next customer is already at the counter. Existing POS apps assumed a stationary setup and a two-handed operator. Neither assumption held for the target user.
FOR THE USER
Split attention between customer, product, and app. Two-handed POS flows dropped transactions when the merchant needed a free hand for the item.
FOR THE BUSINESS
End-of-day reconciliation across multiple staff and shifts was a 20-minute manual export-and-match. No unified daily summary.
FOR THE PLATFORM
No consistent transaction UI across merchant apps meant repeated support burden — every shop asked the same 5 questions.
Merchant constraints
A merchant payment app doesn't get to assume a quiet room, a stable network, and a two-handed operator. The operating environment shaped every design decision — sometimes more than the feature list did.
The customer is waiting. Each payment has to complete in seconds, not steps. The design has to reduce hesitation at the moment of payment.
The merchant often holds a product or receipt in the other hand. Every primary action must be reachable with the thumb of the hand already on the phone.
Markets, small shops, delivery runs. The interface can't rely on subtle motion or quiet copy — critical states need to read at a glance in bright light and busy backgrounds.
Payment flows have to communicate what the app knows and what it doesn't. A pending state is not a failure — but it must never look like success either.
Merchant + customer both watch the same screen at the moment of truth. Success and failure need immediate, unambiguous visual language — no room for interpretation.
When something fails — network drop, card decline, QR timeout — the merchant needs a one-tap path to retry or fall back to a different method, without losing the amount.
"Did that last payment go through?" is asked constantly. Transaction history has to be one tap away and readable at a glance.
End-of-day the merchant needs to close out — total revenue, count by method, disputed transactions. This isn't a report screen; it's part of the daily rhythm.
Every money-moving screen carries a trust cost. Confidence comes from consistency: same status vocabulary, same confirmation language, same recovery affordance across every payment method.
Merchant workflow
The whole product hangs on this loop. Getting the sequence right — and making the state visible at every step — mattered more than any individual screen.
01
Idle
Open app
02
Card / QR
Choose payment method
03
Input
Enter amount
04
Processing
Generate QR / process card
05
Awaiting
Confirm payment
06
Success / Fail
Show payment result
07
Recorded
Issue receipt / save txn
08
Review
Review history
09
Close-out
Reconcile daily revenue
Process
My process began with analyzing mPOS.vn, Payoo, and Square to understand common payment flows, merchant workflows, and UI patterns before defining opportunities for EzPOS. Each step fed into the next, with the earlier steps re-visited when later steps surfaced new assumptions.
01
VN · Domestic referenceStudied for
Payment flow, POS device connectivity, transaction management
02
VN · Merchant leaderStudied for
QR payments, transaction history, merchant-facing experience
03
US · Global benchmarkStudied for
One-handed checkout, design system rigor, modern POS flow

Process visual — 7 methods from competitor analysis to UI design
Merchants have one hand for the phone and one for the product. Primary actions belong in the bottom third of every screen.
Design decisions
Six choices carried most of the weight. Each was resolved by asking the same question — what does this merchant, in this moment, actually need?
DECISION
WHY
Card and QR run on different mental models — card is a physical action (tap / insert), QR is a scan-or-show. Merging them into one flow forced merchants to re-read the screen each time. Splitting them at the entry point lets each flow render only what's relevant to that method.
DECISION
WHY
The merchant is already holding the phone in the hand that will tap the CTA. Placing 'Confirm' or 'Charge' in the bottom third of every screen means the payment can be completed without shifting grip — which matters when the other hand is holding the customer's product.
DECISION
WHY
The two questions merchants open the app to answer are 'how much did I make today?' and 'did that last payment go through?'. The dashboard answers both above the fold — everything else lives one tap away.
DECISION
WHY
In a bright market or a busy shop, color alone fails. Every status — pending, processing, success, failed — carries a shape (icon), a color, and a label. Three redundant signals so the merchant reads the state at a glance even in awkward lighting.
DECISION
WHY
The list gets long fast. A filter row above the list (date · method · status) is faster than scrolling, and the filter chips double as a visual summary of what the merchant is currently looking at.
DECISION
WHY
Payment moments are high-contrast — the merchant looks at the screen briefly, in bright outdoor light, then back at the customer. A dark canvas makes the accented CTA and status pop harder than a light theme would; the green reads well outdoors and doesn't wash out under sun.
Payment states & edge cases
A payment app fails badly if a merchant can't tell whether the money moved. I defined six canonical states that any transaction can be in — plus a set of edge cases the design has to handle without falling back to \"something went wrong.\"
STATE
Pending
Waiting for the customer or the payment method.
STATE
Processing
Sent to the payment provider; waiting for the result.
STATE
Success
Confirmed by the provider. Money moved.
STATE
Failed
Explicit failure from the provider or timeout.
STATE
Refunded
Merchant-initiated reversal of a completed txn.
STATE
Cancelled
Merchant or customer aborted before completion.
EDGE CASES · WHERE THE DESIGN HAS TO HOLD
Component thinking
The merchant looks at these components thousands of times a month. They had to be consistent, reusable, and readable at speed — every new screen composes from the same building blocks so nothing surprises the muscle memory.
Card, QR, cash — same shape, same tap target, same visual weight. The merchant chooses in a glance, not by reading.
Four tabs, thumb-reachable — Home, Pay, History, Settings. Same on every screen so re-entry is muscle memory.
Amount + method + status + time — always in the same order, same alignment. Scanning a list of 100 is a single sweep of the eye.
Icon + color + label. One badge design carries all six states; the state name never renders alone.
Full-width, large, thumb-typed. Currency and denomination handled by input mask so the merchant can't enter a malformed number.
One primary action, one secondary. Amount + method summarized above the fold. No decorative content between the merchant and the tap.
Same layout for success and failure — only the icon, color, and copy change. Familiar structure means no re-orientation at a critical moment.
Every screen has its empty (no transactions today) and error (network lost, provider timeout) state. Composed from the same primitives so they never look like bugs.
Toast for transient info, banner for state the merchant needs to act on. Never confuse them — a merchant reading a toast expecting a banner is a support ticket.
Final UI

Final UI — mobile POS screens across the checkout, history, and settings flows
Validation & collaboration
Merchant time is expensive and hard to book. The design was validated through the review paths that were available — prototype walkthroughs, design critiques, and stakeholder reviews — with each session focused on a specific lens the design had to survive.
COLLABORATION · WHO SHAPED THE DESIGN
Design decisions were aligned against three lenses at every checkpoint: payment rules with the Product Owner, Product Manager, and Business Analyst — what the payment provider actually returns and when; technical feasibility with engineering and QA — which states the SDK could reliably surface, which edge cases could actually happen in production; and merchant operations with business + payment stakeholders — how a real shop closes a day, what a support ticket usually looks like, where confidence breaks down.
Reflection
Merchant payment UX is less about adding more features and more about reducing hesitation at the moment of payment. When a merchant is serving a customer, the interface has to make the next action obvious, the payment status clear, and recovery from errors simple. Everything else — visual polish, animation, decorative content — is subordinate to that.
The design work that mattered most on this project happened before any high-fidelity screen: mapping the merchant's constraints, drawing the payment workflow, naming the states, deciding the vocabulary of confirmation and recovery. When those foundations were honest, the visual system had a shape to fill. When they were fuzzy, no dark theme or green accent covered it up.
TAKEAWAY 01 — SPEED IS THE FEATURE
In a merchant payment product, the shortest path from open-app to money-moved is the whole product. Every decorative element gets weighed against how much it slows down that path.
TAKEAWAY 02 — STATUS CARRIES TRUST
In a financial product, worker trust lives in the status field. Success + failure need shape + color + label together, not any one alone — the merchant reads the state before they read the words.
TAKEAWAY 03 — DESIGN FOR THE MERCHANT'S HAND
One-hand operation isn't a nice-to-have — it's the actual usage pattern. Primary actions belong in the bottom third of every screen, and the design has to survive noise, sun, and an unstable network.