All case studies
ShippedFintech · Mobile UX2024 — 2025
ScanPayGo
QR-first checkout designed for small retail — no app, no account required to complete a payment.
Role · Full-stack engineer
Overview
A scan-to-pay experience designed for merchants whose customers shouldn't need an app, an account, or a card on file to complete a purchase.
Problem
Small merchants want UPI-style payment ergonomics without committing to a specific wallet or POS terminal. Existing flows force account creation up front, which kills conversion at the counter.
Solution
A QR-anchored checkout that opens directly to a one-screen pay flow — totals, method, confirmation — with optional account creation moved to after a successful payment.
Architecture
Stateless web client behind a versioned API, idempotent payment intents, server-side retries on webhook failures, and a small reconciliation worker that closes the loop with the provider's settlement reports.
Tech stack
- React
- TypeScript
- Node.js
- PostgreSQL
- Stripe
Engineering decisions
- Idempotency keys at the request boundary — never at the database — to keep retry logic in one place.
- Account creation deferred to post-payment to remove the largest funnel drop.
- Webhook handler is the source of truth; the client never marks a payment complete.
Challenges
- Reconciling provider-side states with local intents required modeling payments as a state machine with explicit transitions and a replayable event log.
Lessons learned
- The right unit of correctness in payments is the state machine, not the request.
- Every UX shortcut at the counter pays for itself in conversion.
Future improvements
- Offline-tolerant capture for spotty venues.
- Merchant analytics surface with cohort-level retention.
Links
Links coming soon.