WebFintechDesign System2024

Fintech Platform

Web / Fintech / Design System

A trust-first interface for finance teams who don't forgive ambiguity. Designed dense, designed dark, designed to show its work.

All work
01At a glance

Role

Lead UX/UI Designer — sole designer on the project, responsible for end-to-end design across all surfaces, working directly with the founder and PM.

Scope

  • Platform application — 150+ screens across reconciliation, ledger, data sources, dashboard, account management, audit logs, and auth
  • Admin panel
  • Design system and component library

Timeline

3–6 months, start to production launch.

Team

Solo designer paired with a PM. Direct line to the founder for product decisions. Worked alongside the engineering team for handoff and implementation review.

Context

Early-stage startup environment — founder + small founding team. End-to-end ownership across discovery, system design, and shipping, with no senior designer above me to defer decisions to.

Status

Live in production with early-access and pilot customers.
02The problem space

Fintech finance teams (controllers, CFOs at modern fintechs) face a structural pain: reconciling thousands of transactions across banks, payment processors like Stripe, and ERP systems is largely manual, error-prone, and slow. A typical month-end close takes around two weeks. When discrepancies surface during audits or due diligence, teams scramble through Excel sheets to find them.

The product's bet: replace manual reconciliation with an automated, AI-assisted system that ingests data from any source, matches transactions automatically, and surfaces only the exceptions a human needs to review.

03Hero story · 01 of 03
Hero 01 / 03

Designing the transaction matching UX

The challenge

The core job of the platform is matching transactions across data sources. In simple cases, one bank entry matches one Stripe payout. In real life, a single bank deposit might correspond to 30 individual Stripe transactions across multiple days. Users need to see the relationship at a glance, verify it, and either accept the match or break it apart.

The insight

Early in the project, our PM brought back a finding from finance users that reframed the problem for me. The hardest part of their day wasn't finding discrepancies — it was trusting the matches the system suggested. Their existing tools would say "matched ✓" with no visible reasoning, and they'd still re-verify everything in Excel anyway. That changed my brief: the matching screen wasn't a confirmation screen; it had to be a forensic view — every match needed to show its work.

Hidden destructive actions kill trust faster than wrong matches do.

My approach

  • Designed a split-pane layout: the source transaction lives in a compact left rail (preserving context), while the right side hosts a full table of the matched counterparts with pagination and filters. Both sides visible simultaneously, by design — so the user can compare without clicking back and forth.
  • Built a tabbed system (5 tabs) so the same transaction can be viewed across different lenses — match details, related transactions, transaction logs, raw data — without leaving the page. The "raw data" and "transaction logs" tabs were specifically there to give finance users the audit trail they needed before trusting the match.
  • Made the "Unreconcile" action a first-class primary button, not buried in a menu. If a user disagrees with an automated match, they need to break it without hunting.
  • Designed a right-side drawer (~396px wide) that surfaces additional context — notes, history, related metadata — without taking the user away from the matching view.

The trade-off

Density vs. simplicity. I chose to expose the full table directly on the page rather than hide it behind expandable rows. Finance users prefer scanning over clicking — they're used to spreadsheets where everything is visible at once. The vertical space cost was worth it.

Outcome

The matching flow shipped as a core part of the live product. Through our PM, finance users gave positive feedback on the forensic / audit-trail approach — specifically that being able to see why a match was suggested gave them enough confidence to stop double-checking everything in Excel.

Image placeholder · Transaction matching screen, 1-to-many split-pane view
Transaction matching — 1-to-many view, split-pane layout
04Hero story · 02 of 03
Hero 02 / 03

The data source onboarding wizard

The challenge

For the platform to reconcile anything, customers must first connect their data sources — banks, ERPs, payment providers, internal databases. Some sources are API-connected ("Online"); others are manually uploaded files ("Offline"). The Offline flow is harder because the user has to describe their own data to the system: which column is the transaction ID, which is the amount, which is the status, what status values mean what.

This is configuration work that ML systems usually hide from users. But here, getting it wrong silently means every reconciliation downstream is wrong. The wizard had to surface the complexity without overwhelming finance users.

The insight

This was the screen that took the most iterations to land. Not the visuals — the flow itself. Early versions grouped steps logically (all field mapping together, then all status work, then transforms), but in testing the logical order didn't match how users actually thought about their data.

The version that shipped — Core Fields → Supporting Fields → Status Value → Review — came after several rounds of restructuring. It's not the most elegant taxonomy on paper, but it matches how a finance user actually opens a CSV and tries to understand it.

The four steps

  • Core Fields — map the essential columns (transaction ID, amount, date).
  • Supporting Fields — optional metadata (description, reference, customer ID).
  • Status Value — translate the customer's status terminology into the platform's canonical set.
  • Review — full preview of what was mapped, before commit.
  • A "Data transform" step lives between mapping and review — for cases where the customer's CSV needs splitting, formatting, or coercing before it's usable. Power-user territory, but absolutely necessary.
  • A persistent "ask AI copilot" button sits on every wizard step so users can get help in context without losing their place.
  • Side navigation stays visible throughout the wizard rather than going full-screen modal — finance users often need to jump back to check another part of the system mid-config.
  • Free navigation between steps with persistent state — a linear wizard would have been easier to design, but harder to recover from when the user realizes step 1 was wrong at step 3.

Outcome

The wizard shipped as the entry point for every Offline data source connected to the platform, and is currently in use with early-access and pilot customers. The step ordering proved durable enough to ship without further restructuring after launch.

Image placeholder · Data source onboarding wizard — Core Fields step
Data source onboarding — Core Fields step of the four-step wizard
05Hero story · 03 of 03
Hero 03 / 03

The dashboard — making dense data scannable

The challenge

The dashboard is the first surface a finance lead sees every morning. It needs to answer one question fast: what needs my attention today? But the underlying data is huge — reconciliation status across all sources, account activity, data source health, and exceptions queues.

The insight

My first version leaned cleaner — fewer cards, more whitespace, one or two key metrics surfaced at a time. The founder pushed back: finance users wouldn't open a separate page to find each number. They wanted everything on the front page, simultaneously, scannable in one glance. Density wasn't a problem to solve — it was the requirement.

That reframing forced a redesign. Instead of asking what's the most important number, I had to ask how do I make six things equally legible without any one drowning the others. The answer was strict componentization: every card uses the same shell, header, and chart styling. The eye learns the rhythm in two seconds and can then scan content rather than navigate layout.

Density wasn't a problem to solve — it was the requirement.

My approach

  • 6-card grid layout — three donut charts (reconciliation, accounts, data source overviews) up top, two data tables below, and an accounts activity panel.
  • Donut charts deliberately, not bar/line — the user's mental model here is proportion of completion on a single day, not trend over time.
  • "Last update" timestamp + reload control in the header — finance users need to know whether they're looking at fresh data before making decisions. Non-negotiable in financial UI.
  • Skeleton loader states in two variants, so the perception of speed matches the platform's hours-not-weeks promise.

The system-level decision

Every card uses the same component shell — same border, same radius, same header pattern with title plus dropdown filter. This let me build out the dashboard quickly and gave finance users a predictable scanning rhythm. The founder's density requirement only works if the user's eye knows where to land.

Outcome

The dashboard shipped as the platform's home screen and is what every pilot customer sees on login. The componentization paid off downstream — the same card-shell pattern was reused across the ledger overview, account overview, and reconciliation result screens, which let me build out the rest of the platform faster without redesigning each surface from scratch.

Image placeholder · Dashboard with six-card grid, donut charts, and data tables
Dashboard — six-card grid, three donut charts up top, data tables below
06What I built underneath

Component library

Six-plus data-source category icons (bank, ERP, payment provider, manual transaction, generic, database), tabs, dropdowns, tooltips, multi-padding toasts, badges, and a 7-variant filter system.

Table system

Custom table cells and headers as instances, used consistently across reconciliation, ledger, account, and audit log screens.

Auth flows

Login, forgot password, check email, reset password, account verify — full set, designed to match the dense aesthetic of the app rather than feeling like a marketing landing page.

Documentation pattern

A repeating pattern for in-app help and contextual documentation, used in 7+ places. Standardizing this meant the team could add inline help to new surfaces without redesigning the pattern each time.

07What I'd do differently

Tighter information architecture in matching

The 5+ Transaction Details frame variants suggest the IA could be tighter. With more time, I'd consolidate the matching variants (1-to-1, 1-to-many, related transactions, logs) into a single canonical screen with tab/state changes, rather than five separate frames.

More direct user research, less PM-relay

Most of my user insight on this project came through our PM. I trust how he relayed it, but for a product where trust is the whole game, talking directly to finance users one or two times during the project would have shortened a few iteration loops — especially on the wizard flow.

Settle density debates with prototypes, not discussions

The dashboard density debate could have been settled with a clickable prototype on day one, not two rounds of redesign discussion with the founder. A density-comparison prototype aligns stakeholders faster than slide-deck arguments.

08In summary
  • Live in production with early-access and pilot customers
  • 150+ screens across reconciliation, ledger, dashboard, admin, and auth
  • Reusable card-shell system that powered downstream surfaces without redesign