Story 1.16: Event Detail/Edit Screen - Wireframe
Story: Epic 1, Story 1.16 - Event Management Service
Event Detail/Edit Screen
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Back to Dashboard Event Details [Save Changes] [Event Settings] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββ EVENT INFORMATION ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Title: [Spring Conference 2025 ] β β β
β β β β
β β Description: β β
β β [A comprehensive Spring conference covering advanced microservices ] β β β
β β [architecture patterns, cloud-native development, and lessons learned] β β
β β [from production deployments. ] β β
β β β β
β β βββββββββββ¬βββββββββββββββ¬βββββββββββββ¬ββββββββββββββ¬βββββββββββββββββββββββ β β
β β β Event # β Event Date β Event Type β Status β Publishing Date β β β
β β βββββββββββΌβββββββββββββββΌβββββββββββββΌββββββββββββββΌβββββββββββββββββββββββ€ β β
β β β 54 β Mar 15, 2025 β Full Day βΌ β Published β β Jan 15, 2025 β β β
β β βββββββββββ΄βββββββββββββββ΄βββββββββββββ΄ββββββββββββββ΄βββββββββββββββββββββββ β β
β β β β
β β Theme: [Cloud-Native Architecture ] β β β
β β β β
β β Registration Deadline: [Mar 10, 2025 π
] Capacity: [150] Current: 87 β β
β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ WORKFLOW PROGRESS βββββββββ¬βββ KEY METRICS βββββββββββββββββββββββββββββββ β
β β β β β
β β ββββββββββββββββββββ 80% β π Speakers: 12/12 confirmed β β
β β β β Topics: 3 assigned β β
β β Step 12/16: Agenda Final. β β οΈ Materials: 2 pending β β
β β β π Registrations: 87/150 β β
β β [View Workflow Details] β π° Budget: CHF 15,000 β β
β β β β β
β βββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ VENUE & LOGISTICS βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Venue: [Kursaal Bern βΌ] [Change Venue] β β
β β β β
β β Address: Kornhausstrasse 3, 3013 Bern β β
β β Capacity: 200 | Parking: Available | Wheelchair Access: Yes β β
β β β β
β β Booking Status: β Confirmed (Confirmation #: KB-2025-03-001) β β
β β Contact: Anna Schmidt (anna.schmidt@kursaal-bern.ch, +41 31 339 55 00) β β
β β β β
β β ββ Catering βββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Provider: [Select Caterer βΌ] [+ Add Caterer] β β β
β β β Menu: Not configured [Configure Menu] β β β
β β β Dietary Requirements: 5 vegetarian, 2 vegan, 3 gluten-free β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β [View Full Logistics Details] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ ASSIGNED TOPICS (3) βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β Microservices Architecture Patterns [View] [Remove] β β
β β Last used: BATbern #48 (2023) | Partner votes: 18 β β
β β β β
β β β Cloud-Native Development Best Practices [View] [Remove] β β
β β Last used: Never | Partner votes: 12 β β
β β β β
β β β Production Deployment Lessons Learned [View] [Remove] β β
β β Last used: BATbern #51 (2024) | Partner votes: 15 β β
β β β β
β β [+ Add Topic from Backlog] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ SPEAKERS & SESSIONS (12) ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Slot 1 | 09:00-10:00 | Dr. Sarah Miller (Accenture) β β β
β β "Microservices: From Theory to Practice" β β
β β [View Details] [Edit Slot] [Materials: Complete β] β β
β β β β
β β Slot 2 | 10:15-11:15 | Prof. James Wilson (University of Bern) β β β
β β "Cloud Security Architecture" β β
β β [View Details] [Edit Slot] [Materials: Pending β οΈ] β β
β β β β
β β Slot 3 | 11:30-12:30 | Anna Schmidt (SwissRe) β β β
β β "Kubernetes in Production: Real-World Experience" β β
β β [View Details] [Edit Slot] [Materials: Pending β οΈ] β β
β β β β
β β ... (9 more slots) β β
β β β β
β β [View Full Agenda] [Manage Speaker Assignments] [Auto-Assign Speakers] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ TEAM ASSIGNMENTS βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Lead Organizer: Sally Organizer (sally@batbern.ch) β β
β β Co-Organizers: Mark Thompson, Anna Weber β β
β β Moderator: [Not assigned βΌ] [Assign] β β
β β Content Reviewer: Dr. Peter Lang [Change] β β
β β β β
β β [Manage Team Assignments] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ PUBLISHING CONFIGURATION βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Publishing Strategy: Progressive β β β
β β Current Phase: Agenda Published β β
β β β β
β β Publishing Timeline: β β
β β β Topic Published (Immediate) - Jan 5, 2025 β β
β β β Speakers Published (1 month prior) - Feb 15, 2025 β β
β β β Final Agenda Published (2 weeks prior) - Mar 1, 2025 β β
β β β Post-Event Materials (After event) - Not yet available β β
β β β β
β β Quality Checkpoints: β β
β β β Abstract length validation (max 1000 chars) β β
β β β Lessons learned requirement met β β
β β β All materials submitted β β
β β β Moderator review complete β β
β β β β
β β [Configure Publishing] [Republish Event] [Preview Public Page] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ NOTIFICATIONS & REMINDERS βββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Active Automations: 8 β β
β β β β
β β β Speaker deadline reminders (3 days before) - Active β β
β β β Registration confirmation emails - Active β β
β β β Final agenda distribution - Scheduled for Mar 1, 2025 β β
β β β Event day check-in reminders - Scheduled for Mar 15, 2025 β β
β β β β
β β [Manage Notifications] [Send Manual Notification] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ ACTION BUTTONS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β [Cancel Changes] [Save as Draft] [Save & Continue] [Delete Event] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Interactive Elements
- Edit Fields (β): Click to edit event title, description, theme inline
- Dropdown Selectors (βΌ): Select event type, venue, caterer from predefined lists
- Date Picker (π ): Interactive calendar for selecting registration deadline
- Progress Bar: Shows workflow completion percentage, click to view details
- Topic Cards: View topic details, remove topics, add new topics from backlog
- Speaker/Session Rows: Expandable rows showing session details with edit/view actions
- Status Indicators: Visual feedback for materials status, booking confirmation
- Action Buttons: Context-specific actions for each section (manage, configure, assign)
- Auto-Assign: Intelligent algorithm to automatically assign speakers to optimal slots
- Publishing Timeline: Visual representation of publishing phases with checkpoints
- Team Assignment Dropdowns: Select team members for various roles
- Notification Management: Configure automated notification rules and send manual notifications
Functional Requirements Met
- FR2: Complete 16-step workflow visibility with current step and progress percentage
- FR5: Progressive event publishing configuration with automated content updates
- FR12: Multi-year venue reservations, catering coordination, and logistics management integrated
- FR17: Intelligent speaker matching and assignment tracking with slot management
- FR19: Progressive publishing engine with content validation and quality checkpoints
- FR20: Intelligent notification system with role-based alerts and automated escalation
User Interactions
- Edit Event Information: Click edit icon (β) to modify title, description, or theme
- Change Event Date: Click date field to open calendar picker and select new date (all dates and times in Swiss timezone CET/CEST only)
- Update Event Type: Select from dropdown (Full Day, Afternoon, Evening) to reconfigure slots
- View Workflow Details: Click workflow section to navigate to detailed 16-step visualization
- Change Venue: Click [Change Venue] to open venue selection dialog
- Configure Catering: Select caterer, configure menu options, specify dietary requirements
- Manage Topics: View topic details, remove topics, or add from backlog
- View Speaker Details: Click [View Details] to see full speaker profile and session information
- Edit Slot Assignment: Reassign speakers to different time slots via drag-and-drop or manual selection (all slot times in Swiss timezone CET/CEST)
- Auto-Assign Speakers: Use AI algorithm to automatically optimize speaker slot assignments
- Assign Team Members: Select organizers, moderators, and reviewers from team member list
- Configure Publishing: Set up progressive publishing timeline and quality checkpoints
- Manage Notifications: Enable/disable automated notifications, send manual messages
- Save Changes: Save draft or publish changes immediately
- Delete Event: Permanently remove event (with confirmation dialog)
Technical Notes
- Auto-save always enabled - Saves automatically with 5-second debounce after field changes (not configurable per user)
- Optimistic UI updates for immediate feedback
- Real-time validation for required fields and constraints
- Confirmation dialogs for destructive actions (delete event, remove speakers)
- Deletion requires organizer confirmation only - No admin approval needed (organizer role has sufficient authority)
- No event templates in MVP - Each event created from scratch
- Swiss timezone only (CET/CEST) - All times displayed in local Swiss timezone, no special timezone handling for international speakers
- No real-time presence indicators - Concurrent editing conflicts resolved via version mismatch detection and conflict dialog
- Rich text editor for event description with formatting options
- Inline editing for quick updates without page navigation
- Responsive layout adapts to tablet and mobile devices
- Role-based field visibility (some fields only for lead organizer)
- Audit trail for all changes (who changed what and when)
- Integration with workflow state machine for status transitions
- Optimistic concurrency control for concurrent editing detection
- Data persistence uses Event aggregate root pattern (DDD)
API Requirements
Initial Page Load APIs
When the Event Detail/Edit Screen loads, the following APIs are called to provide the necessary data:
CONSOLIDATED API APPROACH (Story 1.15a.1 - Events API Consolidation):
-
GET /api/v1/events/{eventId}?include=venue,speakers,sessions,workflow,registrations,team,analytics
- Implementation: Story 1.15a.1 (AC2) with resource expansion
- Returns: Complete event entity with all sub-resources expanded in a single call
- Response includes:
- Event core data: id, eventNumber, title, description, eventDate, eventType, status, workflowState, theme, registrationDeadline, capacity, currentAttendeeCount, publishedAt, metadata
- venue: Venue entity with id, name, address, capacity, amenities (parking, wheelchair access), bookingStatus, confirmationNumber, contactPerson (name, email, phone)
- catering: Catering configuration with providerId, providerName, menuStatus, dietaryRequirements (breakdown by type)
- workflow: Workflow state with currentStep (1-16), completionPercentage, stepName, nextSteps, blockers, warnings
- analytics: Key metrics including confirmedSpeakersCount, totalSpeakersCount, assignedTopicsCount, pendingMaterialsCount, registrationCount, registrationCapacity, budgetAmount
- topics: Array of assigned topics with id, title, lastUsedEvent (eventNumber, year), partnerVotes count, usageHistory
- sessions: Array of sessions with id, slotNumber, startTime, endTime, speaker (id, name, company), title, materialsStatus (complete/pending/missing)
- team: Team assignments with leadOrganizerId, leadOrganizerName, coOrganizers array (id, name), moderatorId (optional), contentReviewerId
- publishing: Publishing configuration with strategy (progressive/immediate), currentPhase, timeline (array of phases with name, date, status), qualityCheckpoints (array with name, status)
- notifications: Active notification automations with type, description, status (active/paused), scheduledDate
- Used for: Populate all sections of the event detail screen in a single request
- Performance: Reduced from 10 API calls to 1 (90% reduction in HTTP requests)
- Caching: 15-minute Caffeine in-memory cache with automatic invalidation on updates
- Response Time: <50ms cached, <500ms uncached with all includes (P95)
-
GET /api/v1/venues
- Query params: available=true, includeMetadata=true
- Returns: Array of available venues for dropdown selection with id, name, capacity, location
- Used for: Populate venue selection dropdown
-
GET /api/v1/organizers/{organizerId}/team-members
- Returns: Team members available for assignment with id, name, role, availability
- Used for: Populate team member selection dropdowns
MIGRATION NOTE (Story 1.15a.1 - Events API Consolidation): The original implementation required 12 separate API calls on page load, causing slow initial render and complex loading states. The new consolidated API (Story 1.15a.1) reduces this to 3 calls:
- 1 primary call for all event data with
?include=parameter (previously 10 calls) - 2 supporting calls for dropdowns (venues, team members)
This consolidation improves:
- Page load time: ~80% faster (from ~3s to <500ms with caching)
- Loading state complexity: Single loading indicator instead of 10
- Data consistency: Atomic snapshot of event state
- Network efficiency: Reduced latency from multiple round trips
- Caching efficiency: Caffeine in-memory cache (15min TTL) provides <50ms cached responses
Action APIs
Event Information Updates
-
PUT /api/v1/events/{eventId}
- Implementation: Story 1.15a.1 (AC4)
- Triggered by: [Save Changes] button or auto-save (5-second debounce after field changes)
- Payload:
{ title?, description?, date?, status?, theme?, capacity? } - Response: Updated event entity with new updatedAt timestamp, validation results
- Used for: Save all event information changes (full replacement)
- Cache invalidation: Automatically clears event cache
- Note: Auto-save is always enabled for all organizers (not configurable)
-
PATCH /api/v1/events/{eventId}
- Implementation: Story 1.15a.1 (AC5)
- Triggered by: Inline field edit (title, description, etc.) on blur
- Payload:
{ title?: string, description?: string, ... }(only changed fields) - Response: Confirmation with updated fields, timestamp
- Used for: Quick inline update of event fields (partial update)
- Cache invalidation: Automatically clears event cache
Workflow Management
- POST /api/v1/events/{eventId}/workflow/advance
- Implementation: Story 1.15a.1 (AC8)
- Triggered by: [View Workflow Details] β Advance Step button
- Payload: None (advances to next workflow state)
- Response: Updated event with new workflowState, completion percentage
- Used for: Manually advance workflow to next step
- Cache invalidation: Automatically clears event cache
Venue & Logistics Management
-
PUT /api/v1/events/{eventId}/venue
- Triggered by: [Change Venue] β Select new venue β Confirm
- Payload:
{ venueId: string, bookingNotes?: string } - Response: Updated venue assignment, booking status, confirmation needed flag
- Used for: Assign or change event venue
-
POST /api/v1/events/{eventId}/venue/booking/confirm
- Triggered by: Confirm venue booking dialog
- Payload:
{ confirmationNumber: string, contactPerson: { name, email, phone }, specialRequirements?: string } - Response: Confirmed booking with status, confirmation details, next steps
- Used for: Confirm venue booking with confirmation number
-
PUT /api/v1/events/{eventId}/catering
- Triggered by: [Configure Menu] β Save catering configuration
- Payload:
{ catererId: string, menuConfiguration: object, dietaryRequirements: object, attendeeCount: number } - Response: Updated catering configuration, cost estimate, confirmation status
- Used for: Configure or update catering provider and menu
-
POST /api/v1/caterers
- Triggered by: [+ Add Caterer] in catering section
- Payload:
{ name: string, contactPerson: string, email: string, phone: string, specialties: string[] } - Response: Created caterer entity with id, confirmation
- Used for: Add new caterer to system database
Topic Management
-
POST /api/v1/events/{eventId}/topics
- Triggered by: [+ Add Topic from Backlog] β Select topic β Add
- Payload:
{ topicId: string } - Response: Topic assignment confirmation, updated topics array
- Used for: Assign topic from backlog to event
-
DELETE /api/v1/events/{eventId}/topics/{topicId}
- Triggered by: [Remove] button on topic card
- Response: Confirmation of topic removal, updated topics array
- Used for: Remove assigned topic from event
-
GET /api/v1/topics/{topicId}
- Triggered by: [View] button on topic card
- Returns: Complete topic details with title, description, usageHistory (array of events), partnerVotes, duplicateCheck
- Used for: Display full topic information in modal or detail view
Speaker & Session Management
-
GET /api/v1/events/{eventId}/sessions/{sessionId}
- Triggered by: [View Details] button on speaker/session row
- Returns: Full session details with speakers array, materials (files with status), schedule, requirements
- Used for: Display complete session information in expanded view or modal
-
PUT /api/v1/events/{eventId}/sessions/{sessionId}/slot
- Triggered by: [Edit Slot] β Change time slot β Save
- Payload:
{ slotId: string, startTime: Date, endTime: Date } - Response: Updated slot assignment, conflict warnings (if any), schedule updated confirmation
- Used for: Reassign session to different time slot
-
POST /api/v1/events/{eventId}/speakers/auto-assign
- Triggered by: [Auto-Assign Speakers] button
- Payload:
{ considerPreferences: boolean, optimizationCriteria: string[] } - Response: Proposed slot assignments with algorithm reasoning, confidence scores, conflicts
- Used for: Use AI algorithm to automatically optimize speaker slot assignments
-
GET /api/v1/events/{eventId}/agenda
- Triggered by: [View Full Agenda] button
- Returns: Complete agenda with all sessions sorted by time, speaker details, materials status
- Used for: Navigate to full agenda view screen
-
GET /api/v1/events/{eventId}/speakers/assignments
- Triggered by: [Manage Speaker Assignments] button
- Returns: Speaker assignment interface data with available speakers, assigned speakers, slots
- Used for: Navigate to speaker matching/assignment interface
Team Management
-
PUT /api/v1/events/{eventId}/team/moderator
- Triggered by: [Assign] button in moderator field β Select moderator β Confirm
- Payload:
{ moderatorId: string } - Response: Moderator assignment confirmation, notification sent status
- Used for: Assign or change event moderator
-
PUT /api/v1/events/{eventId}/team/reviewer
- Triggered by: [Change] button in content reviewer field β Select reviewer β Confirm
- Payload:
{ reviewerId: string } - Response: Reviewer assignment confirmation, notification sent status
- Used for: Change content reviewer for quality control
-
GET /api/v1/events/{eventId}/team/assignments
- Triggered by: [Manage Team Assignments] button
- Returns: Complete team assignment interface data with roles, assignments, permissions
- Used for: Navigate to team management screen
Publishing Management
-
PUT /api/v1/events/{eventId}/publishing/configuration
- Triggered by: [Configure Publishing] β Update settings β Save
- Payload:
{ strategy: "progressive" | "immediate", timeline: object[], qualityCheckpoints: string[] } - Response: Updated publishing configuration, next publication date, validation results
- Used for: Configure or update publishing strategy and timeline
-
POST /api/v1/events/{eventId}/publishing/republish
- Triggered by: [Republish Event] button
- Payload:
{ reason: string, notifyAttendees: boolean } - Response: Republication confirmation, updated publishedAt timestamp, notification count
- Used for: Force republish event to public page (for updates after initial publication)
-
GET /api/v1/events/{eventId}/public-preview
- Triggered by: [Preview Public Page] button
- Returns: Public page preview URL with authentication token for preview access
- Used for: Open public event landing page in preview mode
Notification Management
-
GET /api/v1/events/{eventId}/notifications/rules
- Triggered by: [Manage Notifications] button
- Returns: All notification rules with id, type, trigger conditions, recipients, status
- Used for: Display notification management interface
-
POST /api/v1/events/{eventId}/notifications/send
- Triggered by: [Send Manual Notification] β Compose message β Send
- Payload:
{ recipientType: "speakers" | "attendees" | "partners" | "team", subject: string, message: string, urgency: "normal" | "high" } - Response: Notification sent confirmation, recipient count, delivery status
- Used for: Send manual notification to specific audience
-
PUT /api/v1/events/{eventId}/notifications/rules/{ruleId}/toggle
- Triggered by: Toggle notification rule on/off
- Payload:
{ enabled: boolean } - Response: Rule status updated, confirmation
- Used for: Enable or disable automated notification rules
Save & Delete Actions
-
POST /api/v1/events/{eventId}/draft
- Triggered by: [Save as Draft] button
- Payload: Current form state as draft
- Response: Draft saved confirmation with timestamp, auto-saved status
- Used for: Save incomplete changes as draft without validation
-
DELETE /api/v1/events/{eventId}
- Implementation: Story 1.15a.1 (AC6)
- Triggered by: [Delete Event] β Confirmation dialog β Confirm Delete
- Response: 204 No Content on success
- Used for: Permanently delete event
- Cache invalidation: Automatically clears event cache
- Authorization: Organizer role required (no admin approval needed)
- Validation: Cannot delete if registrations exist (must cancel event instead)
-
GET /api/v1/events/{eventId}/deletion-impact
- Triggered by: [Delete Event] button click (before confirmation)
- Returns: Impact analysis with registrationCount, confirmedSpeakers, associatedMaterials, dependentData, canDelete (boolean)
- Used for: Show deletion impact in confirmation dialog
- Displays: βThis will permanently delete: X registrations, Y confirmed speakers, Z materialsβ
- If registrations exist: Shows βCannot delete - please cancel event insteadβ message
Navigation Map
Primary Navigation Actions
-
β Back to Dashboard button β Navigate to
Event Management Dashboard(story-1.16-event-management-dashboard.md)- Returns to organizer main dashboard
- Unsaved changes prompt if modifications exist
- Context: Navigates back to event list view
-
[Event Settings] button β Navigate to
Event Settings Screen(Missing Wireframe - HIGH PRIORITY)- Advanced event configuration
- Integration settings
- Notification preferences
- Access permissions management
- Context: Passes eventId for settings configuration
-
BATbern logo/header β Navigate to
Event Management Dashboard- Returns to home dashboard
- Confirms save/discard changes if modified
- Context: Global navigation to dashboard
Section-Specific Navigation
-
[View Workflow Details] button β Navigate to
Workflow Visualization(story-1.16-workflow-visualization.md)- Detailed 16-step workflow view
- Step-by-step progress tracking
- Context: Passes eventId to show workflow for this specific event
-
Workflow progress bar click β Navigate to
Workflow Visualization(story-1.16-workflow-visualization.md)- Same as [View Workflow Details]
- Focuses on current workflow step
- Context: eventId with currentStep highlighted
-
[Change Venue] button β Opens
Venue Selection Dialog(Modal)- Searchable venue list
- Venue comparison
- Booking availability check
- Context: Returns selected venueId to update event
-
[View Full Logistics Details] button β Navigate to
Logistics Coordination(story-4.4-logistics-coordination.md)- Complete logistics management
- Venue booking details
- Catering coordination
- Context: Passes eventId for logistics view
-
[Configure Menu] button β Opens
Catering Configuration Dialog(Modal)- Menu selection interface
- Dietary requirements form
- Cost estimation
- Context: Returns catering configuration object
-
[+ Add Caterer] button β Opens
Add Caterer Form(Modal)- New caterer creation form
- Contact information input
- Specialty selection
- Context: Returns new catererId on creation
-
[View] button on Topic card β Opens
Topic Detail Modal(Modal)- Full topic description
- Usage history across events
- Partner vote breakdown
- Duplicate topic warnings
- Context: Displays topicId details
-
[+ Add Topic from Backlog] button β Navigate to
Topic Backlog Management(story-2.2-topic-backlog-management.md)- Topic search and selection
- Historical usage tracking
- Partner voting influence
- Context: Returns with selected topicId(s) to add to event
-
[View Details] button on Speaker/Session row β Opens
Session Detail Dialog(Modal)- Full session information
- Speaker profile
- Material submission status
- Quality review feedback
- Context: Displays sessionId and speakerId details
-
[Edit Slot] button on Speaker/Session row β Opens
Slot Assignment Editor(Modal)- Time slot selection
- Conflict checking
- Speaker preferences display
- Technical requirements
- Context: Allows slot reassignment for sessionId
-
[Materials: Pending β οΈ] link β Opens
Material Submission Status(Modal)- Missing materials checklist
- Submission deadlines
- Contact speaker action
- Material review status
- Context: Shows submission status for sessionId
-
[View Full Agenda] button β Navigate to
Event Timeline View(story-3.5-event-timeline.md)- Complete day timeline
- All sessions chronologically
- Visual schedule representation
- Context: Passes eventId for timeline view
-
[Manage Speaker Assignments] button β Navigate to
Speaker Matching Interface(story-3.1-speaker-matching-interface.md)- Intelligent speaker matching
- Slot assignment management
- Overflow handling
- Context: Passes eventId for speaker management
-
[Auto-Assign Speakers] button β Opens
Auto-Assignment Preview Dialog(Modal)- AI-generated slot assignments
- Reasoning explanation
- Conflict warnings
- Accept/reject assignment options
- Context: Shows proposed assignments for eventId
-
[Manage Team Assignments] button β Navigate to
Team Management Screen(Missing Wireframe)- Team member roles
- Permission assignments
- Workload distribution
- Context: Passes eventId for team configuration
-
[Configure Publishing] button β Opens
Publishing Configuration Dialog(Modal)- Progressive publishing timeline
- Quality checkpoint selection
- Phase date configuration
- Content validation rules
- Context: Returns publishing configuration object
-
[Republish Event] button β Opens
Republish Confirmation Dialog(Modal)- Republication reason input
- Attendee notification option
- Impact summary
- Confirm/cancel actions
- Context: Triggers republish for eventId
-
[Preview Public Page] button β Opens in new tab/window
- Public event landing page
- Preview mode with edit indicator
- Organizer view of attendee experience
- Context: Opens public URL for eventId with preview token
-
[Manage Notifications] button β Navigate to
Notification Center(story-1.20-notification-center.md)- All notification rules
- Automation configuration
- Delivery status tracking
- Context: Filtered to eventId notifications
-
[Send Manual Notification] button β Opens
Compose Notification Dialog(Modal)- Recipient selection
- Message composition
- Template selection
- Send immediately or schedule
- Context: Pre-populates eventId context
Save & Delete Actions Navigation
-
[Save Changes] button β Saves and stays on current screen
- Validates all form fields
- Shows success/error toast notification
- Updates timestamp
- No navigation
-
[Save as Draft] button β Saves and stays on current screen
- Saves without validation
- Draft indicator displayed
- Success toast notification
- No navigation
-
[Save & Continue] button β Saves and advances workflow
- Validates form
- Advances to next workflow step
- Navigation depends on next step (may navigate to different screen)
- Context: May navigate to workflow-specific screen
-
[Delete Event] button β Opens
Delete Confirmation Dialog(Modal)- Deletion impact summary (registrations, speakers, materials counts)
- Cascading deletion warnings
- Organizer confirmation required (no admin approval)
- Validation: Cannot delete if registrations exist
- Confirm/cancel options
- On confirm: Delete event and navigate to
Event Management Dashboard - On validation failure: Show βCannot delete - cancel event insteadβ message
-
[Cancel Changes] button β Discards changes and returns to
Event Management Dashboard- Confirmation dialog if unsaved changes
- Reverts all modifications
- Context: Returns to dashboard
Error States & Redirects
-
Unauthorized Access β Redirect to
Login Screen- User not authenticated
- Session expired
- Context: Returns to event detail after successful login
-
Insufficient Permissions β Redirect to
Event Management Dashboardwith error message- User lacks organizer role
- Not assigned to this event
- Context: Shows permission denied message
-
Event Not Found β Redirect to
Event Management Dashboardwith error message- Invalid eventId
- Event deleted by another user
- Context: Shows βEvent not foundβ error
-
Concurrent Edit Conflict β Shows
Conflict Resolution Dialog(Modal)- Another organizer modified event (detected via version number mismatch)
- Shows conflicting changes with diff view
- Options: reload (discard local changes), force save (overwrite server changes)
- No real-time presence indicators (MVP limitation)
- Context: Allows user to resolve conflict manually
- Note: Last-write-wins strategy, no automatic merge
Responsive Design Considerations
Mobile Layout Changes
- Event information section becomes vertically stacked single column
- Workflow progress and key metrics stack vertically instead of side-by-side
- Speaker/session rows show condensed view with expand icon
- Action buttons collapse into hamburger menu or bottom sheet
- Inline edit fields may open in modal dialogs for better touch interaction
- Date pickers use mobile-optimized calendar widgets
Tablet Layout Changes
- Two-column layout maintained but with adjusted widths
- Speaker/session section shows fewer rows with scroll
- Side-by-side sections (workflow/metrics) remain but with reduced padding
- Action buttons remain visible but with smaller font size
Mobile-Specific Interactions
- Swipe left on speaker/session row to reveal quick actions (edit, delete, view)
- Pull-to-refresh to reload event data
- Bottom sheet for action menus instead of dropdowns
- Touch-optimized hit targets (minimum 44px)
- Floating action button (FAB) for primary save action
Accessibility Notes
- All form inputs have associated labels with proper for/id attributes
- ARIA labels on all interactive elements (buttons, links, dropdowns)
- Keyboard navigation: Tab through all form fields, Escape to close modals
- Focus indicators clearly visible with high contrast outline
- Error messages announced via ARIA live regions
- Color contrast meets WCAG 2.1 AA standards (4.5:1 for normal text, 3:1 for large text)
- Status indicators use both color and icon for color-blind users
- Form field validation errors announced to screen readers
- Heading hierarchy properly structured (h1 for page title, h2 for sections)
- Skip navigation link for keyboard users to bypass header
State Management
Local Component State
- Form field values (title, description, date, etc.) managed locally
- Inline edit mode flags (isEditingTitle, isEditingDescription)
- Validation errors per field
- Dirty/modified flags to track unsaved changes
- Modal open/close states (venueSelectionOpen, cateringConfigOpen)
- Expanded/collapsed states for speaker/session rows
- Auto-save debounce timer (5 seconds after last field change)
- Last saved timestamp for user feedback
Global State (Zustand Store)
- Current user and role (organizerId, permissions)
- Active event ID (for deep linking and navigation context)
- Notification count for header badge
- Recent events list for quick navigation
- Team member cache (for assignment dropdowns)
Server State (React Query)
- Event entity data (cached 5 minutes)
- Venue list (cached 1 hour)
- Team members (cached 30 minutes)
- Topics (cached 10 minutes)
- Sessions (cached 5 minutes, invalidated on updates)
- Publishing configuration (cached 10 minutes)
- Stale-while-revalidate pattern for fresh data
- Automatic refetch on window focus
- Optimistic updates for immediate UI feedback
Concurrent Editing (No Real-Time Collaboration)
- No real-time presence indicators - MVP limitation, deferred to future enhancement
- Version-based conflict detection (optimistic concurrency control)
- Save conflicts detected via version number mismatch
- Show conflict resolution dialog when save fails due to concurrent edit
- User must manually reload to see other usersβ changes
- Last-write-wins strategy for conflict resolution
- Auto-save (5-second debounce) may trigger conflict detection if another organizer saves between intervals
- No live cursors, no collaborative editing indicators
Form Validation Rules
Field-Level Validations
- Title: Required, min 10 characters, max 200 characters
- Description: Required, min 50 characters, max 2000 characters
- Event Date: Required, must be future date (at least 30 days from now)
- Event Type: Required, must be one of [full_day, afternoon, evening]
- Registration Deadline: Required, must be before event date
- Capacity: Required, positive integer, min 20, max 1000
- Theme: Optional, max 100 characters
- Venue: Required, must reference existing venue
- Budget: Optional, positive number
Form-Level Validations
- Registration deadline must be at least 7 days before event date
- Capacity cannot be less than current registration count
- At least 1 topic must be assigned before publishing
- Minimum speaker count must meet event type requirements (6-8 for full day/afternoon, 3-4 for evening)
- All speakers must have confirmed status before finalizing agenda
- Venue must be confirmed before advancing to publishing stage
- Publishing configuration required before marking event as published
- Cannot delete event if registrations exist (must cancel event instead)
Edge Cases & Error Handling
- Empty State (New Event): Show guided setup wizard instead of full form
- Loading State: Display skeleton screens for all sections during initial data fetch
- Error State (API Failure): Show error message with [Retry] button and support contact
- No Topics Assigned: Show prominent call-to-action to add topics from backlog
- No Speakers Assigned: Display warning banner with [Invite Speakers] quick action
- Concurrent Edit Conflict: Show conflict resolution dialog with side-by-side comparison
- Venue Unavailable: Show warning badge and suggest alternative venues
- Budget Exceeded: Display warning indicator if estimated costs exceed budget
- Missing Materials (Speaker): Highlight pending materials with deadline countdown
- Registration Full: Show waitlist option and disable new registrations
- Past Event Date: Display read-only archive mode with limited editing capabilities
- Insufficient Permissions: Hide edit controls, show read-only view
- Network Offline: Cache form data locally, show offline indicator, sync when online
- Auto-Save Failure: Show persistent warning banner until successful save (auto-save always enabled, not configurable)
- Validation Errors on Save: Scroll to first error field, highlight all errors, show summary message
- Deletion Blocked: If registrations exist, show error: βCannot delete event with registrations. Please cancel event instead.β
- Concurrent Edit Detected: Show conflict dialog with options to reload or force save (no automatic merge, no real-time presence)
Change Log
| Date | Version | Description | Author |
|---|---|---|---|
| 2025-10-01 | 1.0 | Initial wireframe creation | Sally (UX) |
| 2025-10-04 | 1.1 | Updated with stakeholder decisions: auto-save always enabled (5s debounce), Swiss timezone only, no templates, organizer-only deletion, no real-time collaboration | Sally (UX) |
Review Notes
Stakeholder Feedback
- β Auto-save always enabled (5-second debounce) - not configurable per user
- β Swiss timezone only (CET/CEST) - no special timezone handling
- β No event templates in MVP - each event created from scratch
- β Deletion requires organizer confirmation only - no admin approval
- β No real-time presence indicators - conflict resolution via version mismatch dialog
Design Iterations
- v1.0: Initial comprehensive design with all functional sections
- v1.1: Clarified based on stakeholder decisions:
- Auto-save always enabled (5-second debounce, not configurable)
- Swiss timezone only (no international timezone support)
- No event templates in MVP
- Deletion: organizer confirmation only (no admin approval)
- No real-time collaboration features (presence indicators, live cursors)
Open Questions
All open questions have been resolved:
-
β Auto-save Configuration: Should auto-save be configurable per user preference?
- DECISION: No - Auto-save is always enabled for all organizers (5-second debounce after field changes)
- Consistent behavior across all users
- Simpler implementation and UX
-
β Timezone Display: How should we handle timezone display for international speakers?
- DECISION: No special timezone handling - All times displayed in local timezone (CET/CEST for Switzerland)
- Event times are Swiss-local only
- International speakers work with Swiss time
-
β Event Templates: Should we support event templates for faster event creation?
- DECISION: No - Not in MVP scope
- Each event created from scratch
- Can be added as future enhancement if needed
-
β Deletion Approval: Should deletion require admin approval or just organizer confirmation?
- DECISION: Organizer confirmation only - Only organizers can delete events anyway
- Confirmation dialog with impact summary required
- No additional admin approval needed
- Organizer role already has sufficient authority
-
β Real-Time Presence Indicators: Should concurrent editing show real-time cursors/presence indicators?
- DECISION: No - Not in MVP scope
- Conflict resolution via last-write-wins with conflict dialog
- Real-time collaboration features deferred to future enhancement