Case study

Finqu Marketplace

A marketplace for discovering, purchasing, and accessing applications, built as a headless storefront on top of the commerce platform.

Stack
  • TypeScript
  • React
  • Next.js
  • Storefront GraphQL
  • Node.js
  • PostgreSQL
  • Stripe Connect
  • OAuth 2.0
  • Vitest
  • Playwright
MERCHANT STOREACCOUNTMARKETPLACE CATALOGUEPARTNER PUBLISHERENTITLEMENTDISCOVEROAUTH / PKCEPUBLISHPURCHASEGRANT ACCESS TO THE CONNECTED STORE
01

architecture

A headless storefront with its own application behind it

Marketplace is a Finqu headless storefront. Product, category, and digital-asset data come from the platform through Storefront GraphQL, so the catalogue remains a commerce concern rather than something the marketplace re-implements.

The customer-facing marketplace is a separate React and Next.js application with its own PostgreSQL database and purchase records. It also shows what a polished product built on the headless storefront capabilities can look like.

Payment is a separate boundary. Stripe processes it on the seller’s connected account; it does not run through the platform’s hosted checkout.

02

system flow

Purchase and entitlement flow

  1. 01Discover

    Browse catalog data read through Storefront GraphQL.

  2. 02Purchase

    Complete payment through Stripe on the seller’s account.

  3. 03Record

    Persist the purchase and a transactional outbox event.

  4. 04Grant

    Propagate the entitlement to the connected platform.

03

engineering

Keeping the purchase flow trustworthy

  • Server-side price integrity rather than trusting browser values
  • OAuth 2.0 with PKCE for user-facing authorization
  • HMAC-protected service contracts
  • Transactional outbox processing for reliable cross-system changes
  • Layered unit, integration, and browser testing
Previous case
MERCHANT APPLICATIONCATALOGORDERSCUSTOMERSCHANNELSSHARED DOMAIN SERVICESASYNC
Finqu Commerce

Next step

Interested in this kind of work?

I'd be happy to talk through the decisions behind this case or the kind of problem your team is working on.

Next case
CATALOGLIQUIDXMLJSONCSVTEXTDELIVERYSCHEDULED REFRESH
Finqu Feeds