The grid is the easy part
A page of products with photos and prices is the part of an online store anyone can generate now. It is also the part with the least say in whether the store makes money. The work that decides that sits underneath: checkout that settles every order, product data that holds up as the catalog grows, and accounts that belong to you.
We have built this twice in very different shapes. White Thorn Gallery came to us as a jewelry and fine-art business with no online store, and it had to take real payments on day one. The Outlaws had product and an audience but no storefront to sell through. Different brands, same unglamorous plumbing underneath.
Checkout is wiring, not a plugin
Taking a payment is easy. Taking a payment your system reliably records is the actual job. When we say checkout is wired end to end, we mean the whole chain: the price on the page is the price charged, Stripe handles the card, and a confirmed order lands on your side once the money settles.
That is the bar we wire to. White Thorn Gallery is a Next.js storefront with Stripe checkout wired end to end, including webhooks so orders settle cleanly. The Outlaws is an online store on Next.js and Firebase with Stripe checkout, iterated across versions as the brand grew.
If you are hiring someone to build your store, ask them to trace a dollar for you. From the buy button to your bank: what fires, what records the order, and what happens if a step fails. A builder who cannot walk that chain has installed checkout, not wired it.
The order that survives a closed tab
Here is the failure most store builds ignore. The happy path goes: customer pays, Stripe redirects them back to your success page, and that page load triggers the order. The problem is that the redirect is the flakiest link in the chain. Phones lock, tabs close, connections drop.
If your order only exists when that success page loads, a dropped redirect means a charged customer and no order on file. The money moved; your store never heard about it. You find out when the customer emails asking where their confirmation went.
Webhooks fix this. Stripe calls your server directly when a payment settles, retries if your server does not answer, and does not care what the customer's browser did. That is why the White Thorn build includes webhooks: the order settles because Stripe confirmed it, not because a page happened to load.
Products are data before they're pages
Before anyone designs a product page, someone has to decide what a product is in your catalog. That sounds abstract until you sell more than one kind of thing, and most businesses do.
White Thorn sells jewelry and fine art side by side, and those are different shapes of product that had to live in one catalog and one checkout. We structured the catalog to hold both without forcing one into the other's template. Get that structure wrong and every new listing becomes a workaround.
The Outlaws' store was iterated across versions as the brand grew. That is the normal life of a store: launch is version one, not the finish line. How you model products early decides whether version two is an update or a rebuild.
The launch plumbing
A finished store that nobody can find is not a store yet. Between built and launched sits a short list of small jobs that decide whether anyone shows up.
For White Thorn that meant handling the domain, taking the site live off its coming-soon gate, and submitting the store to Google Search Console and Bing Webmaster. None of that is design work. It is how search engines learn the store exists, and it is part of the build, not an extra.
If you are launching on your own, the minimum list: domain registered under your own account, HTTPS working, Google Search Console verified, sitemap submitted. It takes an afternoon, and it beats a launch post.
Whose name is on the accounts
The last part of a store build is the one most owners never think to ask about: where does it all live? Our answer does not change. Everything ships to your accounts: your domain, your code, your data, and the Stripe account the money lands in.
For a store this matters more than for any other kind of site, because the store is a revenue line. If checkout runs through someone else's payment account, or the domain sits in someone else's registrar, your revenue has a landlord. The test is simple: could you fire us tomorrow and keep selling? Every store we ship has to pass it.
That ownership is the point of the whole build. We build the system, then we keep it running while you run your business, and you can walk away clean at any point because everything already lives in your name. If you are planning a store, or you have one whose plumbing you have never traced, talk to us.
Working on something like this? Tell us what you need or see the related service.