Skip to content

Ticketed Events

Create and manage events with paid, free, or donation-based tickets at /app/events.

Ticketed Events list


Creating an Event

Click Create Event to open the event drawer. Required fields are marked with an asterisk.

Create Event drawer

Field Purpose
Title Event name (also used to generate the public slug)
Description Shown on the public event page
Date / Start Time / End Time Required — used for timezone-aware display and calendar exports
Doors Open Time Optional — shown to attendees separately from start time
Event Format In-Person, Online, or Hybrid. Online/Hybrid prompts for a Jitsi Meet link
Venue Name / Address In-Person or Hybrid events only
Visibility PUBLIC (listed), UNLISTED (direct link only), PRIVATE (invite-code gated)
Max Attendees Hard cap across all tiers — leave blank for unlimited
Organizer Name Shown on the public page under "Organized by…"

Events start in DRAFT status and are not publicly visible until you publish them.


Ticket Tiers

Every event needs at least one ticket tier before it can be published. Tiers support three types:

Type Behavior
PAID Fixed price, Stripe checkout required. Payments module must be enabled.
FREE No payment, email-only registration
DONATION Suggested price, but attendees can enter any amount ≥ $1

Each tier has a name (e.g. "General Admission", "Student", "VIP"), price in CAD (stored in cents at the API — the admin UI accepts dollars), max quantity, and max per order. Tiers are sorted by sortOrder on the public page.

Event detail with tiers

The Tier Breakdown panel on the event detail page shows sold/remaining counts per tier in real time.

Paid tiers require Stripe

Paid tiers only work when the Payments module is enabled and Stripe API keys are configured in Admin → Payments → Settings. If Stripe isn't configured, the public checkout button won't work.


Publishing

From the event detail page, click Publish to move the event from DRAFT to PUBLISHED:

  • A public URL is generated at /event/{slug} (the slug is auto-derived from the title)
  • The event appears on /events if visibility is PUBLIC
  • Tickets become purchasable
  • Attendees can start registering

Use the Copy Link button in the Actions row to grab the public URL for social media or email campaigns.


Event Statuses and Actions

Status Available Actions
DRAFT Edit, Publish, Delete
PENDING_APPROVAL Approve, Reject (admin only)
PUBLISHED Edit (restricted), Cancel, Mark Completed, Check-in Scanner
CANCELLED View only
COMPLETED View stats, export

Cancelling a published event marks all existing tickets as cancelled and triggers refund processing for paid tickets (if Stripe is configured).


Attendee Management

The event detail page includes two tabs:

  • Tickets — all issued tickets with holder name, email, tier, status, and purchase timestamp. You can resend the ticket email or cancel an individual ticket from the Actions column.
  • Check-ins — chronological record of check-in events recorded by the Check-in Scanner.

Admins and event owners can filter, search, and export ticket lists for at-the-door lookup or post-event reporting.


Public Event Page

The public-facing page at /event/:slug shows the event details and lets attendees pick a tier and register:

Public event page

  • Paid tiers link to Stripe Checkout
  • Free tiers use a simple email-only form
  • Donation tiers prompt for a custom amount
  • After purchase, attendees receive an email with their ticket code and QR

Admin Routes

  • /app/events — event list, search, filter by status
  • /app/events/:id — event detail, tier management, ticket list, check-ins
  • /app/events/:id/checkin — full-screen Check-in Scanner