Skip to content
TP
← All work
Shipped2025 – 2026

Outpay

Non-custodial USDC checkout that merchants can actually reconcile.

Next.jsTypeScriptBaseUSDCviemPostgreSQLWebhooks
outpay.app

checkout

128.40 USDC

order #A-4417 · base

Merchant wallet
Non-custodial
Gas sponsored
confirm payment

reconciliation

A-4417128.40settled
A-441664.00settled
A-4415212.75pending
A-441439.90settled

export → csv · matches order ledger

Non-custodial

Funds move customer to merchant directly. The platform is never in the path.

Reconciliation ledger

On-chain transfers matched back to order references, exportable for accounting.

Settlement state

Optimistic confirmation at checkout, resolved to final in the background.

Hover a marker to see what each part of the interface does.

Settlement time

01

{{SETTLEMENT_TIME}}

Fee vs card rails

02

{{FEE_DELTA}}

Checkout completion

03

{{CHECKOUT_COMPLETION}}

Merchants onboarded

04

{{MERCHANTS_ONBOARDED}}

01

The problem

What was broken before any of this existed.

Crypto checkout products are built for crypto users. Merchants care about settlement, refunds, chargeback exposure and whether their accountant can close the month.

Small ecommerce merchants who want stablecoin settlement without custody risk or a finance rewrite.

Constraints I worked inside

C01Non-custodial by design, so no holding merchant or customer funds at any point
C02Chain confirmation times do not match checkout expectations
C03Merchants will not adopt anything that breaks their existing order flow
90

ownership

end to end

75

role span

of four tracks

85

shipped

reached users

02

What changed

The same job, before and after the work.

Before

  • Crypto checkout built for crypto users
  • Custody risk merchants would not accept
  • Payments that accounting could not reconcile
  • Checkout spinning through block confirmations

After

  • Non-custodial by design, no funds held
  • Order references matched to on-chain transfers
  • Exports an accountant can close the month with
  • Optimistic confirmation, reconciled in the background
03

The system, end to end

How a request travels through it.

INTENTmerchant creates a pay01CHECKOUTcustomer pays USDC on 02WATCHconfirmation watcher r03WEBHOOKmerchant system receiv04RECONCILEdashboard exports rows05
01

merchant creates a payment intent with amount and order reference

02

customer pays USDC on Base directly to the merchant address

03

confirmation watcher reconciles on-chain transfer to the intent

04

merchant system receives a settled event with the order reference

05

dashboard exports rows an accountant can match to orders

04

Where the effort went

Effort split and how quality moved.

$stat --effort

Where the time actually went

effort
  • Merchant dashboard38%
  • Settlement and reconciliation37%
  • Checkout surface25%

$plot --trend

How it moved

w1w2w3w4w5w6w7w8
checkout completion through iterations, shape only
05

Decisions

Every call I made, and the tradeoff I took for it.

  1. Why

    Custody turns a software product into a regulated money business, and it is the single biggest reason merchants say no.

    Tradeoff accepted

    Refunds and disputes get harder, because there is no pooled balance to reverse from.

    Weighting

    gain
    cost

    my judgement, not a measurement

  2. Why

    A checkout that spins for block confirmations loses the sale.

    Tradeoff accepted

    A small window where an order is marked paid before it is fully final, which the ledger has to resolve.

    Weighting

    gain
    cost

    my judgement, not a measurement

  3. Why

    The buying decision happens when a merchant sees their month close cleanly.

    Tradeoff accepted

    Slower top of funnel while the product had no public face.

    Weighting

    gain
    cost

    my judgement, not a measurement

06

Outcome

What was true after it shipped.

01

Merchants can accept stablecoin payments without custody exposure or a new finance process.

02

Reconciliation exports mean crypto revenue lands in the same books as everything else.

03

The webhook contract mirrors familiar payment processors, so integration is a small change rather than a project.

What worked

Designing backwards from the accountant instead of forwards from the chain.

What was hard

Refund flows. Non-custodial refunds are genuinely harder and I underestimated that at the start.

What I would change

I would validate merchant willingness to pay earlier, with a pricing conversation before the dashboard build.

$./next-step

Hiring for a product engineer who can carry the whole thing?

Send me the role and the problem behind it. I will tell you honestly whether I am the right fit.