Story 2.3: Basic Publishing Engine - Wireframe

Story: Epic 2, Story 2.3 - Topic & Content Management Service

Last updated: January 5, 2026 Reading time: 30 minutes File size: 79.7 KB

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:

  1. ThrottlingException: AWS rate limit exceeded (15 concurrent invalidations/distribution)
  2. InvalidationBatchSizeTooLarge: Too many paths in single invalidation (>3000 paths)
  3. Timeout: Invalidation took longer than expected (>2 minutes)
  4. NoSuchDistribution: CloudFront distribution not found (configuration error)
  5. 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:

  1. Version: Version number (v1, v2, v3, etc.) with β€œcurrent” indicator
  2. Published: Timestamp and publisher name
  3. Phase: Which phase was published (Topic, Speakers, Agenda)
  4. 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.)
  5. 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:

typescript
// 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):

json
{
  "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

  1. Review Validation: Check all content requirements before publishing
  2. Fix Issues: Click action buttons to resolve validation errors
  3. Preview Content: See live preview of public-facing page
  4. Set Publishing Mode: Choose draft, progressive, or complete visibility
  5. 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):

  1. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

Primary Navigation Actions

  1. ← Back button β†’ Navigate to Event Management Dashboard (story-1.16-event-management-dashboard.md)

    • Returns to event list
    • No context passed
  2. Event Title or Topic Description [Edit] button β†’ Navigate to Event Edit Screen

    • Opens event editing interface
    • Context: eventId, specific field to edit
  3. Date & Venue [View] button β†’ Navigate to Venue Details

    • Opens venue details modal or screen
    • Context: eventId, venueId
  4. 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
  5. Abstracts [Review] button β†’ Navigate to Content Review Screen

    • Opens moderator content review interface
    • Context: eventId, filter to show pending abstracts
  6. Abstract validation [Fix] button β†’ Navigate to Abstract Editing Screen

    • Opens abstract editor
    • Context: eventId, list of sessionIds with issues
  7. Speaker Photos [Upload] button β†’ Navigate to Speaker Photo Management

    • Opens photo upload interface
    • Context: eventId, list of speakerIds missing photos
  8. 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
  1. 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
  2. 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
  3. Version Control [View History] button β†’ Opens Version History Modal

    • Shows version history in modal overlay (same screen)
    • Context: eventId, loads version list via API