Event Management
Create, manage, and promote events with comprehensive configuration options
Create and manage events of all types - live, online, and webinar - with full control over details, speakers, sponsors, and scheduling.
Capabilities
| Action | ROLE_CLIENT_ADMIN | ROLE_CLIENT_USER |
|---|---|---|
| View events | ✅ | ✅ |
| Create events | ✅ | ❌ |
| Edit events | ✅ | ❌ |
| Delete events | ✅ | ❌ |
| Clone events | ✅ | ❌ |
| Manage speakers | ✅ | ❌ |
Features
Event Types
In-person events at physical venues
Virtual events via video conferencing
Broadcast-style online presentations
Acceptance Criteria
Frontend
- Event list with status and date filters
- Clone event functionality
- Preview event as member would see it
- Rich text editor for descriptions
- Image upload with cropping
- Date/time picker with timezone
- Drag-and-drop schedule builder
- Speaker management interface
Backend / API
- Backend behavior supports this feature as documented.
Permissions
- Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
- Event title is required
- Start date must be in the future (for new events)
- Live events require location details
- Online events require meeting link (manual URL or auto-generated via Zoom integration)
- Published events visible based on visibility setting
- Cancelled events hidden from public, registrations notified
- End date must be after start date
Error Handling
- Error states return clear messages and appropriate HTTP status codes.
Create Event
- Basic Details
- Event title and description
- Event type (live, online, webinar)
- Featured image upload
- CPD points allocation
- Date & Time
- Start date and time
- End date and time
- Timezone selection
- Multi-day event configuration
- Location
For live events:
- Venue name and address
- City, state, country
- Map integration
For online events:
- Meeting provider (Zoom recommended)
- Meeting link (auto-generated via Zoom integration, or manual URL)
- Access instructions (passwords, dial-in, etc.)
- Visibility
- Public (visible to all)
- Member-only (requires login)
- Draft (not visible)
- Schedule (Optional)
Add multiple sessions with:
- Session name and description
- Start/end times
- Assigned speakers
- Room/location
Acceptance Criteria
Frontend
- Create event wizard with multi-step form
Backend / API
- Backend behavior supports this feature as documented.
Permissions
- Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
- All business rules for this feature are enforced.
Error Handling
- Error states return clear messages and appropriate HTTP status codes.
UI Spec (from supplied spreadsheet)
The following field inventory is sourced from workspace/sources/entity-registry.csv ("Events").
This is a UI/requirements inventory (not the ERD). Some rows (e.g. datatables) describe UI elements rather than stored fields.
Core event fields
| Field | Input Type | Required | Notes |
|---|---|---|---|
| Event ID | Number | Required | System generated, locked |
| Event Name | Text | Required | model: name |
| Event Short Description | Text | Required | Used for tile |
| Event Description | WYSIWYG (Textarea) | Required | model: description |
| Event Location | Text | Required | Google Maps selection; model: location |
| Event Start Date / Time | Date + Text | Required | model: eventStart |
| Event End Date / Time | Date + Text | Required | model: eventEnd |
| Event Topic | Select | Required | From event settings |
| Event Category | Select | Required | model: eventCategories |
| Event Series | Select | Required | model: eventSeries |
| Event Branches | Select | Required | model: eventBranches |
| CPD Category | Selector | Required | model: cpdCategories |
| Event Type | Select | Required | model: eventType |
| Is Online | - | - | model: isOnline |
| Zoom Link | Checkbox | Not Required | model: zoomLink |
| Event Featured Image | File | Not Required | model: featuredImage |
| Schedule for later | Yes / No | - | model: scheduleForLater |
| Publish Date / Time | Date + Time | - | model: publishDateTime |
| Free Event | True / False | Required | model: isFreeEvent |
| List of Participants | Datatable | - | Columns: Full name, Email, Ticket Type Purchased |
Speakers & sponsors
| Field | Input Type | Required | Notes |
|---|---|---|---|
| Speaker Name | Text | Required | model: speakerName |
| Speaker Bio | Text | Required | model: speakerBio |
| Speaker Website URL | URL | Required | model: speakerWebsite |
| Speaker Image | File | Required | model: speakerImageName |
| Is Main Speaker | True / False | Required | model: isMainSpeaker |
| Request Sponsors | True / False | Required | Adds sponsorship request workflow |
| Sponsorship Type | Text | Required | Repeater when request sponsors enabled |
| Sponsorship Cost | Number | Required | - |
| Sponsorship Description | WYSIWYG (Textarea) | Required | - |
| Sponsor Name | Text | Not Required | model: sponsorName |
| Sponsor URL | URL | Not Required | model: sponsorUrl |
| Sponsor Logo | File | Not Required | model: sponsorLogoName |
Data Model Cross‑Reference (Entities)
- Event record:
Event - Ticketing + registration/check-in state:
Event Ticket - Sponsorships:
Sponsorship - CPD:
CPD RecordandCPD Category
Online Events: Zoom Integration (auto meeting link)
For Zoom-hosted online events, the platform can create the Zoom meeting/webinar automatically and store the meeting link on the event.
Expected behavior:
- When the event is saved/published with Zoom enabled, the backend creates (or updates) the Zoom meeting
- The generated join URL is stored as the event’s meeting link
- The meeting link is shown to registered members (and optionally sent in confirmation emails)
Acceptance Criteria
Frontend
- Event form supports selecting Zoom as the meeting provider.
- Meeting link field is read-only when Zoom auto-generation is enabled.
Backend / API
- Zoom meetings/webinars are created/updated automatically based on event start/end time.
Permissions
- Only
ROLE_CLIENT_ADMINcan connect/configure Zoom and enable auto meeting creation.
Business Rules
- Zoom join links are only visible to users who are allowed to access the event.
Error Handling
- If Zoom meeting creation fails, the UI shows an actionable error and allows retry.
CRM tags (pre/post)
When CRM sync is enabled, events apply predefined tags:
event.registered.prewhen a member registersevent.attended.postwhen a member attends (check-in or Zoom import)event.no_show.postwhen a member is marked as a no-show
See: CRM Tag
Clone Event
Save time by duplicating existing events:
- Select event to clone
- All details copied to new draft
- Modify as needed (dates, speakers, etc.)
- Publish when ready
Acceptance Criteria
Frontend
- Clone Event workflow is implemented in the UI as described.
Backend / API
- Backend behavior supports Clone Event as documented.
Permissions
- Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
- All business rules for this feature are enforced.
Error Handling
- Error states return clear messages and appropriate HTTP status codes.
Speaker Management
Add Speaker
- Name and bio
- Photo upload
- Contact details
- Social links
- Designate as main speaker
Speaker Library
- Reuse speakers across events
- Update speaker info centrally
- View speaker's event history
Acceptance Criteria
Frontend
- Speaker Management workflow is implemented in the UI as described.
Backend / API
- Backend behavior supports Speaker Management as documented.
Permissions
- Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
- All business rules for this feature are enforced.
Error Handling
- Error states return clear messages and appropriate HTTP status codes.
Sponsorship Assignment
This enables the association/client to attach one or more sponsors to an event, including sponsor logos and sponsor CTA links.
- Add sponsors to event
- Set sponsorship tier per sponsor
- Display sponsor logos on event page
- Track sponsor visibility metrics
Acceptance Criteria
Frontend
- Sponsorship Assignment workflow is implemented in the UI as described.
Backend / API
- Backend behavior supports Sponsorship Assignment as documented.
Permissions
- Access is restricted per the Capabilities matrix on this page (or equivalent role rules).
Business Rules
- All business rules for this feature are enforced.
Error Handling
- Error states return clear messages and appropriate HTTP status codes.
Implementation Contracts
Backend (API)
GET /api/events # List events
POST /api/events # Create event
GET /api/events/{id} # Get event details
PUT /api/events/{id} # Update event
DELETE /api/events/{id} # Delete event
POST /api/events/{id}/clone # Clone event
PUT /api/events/{id}/publish # Publish draft
PUT /api/events/{id}/cancel # Cancel event
GET /api/events/{id}/sessions # Get sessions
POST /api/events/{id}/sessions # Add session
PUT /api/events/{id}/sessions/{sessionId} # Update session
GET /api/speakers # Speaker library
POST /api/speakers # Create speaker
PUT /api/speakers/{id} # Update speaker
Data Model
interface Event {
id: string;
title: string;
description: string;
featuredImage?: string;
cpdPoints: number;
// Type & Visibility
eventType: 'live' | 'online' | 'webinar';
visibility: 'public' | 'member_only';
status: 'draft' | 'published' | 'completed' | 'cancelled';
// Date/Time
startDateTime: string;
endDateTime: string;
timezone: string;
// Location (live events)
venueName?: string;
venueAddress?: string;
city?: string;
state?: string;
country?: string;
// Online (virtual events)
meetingLink?: string;
accessInstructions?: string;
// Relationships
speakers: Speaker[];
sessions: Session[];
sponsors: EventSponsor[];
// CRM
crmTag?: string;
createdAt: string;
updatedAt: string;
}
Error Handling
| Error | HTTP Status | Message |
|---|---|---|
| Past start date | 400 | "Event start date must be in the future" |
| Invalid dates | 400 | "End date must be after start date" |
| Missing location | 400 | "Live events require venue details" |
| Missing link | 400 | "Online events require meeting link" |
AI-Powered Webinar Processing
For webinars with recordings, the system automatically processes the video/recording to generate chapters and transcription.
Recording Extraction
When a webinar ends, the system:
- Retrieve Recording
Automatically fetch the recording from the webinar provider (e.g., Zoom)
- Process Video
Extract audio and video streams for AI processing
- Generate Transcription
AI-powered speech-to-text converts the recording to a searchable transcript
- Create Chapters
AI analyzes the content to create meaningful chapter markers with timestamps
AI-Generated Chapters
The system analyzes webinar content and automatically creates chapters:
- Topic Detection: Identifies major topic shifts and key discussion points
- Timestamp Markers: Precise timestamps for each chapter
- Chapter Titles: AI-generated descriptive titles for each section
- Summary Text: Brief description of what each chapter covers
Transcription Features
Full Transcript
- Complete word-for-word transcription
- Speaker identification (when available)
- Timestamp markers throughout
- Searchable text content
Member Experience
- Members can search within the transcript
- Click-to-jump to specific timestamps
- Download transcript as PDF or text
- Highlights and key takeaways
Acceptance Criteria
Frontend
- Recording processing status indicator on event detail page
- Chapter navigation sidebar in video player
- Searchable transcript panel alongside video
- Click-to-jump functionality from transcript to video timestamp
- Download options for transcript (PDF, TXT)
- Edit interface for admin to modify AI-generated chapters and transcript
Backend / API
- Automatic recording retrieval from Zoom after webinar ends
- AI transcription service integration
- AI chapter generation service integration
- Storage of processed transcripts and chapters
Permissions
- Only
ROLE_CLIENT_ADMINcan edit AI-generated chapters and transcripts - Members can only view/download if they have access to the event
Business Rules
- Processing begins automatically when recording is available
- Admin notified when processing is complete
- Failed processing attempts are retried up to 3 times
- Transcript and chapters can be manually edited by admin
- Original recording preserved alongside processed content
Error Handling
- If recording retrieval fails, admin is notified to manually upload
- If transcription fails, event displays recording without transcript
- Processing errors logged with detailed diagnostics
Implementation Contracts (Webinar AI)
POST /api/events/{id}/process-recording # Trigger recording processing
GET /api/events/{id}/transcript # Get transcript
PUT /api/events/{id}/transcript # Update transcript
GET /api/events/{id}/chapters # Get chapters
PUT /api/events/{id}/chapters # Update chapters
GET /api/events/{id}/processing-status # Check processing status
Chapter Data Model:
interface WebinarChapter {
id: string;
eventId: string;
title: string;
description: string;
startTimestamp: number; // seconds
endTimestamp: number; // seconds
order: number;
aiGenerated: boolean;
createdAt: string;
updatedAt: string;
}