CodePay · Fintech Startup · 2025.07 — Now

Designing Decision Infrastructure
in High-Risk Payments

Founding designer building a cross-product design system, refactoring high-trust workflows, and shipping a fast feedback-to-release loop across two payment products.

CodePay product montage — merchant portal, register, dashboard

Role

Founding Designer + PM

Scope

Design System · Risk-aware UX · End-to-End Ownership

Tools

Figma · Figma Make · AI-assisted workflow

Industry

Fintech

Impact

What shipped, what changed

Scale

7,000+

Active terminals processing ~400K weekly transactions

Onboarding

~30%

Reduction in setup complexity through guided stepper redesign

Adoption

6,000+

Terminals running the v3.0 rebuild post-launch

GTM

Interactive AI-driven prototypesvia vibe coding to help stakeholders align on value, risk controls, and roadmap priorities for external pitching. Official website + pitch assets that standardized messaging & reduced sales “explain cost.”

Challenge → Strategy

Why it’s hard, and how we responded

Three structural pressures shaped the work. Each one demanded a different response — read across the rows to see the pairing.

The Challenge
Our Response
01

High-risk payments

Mistakes cost money and trust. Every interaction with the payment flow carries real financial consequence.

Patch Track

Risk-ranked fixes from real feedback. Guardrails and validation that solve what’s urgent today.

02

Multi-product scaling

Inconsistent states, definitions, and patterns across products made coherent experience impossible.

Platform Track

Rebuild the system in parallel with staged rollout. Feature flags, gradual migration, one source of truth.

03

Limited resources

Must patch what’s broken today while rebuilding the entire system for tomorrow.

Prototype & AI Workflow

Rapid demos + AI-assisted iteration to run tight build-measure-learn loops: align, test, ship.

01

Patch Track

I turned noisy requests into high-leverage fixes with guardrails and consistent state patterns.

Lots of needs from customers

Real customer feedback grouped by theme

Prioritize in our requirement pool

Issue tracker with risk-ranked patches

The pipeline

From noisy requests to high-leverage fixes

01

Lots of needs from customers

02

Organize & prioritize in our requirement pool

03

From noisy requests to high-leverage fixes

04

Small iterations, fast launch, aligned with expectations

Four principles became the connective tissue across the work — guiding the patches below, and recalled in every rebuild that follows.

Four design principles

Principle 01
State Visibility

Make system state always visible

When people are moving fast, they fill in the gaps. An ambiguous system doesn’t pause anyone — it just gets interpreted, often wrong. Showing the right state at the right moment is the cheapest form of error prevention.

Refund UI before and after

Problem

System previously only supported full refunds. Adding partial refund meant staff had to make decisions with no feedback on selections or remaining amount.

Decision

Refund screen updates in real time as selections change: remaining refundable amount, per-item breakdowns, and running total all reflect the current state instantly.

Ops Platform v2.5.0

Principle 02
Error Prevention

Prevent errors before they happen

The best error message is the one that never appears. The earlier you catch a mistake — through structure, constraints, and real-time feedback — the less damage it can do.

Card input step-by-step progression

Problem

Manual card entry had no field-by-field guidance. Staff could move between fields without completing them correctly.

Decision

Redesigned with auto-focus jump logic, input highlighting, and confirm disabled until all fields pass validation.

Payment App v2.1.7

Principle 03
Cognitive Load

Reduce cognitive load at the moment of action

Attention is finite. Every extra element competing for focus at a critical moment is a cost paid in mistakes and slowness. Good design doesn’t ask people to ignore what’s irrelevant — it just doesn’t show it.

Template config vs management separation

Problem

Configuration template options could be edited in place, creating ambiguity about whether changes affected current setup or saved template.

Decision

Split into two distinct contexts. The template panel during configuration only allows applying a template; edits happen on a separate management page. Same content, different intent, different surface.

Ops Platform v2.5.1

Principle 04
Reversibility

Keep dangerous actions reversible and distinct

Not all actions are equal, but they can easily look that way. When something can’t be undone — or carries consequences beyond the current screen — the interface should make that difference felt, not just stated.

Partial approve before and after

Problem

Partially approved transactions used the same visual language as completed ones. Merchants often didn’t register the remaining balance to collect.

Decision

Surfaces the remaining amount and next steps immediately, without an extra tap. Skip is still accessible, but no longer the path of least resistance.

Payment App v2.1.8

What patches couldn’t reach

Patches solved what was urgent — but revealed harder problems. The design files had no shared system: every fix siloed, no source of truth, nothing cleanly handed off. And structurally, the information architecture had problems that incremental changes couldn’t reach. The only path forward was a rebuild.

02

Platform Track

I reduced design debt and improved consistency via componentized IA and a governance-ready system.

Cross-Product Design System

Before designing anything, I built the thing that makes design scalable. Built a cross-product foundation on top of an open-source library, reskinned with brand tokens: colors, type scale, spacing. One source of truth for everything across all products.

Build the thing that makes design scalable, before designing anything.

Design system — colors, typography, tokens
Product01

PayPilot

Partner Ops Platform — Onboarding Restructure

Role · UX Design & Information Architecture

Led rapid prototyping using AI-assisted tooling (Figma Make) to accelerate alignment across PM and engineering.

The core problem: nobody could learn it without training.

01
False completion signal

Users are told they've 'completed' onboarding, but still need to perform critical setup steps — creating confusion and mistrust in system feedback.

02
Shared UI with management → high cognitive load

Onboarding reuses management screens directly, so setup users see features they don't need yet. Focus and cognitive load both suffer.

03
No guided flow or progress tracking

There is no structured onboarding journey, checklist, or progress indicator — users cannot tell what's done, what's missing, or when they are truly finished.

The solution

The fix was structural: collapse everything into a three-step guided stepper, strip management actions out of the onboarding context entirely, and make completion criteria explicit at every step.

Three structural moves, each pictured in turn.

01 · Guided stepper

Stepper + footer annotated

Stepper and footer provide clear progress and system status; validation gates progression so the CTA only activates when all required inputs are complete.

State VisibilityError Prevention

02 · Management out of onboarding

Management Page vs Onboarding Page comparison

Decoupling management from onboarding prevents context switching and distraction. Clear separation ensures onboarding remains focused, linear, and completion-driven.

Cognitive Load

03 · Completion criteria, explicit

Onboarding success and incomplete states

Explicit status feedback builds confidence and reduces ambiguity; inline recovery actions enable quick resolution without restarting the flow.

State VisibilityError Prevention

One IA decision that looks small but isn’t.

Sub-stepper with sidebar navigation
Linked sidebar navigation reduces friction in long, scroll-heavy forms. Sub-stepper introduces granularity, making complex setup easier to track and complete.

Adaptation

When engineering scope changed, the design had to adapt.

The original plan unified all onboarding steps in one platform. Engineering confirmed it wasn’t feasible for this release — a key step had to live in a separate system. The revised approach: instead of asking users to find it themselves, that step became a direct deep-link into the exact right place in the other platform. One click, no navigation overhead. The constraint stayed invisible to the user.

Onboarding success state deep-linking into the connected app deployment platform
From “Success” state, one click deep-links the user into the right place in the deployment platform.
App management before and after — TMS integration

Process Deep-dive

On Using AI to Move Faster

This project was IA-heavy and multi-page, with a PM who needed to review and iterate quickly. The traditional approach (design in Figma, export, review, revise) was too slow for the pace we needed. I chose Figma Make specifically because it outputs something interactive: PM could click through flows directly, engineering could flag feasibility issues early, and I could react to real feedback instead of guesses.

2 days

From PRD to a working prototype in front of the team

100+

Iterated versions before exporting to Figma

01

Define structure & constraints

02

Build mid-fi flows fast

03

Iterate with interactive prototypes

04

Refine & finalize in Figma

Tradeoff I didn’t fully anticipate

Figma Make builds its own token structure. Visually close to the design system, architecturally separate. Some issues (misaligned states, broken component logic) were faster to rebuild from scratch than to fix inside the AI output.

AI accelerated the decisions, not the craft. The hard parts — flow logic, edge states, what to show and what to hide — still required human judgment at every step. What changed was how quickly we could get those decisions in front of the right people.

Result

30%cut in estimated setup effort, internal test

Product02

Register

Payment App — v3.0 UI/UX Rebuild

UX/UI Design Lead. Collaborated with PM on product direction; worked within engineering constraints on transaction logic that couldn’t change.

The market context was simple: most POS apps for small businesses are overdue for a rethink.

Cluttered interfaces, unclear system states, high support ticket volume from merchants who couldn’t figure out what went wrong — these were industry-wide symptoms.

For a product running at this scale, the cost of friction isn’t abstract. Every extra tap, every misread state, every confused staff member is a real operational problem for a real business.

7,000+

Active terminals

400K+

Weekly transactions

v3.0 had one goal

Rebuild it so it’s fast enough for a rushed cashier, clear enough to learn without training, and consistent enough to scale. Transaction and payment logic was off-limits — the tools available were clarity, hierarchy, and sequence.

CodePay Register hardware in real cafe and bar settings

Foundation

Register Component Library

Building on the cross-product design system, I built a Register-specific component library. Navigation bars, custom keyboards, buttons in every state, list rows, status chips, data display modules. Then locked the tokens: colors, type scale, spacing rhythm. Every screen that came after was built from these pieces.

Register component library

Two decisions shaped the whole rebuild.

Decision 01

Split one screen into two

The solution wasn’t simplification, it was separation of concerns.

Cognitive LoadError Prevention
  • Before

    • One screen serves two audiences (staff + customer)
    • Cost breakdown and tip input mixed
    • Blurred responsibility leads to confusion and errors
  • After

    • Split flow by role: staff vs customer
    • Staff confirms payment; customer selects tip
    • Clear handoff reduces errors and aligns with real-world interaction

Before

Register v2 — old keypad UI

After

Register v3 — new keypad UI

Decision 02

Let state drive the interface

State VisibilityReversibility
  • Before

    • Key status and transaction type buried in dense fields
    • Requires full reading to understand context
    • High cognitive load before taking action
  • After

    • Status surfaced first with clear, combined indicators
    • Type and result visually encoded for quick recognition
    • Scannable layout enables instant understanding without deep reading
Transaction detail old vs new

Edge Cases & Real-World Variability

The rest follows the same language. Edge cases considered.

Handles large amounts, long fields, and overflow gracefully. Maintains clarity across extreme states (failed, voided, partial flows). Designed for real-world variability, not just ideal paths.

Post-Launch

6,000+

Terminals running v3.0

Streamlining staff workflows and reducing operational errors based on post-launch user feedback.

Takeaways

Payments UX = trust & risk management

Status visibility, error prevention, and reversibility matter more than visual polish. In high-risk payments, trust is the product.

Data truth is a product surface

Semantic rigor — time ranges, definitions, consistent terminology — is what makes dashboards believable and decisions possible.

Dual-track delivery is a founding designer's real job

Patch keeps trust today; platform rebuild enables scale tomorrow. The skill is knowing which to prioritize at every moment.

AI should be an acceleration layer for decision loops

But only with guardrails, confirmation, and traceability. AI accelerated the decisions, not the craft.

Thanks for reading

View More Projects