> ## Documentation Index
> Fetch the complete documentation index at: https://memberpulseptyltd.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UJ-M-012: Join Online Event

> Member joins a virtual event via Zoom or other online platform

## Journey Overview

| Attribute      | Value                                                         |
| -------------- | ------------------------------------------------------------- |
| **Journey ID** | UJ-M-012                                                      |
| **Actor**      | Registered event attendee                                     |
| **Goal**       | Access and participate in online/virtual event                |
| **Trigger**    | Online event is starting or attendee ready to join            |
| **Outcome**    | Attendee successfully joins and participates in virtual event |

## Preconditions

* Member has valid registration for online event
* Event is scheduled for today or meeting room is open
* Member has compatible device and internet connection
* Zoom/meeting app installed (if required)

## Journey Flow

```mermaid theme={null}
flowchart TD
    A[Event reminder received] --> B[Member accesses ticket]
    B --> C[Click Join Event button]
    C --> D{Meeting open?}
    D -->|Yes| E[Redirect to Zoom/Platform]
    D -->|No| F[Show countdown timer]
    E --> G[Join meeting room]
    G --> H[Attendance tracked]
    H --> I[Participate in event]
    I --> J[Event ends]
    J --> K[Attendance finalized]
    K --> L[CPD points awarded]
    F --> M[Wait for meeting to open]
    M --> C
```

## Detailed Steps

<Steps>
  <Step title="Receive Event Reminder">
    Member receives notifications:

    **Timing:**

    * 24 hours before: Email reminder
    * 1 hour before: Email + push notification
    * 15 minutes before: Push notification
    * Event start: Final notification

    **Reminder Contents:**

    * Event name and time
    * "Join Now" button/link
    * Calendar reminder suggestion
    * Technical requirements
  </Step>

  <Step title="Access Event / Ticket">
    Member can join from multiple entry points:

    | Source            | Action                          |
    | ----------------- | ------------------------------- |
    | Email             | Click "Join Event" button       |
    | Dashboard         | Click event in "Today's Events" |
    | My Tickets        | Click "Join" on ticket          |
    | Calendar          | Click meeting link              |
    | Push Notification | Tap notification                |
  </Step>

  <Step title="Join Meeting">
    **Before Meeting Opens:**

    ```
    ┌─────────────────────────────────────────┐
    │ Annual Conference 2025 - Online         │
    │                                         │
    │ The meeting room will open in:          │
    │                                         │
    │         ⏱️ 14:32                        │
    │                                         │
    │ You'll be redirected automatically      │
    │ when the meeting starts.                │
    │                                         │
    │ [Add to Calendar]  [Test Audio/Video]   │
    └─────────────────────────────────────────┘
    ```

    **When Meeting Opens:**

    * Auto-redirect to Zoom/platform
    * Or click "Join Now" button
    * Meeting link revealed to registered attendees only
  </Step>

  <Step title="Enter Meeting Room">
    **Zoom Flow:**

    1. Browser or Zoom app opens
    2. Enter display name (pre-filled if possible)
    3. Enable/disable camera and microphone
    4. Click "Join Meeting"
    5. Wait in waiting room (if enabled)
    6. Host admits to meeting

    **Authentication:**

    * Email used for registration passed to Zoom
    * Enables attendance matching
    * May require Zoom account (depends on settings)
  </Step>

  <Step title="Participate in Event">
    During event, member can:

    * View presentation/screen share
    * Use chat for questions
    * Raise hand (Q\&A)
    * Participate in polls
    * Join breakout rooms
    * Enable/disable video
    * Unmute when called on
  </Step>

  <Step title="Attendance Tracking">
    System tracks participation:

    | Metric     | Tracked                       |
    | ---------- | ----------------------------- |
    | Join time  | When entered meeting          |
    | Leave time | When exited meeting           |
    | Duration   | Total time in meeting         |
    | Attention  | Poll responses, chat activity |

    **Attendance Rules:**

    * Minimum duration for "attended" status
    * Partial attendance may prorate CPD
    * Multiple joins/leaves aggregated
  </Step>

  <Step title="Post-Event">
    After event ends:

    * Exit meeting room
    * Feedback survey (if configured)
    * Recording available (if recorded)
    * CPD points awarded
    * Certificate generated
  </Step>
</Steps>

## Technical Requirements

### System Requirements

| Requirement | Minimum                                |
| ----------- | -------------------------------------- |
| Browser     | Chrome, Firefox, Safari, Edge (latest) |
| Internet    | 1.5 Mbps up/down for video             |
| Audio       | Speakers or headphones                 |
| Video       | Webcam (optional for attendees)        |

### Zoom Requirements

* Zoom app recommended (better experience)
* Browser join supported (limited features)
* Mobile app available for phone/tablet
* Zoom account optional (depends on host settings)

## Troubleshooting

### Common Issues

| Issue                | Solution                                  |
| -------------------- | ----------------------------------------- |
| Can't find join link | Check email, My Tickets, or Dashboard     |
| Link not working     | Ensure logged in, try different browser   |
| Zoom not opening     | Install Zoom app, or use web client       |
| Audio issues         | Check device settings, try headphones     |
| Video issues         | Grant camera permissions, restart browser |
| Kicked from meeting  | Check if meeting ended, rejoin if ongoing |
| Waiting room stuck   | Wait for host to admit, contact organizer |

### Pre-Event Testing

Members can test setup before event:

```
┌─────────────────────────────────────────┐
│ Test Your Setup                         │
├─────────────────────────────────────────┤
│                                         │
│ [Test Audio]  [Test Video]              │
│                                         │
│ ✅ Speakers working                     │
│ ✅ Microphone working                   │
│ ✅ Camera working                       │
│ ⚠️ Zoom app not detected - Install     │
│                                         │
│ [Join Test Meeting]                     │
└─────────────────────────────────────────┘
```

## Recording Access

If event was recorded:

1. Recording processed after event
2. Notification sent when available
3. Access via event page or "Past Events"
4. Download or streaming options
5. Transcript and chapters (if AI-processed)

## Related Entities

* [`Event`](/entities/core/event)
* [`Event Ticket`](/entities/core/event-ticket)
* [`CPD Record`](/entities/core/cpd-record)

## Related Journeys

* [UJ-M-011](/member/journeys/event-checkin)
* [UJ-M-007](/member/journeys/view-event-details)
* [UJ-M-015](/member/journeys/track-cpd)

## Acceptance Criteria

### Frontend

* [ ] Join button on ticket (enabled when meeting open)
* [ ] Countdown timer before meeting opens
* [ ] Pre-event testing tools
* [ ] Technical requirements display
* [ ] Troubleshooting guide link
* [ ] Mobile-responsive join flow
* [ ] Post-event recording access

### Backend

* [ ] `GET /api/events/{id}/meeting-link` - Get meeting URL (auth required)
* [ ] Meeting link hidden until registration verified
* [ ] Zoom attendance import integration
* [ ] Attendance duration calculation

### Permissions

* [ ] Only registered attendees can access meeting link
* [ ] Link revealed only within join window

### Business Rules

* [ ] Meeting link hidden until X minutes before event
* [ ] Attendance tracked via Zoom import or manual
* [ ] Minimum attendance duration for CPD credit
* [ ] Recording access based on registration

### Error Handling

* [ ] Clear message if not registered
* [ ] Helpful error if meeting hasn't started
* [ ] Fallback instructions if Zoom issues
