Skip to content
← Writing

2026-03-01 · 6 min read

Shipping Stripe payments on a Next.js product

How treasury and payment flows stay reliable when the UI, API, and regulated rails have to move together — lessons from production FinTech work.

The problem

Adding Stripe (or any payment rail) to a React / Next.js app is rarely “drop in a Checkout button.” Approvals, webhooks, ledger state, and UI status all have to agree — especially when spend limits and multi-step approvals sit on top of the money movement.

On COOWN, treasury UI and coown-api orchestrate transfers and settlement so the workspace stays aligned with regulated euro rails instead of treating the bank as a side screen.

What worked in production

Keep payment orchestration on the server. Thin Next.js or API routes validate input, create PaymentIntents or session objects, and never trust the client for amounts or approval state.

Drive UI from webhook-backed status. The client reflects what the backend already recorded — succeeded, failed, requires action — not what the browser hopes happened.

Model approvals separately from settlement. Role-based spend limits and multi-step approvals belong in your domain layer; the payment provider confirms money movement once those gates pass.

When to hire this kind of help

If you need Stripe (or similar) wired into an existing Next.js product with auth, roles, and real settlement — not a demo Checkout page — that is a fixed-scope sprint I take on regularly.

Related case studies

  • COOWN Treasury infrastructure for SMEs and startups, combining accounts, approvals, governance, invoicing, and regulated euro rails.