The same store,ownedand rented.
The brief was a store the label owns outright. That is the slower route to a checkout and the faster route to everything after it — a real tradeoff, and not mine to make for them. So I built it both ways and let them decide with two working stores in front of them instead of a slide. They took the rented one, and it is live today.

- Client
- Polar Planet — streetwear label
- Scope
- Custom platform, and a Shopify theme of the same brand
- Storefront
- 19 pages, 28 admin pages
- Payments
- Stripe Checkout, on the owned build
- Live on
- Shopify — the path they chose
- 65
- API endpoints
- 33
- Database tables
- 28
- Admin pages
- 19
- Storefront pages
02
The owned build
Astro in server mode with React islands, on Cloudflare end to end: the app on Pages, the data in D1 behind ordered migrations, the media in R2 served through an authenticated route rather than a public bucket.
- Storefront: shop, categories, product pages, cart drawer, wishlist, discount codes, drop countdown, reviews, FAQ
- Order lookup that needs an order number and the checkout email, so a guest never has to make an account
- Accounts with order history and a full status timeline, an address book, and a wishlist that merges in on sign-in
- A back office with revenue and order charts, carrier-aware tracking, editable shipping addresses, internal notes and one-click refunds
- Product CRUD across products, variants and images, plus content, reviews, FAQs and legal pages editable in place
- Seeded to prove it at scale: 16 products, 300 variants, 119 images
03
The rented build
A native Online Store 2.0 theme on the same brand — matched fonts, colours and layout — written entirely as first-party sections and blocks, so every page is editable from the Theme Editor and nothing depends on a paid app. Checkout, fulfilment and transactional email stay Shopify’s. This is the one the label chose, and the one running the store today.
- Live today: the label runs on this one, and the store is open
- 21 sections, 9 snippets, 18 templates, 5 behaviour files, zero third-party apps
- Product accordions driven by metafields; a cart drawer that carries a discount code through to Shopify Checkout
- Classic customer accounts, a four-part About page, and themed legal pages separate from the checkout policies
04 · The tradeoff, stated plainly
The owned build takes on its own session handling, its own uptime and its own payment-adjacent surface — all of which Shopify would have absorbed. Stripe Checkout is what makes that acceptable: card details never touch the application. Anyone who tells you the custom route is free of that cost is selling you something.
Behind the counter
The deskit runs on.


Under the hood
What it ismade of.
- Application
- Astro 5 (SSR) with React 19 islands
- Language
- TypeScript, strict
- Database
- Cloudflare D1 — 33 tables, 14 migrations
- Media
- Cloudflare R2 behind an authenticated route
- Payments
- Stripe Checkout
- Styling
- Tailwind CSS 4 over a brand token layer
Next step
Own it,or rent it.
Both are real answers, and which one is right depends on things worth half an hour of talking about — what you sell, how often, and what you want to still have in three years. We will say which we would pick and why, including when that is Shopify.
Fig. 01Rented bills twiceA platform charges monthly for each thing you bolt on. Built once, it is a migration instead.
We do the marketing. You stay lazy.
