Runbook

Admin Guide

A practical launch manual for Shopify setup, rehearsals, timezone choices, scanner prep, delivery troubleshooting, and cleanup.

Back to Events

Launch Sequence

  1. Create or confirm one Shopify ticket product for the show.
  2. Use stable variants for General Admission, Early Access, and VIP.
  3. Create or duplicate the matching event in Ticketing Admin.
  4. Choose the venue timezone before saving the date and time.
  5. Map the Shopify Product ID and every Variant ID, or confirm pending mapping transfer.
  6. Publish the ticket design that should be emailed to buyers.
  7. Generate test tickets, scan them on a real phone, and test a duplicate scan.
  8. Resolve readiness blockers, then set the event On Sale.

Rehearsal Workflow

  1. Duplicate the most recent good event setup.
  2. Mark the copy as Test / rehearsal.
  3. Adjust name, date, time, venue, and timezone.
  4. Set On Sale and confirm Shopify mapping transfer.
  5. Place the test order, confirm PDF email delivery, and scan the tickets.
  6. End and archive the rehearsal, or force-delete it after marking it Test.

Shopify Admin Workflow

For the current show, keep one Shopify ticket product with stable variants. Use Ticketing Admin duplicates for rehearsals. When the copy is set On Sale, confirm mapping transfer so only the current local event owns the Shopify product and variants.

Do not let two ticketing events actively own the same Shopify Product ID or Variant IDs. The backend enforces uniqueness to prevent orders from being routed to the wrong event.

Timezone Rules

The event start field is a local wall time. Pick the venue timezone first, then save the event. The backend stores UTC internally and formats Admin, Scanner, and ticket emails using the event timezone.

Scanner Prep

Before doors, log in on each scanner phone, download the roster, register a device name, scan one valid ticket, and scan it again so the staff recognizes the duplicate warning.

Terms

Capacity

Optional per-tier backend safety limit. It does not create Shopify inventory; it prevents the ticketing backend from issuing more tickets for that tier.

Ticket Limit

Optional event-wide backend safety limit across all tiers. Use it when the venue capacity is lower than the sum of tier capacities.

Product ID

The Shopify product ID that tells the webhook which event should receive a paid order.

Variant ID

The Shopify variant ID for a tier. Multi-tier events need one unique Variant ID per local tier.

Roster Password

The shared door-team password used to download an offline scanner roster and register a scanner device.

Event Mode

Live is for real shows. Test is for rehearsals and unlocks safe cleanup tools after the event is ended.

Archive

Hides old events from normal lists while preserving orders, tickets, scans, and webhook history.

Force Delete Test

Permanent local deletion for rehearsal events only. Shopify order history remains separate.

Pending Mapping Transfer

A duplicated draft can stage Shopify mappings from the source event. Set On Sale transfers them atomically.

Published Design

The ticket artwork/QR layout that paid orders use when generating PDF attachments.

Troubleshooting Checklist

  • If orders do not create tickets, open Orders & Delivery and read the webhook reason first.
  • No matching event usually means the Product ID is missing or owned by another event.
  • Missing variant mapping means one local tier lacks its Shopify Variant ID.
  • Capacity failure means the event limit or tier capacity has been reached.
  • Delivery failure usually means SMTP failed or no ticket design is published.
  • Scanner duplicate warnings mean the QR was already checked in; the recent check-in feed helps confirm the first successful scan.

Production Checks

  • Render has AUTH_SECRET, DATABASE_URL, DIRECT_URL, and SMTP.
  • Supabase is active and migrations are up to date.
  • Shopify webhooks point to tickets.tysworld.org endpoints.
  • Admin and scanner passwords have been rotated after exposure.
  • One purchase test has generated a PDF and email.