Story 2.3: Basic Publishing Engine - Wireframe
Story: Epic 2, Story 2.3 - Topic & Content Management Service
Basic Publishing Engine (FR19 - Basic Version)
Note: This is the basic version from Epic 2. See story-4.3-progressive-publishing.md for the full version from Epic 4.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Back Publishing Control Center - Spring Conference β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββ PUBLISHING TIMELINE βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Jan 1 Feb 1 Mar 1 Apr 1 May 15 β β
β β βββ¬ββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬ββ β β
β β β β β β β β β
β β Topic β Speakers β Agenda Draft Final Agenda Event Day β β
β β Published Published Mar 15 May 1 β β
β β β β
β β Current Phase: SPEAKERS PUBLISHED - Next: Agenda Draft (12 days) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ CONTENT VALIDATION DASHBOARD ββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Publishing Readiness: 73% βββββββββββββββββββββββββββ β β
β β β β
β β ββββ Required Items βββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β β Component Status Validation Action β β β
β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β β Event Title Ready Passed all checks [Edit] β β β
β β β β Date & Venue Ready Venue confirmed [View] β β β
β β β β Topic Description Ready Within 500 chars [Edit] β β β
β β β β οΈ Speaker List Partial 5/8 confirmed [Manage] β β β
β β β β οΈ Abstracts Partial 5/8 validated [Review] β β β
β β β ββ Length Check Failed 3 exceed 1000 chars [Fix] β β β
β β β ββ Lessons Learned Passed All included β β β β
β β β ββ Quality Review Pending 3 await moderation [Go] β β β
β β β β Speaker Photos Missing 3/8 uploaded [Upload] β β β
β β β β οΈ Session Timings Partial 5/8 sessions assigned [Assign] β β β
β β β ββ Workshop 1 β Missing No start/end time [Assign] β β β
β β β ββ Workshop 2 β Missing No start/end time [Assign] β β β
β β β ββ Closing Session β Missing No start/end time [Assign] β β β
β β β β Agenda Times Not Set Slots unassigned [Assign] β β β
β β β β Registration Link Ready Tested & working [Test] β β β
β β β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ LIVE PREVIEW βββββββββββββββββββ¬βββ PUBLISHING CONTROLS βββββββββββββββββββ β
β β β β β
β β βββββββββββββββββββββββββββ β Publishing Mode: β β
β β β BATbern Spring 2025 β β β Draft (internal only) β β
β β β β β β Progressive (public, partial) β β
β β β Cloud Native β β β Complete (all content) β β
β β β Architecture β β β β
β β β β β β β
β β β May 15, 2025 β β β β
β β β Kursaal Bern β β β β
β β β β β β β
β β β Speakers: β β β β
β β β β’ Sara Kim - Docker β β Version Control: β β
β β β β’ Peter Muller - K8s β β Current: v3 (Feb 28, 14:30) β β
β β β β’ [3 more confirmed] β β [View History] [Rollback] β β
β β β β’ [3 slots available] β β β β
β β β β β Actions: β β
β β β [Register Now] β β [Publish Now] [Preview] β β
β β βββββββββββββββββββββββββββ β β β
β β β β οΈ Warning: 3 validation errors β β
β β [Desktop] [Mobile] [Print] β Publishing will show partial content β β
β βββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Publishing Controls with Subscriber Notifications (AC24)
Before Publishing: Organizer can choose to notify subscribers when publishing
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ββββ PUBLISHING CONTROLS βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Publishing Mode: β β
β β β Draft (internal only) β β
β β β Progressive (public, partial) β β
β β β Complete (all content) β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Subscriber Notifications: β β
β β β Notify subscribers when publishing β β
β β Will send email to 247 active subscribers β β
β β [Preview Newsletter] β β
β β β β
β β Auto-Publish Schedule: β β
β β β’ Phase 1 (Topic): Immediately β β
β β β’ Phase 2 (Speakers): June 1, 2025 at 10:00 β β
β β β’ Phase 3 (Agenda): June 8, 2025 at 10:00 β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Version Control: β β
β β Current: v3 (Feb 28, 14:30) β β
β β [View History] [Rollback] β β
β β β β
β β Actions: β β
β β [Publish Now] [Schedule Publish] [Preview] β β
β β β β
β β β οΈ Warning: 3 validation errors β β
β β Publishing will show partial content β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User Action: Click [Preview Newsletter]
Result: Opens Newsletter Preview Modal (see below)
Notification Checkbox States:
- Checked (default): Newsletter will be sent on publish
- Unchecked: No newsletter sent (silent publish)
- Tooltip: βSend update email to all active subscribers when Phase X is publishedβ
Subscriber Count:
- Shows real-time count of active subscribers
- Updates when subscribers added/removed
- Link to view subscriber list (if needed)
Newsletter Preview Modal
Trigger: User clicks [Preview Newsletter] button
Purpose: Allow organizer to review email content before publishing
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π§ Newsletter Preview [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββ Email Details βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β To: 247 active subscribers β β
β β From: BATbern Conference <noreply@batbern.ch> β β
β β Subject: New Speakers Announced for BATbern 2025 β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ Email Preview βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β BATbern 2025 Update β β β
β β β β β β
β β β Dear BATbern Community, β β β
β β β β β β
β β β We're excited to announce the speaker lineup for BATbern 2025! β β β
β β β β β β
β β β Featured Speakers: β β β
β β β β’ Dr. Sarah Miller - AI in Architecture β β β
β β β β’ Prof. John Chen - Sustainable Design Patterns β β β
β β β β’ Dr. Maria Lopez - DevOps for Architects β β β
β β β β’ Robert Williams - Cloud Native Architecture β β β
β β β β’ Jane Doe - Microservices Best Practices β β β
β β β β β β
β β β Event Details: β β β
β β β Date: May 15, 2025 β β β
β β β Location: Kursaal Bern β β β
β β β Theme: Cloud Native Architecture β β β
β β β β β β
β β β [View Full Program] [Register Now] β β β
β β β β β β
β β β Stay tuned for the full agenda, which will be published soon! β β β
β β β β β β
β β β Best regards, β β β
β β β The BATbern Team β β β
β β β β β β
β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β You're receiving this email because you subscribed to BATbern β β β
β β β updates. [Unsubscribe] [Update Preferences] β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Device Preview: [Desktop] [βMobile] [Tablet] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ Template Customization ββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Email template: Phase 2 - Speakers Announcement (default) β β
β β β β
β β Customizable Fields: β β
β β β’ Header image: [Upload] or use default BATbern logo β β
β β β’ Button color: #1976d2 (Brand blue) β β
β β β’ Custom message (optional): β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β [Add custom message to appear before speaker list...] β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ Testing ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Send test email to verify formatting and links: β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β organizer@batbern.ch β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β [Send Test Email] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [Close] [Save & Close] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User Actions:
1. Review email content and formatting
2. Switch between device previews (Desktop/Mobile/Tablet)
3. Customize header image or add custom message (optional)
4. Send test email to verify
5. Close modal (returns to publishing controls)
Newsletter Content by Phase:
- Phase 1 (Topic): Event announcement with theme/topic reveal
- Phase 2 (Speakers): Speaker lineup announcement (as shown above)
- Phase 3 (Agenda): Full schedule with session timings and rooms
- Phase 4 (Updates): Last-minute changes, reminders, or announcements
Template Features:
- Responsive Design: Mobile-optimized (most subscribers read on mobile)
- Call-to-Action Buttons: [View Full Program], [Register Now]
- Unsubscribe Link: Required by email regulations (GDPR, CAN-SPAM)
- Brand Consistency: Uses BATbern colors and logo
Publishing Success State with Delivery Status
Trigger: After user clicks [Publish Now] and publishing completes
Display: Success message with subscriber notification delivery status
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Published Successfully [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Phase 2 (Speakers) is now live. β
β β
β ββββ Publication Details βββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Published: Feb 28, 2025 at 14:35 β β
β β Version: v4 β β
β β Publishing Mode: Progressive β β
β β Live URL: https://batbern.ch/events/2025 β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ Subscriber Notifications ββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β Newsletter sent at 14:35 β β
β β β β
β β Delivery Status: β β
β β β’ 245 delivered successfully β β
β β β’ 2 pending (retry in progress) β β
β β β’ 0 failed β β
β β β β
β β Subject: "New Speakers Announced for BATbern 2025" β β
β β β β
β β ββββ Engagement Metrics (Live) βββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β β Email opens: 67 (27% open rate) - Updated 2 mins ago β β β
β β β Link clicks: 23 (9% click rate) β β β
β β β β β β
β β β Top clicked links: β β β
β β β 1. [View Full Program] - 15 clicks β β β
β β β 2. [Register Now] - 8 clicks β β β
β β β β β β
β β β [View Full Analytics] β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β [View Sent Emails] [Resend Failed] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ Next Steps βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β’ Monitor engagement metrics to see subscriber interest β β
β β β’ Continue with Phase 3 (Agenda) when session timings complete β β
β β β’ Respond to any subscriber replies or questions β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [View Live Page] [Continue to Next Phase] [Close] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User Actions:
1. Click [View Live Page] β Opens public event page in new tab
2. Click [View Sent Emails] β Shows list of sent emails with delivery status per recipient
3. Click [Resend Failed] β Retry sending to failed recipients
4. Click [View Full Analytics] β Opens email analytics dashboard
5. Click [Continue to Next Phase] β Navigate to next workflow step
6. Auto-dismiss after 10 seconds or click [Close]
Delivery Status States:
- Delivered: Email successfully delivered to recipientβs inbox
- Pending: Email queued for delivery (retry in progress)
- Failed: Delivery failed (invalid email, bounce, spam filter)
- Opened: Recipient opened the email (tracked via pixel)
- Clicked: Recipient clicked a link in email
Engagement Metrics:
- Open Rate: Percentage of recipients who opened email
- Click Rate: Percentage who clicked any link
- Click-Through Rate (CTR): Clicks as percentage of opens
- Real-time Updates: Metrics refresh every 2 minutes
Publishing Error State (Newsletter Failure)
Scenario: Publishing succeeded but newsletter delivery failed
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β οΈ Published with Warnings [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Content published successfully, but: β
β β
β ββββ Newsletter Delivery Issue ββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β οΈ Email delivery partially failed β β
β β β β
β β β’ 210 delivered successfully β β
β β β’ 15 pending (retry in progress) β β
β β β’ 22 failed (invalid email addresses) β β
β β β β
β β Reason: Email service rate limit exceeded β β
β β β β
β β Impact: 22 subscribers did not receive the update email. β β
β β Emails with these issues will be retried automatically. β β
β β β β
β β Failed Recipients: β β
β β β’ john.doe@invalid-domain.com (invalid email) β β
β β β’ jane.smith@example.com (mailbox full) β β
β β β’ ... (20 more) β β
β β β β
β β [View Failed Recipients] [Retry Failed] [Export CSV] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β β Phase 2 (Speakers) Published Successfully β
β β Content is live at: https://batbern.ch/events/2025 β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [View Live Page] [Retry Failed Emails] [Close] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Automatic Retry Logic:
- Failed emails automatically retried after 5 minutes
- Maximum 3 retry attempts
- Permanent failures (invalid email) not retried
- Admin notification sent if >10% failure rate
CDN Invalidation Status Display (AC25)
Publishing Progress with CDN Status
Trigger: User clicks [Publish Now], system begins multi-step publishing process
Display: Modal showing real-time progress including CDN cache invalidation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Publishing in Progress... [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Phase 2 (Speakers) - Publishing to production β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββ 78% β β
β β β β
β β 1. β Content validated (completed 2s) β β
β β All validation checks passed β β
β β β β
β β 2. β Content saved to database (completed 1s) β β
β β Version v4 created successfully β β
β β β β
β β 3. β CDN cache invalidating... (in progress) β β
β β CloudFront Distribution: E2X7XYZ123 β β
β β Invalidation ID: I3ABCD8FGH9 β β
β β Estimated time: 30-60 seconds β β
β β β³ Purging cached pages: /events/2025, /events/2025/speakers β β
β β β β
β β 4. β³ Preparing notifications... (queued) β β
β β Newsletter to 247 subscribers β β
β β β β
β β 5. β³ Updating search index... (queued) β β
β β Indexing new speaker content β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Publishing started 45 seconds ago β
β β
β [Cancel Publishing] (warning: partial state) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User Experience:
- Modal shows live progress updates every 2 seconds
- Step status icons: β (complete), β³ (in progress), - (queued)
- Progress bar fills as steps complete
- Estimated completion time shown for CDN invalidation
- User can cancel (with warning about partial state)
CDN Invalidation Step Details:
- CloudFront Distribution ID: Shows which CDN distribution is being invalidated
- Invalidation ID: Unique identifier for tracking this invalidation request
- Estimated Time: AWS CloudFront typically takes 30-60 seconds
- Paths Being Purged: List of URL paths being removed from cache
/events/2025(event landing page)/events/2025/speakers(speakers page, if Phase 2)/events/2025/agenda(agenda page, if Phase 3)/api/events/2025(API endpoint cache)
Publishing Success State with CDN Performance
Trigger: All publishing steps complete successfully, including CDN invalidation
Display: Success modal with CDN performance metrics
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Published Successfully [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Phase 2 (Speakers) is now live. β
β β
β ββββ Publication Details βββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Published: Feb 28, 2025 at 14:35 β β
β β Version: v4 β β
β β Publishing Mode: Progressive β β
β β Live URL: https://batbern.ch/events/2025 β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ Performance Metrics ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β Total publish time: 1 min 42 seconds β β
β β β β
β β Step Performance: β β
β β β’ Content validation: 2s β β
β β β’ Database save: 1s β β
β β β’ CDN cache invalidation: 42s β β β
β β β’ Newsletter delivery: 28s (245/247 delivered) β β
β β β’ Search index update: 29s β β
β β β β
β β ββββ CDN Status βββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β β β Cache invalidation completed in 42 seconds β β β
β β β β β β
β β β CloudFront Distribution: E2X7XYZ123 β β β
β β β Invalidation ID: I3ABCD8FGH9 (completed) β β β
β β β β β β
β β β Paths invalidated: β β β
β β β β’ /events/2025 (event landing) β β β
β β β β’ /events/2025/speakers (speaker list) β β β
β β β β’ /api/events/2025 (API cache) β β β
β β β β β β
β β β Status: All edge locations updated β β β
β β β β β β
β β β βΉοΈ New visitors will see updated content immediately. β β β
β β β Existing cached content cleared from all regions. β β β
β β β β β β
β β β [View CloudFront Dashboard β] β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ Subscriber Notifications ββββββββββββββββββββββββββββββββββββββββββββ β
β β β Newsletter sent at 14:35 β β
β β β’ 245 delivered successfully β’ 2 pending β’ 0 failed β β
β β [View Sent Emails] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [View Live Page] [Continue to Next Phase] [Close] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CDN Performance Indicators:
- Completion Time: 42 seconds (typical range: 30-90s)
- Status: βAll edge locations updatedβ (AWS CloudFront confirmation)
- Paths Invalidated: List of cleared URLs
- Impact Message: Clear explanation that all cached content is cleared
- Link to Dashboard: Direct link to AWS CloudFront console for advanced monitoring
Color Coding:
- Green checkmark (β): CDN invalidation completed successfully
- Performance time: Green if <60s, Yellow if 60-90s, Red if >90s
CDN Invalidation Error State
Scenario: Publishing succeeded but CDN cache invalidation failed or timed out
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β οΈ Published with CDN Warning [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Content published successfully, but: β
β β
β ββββ CDN Cache Invalidation Issue ββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β β οΈ CloudFront cache invalidation failed β β
β β β β
β β Distribution: E2X7XYZ123 β β
β β Invalidation ID: I3ABCD8FGH9 (failed) β β
β β β β
β β Error Code: ThrottlingException β β
β β Error Message: "Rate of invalidation requests exceeded. Maximum 3000 β β
β β paths per invalidation, 15 concurrent invalidations β β
β β per distribution." β β
β β β β
β β ββββ Impact βββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β β Cached content may persist for up to 24 hours (default TTL) β β β
β β β β β β
β β β β’ New visitors: Will see updated content immediately β β β
β β β β’ Returning visitors: May see cached (old) content for up toβ β β
β β β 24 hours, depending on when they last visited β β β
β β β β β β
β β β Paths affected: β β β
β β β β’ /events/2025 (event landing) - may show old content β β β
β β β β’ /events/2025/speakers - may show old speaker list β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β ββββ Resolution Options βββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β β
β β β [1] Retry Invalidation Now β β β
β β β Immediately retry the invalidation request β β β
β β β (May fail again if rate limit still exceeded) β β β
β β β β β β
β β β [2] Schedule Retry in 5 Minutes β β β
β β β Automatically retry after waiting period β β β
β β β (Recommended if rate limit error) β β β
β β β β β β
β β β [3] Accept Warning & Continue β β β
β β β Content will be updated on next cache expiration β β β
β β β (Within 24 hours) β β β
β β β β β β
β β β [4] View AWS CloudFront Console β β β
β β β Manually trigger invalidation via AWS console β β β
β β β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Automatic Retry: Scheduled for 14:40 (in 5 minutes) β β
β β [Cancel Auto-Retry] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β β Phase 2 (Speakers) Published Successfully β
β β Content is live at: https://batbern.ch/events/2025 β
β β Newsletter sent to 247 subscribers β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [Retry CDN Invalidation] [View Live Page] [Close] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error Types:
- ThrottlingException: AWS rate limit exceeded (15 concurrent invalidations/distribution)
- InvalidationBatchSizeTooLarge: Too many paths in single invalidation (>3000 paths)
- Timeout: Invalidation took longer than expected (>2 minutes)
- NoSuchDistribution: CloudFront distribution not found (configuration error)
- AccessDenied: Insufficient AWS permissions (deployment configuration error)
Automatic Retry Logic:
- Throttling Errors: Auto-retry after 5 minutes (recommended by AWS)
- Timeout Errors: Auto-retry after 1 minute (may have completed)
- Other Errors: Manual retry required (admin intervention needed)
- Maximum Retries: 3 attempts before escalating to admin notification
Impact Messaging:
- Clear explanation of what βcached contentβ means
- Differentiate between new vs. returning visitors
- Specific paths affected
- Expected timeline for natural cache expiration (24h default TTL)
Version History with CDN Status
Enhanced Version History Table showing CDN invalidation status for each published version:
ββββ Version Control βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Current Version: v4 (Feb 28, 14:35) β
β [View Full History] [Rollback] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Click [View Full History] β Opens modal:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Version History [X] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Version Published Phase CDN Status Actions β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β v4 Feb 28, 14:35 Speakers β Cleared (42s) [Rollback] β β
β β (current) Invalidation: β β
β β by Organizer A I3ABCD8FGH9 β β
β β 3 paths cleared β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β v3 Feb 27, 10:15 Speakers β οΈ Partial (92s) [Rollback] β β
β β by Organizer B Timeout after 90s β β
β β Retry succeeded β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β v2 Feb 26, 16:20 Topic β Cleared (38s) [Rollback] β β
β β by Organizer A Invalidation: β β
β β I2XYZ5CDE7 β β
β β 2 paths cleared β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β v1 Feb 25, 09:00 Topic β Failed β β
β β (initial) ThrottlingException β β
β β by System Manual retry required β β
β β [Retry CDN Invalidation] β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β CDN Status Legend: β
β β Cleared - Successfully invalidated, all edge locations updated β
β β οΈ Partial - Completed with warnings or delays β
β β Failed - Invalidation failed, content may be cached β
β β
β [Close] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Version History Columns:
- Version: Version number (v1, v2, v3, etc.) with βcurrentβ indicator
- Published: Timestamp and publisher name
- Phase: Which phase was published (Topic, Speakers, Agenda)
- CDN Status: Visual indicator with details
- β Cleared: Success with completion time in seconds
- β οΈ Partial: Warning with reason (timeout, retry, etc.)
- β Failed: Error with reason (throttling, access denied, etc.)
- Actions: [Rollback] button, [Retry CDN Invalidation] for failed versions
Expandable Details (click version row):
β v3 Feb 27, 10:15 Speakers β οΈ Partial (92s) [View Details βΌ] β
β β
β ββββ CDN Invalidation Details βββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Invalidation ID: I2YZX9ABC3 β β
β β Status: Completed with warning (exceeded 60s threshold) β β
β β Started: Feb 27, 10:15:05 β β
β β Completed: Feb 27, 10:16:37 (92 seconds) β β
β β β β
β β Paths invalidated: β β
β β β’ /events/2025 β β
β β β’ /events/2025/speakers β β
β β β’ /api/events/2025 β β
β β β β
β β Timeline: β β
β β 10:15:05 - Invalidation request submitted β β
β β 10:15:12 - Request acknowledged by CloudFront β β
β β 10:16:37 - Invalidation completed (all edge locations) β β
β β β β
β β Notes: Completion time exceeded typical 60s threshold. This may β β
β β indicate high CDN load. Invalidation was successful. β β
β β β β
β β [View in AWS Console] [Close Details β²] β β
β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
CDN Monitoring Dashboard (Optional)
Advanced Feature: Link to real-time CDN monitoring
ββββ PUBLISHING CONTROLS βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Publishing Mode: β Progressive β Complete β Draft β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β CDN Status (Live): β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β CloudFront Distribution: E2X7XYZ123 β β
β β Status: β Active β β
β β β β
β β Cache Hit Ratio: 87% (last 24 hours) β β
β β Requests: 12,453 (last hour) β β
β β β β
β β Active Invalidations: 0 β β
β β Pending Invalidations: 0 β β
β β β β
β β [View CloudFront Metrics β] β β
β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Actions: β
β [Publish Now] [Schedule Publish] [Preview] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Dashboard Metrics:
- Distribution Status: Active/Disabled
- Cache Hit Ratio: Percentage of requests served from cache
- Request Volume: Recent traffic statistics
- Active/Pending Invalidations: Real-time count
- Link to AWS Console: For detailed CloudFront monitoring
Technical Implementation Notes
API Endpoints:
// Trigger publishing with CDN invalidation
POST /api/v1/events/{eventId}/publishing/publish
Request: {
mode: "progressive" | "complete",
notifySubscribers: boolean,
invalidateCDN: boolean // Default: true
}
Response: {
publishingId: string,
version: string,
cdnInvalidationId: string, // AWS CloudFront invalidation ID
status: "in_progress"
}
// Poll publishing status
GET /api/v1/events/{eventId}/publishing/status/{publishingId}
Response: {
status: "in_progress" | "completed" | "failed",
steps: [
{ name: "validation", status: "completed", duration: 2 },
{ name: "database", status: "completed", duration: 1 },
{ name: "cdn_invalidation", status: "in_progress", duration: 42,
details: {
cloudFrontId: "E2X7XYZ123",
invalidationId: "I3ABCD8FGH9",
paths: ["/events/2025", "/events/2025/speakers"],
estimatedCompletion: 60
}
},
{ name: "notifications", status: "queued", duration: null },
{ name: "search_index", status: "queued", duration: null }
],
totalDuration: 45
}
// Retry CDN invalidation
POST /api/v1/events/{eventId}/publishing/cdn/retry
Request: {
version: string,
invalidationId: string // Previous failed invalidation
}
Response: {
newInvalidationId: string,
status: "in_progress"
}
// Get version history with CDN status
GET /api/v1/events/{eventId}/publishing/versions
Response: [
{
version: "v4",
publishedAt: "2025-02-28T14:35:00Z",
publishedBy: "user@example.com",
phase: "speakers",
cdnStatus: {
status: "cleared",
invalidationId: "I3ABCD8FGH9",
duration: 42,
pathsCleared: 3
}
},
// ... more versions
]
WebSocket Events (real-time progress updates):
{
"type": "PUBLISHING_PROGRESS",
"data": {
"publishingId": "pub-123",
"currentStep": "cdn_invalidation",
"status": "in_progress",
"progress": 78,
"cdnDetails": {
"invalidationId": "I3ABCD8FGH9",
"elapsedTime": 42,
"estimatedCompletion": 60
}
}
}
Polling Fallback:
- If WebSocket unavailable, poll status endpoint every 2 seconds
- Stop polling when status is βcompletedβ or βfailedβ
- Maximum polling duration: 5 minutes (timeout after)
Key Interactive Elements
- Publishing Timeline: Visual representation of content release phases
- Validation Dashboard: Real-time readiness assessment with detailed checks
- Live Preview: See exactly how content appears to public
- Publishing Modes: Control visibility (draft, progressive, complete)
- Version Control: Track and rollback content versions
Functional Requirements Met
- FR19: Progressive publishing with validation checks
- FR6: Ensures current event prominence on public site
- Content Validation: Multi-criteria checking before publication
- Version Control: Track all content changes with rollback capability
- Preview Modes: Test on desktop, mobile, and print layouts
- Manual Publishing: Explicit publish action required
User Interactions
- Review Validation: Check all content requirements before publishing
- Fix Issues: Click action buttons to resolve validation errors
- Preview Content: See live preview of public-facing page
- Set Publishing Mode: Choose draft, progressive, or complete visibility
- Publish: Manually publish content when ready
Technical Notes
- Real-time validation engine checks all content criteria
- Preview iframe shows actual public site rendering
- Version control system tracks all content changes
- Manual publishing workflow with validation checks
- Integration with workflow Step 11 (Publish Progress)
- Responsive preview for mobile/desktop testing
API Requirements
Initial Page Load APIs
When the Publishing Control Center screen loads, the following APIs are called to provide the necessary data:
CONSOLIDATED API APPROACH (Story 1.17):
- GET /api/v1/events/{eventId}?include=workflow,sessions,publishing
- Returns: Complete event data with workflow state, sessions, and publishing configuration in a single call
- Response includes:
- Event core data: eventNumber, title, description, eventDate, status, venue
- workflow: Current workflow state (currentPhase, phaseHistory, nextMilestone, publishingReadiness)
- sessions: Session and speaker data (sessions with speaker assignments, confirmation status, abstract submission status)
- publishing: Publishing configuration (currentMode, requiresApproval, preview content, version history, validation status)
- Used for: Populate all publishing control center sections in a single request
- Performance: Reduced from 7 API calls to 1 (86% reduction in HTTP requests)
MIGRATION NOTE (Story 1.17): The original implementation required 7 separate API calls on page load:
- Event details
- Workflow state
- Validation status
- Sessions
- Publishing preview
- Version history
- Publishing config
The new consolidated API includes all this data via the ?include=workflow,sessions,publishing parameter, reducing to a single call. This provides:
- Page load time: ~85% faster (from ~2.5s to <400ms)
- Single loading state instead of 7 separate loading indicators
- Atomic data consistency across all publishing components
- Reduced network overhead and latency
- Simpler error handling (one failure point instead of seven)
User Action APIs
-
PUT /api/v1/events/{eventId}/workflow
- Triggered by: User clicks action buttons to transition phases
- Payload:
{ phaseTransition: "to_agenda_draft" } - Returns: Updated workflow state
- Used for: Updates timeline visualization and current phase display
-
POST /api/v1/events/{eventId}/publishing/publish
- Triggered by: User clicks [Publish Now] button
- Payload:
{ mode: "progressive|complete", approvalOverride: boolean } - Returns: Publication confirmation with timestamp
- Used for: Content becomes visible on public site, version incremented
-
PUT /api/v1/events/{eventId}/publishing/config
- Triggered by: User changes publishing mode radio buttons
- Payload:
{ mode: "draft|progressive|complete" } - Returns: Updated configuration
- Used for: Changes content visibility rules
-
POST /api/v1/events/{eventId}/publishing/versions/{versionId}/rollback
- Triggered by: User clicks [Rollback] button in version control
- Payload:
{ versionId: uuid, reason: string } - Returns: Rolled back version details
- Used for: Restores previous content version, creates new version entry
-
GET /api/v1/events/{eventId}/publishing/preview?mode={mode}&device={device}
- Triggered by: User clicks [Desktop], [Mobile], or [Print] preview buttons
- Query params: mode (current publishing mode), device (desktop|mobile|print)
- Returns: Rendered preview HTML
- Used for: Updates preview pane with device-specific rendering
-
PUT /api/v1/sessions/{sessionId}/quality-review
- Triggered by: User clicks [Review] or [Go] on quality review validation items
- Payload: Session/content for review submission
- Returns: Updated review status
- Used for: Updates validation dashboard status for abstracts/quality review
Navigation Map
Primary Navigation Actions
-
β Back button β Navigate to
Event Management Dashboard(story-1.16-event-management-dashboard.md)- Returns to event list
- No context passed
-
Event Title or Topic Description [Edit] button β Navigate to
Event Edit Screen- Opens event editing interface
- Context: eventId, specific field to edit
-
Date & Venue [View] button β Navigate to
Venue Details- Opens venue details modal or screen
- Context: eventId, venueId
-
Speaker List [Manage] button β Navigate to
Speaker Matching Interface(story-3.1-speaker-matching-interface.md)- Opens speaker management screen
- Context: eventId, filter to show confirmed/pending speakers
-
Abstracts [Review] button β Navigate to
Content Review Screen- Opens moderator content review interface
- Context: eventId, filter to show pending abstracts
-
Abstract validation [Fix] button β Navigate to
Abstract Editing Screen- Opens abstract editor
- Context: eventId, list of sessionIds with issues
-
Speaker Photos [Upload] button β Navigate to
Speaker Photo Management- Opens photo upload interface
- Context: eventId, list of speakerIds missing photos
-
Session Timings [Assign] button β Navigate to
/organizer/events/:eventCode/slot-assignment- Opens dedicated slot assignment page (story-5.7-slot-assignment-page.md)
- Context: eventCode, optionally focus on specific session if clicked on sub-item
- Blocking Validation: Phase 3 (Agenda) publish is blocked if any session lacks timing
- Shows: Full drag-drop interface with speaker pool, timeline grid, preference matching
8b. Agenda Times [Assign] button β Navigate to Slot Assignment Screen
- Opens slot assignment interface (part of Story 3.1 or new screen)
- Context: eventId, focus on unassigned slots
-
Registration Link [Test] button β Opens new tab to
Event Registration(story-2.4-event-registration.md)- Opens registration page in test mode
- Context: eventId, test mode parameter
-
Publishing Controls [Preview] button β Opens new tab to
Current Event Landing(story-2.4-current-event-landing.md)- Opens public event page in preview mode
- Context: eventId, preview mode parameter
-
Version Control [View History] button β Opens
Version History Modal- Shows version history in modal overlay (same screen)
- Context: eventId, loads version list via API