For bands · from a fan
From nothing to a store, in about an hour.
Every click, in order. You need a band email address, a debit card for the domain, and your bank details for Stripe. Nothing here costs anything except the domain.
First, three free accounts
Make these yourself, in the band’s name. Use an address the whole band can get into, not one person’s. Turn on two-factor on all three.
Stripe — takes the money.
Sign up, then activate the account: it asks for the band’s legal details and a bank account to pay out to. That part can wait until you’re ready to sell, but nothing real happens until it’s done. Stripe takes 2.9% + 30¢ per sale and nothing else.
GitHub — holds the store.
Just an account. You never have to understand it.
Cloudflare — runs the store.
Free, and the free plan allows a business to use it.
Then the store itself
Copy your Stripe key.
In Stripe: Developers → API keys. You want the Secret key, and you have to click Reveal to see it. It starts with
sk_test_. Copy the whole thing.The one thing people get wrong. Stripe shows the Publishable key first, starting
pk_. That is not the one. If you paste it, the store will tell you so in plain words rather than failing silently.Click Deploy.
Sign in to GitHub and Cloudflare when asked. Give the project a name nobody has used, like
yourband-store. Paste the Stripe key intoSTRIPE_SECRET_KEY, invent a long random string forADMIN_KEY, leave the rest blank, and press Deploy. It takes a couple of minutes.If it says “could not create the Git repository”, that name is already taken in your account. Change the name and press Deploy again.
Check it.
Cloudflare gives you an address ending
.workers.dev. Open it: that’s your store, with a made-up band’s products in it. Now add/api/setupto the end of the address. That page tells you in plain words whether it can take an order, and names anything that isn’t right.Put your own products in.
Leaving Shopify? Export from Products → Export → All products, Plain CSV, then drop the file here to turn it into the store’s product file. Starting fresh? Open
products.jsonin your new GitHub repository, press the pencil, and copy the shape of what’s already there. Prices are in whole cents:2500is $25.Change
store.jsonat the same time: the band name, your email, where you ship and for how much, and the three colours. The long page has the detail, or hand the job to a coding agent with the prompts on it.Turn on the admin, so you never do that again.
In
store.jsonadd your email toowners. In Cloudflare add a setting calledSESSION_SECRETwith any long random string. Then in Cloudflare create a KV namespace calledSTOCKand put its id inwrangler.jsonc. From then on you change prices and sold-out sizes from a page on your phone.Your own address.
Buy the domain at Cloudflare, Porkbun or Namecheap (about $12 a year), in the band’s name. In Cloudflare: Workers & Pages → your store → Settings → Domains & Routes → Add → Custom domain, and type
shop.yourband.com. Then setSITE_URLinwrangler.jsoncto that address, so Stripe sends fans back to the right place.Take one real order, then open the doors.
While you’re still on the test key, buy something with card
4242 4242 4242 4242, any future date, any three digits. You should land on a thank-you page showing the order. Then swapSTRIPE_SECRET_KEYfor the live key (same place in Stripe, with test mode off), buy the cheapest thing with a real card, and refund yourself in Stripe. In Stripe also turn on Apple Pay and Google Pay under Settings → Payment methods, and receipts under Settings → Emails.Tell people where it is.
Your homepage, Bandcamp, every social bio. If you’re leaving Shopify, point the old store at the new one for ninety days before you cancel the plan, and cancel only after the last order ships. Tell this site too, and your fans’ alerts follow you.
If you get stuck
- Checkout won’t open
- Add
/api/setupto your store’s address. It says what’s wrong instead of making you guess. - Deploy failed
- Almost always the project name is taken. Change it and deploy again.
- A price looks wrong
- Prices are in whole cents.
25is twenty-five cents; you want2500. The admin takes normal numbers instead. - Something else
- Everything is open source, so any coding agent can read the whole store and fix it with you. The README covers the day-to-day.
Written by a fan.Nothing here is sold and no link is tracked.Checked 26 Sep 2026.