Story 3.2: Invitation Response Interface - Wireframe
Story: Epic 3, Story 3.2 - Speaker Management Service
API Consolidation: Updated to use consolidated APIs from Stories 1.17 (Events), 1.19 (Speakers), and 1.27 (Invitations) API Count: 5 endpoints (reduced from 8 original calls)
Invitation Response Interface (From Email Link)
From wireframes-speaker.md Section 2:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BATbern Event Platform [Login] [Register] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β You're Invited to Speak at BATbern! β β
β β Autumn Conference 2025 β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββ EVENT DETAILS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β π― Topic Request: Cloud Security Trends & Best Practices β β
β β π
Date: November 20, 2025 β β
β β π Location: Tech Park, Zurich β β
β β β±οΈ Format: 45-minute presentation + 15-min Q&A β β
β β π₯ Expected: 200+ IT professionals β β
β β ποΈ Your Role: Main track speaker, afternoon session β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββ WHY WE CHOSE YOU βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β "Your expertise in cloud security architecture and your recent work on β β
β β zero-trust implementations makes you the perfect speaker for this topic. β β
β β Your previous talk on Kubernetes security was highly rated (4.8/5) and β β
β β we believe our audience would greatly benefit from your insights." β β
β β β β
β β - Sally Organizer, Event Lead β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββ YOUR RESPONSE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Please respond by: March 15, 2025 (10 days remaining) β β
β β β β
β β βββββββββββββββββ βββββββββββββββββ ββββββββββββββββββββββ β β
β β β β β β β β β β
β β β β ACCEPT β β β DECLINE β β ? NEED MORE INFO β β β
β β β β β β β β β β
β β β I'm excited β β Unfortunately β β I'm interested β β β
β β β to speak! β β not available β β but need details β β β
β β β β β β β β β β
β β βββββββββββββββββ βββββββββββββββββ ββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββ IF ACCEPTING - QUICK PREFERENCES βββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Preferred Time Slot: Technical Requirements: β β
β β β Morning (09:00-12:00) β Mac adapter needed β β
β β β Afternoon (13:00-17:00) β Remote presentation option β β
β β β No preference β Special audio/video needs β β
β β β β
β β Travel Requirements: Initial Presentation Title: β β
β β β Local (no accommodation) ββββββββββββββββββββββββββββββββββ β β
β β β Need accommodation β Zero-Trust Security in Cloud β β β
β β β Virtual participation β Native Environments β β β
β β ββββββββββββββββββββββββββββββββββ β β
β β β β
β β Comments for Organizer: β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Happy to speak! Can we discuss covering specific compliance β β β
β β β requirements for Swiss financial sector? β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β [Submit Response β] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββ WHAT HAPPENS NEXT βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1. Submit your response (you can update it later) β β
β β 2. We'll confirm your slot within 48 hours β β
β β 3. You'll receive a speaker portal account β β
β β 4. Submit materials at your convenience (deadline: Oct 20) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Interactive Elements
- Three-button response: Accept, Decline, Need More Info
- Conditional form: Preferences shown only when accepting
- Inline preferences: Capture time, travel, technical needs upfront
- Comments field: Open communication with organizer
- Process timeline: Clear expectations of next steps
Functional Requirements Met
- FR3: Self-service speaker invitation response
- Quick Response: One-click decision with optional details
- Preferences Capture: Technical and scheduling needs collected early
- Communication: Direct messaging to organizer
User Interactions
- Select Response: Click Accept, Decline, or Need More Info
- Set Preferences: Choose time slot, specify requirements
- Add Title: Provide initial presentation title
- Add Comments: Communicate specific needs or questions
- Submit: Send response to organizer
Technical Notes
- Token-based link from email (no login required)
- Auto-save preferences as entered
- Creates speaker portal account upon acceptance
- Triggers organizer notification upon response
- Mobile-responsive design for on-the-go responses
API Requirements
APIs needed to load and display data for this screen:
Initial Page Load (Token-Based)
- GET /api/v1/invitations/{id}?include=speaker,event,session&token={invitationToken}
- Retrieve complete invitation details using secure token from email link
- Query params:
token: Secure invitation token from email (required for unauthenticated access)include: speaker,event,session (includes all related data in single response)
- Response includes:
- Invitation: id, status, message, deadline, preferences
- Speaker: id, name, email, company, profile
- Event: id, title, date, location, format, expectedAttendance
- Session: id, title, topic, timeSlot, duration, format
- Used for: Populating all event details, βWhy We Chose Youβ section, speaker context
- Security: Single-use or time-limited token validation
- Note: Replaces previous fragmented calls for invitation and speaker history
Action APIs
APIs called by user interactions and actions:
Response Submission
-
PUT /api/v1/invitations/{id}/accept
- Triggered by: [β ACCEPT] button followed by [Submit Response β]
- Payload:json
{ "preferences": { "timeSlot": "morning|afternoon|no_preference", "travelRequirements": "local|accommodation|virtual", "technicalRequirements": ["mac_adapter", "remote_option", "special_av"], "presentationTitle": "string", "comments": "string" } } - Response: Updated invitation with status=βacceptedβ, confirmation details, speaker account info
- Side effects:
- Creates speaker portal account automatically
- Sends confirmation email with portal access credentials
- Triggers organizer notification
-
PUT /api/v1/invitations/{id}/decline
- Triggered by: [β DECLINE] button followed by [Submit Response β]
- Payload:json
{ "reason": "string", "alternativeSuggestion": "string", "comments": "string" } - Response: Updated invitation with status=βdeclinedβ
- Side effects:
- Updates speaker pipeline status
- Sends organizer notification
- Captures decline reason for analytics
Auto-Save (Optional)
- PATCH /api/v1/invitations/{id}
- Triggered by: Field changes (debounced, every 2 seconds)
- Payload:json
{ "draftPreferences": { "timeSlot": "afternoon", "presentationTitle": "partial title..." } } - Response: Draft saved confirmation
- Used for: Preventing data loss if user navigates away
Additional Actions
-
PUT /api/v1/invitations/{id}
- Triggered by: [? NEED MORE INFO] button
- Payload:json
{ "status": "need_more_info", "questions": "string", "specificConcerns": [] } - Response: Updated invitation with status=βneed_more_infoβ
- Side effect: Creates task for organizer to respond, opens communication channel
-
GET /api/v1/events/{eventId}?fields=title,date,location,description,pastEvents
- Triggered by: Optional βLearn more about this eventβ link
- Query params:
fieldsto limit response to public information only - Response: Public event information, past event examples
- Opens: Event details modal or link to public page
Navigation Map
Screen transitions triggered by actions and events:
Primary Navigation
-
[Login] Header Button
- Target: Login page
- Context: If speaker already has account, can login to full portal
- Type: Standard login flow
-
[Register] Header Button
- Target: Speaker registration page
- Context: Create account before responding to invitation
- Type: Standard registration flow
-
On Response Submitted - ACCEPTED
- Target: Speaker Dashboard (Story 3.3)
- Type: Automatic redirect after 3-second success message
- Context: Account auto-created, user logged in automatically
- Welcome Flow: Show onboarding tour on first login
-
On Response Submitted - DECLINED
- Target: Thank You page
- Type: Static page
- Context: βThank you for considering. We hope to work with you in the future.β
- Options:
- Link to join mailing list for future events
- Button to βUpdate to Maybe/Interestedβ (changes response to need_more_info)
-
On Response Submitted - NEED MORE INFO
- Target: Communication Interface (inline or modal)
- Type: Modal overlay
- Context: Open message thread with organizer
- Follow-up: Option to later accept/decline after getting info
Secondary Navigation
-
βWhat Happens Nextβ - Step 3 Link
- Target: Speaker Portal info page
- Type: Informational modal or external page
- Context: Preview what the speaker portal offers
-
βPrevious Talk Ratingβ Link (in βWhy We Chose Youβ)
- Target: Past Event Details page
- Type: Modal or new tab
- Context: Show speaker their previous presentation metrics
-
Event Details - Location Link
- Target: Venue information page or Google Maps
- Type: External link
- Context: Help speaker plan travel/accommodation
Event-Driven Navigation
-
On Token Expired
- Target: Error page with contact form
- Feedback: βThis invitation link has expired. Please contact us.β
- Action: Provide email/contact form to request new invitation
-
On Token Invalid
- Target: 404 or Error page
- Feedback: βInvalid invitation linkβ
- Action: Redirect to homepage or contact support
-
On Already Responded
- Target: Response confirmation page
- Feedback: βYou already responded to this invitation on [date]β
- Action: Show previous response with option to update
- Navigation: Button to βUpdate My Responseβ or βGo to Speaker Dashboardβ
Auto-Save & Recovery
-
On Page Reload with Unsaved Draft
- No Navigation: Remains on same page
- Feedback: βWeβve saved your progressβ banner
- Action: Restore draft preferences from auto-save
-
On Submit Error
- No Navigation: Remains on same page
- Feedback: Error message with specific issue
- Action: Allow user to correct and resubmit
Mobile-Specific
- On Small Screen - Response Buttons
- No Navigation: Inline form expansion
- Context: Preferences section slides in below button
- UX: Smooth scroll to expanded preferences
Post-Acceptance Flow
- After Acceptance - βComplete Your Profileβ Prompt
- Target: Speaker Profile Management (Story 7.1)
- Type: Optional next step
- Context: Encourage speaker to fill complete profile
- Timing: Can be delayed with βDo This Laterβ option
API Consolidation Summary
This wireframe has been updated to use consolidated APIs from the following stories:
Story 1.27: Invitations API Consolidation
Key Changes:
- Token-based access: Single
GET /api/v1/invitations/{id}?include=speaker,event,session&token={token}replaces multiple fragmented calls - Resource expansion: Using
?include=parameter eliminates need for separate speaker history lookup - Standardized actions: Accept/decline now use dedicated
PUT /api/v1/invitations/{id}/acceptandPUT /api/v1/invitations/{id}/declineendpoints - Unified updates:
PATCH /api/v1/invitations/{id}for draft preferences and status changes
Story 1.17: Events API Consolidation
Key Changes:
- Public event details:
GET /api/v1/events/{eventId}?fields=for selective field retrieval
Story 1.19: Speakers API Consolidation
Key Changes:
- Speaker context: Embedded in invitation response via
?include=speaker(no separate API call needed)
Before vs After
Before Consolidation (8 API calls):
- GET /api/v1/invitations/token/{token}
- GET /api/v1/speakers/{speakerId}/invitation-history
- POST /api/v1/invitations/{invitationId}/respond
- POST /api/v1/speakers/register-from-invitation
- PUT /api/v1/invitations/{invitationId}/draft-preferences
- POST /api/v1/invitations/{invitationId}/request-info
- GET /api/v1/events/{eventId}/public-details
- Multiple tracking/validation endpoints
After Consolidation (5 API calls):
- GET /api/v1/invitations/{id}?include=speaker,event,session&token={token}
- PUT /api/v1/invitations/{id}/accept
- PUT /api/v1/invitations/{id}/decline
- PATCH /api/v1/invitations/{id} (auto-save)
- GET /api/v1/events/{eventId}?fields=β¦ (optional)
Improvements:
- 37.5% reduction in API calls (8 β 5)
- Single page load: One API call retrieves all invitation, speaker, event, and session data
- Simplified response flow: Dedicated accept/decline endpoints with automatic speaker account creation
- Better performance: Reduced network overhead and faster page load times
- Consistent patterns: All APIs follow standard REST conventions with
?include=and?fields=parameters
Change Log
| Date | Version | Description | Author |
|---|---|---|---|
| 2025-10-04 | 1.0 | Initial wireframe creation | ux-expert |
| 2025-10-04 | 1.1 | Updated to use consolidated APIs from Stories 1.17, 1.19, 1.27 | Claude Code |