Epic 6: Speaker Self-Service Portal (Enhancement Layer)
Status: β 100% COMPLETE (All Stories Deployed to Staging)
Implementation Complete: All 6 stories (6.0-6.5) have been implemented and deployed to staging. The speaker self-service portal is now fully operational with complete automation and accessibility compliance.
Deployment Timeline:
- 2026-02-06: Stories 6.0-6.3, 6.5 deployed (PR #430, Build Pipeline #21559151095)
- 2026-02-16: Story 6.4 implementation complete with WCAG 2.1 AA accessibility (QA review)
Architecture: Speaker portal functionality implemented in speaker-coordination-service with magic link authentication, invitation workflow, response handling, content submission, dashboard, and automated reminders.
Epic Overview
Epic Goal: Provide self-service portal for speakers to reduce organizer workload by enabling speakers to independently respond to invitations, submit materials, and manage their participation.
Deliverable: Optional speaker self-service portal that enhances the organizer-driven workflow (Epic 5) with speaker autonomy, reducing manual organizer tasks by ~40%.
Architecture Context:
- Core Service: Speaker Coordination Service (Java 21 + Spring Boot 3.2)
- Integration: Enhances Epic 5 workflows (Stories 5.3-5.5)
- Storage: AWS S3 for speaker materials (presentations, photos, CVs)
- Communication: AWS SES for invitation and reminder emails
- Frontend: React speaker portal components
Duration: 10.5 weeks (Weeks 42-52.5, after Epic 5 complete) - includes Story 6.0 prerequisite (2.5 weeks)
What Changed:
- Epic 5 First: Organizer-driven workflow operational before Epic 6
- Enhancement Layer: Epic 6 adds self-service options, not core functionality
- Backward Compatible: Organizers can still upload materials on behalf of speakers
- Reduced Scope: Focus on high-value self-service features only
Why Epic 6 is Optional
Epic 5 Provides Complete Workflow Without Epic 6
| Workflow Step | Epic 5 (Organizer-Driven) | Epic 6 Enhancement (Optional) |
|---|---|---|
| Step 4: Speaker Outreach | Organizer manually contacts speaker, records contact | Speaker receives automated invitation email |
| Step 5: Speaker Status | Organizer manually updates status after conversation | Speaker self-updates status via response link |
| Step 6: Content Collection | Organizer uploads CV, photo, abstract on speakerβs behalf | Speaker self-submits via portal |
Value Proposition of Epic 6
Without Epic 6 (Epic 5 Only):
- β Organizers manually handle all speaker coordination
- β Organizers collect materials via email/shared drives
- β Organizers upload materials on behalf of speakers
- β Higher organizer workload
- β More manual data entry
- β Slower material collection
With Epic 6 Enhancement:
- β Speakers self-respond to invitations (reduces organizer follow-up)
- β Speakers self-submit materials (reduces organizer data entry)
- β Automated reminders reduce organizer coordination time
- β ~40% reduction in organizer workload
- β Faster material collection (1 week average vs 3 weeks manual)
Implementation Decision
Decision (2026-02-03): Epic 6 Phase 1 & 2 implemented and deployed. Core speaker self-service functionality is now live on staging.
Epic 6 Stories (Enhancement Features)
Story 6.0: Speaker Coordination Service Foundation + API Consolidation (PREREQUISITE)
(Moved from Epic 2, Story 2.3 - formerly Story 1.19, includes 1.15a.3 Speakers API Consolidation)
Status: β Complete (deployed to staging 2026-02-03)
User Story: As an organizer, I want the foundational Speaker Coordination Service with consolidated RESTful APIs, so that I can manage speaker profiles efficiently and enable self-service features in Epic 6.
Why This is Story 6.0: Speaker Coordination Service was moved from Epic 2 to Epic 6 because:
- Better Cohesion: All speaker-related functionality consolidated in Epic 6
- Epic 5 Independence: Epic 5 organizer workflows donβt require speaker service (organizers manage speakers manually in notes/spreadsheets)
- Direct Dependency: Stories 6.1-6.5 (speaker self-service) all depend on this foundation
- Reduced Epic 2 Scope: Epic 2 focuses on core operational entities (Company, User, Event, Partner)
Architecture Integration:
- Service:
speaker-coordination-service/(Java 21 + Spring Boot 3.2) - Database: PostgreSQL with speaker domain schema
- Storage: S3 for speaker photos and CVs
- Cache: Caffeine for speaker session data (10min TTL for expanded resources)
- API Foundation: Uses Story 1.15a utilities for filtering, sorting, pagination
- HTTP Clients: Integration with User/Company services (ADR-003 pattern)
Key Functionality:
- Speaker CRUD operations with consolidated API patterns
- Speaker profile management (name, bio, expertise, company affiliation)
- Speaker-event associations tracking
- Speaker photo and CV storage with S3 presigned URLs
- Resource Expansion:
?include=events,sessions,companiesfor speaker history in single call - Advanced Search: Filter speakers by expertise, company, past participation
- Performance: Speaker detail with history <300ms P95
- Domain Events: SpeakerCreatedEvent, SpeakerUpdatedEvent, SpeakerInvitedEvent
Acceptance Criteria:
Backend Service:
- Consolidated REST API
GET /api/v1/speakers?filter={}&include=events,sessions,companies&sort=name&page=1&size=20GET /api/v1/speakers/{speakerId}?include=events,sessions,companiesPOST /api/v1/speakers(create speaker profile)PATCH /api/v1/speakers/{speakerId}(update speaker)DELETE /api/v1/speakers/{speakerId}(soft delete)GET /api/v1/speakers/search?q={query}(autocomplete search)
- HTTP Client Integration
- API Consolidation: Support
?include=events,sessions,companies,topics,materials - Advanced Search
- Performance
- Extends
ch.batbern.shared.test.AbstractIntegrationTest
Architecture Compliance:
Testing Requirements:
Estimated Duration: 2.5 weeks (includes API consolidation implementation + HTTP client integration)
References:
- Original story: Epic 2, Story 2.3
- Core functionality:
docs/prd/epic-1-foundation-stories.mdStory 1.19 - API consolidation:
docs/stories/1.15a.3.speakers-api-consolidation.md - ADR-003:
docs/architecture/ADR-003-meaningful-identifiers-public-apis.md - Event-management-service: Reference implementation for HTTP clients with JWT propagation
- Partner-coordination-service: Reference implementation for HTTP enrichment pattern
Important: This story must be completed BEFORE Stories 6.1-6.5, as they all depend on the Speaker Coordination Service foundation.
Story 6.1: Automated Speaker Invitation System β
Status: β Complete (deployed to staging 2026-02-03)
SpeakerInvitationController.java- send invitation emails with magic links
User Story: As an organizer, I want to send automated speaker invitations with unique response links, so that speakers can self-respond without manual follow-up.
Enhancement Over Epic 5:
- Epic 5: Organizer manually contacts speaker and records response
- Epic 6: Automated email with unique link for self-service response
Architecture Integration:
- Service: Speaker Coordination Service
- Email: AWS SES with template management
- Database: PostgreSQL invitations and response tracking
- Frontend: React invitation management + speaker response interface
Acceptance Criteria:
Automated Invitations:
- Template System: Pre-defined invitation email templates with variable substitution
- Unique Links: Generate unique response link per speaker (no authentication required)
- Bulk Operations: Send invitations to multiple speakers simultaneously
- Tracking: Monitor invitation status (sent/opened/responded)
- Personalization: Include speaker name, event details, deadlines
Integration with Epic 5: 6. Hybrid Workflow: Organizer can still manually record responses (Epic 5) if speaker doesnβt use portal 7. Status Sync: Self-service responses update same status tracking as Epic 5 manual updates 8. Backward Compatible: System works with or without speaker self-service
Definition of Done:
Estimated Duration: 2 weeks
Story 6.2: Speaker Self-Service Response Portal β
Status: β Complete (deployed to staging 2026-02-03)
SpeakerPortalTokenController.java- magic link validationSpeakerPortalResponseController.java- accept/decline/tentative responses
User Story: As a speaker, I want to respond to invitations via a simple web form, so that I can confirm my participation without email back-and-forth with organizers.
Enhancement Over Epic 5:
- Epic 5: Speaker responds via email/phone, organizer manually updates status
- Epic 6: Speaker self-updates status via web form
Architecture Integration:
- Frontend: React response form (no authentication required, accessed via unique link)
- Backend: Speaker Coordination Service response processing
- Database: PostgreSQL speaker responses and constraints
- Notifications: Real-time updates to organizers
Wireframe Reference:
docs/wireframes/story-3.2-invitation-response.mdβ
Acceptance Criteria:
Response Interface:
- Response Form: Simple form accessible via unique link from invitation email
- Availability Options: Accept/Decline responses (Tentative removed from UI 2026-02-11; API still supports for backward compat)
- Constraint Collection: Optional message to organizer (scheduling preferences, technical needs simplified out of UI 2026-02-11)
- Confirmation: Immediate confirmation of response submission
Response Processing:
5. Auto Status Update: Response automatically updates speaker status in Epic 5 workflow
6. Organizer Notification: Organizers notified in real-time of speaker responses
7. Tentative Handling: Support for tentative responses with follow-up Deferred from UI 2026-02-11; backend supports tentative for future re-enablement
8. Decline Reasons: Optional collection of decline reasons
Hybrid Operation: 9. Manual Override: Organizer can still manually update status if speaker doesnβt use portal 10. Conflict Resolution: If speaker self-responds after organizer manual update, show warning
Definition of Done:
- All response types (Accept/Decline) properly handled in UI (Tentative: backend only)
Estimated Duration: 1.5 weeks
Story 6.3: Speaker Material Self-Submission Portal β
Status: β Complete (deployed to staging 2026-02-03)
SpeakerPortalContentController.java- title, abstract, material submissionSpeakerPortalProfileController.java- profile updates (bio, photo, CV)
User Story: As a speaker, I want to upload my presentation materials through a self-service portal, so that organizers donβt have to manually collect and upload my content.
Enhancement Over Epic 5:
- Epic 5: Speaker emails materials to organizer, organizer uploads to system
- Epic 6: Speaker directly uploads materials to system via portal
Architecture Integration:
- Storage: AWS S3 with presigned URLs for uploads
- Backend: Speaker Coordination Service validation
- Database: PostgreSQL submission tracking
- Frontend: React upload interface (accessed via unique link or speaker dashboard)
Wireframe References:
docs/wireframes/story-3.3-material-submission-wizard.mdβdocs/wireframes/story-3.3-presentation-upload.mdβ
Acceptance Criteria:
Self-Service Upload:
- Material Wizard: Multi-step wizard for title, abstract, CV, photo, presentation upload
- File Upload: Drag-and-drop interface with progress tracking
- Validation: Enforce abstract length (1000 char max), file size, format requirements
- Preview: Speaker can preview how materials will appear
- Draft Saving: Auto-save progress to prevent data loss
Integration with Epic 5: 6. Hybrid Workflow: Organizer can still upload materials on speakerβs behalf (Epic 5) 7. Review Queue: Materials flow to same moderator review queue as Epic 5 (Story 5.6) 8. Organizer Notification: Notify organizer when speaker submits materials 9. Approval Workflow: Organizer reviews and approves before publication (same as Epic 5)
Definition of Done:
Estimated Duration: 2.5 weeks
Story 6.4: Speaker Dashboard (View-Only) β
Status: β Complete (implementation complete 2026-02-16, QA PASSED β 98/100 quality score)
User Story: As a speaker, I want to view my upcoming and past BATbern presentations, so that I can see my speaking history and event details.
Architecture Integration:
- Authentication: Simple email-based authentication (no account creation)
- Backend: Speaker Coordination Service
- Frontend: React speaker dashboard
Acceptance Criteria:
Dashboard Features:
- Upcoming Events: List of events speaker is confirmed for with session details
- Past Events: Historical speaking engagements with event dates, topics
- Material Status: Show submission status for upcoming events
- Event Details: View event date, location, session time, topic
- Contact Information: Organizer contact details for questions
Authentication: 6. Email-Based Access: Magic link authentication (no password required) 7. Session Management: 30-day session expiration 8. No Account Creation: Speaker doesnβt need to create account
Definition of Done:
Estimated Duration: 1.5 weeks
Story 6.5: Automated Deadline Reminders β
Status: β Complete (deployed to staging 2026-02-06)
User Story: As an organizer, I want automated deadline reminders sent to speakers, so that I donβt have to manually follow up on material submission deadlines.
Enhancement Over Epic 5:
- Epic 5: Organizer manually reminds speakers about deadlines
- Epic 6: Automated email reminders sent at configurable intervals
Architecture Integration:
- Scheduler: Spring @Scheduled tasks for deadline monitoring
- Email: AWS SES for reminder delivery
- Database: PostgreSQL reminder_log, reminder_rules
- Frontend: React reminder configuration UI
Acceptance Criteria:
Reminder Configuration:
- Reminder Rules: Configure reminder schedule (e.g., 1 month before, 2 weeks before, 3 days before)
- Template Management: Pre-defined reminder email templates
- Escalation Tiers: Tier 1 (friendly reminder), Tier 2 (urgent), Tier 3 (escalate to organizer)
- Per-Event Configuration: Different rules for different event types
Automated Sending: 5. Deadline Detection: Monitor all speaker deadlines (material submission, response deadlines) 6. Auto-Send: Automatically send reminders based on configured rules 7. Tracking: Log all reminders sent with delivery status 8. Deduplication: Donβt send reminder if materials already submitted
Integration with Epic 5: 9. Manual Override: Organizer can disable automated reminders for specific speakers 10. Manual Reminders: Organizer can still manually contact speaker (Epic 5 workflow) 11. Unified Tracking: Automated and manual reminders both logged in communication history
Definition of Done:
Estimated Duration: 1.5 weeks
Epic 6 Success Metrics
Adoption Metrics:
- Self-Service Rate: 70%+ of speakers use self-service portal
- Response Time: Speakers respond 2x faster via portal vs email (3 days vs 7 days average)
- Material Submission: Materials submitted 1 week faster on average (1 week vs 3 weeks)
Organizer Efficiency:
- Workload Reduction: 40% reduction in manual speaker coordination tasks
- Time Savings: 3 hours saved per event on average
- Data Entry: 80% reduction in manual data entry
Technical Performance:
- Invitation Delivery: 100% delivery rate via SES
- Response Time: <2 seconds for status updates
- Upload Speed: 10MB/s for material uploads
- System Availability: >99.5% uptime
Business Value:
- Speaker Satisfaction: Simplified submission process increases speaker participation
- Quality: All materials validated against requirements (same as Epic 5)
- Transparency: Real-time visibility for all organizers (same as Epic 5)
- Scalability: System handles increased event frequency without proportional organizer workload increase
Implementation Considerations
Operational Requirements
The speaker-coordination-service exposes Spring Boot Actuator endpoints for operational monitoring:
GET /actuator/healthβ returns HTTP 200 with{"status":"UP"}when service is healthyGET /actuator/infoβ returns HTTP 200 with service metadata
These endpoints are unauthenticated and used by the load balancer health checks and monitoring tooling.
Prerequisites
Must Complete First:
- β Epic 5 complete and operational (all 16 workflow steps working with organizer-driven approach)
- β Organizer feedback collected on Epic 5 workflows
- β ROI analysis confirms Epic 6 value justifies development cost
- β οΈ Story 6.0 (Speaker Coordination Service) must be complete before Stories 6.1-6.5
Backward Compatibility
Critical Requirement: Epic 6 must not break Epic 5 organizer-driven workflows.
- Organizers can still manually handle all tasks even if Epic 6 deployed
- Hybrid mode: Some speakers use self-service, others use organizer-driven
- No forced migration: Organizers choose when/if to enable self-service per speaker
Rollout Strategy
Recommended Approach:
- Phase 0: Implement Story 6.0 - Speaker Coordination Service Foundation (Week 42-44.5)
- Phase 1: Deploy Stories 6.1-6.5 to single event as pilot (Week 45-46)
- Phase 2: Gather feedback, iterate on UX (Week 47)
- Phase 3: Gradual rollout to all events (Week 48-52.5)
- Phase 4: Make self-service default, organizer-driven fallback (Phase 3+)
Relationship to Epic 5
| Aspect | Epic 5 (Organizer-Driven) | Epic 6 (Self-Service Enhancement) |
|---|---|---|
| Status | Required - Core Workflow | Optional - Efficiency Enhancement |
| Timeline | Weeks 27-41 | Weeks 42-49 (after Epic 5) |
| Dependency | Independent | Depends on Epic 5 complete |
| Speaker Outreach | Manual contact by organizer | Automated invitation emails |
| Response Tracking | Organizer records status manually | Speaker self-updates via portal |
| Content Collection | Organizer uploads on behalf | Speaker self-submits |
| Deadline Management | Manual organizer follow-up | Automated reminders |
| Workload | Higher organizer burden | 40% reduction via self-service |
| Fallback | N/A | Epic 5 workflows if portal not used |
Decision Point: Build Epic 6?
After Epic 5 Complete, Evaluate:
Build Epic 6 If:
- β Organizers report high workload coordinating speakers
- β Event frequency increasing (more events = more coordination time)
- β Speaker feedback requests self-service option
- β Development resources available for 8-week project
Defer Epic 6 If:
- β Epic 5 organizer-driven workflow sufficient
- β Low event frequency (limited workload savings)
- β Other features higher priority
- β Limited development resources
Recommendation: Gather data from Epic 5 operation (3-6 months) before committing to Epic 6.