VCR uses Stripe for all payments. There are three options:
shop.volcaniccityrollers.co.nz — Merch table store. Customers scan QR, browse items, pay by card. Use when selling merch at the table during events.
Long-living Payment Links — Reusable URLs printed on posters in the lockers. Use for event door entry, pre-sales, or generic payments.
One-off Payment Links — New link for a specific purpose. Use when you need custom fields (e.g. sweepstake, raffle, registration).
Merch table → shop
Event entry (on the day) → Door Sales link
Event entry (advance tickets) → Pre-Sales link
Someone owes money / other options not working → Pay link
Need custom fields or metadata → create a new Payment Link (be intentional — they can't be deleted, only deactivated)
The product name shows on Stripe receipt emails. The receipt already shows VCR's business name, so no need to prefix with "VCR". Make it clear enough that someone looking at their email a week later knows what they paid for.
Format: [What] - [When/Detail]
Good:
Blockdown Entry - June 2026
Skates on a Plan Sweepstake 2026
90s Roller Disco Ticket - 13 June 2026
Bad:
Ticket
Raffle
Payment
Generate printable A5 posters with QR codes at: shop.volcaniccityrollers.co.nz/poster
Presets:
Merch Store — QR points to shop.volcaniccityrollers.co.nz. Table merch sales at events.
Event Entry — QR points to Door Sales Payment Link. Door entry at bouts.
Pay — QR points to Pay Payment Link. Generic pay-what-you-want.
You can also enter a custom URL, heading, price, CTA, and tagline. Output is 2x A5 posters on landscape A4 — print and cut along the dashed lines (Cmd+P).
These are printed on posters stored in the lockers and reused across events — don't deactivate them.
Event Door Sales — On-the-day entry. Update the product for each event. Manage
Event Pre-Sales — Advance ticket sales. Collects name and email for door list verification and sends a receipt. Update the product for each event. Manage
Pay — Generic catch-all where the end user types in the amount they want to pay. Use when other options aren't working. Manage
Create one Stripe Product per event with two prices (pre-sale and door). Then attach it to both long-living Payment Links.
Create the product — Stripe Dashboard > Products > + Add product
Name: e.g. "Blockdown - June 2026" (this shows on receipt emails)
Add two prices (one-off, flat rate):
Pre-sale price (e.g. $15) — set Price description to Pre-Sale
Door price (e.g. $20) — set Price description to Door
Price description is internal only (not shown to customers) — it helps you tell the prices apart when attaching to Payment Links
Update the Pre-Sales link — Manage > Edit > select the product > pick the pre-sale price > Save
Update the Door Sales link — Manage > Edit > select the product > pick the door price > Save
The URLs and QR codes on posters stay the same — customers just see the updated event name and price.
One product per event, two prices (pre-sale + door)
Prices are immutable — to change the dollar amount, create a new price and archive the old one
Archive a product after the event — removes it from the Payment Link product picker but keeps payment history
Products cannot be permanently deleted if they have payment history
After each event — archive the Stripe Product (keeps payment history, removes from product picker)
One-off Payment Links (sweepstakes etc.) — deactivate after the event is over
Never deactivate the long-living links (Door Sales, Pre-Sales, Pay) — just update their products
Avoid creating new Payment Links unless you genuinely need custom fields — the long-living links and the shop cover most cases
The shop is a custom frontend (hosted on GitHub Pages) backed by a Google Cloud Function (merch-checkout). Products are not managed in the Stripe Dashboard — they live in a products.json file in a GCS bucket (vcr-merch-images).
Stripe is only involved at the checkout step — the Cloud Function creates a Stripe Checkout Session with price_data built from the product catalog. There are no pre-created Stripe Products or Prices for the shop.
URL: shop.volcaniccityrollers.co.nz/admin.html
Protected by a passcode (in 1Password).
The admin panel has three sections:
1. Store Currency
Toggle between NZD and AUD. This changes which price is displayed to customers and charged at checkout. Use AUD when selling at away games in Australia.
2. Products list
Shows all products with an active/inactive toggle switch. Flip the toggle to hide a product from the shop without deleting it.
3. Add Product form
Fields:
Name — displayed to customers and sent to Stripe as the line item name at checkout
Price NZD and Price AUD — both required (set both even if you only sell in one currency currently)
Description — shown on the product page
Image — file upload (JPEG, PNG, WebP, GIF). Stored in the vcr-merch-images GCS bucket. Gets a public URL automatically.
On submit, the product gets an auto-generated slug ID from the name and is immediately live.
The admin UI only supports toggling the active field. To change a product's name, price, description, or image:
Deactivate the old product (toggle it off)
Create a new one with the correct details
Go to admin.html and flip the toggle switch off
Product stays in products.json but won't appear in the shop or be accepted at checkout
Flip it back on when you want to re-list it
Toggle NZD/AUD in the admin panel. This controls which price field is displayed on the storefront and which amount is sent to Stripe at checkout.