Skip to main content

Event Management System - Requirements & User Flow Documentation

Table of Contents

  1. Overview
  2. Event Types
  3. Core Features
  4. Event Creation Flows
  5. Ticket Management
  6. Registration & Attendance
  7. User Roles & Permissions
  8. Business Rules
  9. Data Relationships

Overview

The Event Management System supports three distinct event lifecycle types with flexible ticketing, multiple location options, and comprehensive access control. The system is designed to handle everything from simple one-time events to complex recurring series with variable pricing.

Key Capabilities

  • Multiple event types (One-time, Multi-day, Recurring)
  • Flexible ticket types with varied pricing
  • Multiple location modes (In-person, Online, Hybrid)
  • Access control (Public, Private, Unlisted)
  • Integration with online meeting providers
  • Comprehensive registration and attendance tracking

Event Types

1. One-Time Event

A single event occurring once at a specific date and time.

Required Information:

  • Start date & time
  • End date & time
  • Location details
  • Ticket types (optional)

Example:

Event: Tech Conference 2025
Date: March 15, 2025
Time: 9:00 AM - 5:00 PM
Location: Convention Center

2. Multi-Day Event

A single event spanning multiple consecutive or non-consecutive days.

Required Information:

  • Start date
  • End date
  • Schedule per day (can vary)
  • Location details (can vary per day)
  • Single ticket for all days

Characteristics:

  • ONE event, multiple days
  • ONE ticket purchase covers ALL days
  • Each day can have different start/end times
  • Each day can have different locations
  • User registers once, attends multiple days

Example:

Event: Music Festival 2025
Dates: June 10-12, 2025

Day 1 (June 10): 2:00 PM - 11:00 PM - Main Stage
Day 2 (June 11): 12:00 PM - 11:00 PM - Multiple Stages  
Day 3 (June 12): 1:00 PM - 10:00 PM - Main Stage

Ticket: $200 (access all 3 days)

3. Recurring Event

A series of separate events happening on a repeating schedule.

Required Information:

  • Series name & description
  • Recurrence pattern:
    • Frequency: Daily, Weekly, Monthly, Yearly
    • Interval: Every 1 week, every 2 weeks, etc.
    • Days of week (for weekly)
    • Day of month (for monthly)
  • Date range: Start date → End date OR number of occurrences
  • Default schedule for sessions
  • Default ticket types

Characteristics:

  • MULTIPLE separate events (series)
  • Each session = independent event
  • Users buy tickets per session
  • Must buy at least ONE session to register for series
  • Can buy multiple sessions at once or separately
  • Each session can have own ticket types and pricing

Example:

Series: Monday Yoga Classes
Pattern: Every Monday
Time: 9:00 AM - 10:00 AM
Duration: January - March 2025 (12 sessions)

Individual Sessions:
- Session 1: Jan 6, 2025, 9-10 AM
- Session 2: Jan 13, 2025, 9-10 AM
- Session 3: Jan 20, 2025, 9-10 AM
... (12 total)

Each session has tickets: Regular ($15), Student ($10), Member ($8)

Recurrence Patterns Supported:

  • Daily: Every day, every 2 days, weekdays only, etc.
  • Weekly: Every Monday, Mon/Wed/Fri, every 2 weeks on Tuesday, etc.
  • Monthly: First Monday, 15th of each month, last Friday, etc.
  • Yearly: Same date each year

Core Features

Event Visibility & Access Control

┌──────────────────────────────────────────────────────────────┐
│ VISIBILITY OPTIONS                                           │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  ○ Public                                                    │
│    • Discoverable in search                                  │
│    • Anyone can view and register                            │
│    • Appears in event listings                               │
│                                                              │
│  ○ Private                                                   │
│    • Not discoverable                                        │
│    • Invitation-only access                                  │
│    • Organizer sends invitations                             │
│    • Invitees must be explicitly added                       │
│                                                              │
│  ○ Unlisted                                                  │
│    • Not discoverable in search                              │
│    • Anyone with link can access                             │
│    • No invitation required                                  │
│    • Link-based sharing                                      │
│                                                              │
└──────────────────────────────────────────────────────────────┘

Public Events

  • Visible to everyone
  • Appear in search results and listings
  • Anyone can register/buy tickets
  • No access restrictions

Private Events

  • Not visible in search
  • Access by invitation only
  • Organizer manages invitations

Invitation System:

  • Organizer invites by email or username
  • Invitations have optional expiration dates
  • Invitation statuses: Pending, Accepted, Declined, Expired
  • Invited users get notifications
  • Can generate shareable invite links with tokens

Invitation Expiration Rules:

  • Automatically expires when event ends
  • Optional custom expiration date
  • Token-based links can be regenerated (invalidates old tokens)

Unlisted Events

  • Not discoverable in search
  • Anyone with the link can access
  • No explicit invitation needed
  • Access through direct URL only

Access Mechanism:

  • Simple approach: Direct URL with event ID
  • Secure approach: URL includes access token
  • Organizer can regenerate link (invalidates previous link)
  • No expiration on the link itself (valid until event ends)

Location Types

┌──────────────────────────────────────────────────────────────┐
│ LOCATION TYPE                                                │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  ○ In-Person Only                                            │
│    Required: Physical address, venue name                    │
│    Optional: Coordinates (lat/long), directions             │
│                                                              │
│  ○ Online Only                                               │
│    Required: Meeting platform, link/credentials             │
│    Options: Manual link OR provider integration             │
│                                                              │
│  ○ Hybrid (Both)                                             │
│    Required: ALL in-person + online details                 │
│    Attendees choose: in-person OR online                    │
│                                                              │
└──────────────────────────────────────────────────────────────┘

In-Person Events

Required Fields:

  • Venue name
  • Full address
  • City, State, Country

Optional Fields:

  • Latitude/Longitude (for maps)
  • Venue description
  • Parking information
  • Accessibility details

Online Events

Meeting Provider Options:

Option 1: Manual Entry

  • Organizer provides meeting link directly
  • Platform-agnostic (Zoom, Google Meet, Teams, Discord, etc.)
  • Organizer manages meeting creation
  • Meeting details stored:
    • Meeting URL
    • Meeting ID (optional)
    • Password/Access code (optional)

Security for Manual Links:

Option 2: Provider Integration (Zoom)

  • OAuth connection to organizer's account
  • System creates meeting automatically
  • Enhanced security features available

Zoom Integration Flow:

┌─────────────────────────────────────────────────────────────┐
│ Event Creation: Online Event → Select "Connect with Zoom"  │
└──────────────────┬──────────────────────────────────────────┘
                   ↓
         ┌─────────────────────┐
         │ Has Zoom connected? │
         └─────────┬───────────┘
                   ↓
           ┌───────┴────────┐
           │                │
          NO               YES
           │                │
           ↓                ↓
┌──────────────────┐  ┌──────────────────┐
│ Redirect to Zoom │  │ Create meeting   │
│ OAuth page       │  │ immediately via  │
│                  │  │ API              │
└────────┬─────────┘  └─────────┬────────┘
         │                      │
         ↓                      │
┌──────────────────┐           │
│ User authorizes  │           │
│ on Zoom          │           │
└────────┬─────────┘           │
         │                      │
         ↓                      │
┌──────────────────┐           │
│ Save tokens to   │           │
│ user account     │           │
└────────┬─────────┘           │
         │                      │
         ↓                      │
┌──────────────────┐           │
│ Create meeting   │←──────────┘
│ via Zoom API     │
└────────┬─────────┘
         │
         ↓
┌──────────────────────────────┐
│ Each paid attendee gets      │
│ UNIQUE registration link     │
│ (cannot be shared)           │
└──────────────────────────────┘

Zoom Integration Benefits:

  • Each registered attendee gets unique join URL
  • URLs tied to email (not shareable)
  • Waiting room can be enabled
  • Attendance tracking automatic
  • Registration approval control

Zoom Account Responsibility:

  • Organizer uses their own Zoom account
  • Organizer pays for Zoom subscription
  • Platform creates meetings using organizer's credentials
  • No cost to platform

Hybrid Events

Requirements:

  • ALL in-person details (venue, address, etc.)
  • ALL online details (meeting link/platform)

Attendee Selection:

  • During registration, attendee chooses: "Attending in-person" OR "Attending online"
  • Helps organizer plan:
    • Seating/catering for in-person
    • Meeting capacity for online
  • Attendee can change preference before event

Event Creation Flows

Flow 1: One-Time Event Creation

┌──────────────────────────────────────────────────────────────┐
│ CREATE ONE-TIME EVENT                                        │
└──────────────────────┬───────────────────────────────────────┘
                       ↓
         ┌─────────────────────────────┐
         │ Step 1: Basic Information   │
         │ • Event name                │
         │ • Description               │
         │ • Category                  │
         │ • Cover image               │
         │ • Visibility (Public/Private│
         │   /Unlisted)                │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 2: Date & Time         │
         │ • Start date & time         │
         │ • End date & time           │
         │ • Timezone                  │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 3: Location Type       │
         │ Select:                     │
         │ • In-person                 │
         │ • Online                    │
         │ • Hybrid                    │
         └──────────┬──────────────────┘
                    ↓
    ┌───────────────┴────────────────┐
    │                                │
    ↓                                ↓
┌────────────────┐      ┌──────────────────────┐
│ If In-Person:  │      │ If Online:           │
│ • Venue        │      │ • Choose provider    │
│ • Address      │      │   - Manual link      │
│ • Coordinates  │      │   - Zoom integration │
└───────┬────────┘      │ • Meeting details    │
        │               └──────────┬───────────┘
        │                          │
        └────────┬─────────────────┘
                 ↓
         ┌─────────────────────────────┐
         │ Step 4: Tickets             │
         │ [Add Ticket Type] button    │
         │                             │
         │ For each ticket type:       │
         │ • Name                      │
         │ • Price                     │
         │ • Quantity                  │
         │ • Description               │
         │ • Sales start/end dates     │
         │                             │
         │ [Add Another Ticket Type]   │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 5: Review & Publish    │
         │ • Preview event details     │
         │ • Save as draft OR          │
         │ • Publish immediately       │
         └─────────────────────────────┘

Flow 2: Multi-Day Event Creation

┌──────────────────────────────────────────────────────────────┐
│ CREATE MULTI-DAY EVENT                                       │
└──────────────────────┬───────────────────────────────────────┘
                       ↓
         ┌─────────────────────────────┐
         │ Steps 1-3: Same as one-time │
         │ (Basic info, Location type) │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 4: Multi-Day Schedule  │
         │ • Overall start date        │
         │ • Overall end date          │
         │                             │
         │ Configure each day:         │
         │                             │
         │ Day 1:                      │
         │ • Date: March 10, 2025      │
         │ • Start time: 9:00 AM       │
         │ • End time: 6:00 PM         │
         │ • Location (can differ)     │
         │ • Description               │
         │                             │
         │ Day 2:                      │
         │ • Date: March 11, 2025      │
         │ • Start time: 10:00 AM      │
         │ • End time: 8:00 PM         │
         │ • Location (can differ)     │
         │ • Description               │
         │                             │
         │ [Add Another Day]           │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 5: Tickets             │
         │                             │
         │ Ticket Type Options:        │
         │                             │
         │ 1. Full Event Pass (common) │
         │    • Price: $200            │
         │    • Access to all days     │
         │                             │
         │ 2. Day Passes (optional)    │
         │    • Day 1 only: $80        │
         │    • Day 2 only: $80        │
         │    • Day 3 only: $60        │
         │                             │
         │ 3. VIP/Tier options         │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 6: Review & Publish    │
         └─────────────────────────────┘

Flow 3: Recurring Event Creation

┌──────────────────────────────────────────────────────────────┐
│ CREATE RECURRING EVENT                                       │
└──────────────────────┬───────────────────────────────────────┘
                       ↓
         ┌─────────────────────────────┐
         │ Step 1: Series Information  │
         │ • Series name               │
         │ • Description               │
         │ • Category                  │
         │ • Cover image               │
         │ • Visibility                │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 2: Recurrence Pattern  │
         │                             │
         │ Frequency:                  │
         │ ○ Daily                     │
         │ ○ Weekly                    │
         │ ○ Monthly                   │
         │ ○ Yearly                    │
         │                             │
         │ Interval:                   │
         │ Every [1] [week(s)]         │
         │                             │
         │ If Weekly, select days:     │
         │ ☐ Monday                    │
         │ ☐ Tuesday                   │
         │ ☐ Wednesday                 │
         │ ☐ Thursday                  │
         │ ☐ Friday                    │
         │ ☐ Saturday                  │
         │ ☐ Sunday                    │
         │                             │
         │ Session Time:               │
         │ Start: [9:00 AM]            │
         │ End: [10:00 AM]             │
         │                             │
         │ Duration:                   │
         │ ○ End date: [March 31, 2025]│
         │ ○ Number of occurrences: 12 │
         │ ○ No end date (ongoing)     │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 3: Location Type       │
         │ (Same as one-time event)    │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 4: Default Ticket Types│
         │                             │
         │ These will apply to ALL     │
         │ sessions by default:        │
         │                             │
         │ Ticket Type 1:              │
         │ • Name: Regular             │
         │ • Price: $15                │
         │ • Quantity per session: 15  │
         │ • Description               │
         │                             │
         │ Ticket Type 2:              │
         │ • Name: Student             │
         │ • Price: $10                │
         │ • Quantity per session: 3   │
         │ • Requires verification     │
         │                             │
         │ Ticket Type 3:              │
         │ • Name: Member              │
         │ • Price: $8                 │
         │ • Quantity per session: 2   │
         │                             │
         │ [Add Another Ticket Type]   │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 5: Generate Sessions   │
         │                             │
         │ System generates all        │
         │ sessions based on pattern:  │
         │                             │
         │ Preview:                    │
         │ • Session 1: Jan 6, 9-10 AM │
         │ • Session 2: Jan 13, 9-10 AM│
         │ • Session 3: Jan 20, 9-10 AM│
         │ ... (12 total sessions)     │
         │                             │
         │ Each session gets:          │
         │ • Copy of all ticket types  │
         │ • Default quantities        │
         │ • Default prices            │
         │                             │
         │ [Confirm & Generate]        │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 6: Customize Sessions  │
         │         (Optional)          │
         │                             │
         │ Organizer can edit any      │
         │ individual session:         │
         │                             │
         │ • Change prices             │
         │ • Add/remove ticket types   │
         │ • Change quantities         │
         │ • Modify time/location      │
         │ • Cancel specific session   │
         │                             │
         │ Example: Jan 20 special     │
         │ guest session               │
         │ • Increase price to $20     │
         │ • Add VIP ticket ($30)      │
         └──────────┬──────────────────┘
                    ↓
         ┌─────────────────────────────┐
         │ Step 7: Publish Series      │
         │ • All sessions now active   │
         │ • Users can start registering│
         └─────────────────────────────┘

Ticket Management

Ticket Types Structure

For One-Time & Multi-Day Events:

Event
 │
 ├── Ticket Type 1: Early Bird
 │    ├── Name: "Early Bird"
 │    ├── Price: $80
 │    ├── Quantity Available: 100
 │    ├── Quantity Sold: 87
 │    ├── Description: "Save $40 with early registration"
 │    ├── Sales Start: Dec 1, 2024
 │    ├── Sales End: Jan 31, 2025
 │    └── Status: Active
 │
 ├── Ticket Type 2: Regular
 │    ├── Name: "Regular"
 │    ├── Price: $120
 │    ├── Quantity Available: 200
 │    ├── Quantity Sold: 45
 │    ├── Sales Start: Feb 1, 2025
 │    ├── Sales End: March 14, 2025
 │    └── Status: Active
 │
 └── Ticket Type 3: VIP
      ├── Name: "VIP Pass"
      ├── Price: $250
      ├── Quantity Available: 50
      ├── Quantity Sold: 28
      ├── Benefits: ["VIP lounge access", "Meet speakers", "Premium seating"]
      ├── Sales Start: Dec 1, 2024
      ├── Sales End: March 14, 2025
      └── Status: Active

For Recurring Events:

Series: "Monday Yoga"
 │
 ├── Default Ticket Templates
 │    ├── Template 1: Regular ($15)
 │    ├── Template 2: Student ($10)
 │    └── Template 3: Member ($8)
 │
 └── Sessions
      │
      ├── Session 1: Jan 6
      │    ├── Ticket Type: Regular - $15 (15 available, 12 sold)
      │    ├── Ticket Type: Student - $10 (3 available, 2 sold)
      │    └── Ticket Type: Member - $8 (2 available, 1 sold)
      │
      ├── Session 2: Jan 13
      │    ├── Ticket Type: Regular - $15 (15 available, 8 sold)
      │    ├── Ticket Type: Student - $10 (3 available, 1 sold)
      │    └── Ticket Type: Member - $8 (2 available, 0 sold)
      │
      └── Session 3: Jan 20 (Customized - Special Guest)
           ├── Ticket Type: Regular - $20 (15 available, 5 sold) ← Price changed
           ├── Ticket Type: Student - $15 (3 available, 1 sold) ← Price changed
           └── Ticket Type: VIP - $30 (5 available, 2 sold) ← New type added

Ticket Type Properties

Required Fields:

  • Name (e.g., "Early Bird", "VIP", "Student")
  • Price (can be $0 for free tickets)
  • Quantity available

Optional Fields:

  • Description
  • Benefits list
  • Sales start date/time
  • Sales end date/time
  • Minimum purchase quantity
  • Maximum purchase quantity per user
  • Requires verification (e.g., student ID)
  • Hidden (invite-only tickets)

Ticket Purchase Rules

General Rules:

  1. User must select at least one ticket
  2. Cannot exceed available quantity
  3. Cannot purchase after sales end date
  4. Cannot purchase before sales start date
  5. One ticket per session per user (for recurring events)

For Recurring Events:

  1. First purchase = automatic series registration
  2. Must buy at least one session to join series
  3. Can buy different ticket types for different sessions
  4. Can purchase multiple sessions at once
  5. Can return later to purchase more sessions

Ticket Selection Flow:

┌──────────────────────────────────────────────────────────────┐
│ EVENT: Tech Conference 2025                                  │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ Available Tickets:                                           │
│                                                              │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ☐ Early Bird - $80                                     │ │
│ │   Save $40 with early registration                     │ │
│ │   [Only 13 left!] Sales end Jan 31                     │ │
│ └────────────────────────────────────────────────────────┘ │
│                                                              │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ☐ Regular - $120                                       │ │
│ │   Standard conference access                           │ │
│ │   [200 available]                                      │ │
│ └────────────────────────────────────────────────────────┘ │
│                                                              │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ☐ VIP Pass - $250                                      │ │
│ │   ✓ All conference access                              │ │
│ │   ✓ VIP lounge access                                  │ │
│ │   ✓ Meet the speakers                                  │ │
│ │   ✓ Premium seating                                    │ │
│ │   [22 available]                                       │ │
│ └────────────────────────────────────────────────────────┘ │
│                                                              │
│ Quantity: [1] ▼                                              │
│                                                              │
│ Selected: Regular Ticket × 1 = $120                          │
│                                                              │
│                                     [Proceed to Checkout →] │
└──────────────────────────────────────────────────────────────┘

For Recurring Events:

┌──────────────────────────────────────────────────────────────┐
│ SERIES: Monday Yoga - January 2025                           │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ Select sessions you want to attend:                          │
│                                                              │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Session: Monday, Jan 6, 2025 · 9:00 AM - 10:00 AM     │ │
│ │                                                        │ │
│ │ ☐ Regular - $15        [15 available]                 │ │
│ │ ☐ Student - $10        [3 available]                  │ │
│ │ ☐ Member - $8          [2 available]                  │ │
│ │ ☐ First-Timer Free - $0 [5 available]                 │ │
│ └────────────────────────────────────────────────────────┘ │
│                                                              │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Session: Monday, Jan 13, 2025 · 9:00 AM - 10:00 AM    │ │
│ │                                                        │ │
│ │ ☐ Regular - $15        [15 available]                 │ │
│ │ ☐ Student - $10        [3 available]                  │ │
│ │ ☐ Member - $8          [2 available]                  │ │
│ │ ☐ First-Timer Free - $0 [5 available]                 │ │
│ └────────────────────────────────────────────────────────┘ │
│                                                              │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Session: Monday, Jan 20, 2025 · 9:00 AM - 10:00 AM    │ │
│ │ 🌟 SPECIAL GUEST SESSION                               │ │
│ │                                                        │ │
│ │ ☐ Regular - $20        [15 available]                 │ │
│ │ ☐ Student - $15        [3 available]                  │ │
│ │ ☐ VIP - $30            [5 available] Meet the guest!  │ │
│ └────────────────────────────────────────────────────────┘ │
│                                                              │
│ Selected:                                                    │
│ • Jan 6 - Student ticket: $10                                │
│ • Jan 13 - Student ticket: $10                               │
│ • Jan 20 - Regular ticket: $20                               │
│                                                              │
│ Total: $40 for 3 sessions                                    │
│                                                              │
│                                     [Proceed to Checkout →] │
└──────────────────────────────────────────────────────────────┘

Registration & Attendance

Registration Flow

For One-Time & Multi-Day Events:

User selects ticket
       ↓
Proceeds to checkout
       ↓
Payment processed
       ↓
Registration created
       ↓
Ticket issued
       ↓
Confirmation email sent
       ↓
User can view ticket in "My Events"

For Recurring Events:

User selects session(s) and ticket type(s)
       ↓
First purchase?
       ↓
   ┌───┴────┐
  YES      NO
   │        │
   ↓        ↓
Create    Already
Series    registered
Registration
   │        │
   └───┬────┘
       ↓
Payment processed
       ↓
Session ticket(s) issued
       ↓
Confirmation email sent
       ↓
User can:
• View registered series
• See owned session tickets
• Purchase more sessions

Registration Data Tracking

One-Time Event Registration:

  • User ID
  • Event ID
  • Ticket Type ID
  • Payment status
  • Registration date/time
  • Ticket unique code/QR
  • Attendance status (for check-in)

Multi-Day Event Registration:

  • User ID
  • Event ID
  • Ticket Type ID
  • Payment status
  • Registration date/time
  • Ticket unique code/QR
  • Attendance per day (optional tracking):
    • Day 1: Attended/Not attended
    • Day 2: Attended/Not attended
    • Day 3: Attended/Not attended

Recurring Event Registration:

Series Level:

  • User ID
  • Series ID
  • Registration date (first purchase date)
  • Status: Active/Cancelled
  • Total sessions owned

Session Level:

  • User ID
  • Session ID
  • Ticket Type ID
  • Payment status
  • Purchase date/time
  • Ticket unique code/QR
  • Attendance status

Attendance Tracking

Check-in Methods:

  1. QR code scan
  2. Manual check-in by organizer
  3. Email verification
  4. Unique ticket code entry

For Recurring Events:

  • Track attendance per session
  • User can have tickets for sessions 1, 3, 5 but not 2, 4
  • Each session = separate check-in

Attendance Reports:

  • Who registered vs who attended
  • No-show rate
  • For recurring: attendance patterns across sessions

User Roles & Permissions

Role Definitions

1. Event Organizer (Creator)

  • Creates events
  • Manages event details
  • Creates/modifies ticket types
  • Manages invitations (for private events)
  • Views registrations and attendance
  • Can edit event before it starts
  • Can cancel event
  • Receives payments (event revenue)

2. Attendee (Regular User)

  • Browses public/unlisted events
  • Registers for events
  • Purchases tickets
  • Receives invitations (for private events)
  • Views owned tickets
  • Can cancel registration (based on refund policy)

3. Platform Administrator

  • Manages all events
  • Can modify/delete any event
  • Views all registrations
  • Manages users
  • Handles disputes
  • Platform-level reporting

Organizer Capabilities

Event Management:

  • Create new events (all types)
  • Edit unpublished events (full edit)
  • Edit published events (limited - can't change past dates, can modify future details)
  • Cancel events (with attendee notifications)
  • Duplicate events

Ticket Management:

  • Create ticket types
  • Modify ticket quantities
  • Modify ticket prices (before sales start)
  • Enable/disable ticket types
  • Set sales periods

Recurring Event Specific:

  • Customize individual sessions
  • Cancel specific sessions
  • Reschedule sessions (with attendee notifications)
  • Modify session-specific ticket pricing

Registration Management:

  • View all registrations
  • Export attendee lists
  • Send messages to attendees
  • Manually add attendees (comp tickets)
  • Issue refunds
  • Check-in attendees

For Private Events:

  • Send invitations
  • Approve/reject registration requests
  • Regenerate invite links
  • View invitation status

Attendee Capabilities

Event Discovery:

  • Browse public events
  • Search events by category, date, location
  • Filter by event type
  • View event details

Registration:

  • Register for public events
  • Access unlisted events via link
  • Accept invitations for private events
  • Select ticket types
  • Purchase multiple tickets/sessions

Account Management:

  • View "My Events" (upcoming, past, cancelled)
  • View tickets/QR codes
  • Download tickets
  • Cancel registration (if allowed)
  • Rate/review events (after attendance)

For Recurring Events:

  • View registered series
  • See which sessions owned
  • Purchase additional sessions
  • View attendance history

Business Rules

Event Creation Rules

  1. Required Information:

    • Event name (3-200 characters)
    • Start date/time (must be in future)
    • End date/time (must be after start)
    • Location details (based on type)
    • At least one ticket type OR mark as free
  2. Date Validation:

    • Start date must be in future (at event creation)
    • End date must be after start date
    • For multi-day: Each day's dates must be sequential or specified
    • For recurring: End date must be after start date OR specify number of occurrences
  3. Location Validation:

    • In-person: Address required
    • Online: Meeting link OR provider integration required
    • Hybrid: Both in-person AND online details required
  4. Ticket Validation:

    • At least one ticket type OR mark event as free
    • Ticket quantity must be positive integer or unlimited
    • Price must be >= 0
    • Sales end date must be before or on event start date
    • Sales start date must be before sales end date

Registration Rules

  1. Capacity Management:

    • Cannot register if event/session is at capacity
    • Cannot register if ticket type is sold out
    • For recurring: Each session has independent capacity
  2. Time Restrictions:

    • Cannot register after event starts
    • Cannot register before ticket sales start
    • Cannot register after ticket sales end
    • For recurring: Can register for future sessions even if past sessions occurred
  3. User Restrictions:

    • One registration per user per event (one-time/multi-day)
    • One ticket per user per session (recurring)
    • Cannot purchase same ticket type twice for same session
    • Can purchase different ticket types across different sessions
  4. Private Event Rules:

    • Must have valid invitation
    • Invitation must not be expired
    • User email must match invitation email (or logged-in account)
  5. Payment Rules:

    • Payment required before ticket issued (except free tickets)
    • Payment amount must match ticket price at time of purchase
    • For recurring: Can pay for multiple sessions in single transaction

Cancellation & Refund Rules

Event Cancellation (by Organizer):

  • Can cancel event at any time
  • Must notify all registered attendees
  • Automatic full refund to all attendees
  • For recurring: Can cancel entire series OR individual sessions

Registration Cancellation (by Attendee):

  • Depends on organizer's refund policy
  • Common policies:
    • Full refund until X days before event
    • Partial refund until Y days before event
    • No refund after Z days before event
  • For recurring:
    • Can cancel individual session tickets
    • If all sessions cancelled, series registration remains (can buy more sessions later)

Automated Actions:

  • Send cancellation notifications
  • Process refunds
  • Update capacities
  • Mark tickets as cancelled

Recurring Event Specific Rules

  1. Session Generation:

    • Sessions auto-generated based on recurrence pattern
    • Each session gets copy of default ticket types
    • Sessions created in "scheduled" status
  2. Session Customization:

    • Organizer can modify any session independently
    • Changes to one session don't affect others
    • Can cancel individual sessions
  3. Registration Requirements:

    • Must purchase at least one session to register for series
    • First purchase = automatic series registration
    • Can purchase more sessions anytime before session starts
  4. Session Attendance:

    • Each session = separate attendance record
    • User can own tickets for non-consecutive sessions
    • Missing a session doesn't affect future session tickets
  5. Series Management:

    • Cannot delete series if any session has registrations
    • Can cancel future sessions
    • Past sessions remain in history

Data Relationships

Core Entities

┌─────────────────────────────────────────────────────────────┐
│ User                                                        │
├─────────────────────────────────────────────────────────────┤
│ • User ID (PK)                                              │
│ • Name, Email, Phone                                        │
│ • Zoom access token (optional)                              │
│ • Account created date                                      │
│ • Role (Organizer, Attendee, Admin)                         │
└──────────────┬──────────────────────────────────────────────┘
               │
               │ creates
               ↓
┌─────────────────────────────────────────────────────────────┐
│ Event (One-Time or Multi-Day)                               │
├─────────────────────────────────────────────────────────────┤
│ • Event ID (PK)                                             │
│ • Organizer ID (FK → User)                                  │
│ • Name, Description, Category                               │
│ • Event Type (ONE_TIME, MULTI_DAY)                          │
│ • Visibility (PUBLIC, PRIVATE, UNLISTED)                    │
│ • Location Type (IN_PERSON, ONLINE, HYBRID)                 │
│ • Start Date/Time, End Date/Time                            │
│ • Venue/Address (if in-person)                              │
│ • Meeting URL/Platform (if online)                          │
│ • Access Token (if unlisted)                                │
│ • Status (DRAFT, PUBLISHED, CANCELLED, COMPLETED)           │
│ • Created/Updated timestamps                                │
└──────────────┬──────────────────────────────────────────────┘
               │
               │ has many
               ↓
┌─────────────────────────────────────────────────────────────┐
│ Ticket Type                                                 │
├─────────────────────────────────────────────────────────────┤
│ • Ticket Type ID (PK)                                       │
│ • Event ID (FK → Event)                                     │
│ • Name (e.g., "Early Bird", "VIP")                          │
│ • Price                                                     │
│ • Quantity Available                                        │
│ • Quantity Sold                                             │
│ • Description, Benefits                                     │
│ • Sales Start Date, Sales End Date                          │
│ • Status (ACTIVE, SOLD_OUT, EXPIRED)                        │
└──────────────┬──────────────────────────────────────────────┘
               │
               │ purchased via
               ↓
┌─────────────────────────────────────────────────────────────┐
│ Event Registration                                          │
├─────────────────────────────────────────────────────────────┤
│ • Registration ID (PK)                                      │
│ • Event ID (FK → Event)                                     │
│ • User ID (FK → User)                                       │
│ • Ticket Type ID (FK → Ticket Type)                         │
│ • Unique Ticket Code / QR Code                              │
│ • Payment Status (PENDING, PAID, REFUNDED)                  │
│ • Registration Date/Time                                    │
│ • Attendance Status (NOT_ATTENDED, ATTENDED)                │
│ • Check-in Time (if attended)                               │
│ • Attendance Mode (IN_PERSON, ONLINE) - for hybrid events   │
└─────────────────────────────────────────────────────────────┘


For Multi-Day Events:
┌─────────────────────────────────────────────────────────────┐
│ Event Day Schedule                                          │
├─────────────────────────────────────────────────────────────┤
│ • Day Schedule ID (PK)                                      │
│ • Event ID (FK → Event)                                     │
│ • Day Number (1, 2, 3...)                                   │
│ • Date                                                      │
│ • Start Time, End Time                                      │
│ • Location (if different from main)                         │
│ • Description                                               │
└─────────────────────────────────────────────────────────────┘

For Private Events:
┌─────────────────────────────────────────────────────────────┐
│ Event Invitation                                            │
├─────────────────────────────────────────────────────────────┤
│ • Invitation ID (PK)                                        │
│ • Event ID (FK → Event)                                     │
│ • Invited User ID (FK → User, nullable)                     │
│ • Invited Email (if user doesn't exist)                     │
│ • Invite Token (unique)                                     │
│ • Status (PENDING, ACCEPTED, DECLINED, EXPIRED)             │
│ • Sent At, Expires At                                       │
│ • Responded At                                              │
└─────────────────────────────────────────────────────────────┘

Recurring Event Relationships

┌─────────────────────────────────────────────────────────────┐
│ Recurring Event Series                                      │
├─────────────────────────────────────────────────────────────┤
│ • Series ID (PK)                                            │
│ • Organizer ID (FK → User)                                  │
│ • Series Name, Description                                  │
│ • Visibility, Location Type                                 │
│ • Recurrence Pattern (DAILY, WEEKLY, MONTHLY, YEARLY)       │
│ • Recurrence Interval (e.g., every 2 weeks)                 │
│ • Days of Week (if weekly)                                  │
│ • Day of Month (if monthly)                                 │
│ • Series Start Date, Series End Date                        │
│ • Default Session Duration                                  │
│ • Default Session Time                                      │
│ • Total Sessions Generated                                  │
│ • Status (DRAFT, PUBLISHED, CANCELLED, COMPLETED)           │
└──────────────┬──────────────────────────────────────────────┘
               │
               │ has many
               ↓
┌─────────────────────────────────────────────────────────────┐
│ Series Session (Individual Occurrence)                      │
├─────────────────────────────────────────────────────────────┤
│ • Session ID (PK)                                           │
│ • Series ID (FK → Recurring Event Series)                   │
│ • Session Number (1, 2, 3...)                               │
│ • Session Date                                              │
│ • Start Time, End Time                                      │
│ • Location (can differ from default)                        │
│ • Meeting URL (if online)                                   │
│ • Status (SCHEDULED, CANCELLED, COMPLETED)                  │
│ • Is Customized (boolean - if differs from defaults)        │
└──────────────┬──────────────────────────────────────────────┘
               │
               │ has many
               ↓
┌─────────────────────────────────────────────────────────────┐
│ Session Ticket Type                                         │
├─────────────────────────────────────────────────────────────┤
│ • Session Ticket Type ID (PK)                               │
│ • Session ID (FK → Series Session)                          │
│ • Name (e.g., "Regular", "Student")                         │
│ • Price (can differ per session)                            │
│ • Quantity Available                                        │
│ • Quantity Sold                                             │
│ • Description                                               │
│ • Requires Verification (boolean)                           │
└──────────────┬──────────────────────────────────────────────┘
               │
               │ purchased via
               ↓
┌─────────────────────────────────────────────────────────────┐
│ Series Registration (User enrolled in series)               │
├─────────────────────────────────────────────────────────────┤
│ • Series Registration ID (PK)                               │
│ • Series ID (FK → Recurring Event Series)                   │
│ • User ID (FK → User)                                       │
│ • Registration Date (first purchase date)                   │
│ • Status (ACTIVE, CANCELLED)                                │
│ • Total Sessions Owned                                      │
└──────────────┬──────────────────────────────────────────────┘
               │
               │ owns
               ↓
┌─────────────────────────────────────────────────────────────┐
│ Session Ticket (User's ticket for specific session)        │
├─────────────────────────────────────────────────────────────┤
│ • Session Ticket ID (PK)                                    │
│ • Series Registration ID (FK → Series Registration)         │
│ • Session ID (FK → Series Session)                          │
│ • Session Ticket Type ID (FK → Session Ticket Type)         │
│ • User ID (FK → User)                                       │
│ • Unique Ticket Code / QR Code                              │
│ • Payment Status (PENDING, PAID, REFUNDED)                  │
│ • Purchase Date/Time                                        │
│ • Attendance Status (NOT_ATTENDED, ATTENDED)                │
│ • Check-in Time (if attended)                               │
└─────────────────────────────────────────────────────────────┘

Relationship Summary

One-to-Many Relationships:

  • User → Events (user creates many events)
  • Event → Ticket Types (event has many ticket types)
  • Event → Registrations (event has many registrations)
  • User → Registrations (user has many registrations)
  • Event → Event Invitations (private event has many invitations)

For Recurring Events:

  • Recurring Series → Sessions (series has many sessions)
  • Session → Session Ticket Types (each session has many ticket types)
  • User → Series Registrations (user registered for many series)
  • Series Registration → Session Tickets (registration owns many session tickets)

For Multi-Day Events:

  • Event → Day Schedules (event has schedule for each day)

Key Technical Considerations

Performance Optimization

  1. Capacity Checks:

    • Cache available tickets count
    • Use optimistic locking for ticket purchases
    • Handle race conditions (multiple users buying last ticket)
  2. Recurring Event Sessions:

    • Generate sessions in batches
    • Index sessions by date for quick lookups
    • Lazy load past sessions
  3. Search & Discovery:

    • Index events by: date, category, location, visibility
    • Full-text search on event name/description
    • Filter by event type, price range, location type

Security Considerations

  1. Access Control:

    • Verify user owns event before allowing edits
    • Validate invitation tokens
    • Rate limit invitation sends
    • Sanitize all user inputs
  2. Payment Security:

    • Never store credit card details
    • Use payment gateway webhooks for status updates
    • Verify payment before issuing tickets
    • Handle failed payments gracefully
  3. Online Meeting Links:

    • Don't expose links before access time
    • Validate user has valid ticket before showing link
    • Log link access for security auditing
    • Support link regeneration for compromised links

Edge Cases to Handle

  1. Event Modifications:

    • Event date changed after registrations exist → Notify all attendees
    • Event cancelled → Auto-refund + notifications
    • Ticket quantity reduced below sold amount → Prevent or handle gracefully
    • Event visibility changed from Public to Private → Handle existing registrations
  2. Recurring Events:

    • Session cancelled → Refund that session only, keep other tickets
    • Series cancelled → Refund all future sessions
    • User wants to change ticket type for purchased session → Depends on policy
    • Session time conflicts with another event user registered for → User's problem to manage
  3. Capacity:

    • Event at capacity but user in checkout process → Reserve temporarily or first-come-first-served
    • Refund issued → Increase available capacity
    • Organizer increases capacity mid-sale → Allow more registrations
  4. Payment:

    • Payment pending during checkout → Hold temporarily, expire after X minutes
    • Payment fails → Release reserved ticket, notify user
    • Refund requested → Verify eligibility, process, update capacity

User Experience Flows

Attendee: Discovering & Registering for One-Time Event

Homepage / Event Listing
       ↓
Browse or Search Events
       ↓
Filter by Category/Date/Location
       ↓
Click on Event
       ↓
View Event Details Page
• Description, Date, Location
• Available Tickets
• Organizer Info
       ↓
Select Ticket Type & Quantity
       ↓
Click "Register" or "Buy Ticket"
       ↓
Login / Sign Up (if not logged in)
       ↓
Review Order
• Ticket details
• Price breakdown
• Terms & conditions
       ↓
Enter Payment Information
       ↓
Complete Purchase
       ↓
Receive Confirmation
• Email with ticket
• QR code for check-in
       ↓
View in "My Events"
• Access ticket anytime
• Add to calendar
• Get event updates
       ↓
Day of Event
• Show QR code for check-in
• Access online meeting link (if applicable)

Attendee: Registering for Recurring Event

Browse Events
       ↓
Discover Recurring Series
       ↓
View Series Details
• Pattern (every Monday)
• Dates covered
• Location & time
       ↓
View All Sessions
• Upcoming sessions listed
• Each with ticket options
       ↓
Select Session(s) & Ticket Type(s)
• Can select multiple sessions
• Choose appropriate ticket type per session
       ↓
Review Selection
• Jan 6 - Student: $10
• Jan 13 - Student: $10
• Jan 20 - Regular: $20
• Total: $40
       ↓
Checkout & Pay
       ↓
First Purchase?
   ↓
  YES → Create Series Registration
  NO → Add to existing registration
       ↓
Receive Confirmation
• Email with tickets for purchased sessions
• Series enrollment confirmed
       ↓
View in "My Events"
• See series enrollment
• View owned session tickets
• See upcoming sessions
       ↓
Later: Want to Attend More Sessions
       ↓
Go to Series Page
       ↓
Select Additional Sessions
       ↓
Purchase & Receive New Tickets
       ↓
Day of Session
• Show session-specific QR code
• Check in for that session only

Organizer: Creating One-Time Event

Dashboard
       ↓
Click "Create New Event"
       ↓
Select Event Type: One-Time
       ↓
Step 1: Basic Info
• Name, description, category
• Upload cover image
• Select visibility
       ↓
Step 2: Date & Time
• Start date/time
• End date/time
• Timezone
       ↓
Step 3: Location
• Select type (in-person/online/hybrid)
• Enter details based on type
• If online + Zoom: Connect account or manual link
       ↓
Step 4: Tickets
• Add ticket types
• For each: name, price, quantity, description
• Set sales periods
       ↓
Step 5: Review
• Preview how event looks
• Check all details
       ↓
Save as Draft OR Publish
       ↓
If Published:
• Event goes live
• Appears in listings (if public)
• Tickets available for purchase
       ↓
Monitor Event
• View registrations
• Track ticket sales
• Send updates to attendees
       ↓
Day of Event
• Check in attendees
• View attendance list
       ↓
After Event
• View final attendance
• Download reports
• Close event

Organizer: Creating Recurring Event Series

Dashboard
       ↓
Click "Create New Event"
       ↓
Select Event Type: Recurring
       ↓
Step 1: Series Info
• Series name & description
• Cover image
• Visibility
       ↓
Step 2: Recurrence Pattern
• Frequency (daily/weekly/monthly/yearly)
• Interval (every X weeks)
• Days of week (if weekly)
• Start & end date OR # of occurrences
       ↓
Step 3: Session Details
• Default session time
• Default duration
• Location type & details
       ↓
Step 4: Default Tickets
• Create ticket type templates
• These apply to all sessions by default
• Name, price, quantity per session
       ↓
Review Pattern & Generate Sessions
• Preview: "This will create 12 sessions"
• Show first few sessions as examples
       ↓
Confirm Generation
       ↓
System Creates All Sessions
• Each session = copy of defaults
• All sessions in "scheduled" status
       ↓
Optional: Customize Individual Sessions
• Click on any session
• Modify price, add ticket types, change time
• Example: Special guest session - increase price
       ↓
Publish Series
• All sessions go live
• Users can start registering
       ↓
Ongoing Management
• Monitor registrations per session
• Can still customize future sessions
• Cancel individual sessions if needed
• View attendance per session
       ↓
Each Session Day
• Check in attendees for that specific session
• Track attendance per session
       ↓
After Series Completes
• View overall series analytics
• Attendance patterns
• Revenue per session
• Download reports

Additional Features & Considerations

Waitlist Management

When Event/Session is at Capacity:

User tries to register
       ↓
Event is full
       ↓
Option to "Join Waitlist"
       ↓
User added to waitlist
       ↓
If spot opens (cancellation/refund)
       ↓
First person on waitlist notified
       ↓
Limited time to claim spot (e.g., 24 hours)
       ↓
If claimed: Registration processed
If not claimed: Offer to next person

Waitlist Properties:

  • Order (first-come, first-served)
  • Expiration time for offers
  • Notifications when spots available
  • User can leave waitlist

Event Updates & Notifications

Notify Attendees When:

  • Event details changed (date, time, location)
  • Event cancelled
  • New announcement from organizer
  • Reminder before event (24 hours, 1 hour)
  • Event starts soon (for online events - show link)

For Recurring Events:

  • Notify about upcoming session (24 hours before)
  • Notify if specific session cancelled
  • Notify if session time/location changed

Analytics & Reporting

For Organizers:

  • Total registrations
  • Revenue by ticket type
  • Sales over time (graph)
  • Attendance rate
  • Demographics (if collected)
  • For recurring: Per-session breakdown

For Platform:

  • Total events created
  • Event types distribution
  • Popular categories
  • Revenue metrics
  • User engagement

Social Features

Event Sharing:

  • Share on social media
  • Generate shareable link
  • Embed event widget

Reviews & Ratings:

  • After event, attendees can rate/review
  • Displayed on event page
  • Builds organizer reputation

Following:

  • Users can follow organizers
  • Get notified of new events

Implementation Priority

Phase 1: MVP (Core Features)

  1. One-time event creation & management
  2. Basic ticket types (free & paid)
  3. Simple registration flow
  4. Public event visibility
  5. In-person and manual online link support
  6. Basic attendee management

Phase 2: Enhanced Features

  1. Multi-day events
  2. Recurring events (simple - uniform pricing)
  3. Private events with invitation system
  4. Unlisted events
  5. Multiple ticket types per event
  6. Waitlist functionality

Phase 3: Advanced Features

  1. Recurring events with variable pricing per session
  2. Zoom/provider integration
  3. Hybrid events with attendance mode selection
  4. Advanced analytics
  5. Event series customization (per-session modifications)
  6. Refund automation

Phase 4: Premium Features

  1. Social features (reviews, following)
  2. Event recommendations
  3. Advanced reporting
  4. API for third-party integrations
  5. White-label options
  6. Mobile app

Conclusion

This document provides comprehensive requirements for an event management system supporting three distinct event types with flexible ticketing and access control. The system is designed to scale from simple one-time events to complex recurring series with variable pricing.

Key Differentiators:

  • Support for recurring events with per-session ticket management
  • Flexible visibility options (public, private, unlisted)
  • Multiple location modes including hybrid
  • Integration with online meeting providers
  • Granular ticket type control

Success Metrics:

  • Number of events created
  • Registration conversion rate
  • User satisfaction (organizers & attendees)
  • Platform revenue
  • Event completion rate

This system empowers organizers to create professional events while providing attendees with a smooth discovery and registration experience.


Document Version: 1.0
Last Updated: November 23, 2025
Status: Requirements Approved - Ready for Development