Skip to main content

Overview

PassTru’s event creation system allows clients to set up events quickly with comprehensive configuration options including attendee fields, categories, and custom details.

Creating an Event

Events are created through the Client Portal with automatic slug generation:
1

Navigate to Events

From your dashboard, click Events in the sidebar to access the event management interface.
2

Click Create Event

Click the Create Event button in the top-right corner.
3

Fill Event Details

Enter event information in the creation dialog:
  • Event Name (required)
  • Event Slug (auto-generated, editable)
  • Date (required)
  • Venue (optional)
  • Category (optional)
  • Details (optional)
4

Configure Attendee Fields

Select which fields to collect for attendees.
5

Save Event

Click Save to create the event. One event token will be deducted.

Event Fields

Required Fields

name
string
required
The display name of your event (e.g., “Annual Gala 2026”)
slug
string
required
URL-friendly identifier, auto-generated from name (e.g., “annual-gala-2026”)
date
date
required
The event date, used for display and sorting

Optional Fields

venue
string
Event location (e.g., “Grand Ballroom, KL Convention Centre”)
category
select
Event type: Conference, Seminar, Training, Briefing, Meeting, Dinner, Wedding, Birthday
details
text
Additional event information or description

Slug Generation

Event slugs are automatically generated using a transformation algorithm:
src/pages/client/EventList.tsx
const generateSlug = (name: string) =>
  name.toLowerCase()
    .replace(/[^a-z0-9]+/g, "-")
    .replace(/^-|-$/g, "");
Examples:
  • “Annual Gala 2026” → annual-gala-2026
  • “Q1 Sales Meeting” → q1-sales-meeting
  • “Tech & Innovation Summit” → tech-innovation-summit

Attendee Field Configuration

Customize which data fields to collect for each event:

Default Fields

Name

Always required. Cannot be disabled.

Email

Always required. Cannot be disabled.

Optional Fields

Select from available options:
  • Department: Attendee’s department or division
  • Organisation: Company or organization name
  • Seat: Assigned seat number
  • Table: Table assignment
  • Booth: Booth or station assignment
  • Dietary: Dietary requirements or preferences
  • Remarks: Additional notes or special instructions
src/pages/client/EventList.tsx
const ATTENDEE_FIELD_OPTIONS = [
  "Name", "Email", "Department", "Organisation", 
  "Seat", "Table", "Booth", "Dietary", "Remarks"
];
Selected fields determine:
  • CSV import template structure
  • Available variables in branding templates
  • Data displayed in attendee management
  • Information shown in post-check-in screens

Event Categories

Choose from predefined categories to organize your events:
  • Conference: Large-scale business gatherings
  • Seminar: Educational sessions
  • Training: Skill development workshops
  • Briefing: Information sessions
  • Meeting: Business meetings

Token System

Event creation requires event tokens:

Token Deduction

src/pages/client/EventList.tsx
const { data: deducted, error } = await supabase.rpc(
  "deduct_event_token",
  { _organization_id: organizationId }
);

if (!deducted) {
  toast.error("Insufficient event tokens. Please purchase more tokens.");
  return;
}

Token Return

When an event is deleted, attendee tokens are automatically returned:
await supabase.rpc(
  "return_attendee_tokens_on_event_delete",
  { _event_id: eventId, _organization_id: organizationId }
);
Event tokens are non-refundable except when deleting events. Deleting an event returns all attendee tokens but not the event token itself.

Event Status Management

Events can be in one of two states:
  • Event portal accessible
  • Check-in features available
  • Attendees can access their portals
  • Visible in event lists

Suspending Events

Temporarily disable access to an event without deleting it:
const { error } = await supabase
  .from("events")
  .update({ status: "suspended" })
  .eq("id", eventId);

Reactivating Events

Restore access to a suspended event:
const { error } = await supabase
  .from("events")
  .update({ status: "active" })
  .eq("id", eventId);

Editing Events

Update event details after creation:
1

Locate Event

Find the event in your event list.
2

Click Edit

Click the edit icon in the Actions column.
3

Modify Fields

Update any field except the event slug (slug changes break URLs).
4

Save Changes

Click Save to apply changes immediately.
Slug Warnings: Changing an event slug after attendees have been added will break existing QR codes and portal URLs. Only modify slugs for events without attendees.

Event URLs

Each event generates several URLs based on organization and event slugs:
Event Portal:     /{org-slug}/{event-slug}/portal
Attendee List:    /{org-slug}/{event-slug}/portal/attendees
Check-In Page:    /{org-slug}/{event-slug}/welcome
Attendee Portal:  /{org-slug}/{event-slug}/attendee/{unique-id}

Deleting Events

Permanently remove an event and all associated data:
1

Download Data

Before deleting, download event data using the Download Event Data button in the confirmation dialog.
2

Confirm Deletion

Review the deletion warning and confirm the action.
3

Tokens Returned

All attendee tokens are automatically returned to your balance.
Deletion is permanent and cannot be undone. All attendee data, check-in records, and branding settings will be lost.

Event Search & Filtering

Quickly find events in your list:
  • Search by event name
  • Search by event slug
  • Real-time filtering as you type
  • Case-insensitive matching
src/pages/client/EventList.tsx
const filtered = events.filter((e) =>
  e.name.toLowerCase().includes(search.toLowerCase()) ||
  e.slug.toLowerCase().includes(search.toLowerCase())
);

Build docs developers (and LLMs) love