Story 1.0: System Settings/Configuration Screen
Header Information
Story: Epic 1 - Foundation & Core Infrastructure Screen: System Settings/Configuration Screen User Role: Organizer (Admin-level) Related FR: FR1 (Role-based authentication), FR2 (Event workflow management), FR5 (Progressive publishing)
Visual Wireframe
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Back to Dashboard System Settings [Save Changes] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββ SETTINGS NAVIGATION βββββββββββββββββββββββββββββββββββββββ β
β β β Platform Configuration β Workflow Configuration β β
β β β Integration Settings β Feature Flags β β
β β β System Status β Security & Access β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ PLATFORM CONFIGURATION ββββββββββββββββββββββββββββββββββββ β
β β β β
β β General Settings β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Platform Name: [BATbern Event Platform ] β β β
β β β Support Email: [support@berner-architekten-treffen.ch ] β β β
β β β Admin Contact: [admin@berner-architekten-treffen.ch ] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Internationalization β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Default Language: [German (de-CH) βΌ] β β β
β β β Supported Languages: β German β English β β β
β β β Date Format: [DD.MM.YYYY βΌ] β β β
β β β Time Zone: [Europe/Zurich βΌ] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Email Configuration β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Email Provider: AWS SES (Frankfurt) β β β
β β β Sender Name: [BATbern Events ] β β β
β β β Reply-to Address: [noreply@berner-architekten-treffen.ch ] β β β
β β β Daily Send Limit: [50,000 emails ] β β β
β β β [Test Email Configuration] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Storage & CDN β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β S3 Bucket: batbern-content-eu-central-1 β β β
β β β CDN Domain: d3tsrt2aaweqwh.cloudfront.net β β β
β β β Max File Size: [200 MB ] β β β
β β β Allowed File Types: PDF, PPTX, PNG, JPG, MP4, ZIP β β β
β β β Storage Quota/User: [5 GB ] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ WORKFLOW CONFIGURATION βββββββββββββββββββββββββββββββββββ β
β β β β
β β Event Workflow Steps (16-Step Process) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Step Name Duration Auto-Skip β β β
β β β ββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β 1. Topic Definition 7 days β β β β
β β β 2. Speaker Outreach 14 days β β β β
β β β 3. Speaker Confirmation 21 days β β β β
β β β 4. Slot Assignment 7 days β β β β
β β β 5. Content Submission 30 days β β β β
β β β 6. Quality Review 14 days β β β β
β β β 7. Preliminary Publish 3 days β β β β
β β β ... β β β
β β β 16. Post-Event Archive β β β β β
β β β [Edit Workflow Steps] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Deadline Management β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β Send deadline reminders (7 days, 3 days, 1 day) β β β
β β β β Enable auto-escalation for missed deadlines β β β
β β β β Notify moderator on workflow blockages β β β
β β β Grace Period: [2 days ] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ INTEGRATION SETTINGS βββββββββββββββββββββββββββββββββββββ β
β β β β
β β AWS Services β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Cognito User Pool: [eu-central-1_ABC123 ] β β β β
β β β EventBridge Bus: [batbern-events ] β β β β
β β β S3 Bucket: [batbern-content-prod ] β β β β
β β β CloudFront Dist: [E1234ABCD567890 ] β β β β
β β β [Test AWS Connections] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β External APIs β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Swiss UID API: [Configured ] β β β β
β β β API Key: **************************** β β β
β β β [Test UID Verification] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Calendar Integration β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β Enable iCal export for attendees β β β
β β β β Enable Google Calendar sync β β β
β β β β Enable Outlook Calendar sync β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ FEATURE FLAGS ββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Core Features β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β Progressive Publishing β β β
β β β β Speaker Overflow Management β β β
β β β β Multi-Organizer Collaboration β β β
β β β β Real-time Workflow Updates β β β
β β β β Topic Similarity Detection (ML) β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Advanced Features (Beta) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β AI-Powered Content Recommendations β β β
β β β β Automated Report Generation β β β
β β β β Advanced Partner Analytics β β β
β β β β Attendee Community Features β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Experimental Features (Dev/Staging Only) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β GraphQL API Gateway β β β
β β β β WebSocket Real-time Events β β β
β β β β Mobile App Push Notifications β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ SYSTEM STATUS ββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Service Health Last Updated: 2 min ago β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Service Name Status Response Time β β β
β β β ββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β API Gateway β UP 42ms β β β
β β β Event Management β UP 89ms β β β
β β β Speaker Coordination β UP 76ms β β β
β β β Partner Analytics β UP 112ms β β β
β β β Attendee Experience β UP 58ms β β β
β β β Company Management β UP 67ms β β β
β β β PostgreSQL Database β UP 12ms β β β
β β β Caffeine Cache β UP 3ms β β β
β β β AWS S3 β UP 24ms β β β
β β β AWS SES β UP 156ms β β β
β β β CloudFront CDN β UP 18ms β β β
β β β [Refresh Status] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β System Metrics (Last 24 Hours) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β API Requests: 1,234,567 requests β β β
β β β Average Response Time: 145ms β β β
β β β Error Rate: 0.12% β β β
β β β Active Users: 2,341 users β β β
β β β Storage Used: 1.2 TB / 5 TB (24%) β β β
β β β Cache Hit Rate: 94.3% β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Recent Activity Log β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β 14:23 System settings updated by admin@batbern.ch β β β
β β β 12:45 Feature flag enabled: Progressive Publishing β β β
β β β 09:15 AWS integration test: SUCCESS β β β
β β β 08:00 Scheduled backup completed β β β
β β β [View Full Activity Log] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββ SECURITY & ACCESS ββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Access Control β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Admin Users: [3 users with system admin access] β β β
β β β β’ admin@batbern.ch (You) β β β
β β β β’ organizer1@batbern.ch β β β
β β β β’ organizer2@batbern.ch β β β
β β β [Manage Admin Access] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Security Settings β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β Require MFA for admin users β β β
β β β β Enable audit logging β β β
β β β β Enable IP-based access restrictions β β β
β β β Session Timeout: [30 minutes ] β β β
β β β Password Policy: Minimum 12 chars, symbols required β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β Rate Limiting β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Public API: [100 requests/minute ] β β β
β β β Authenticated: [1000 requests/minute ] β β β
β β β Admin API: [Unlimited ] β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [Cancel] [Save All Changes] β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Interactive Elements
Navigation & Organization
- Tab Navigation: Six primary configuration sections with visual active state indicator
- Sticky Header: Header with back button and save action remains visible during scroll
- Collapsible Sections: Each configuration panel can be expanded/collapsed for focused editing
Platform Configuration
- Text Inputs: Editable fields for platform name, contact emails, and system identifiers
- Dropdowns: Language selection, date format, timezone with searchable options
- Checkboxes: Multi-select for supported languages and feature toggles
- Test Buttons: βTest Email Configurationβ triggers validation and sends test email
Workflow Configuration
- Editable Table: Inline editing of workflow step names, durations, and auto-skip settings
- Duration Input: Number inputs with day/week unit selectors
- Auto-Skip Toggles: Checkboxes to enable/disable automatic step progression
- Workflow Editor Modal: βEdit Workflow Stepsβ opens detailed step configuration
Integration Settings
- Connection Status Indicators: Visual checkmarks (β) showing successful connections
- Masked Inputs: API keys displayed as asterisks with βRevealβ button
- Test Integration Buttons: Validate connections to AWS services and external APIs
- Toggle Switches: Enable/disable specific integration features
Feature Flags
- Tiered Checkboxes: Core features (always enabled), Beta features (opt-in), Experimental (dev/staging only)
- Environment Badges: Visual indicators showing which environments support experimental features
- Bulk Actions: βEnable All Beta Featuresβ / βDisable All Experimentalβ quick actions
System Status
- Real-Time Status Grid: Color-coded service health with response times
- Auto-Refresh: Status updates every 2 minutes with manual refresh button
- Metrics Dashboard: Key performance indicators with visual progress bars
- Activity Log: Scrollable log with timestamp, user, and action details
- Drill-Down Links: Click service names to view detailed metrics
Security & Access
- User Management: List of admin users with inline add/remove capabilities
- Security Toggles: Enable/disable MFA, audit logging, IP restrictions
- Input Validation: Real-time validation for session timeout and password policy settings
- Rate Limit Sliders: Adjustable request limits with visual indicators
Functional Requirements Met
- FR1 (Role-based Authentication): Admin access control, MFA enforcement, session management
- FR2 (Event Workflow Management): Configurable 16-step workflow with customizable durations and automation rules
- FR5 (Progressive Publishing): Feature flag control for publishing engine, email template management
- FR7 (Email Notifications): AWS SES configuration, sender settings, daily send limits
- NFR2 (Performance): System metrics monitoring, service health tracking, response time analytics
- NFR3 (External Integrations): AWS service configuration, Swiss UID API setup, calendar sync settings
- NFR4 (Multi-language Support): i18n configuration, default language, supported languages management
User Interactions
Loading State
- User clicks βSystem Settingsβ from Event Management Dashboard
- Screen displays loading skeleton with animated placeholders
- API calls fetch configuration data in parallel
- Sections populate as data arrives (progressive rendering)
Editing Configuration
- User navigates to desired configuration tab
- User modifies settings (text input, dropdown selection, checkbox toggle)
- βSave Changesβ button becomes highlighted to indicate unsaved changes
- Browser warns user if attempting to navigate away with unsaved changes
Testing Integrations
- User clicks βTest Email Configurationβ button
- Modal prompts for recipient email address
- System sends test email via AWS SES
- Success/failure notification displays with detailed error messages if applicable
- Connection status indicator updates based on test results
Managing Workflow Steps
- User clicks βEdit Workflow Stepsβ button
- Modal opens showing detailed workflow step editor
- User can:
- Reorder steps via drag-and-drop
- Edit step names, descriptions, and durations
- Set conditional step logic
- Configure notification templates per step
- Changes validated before saving (no circular dependencies, minimum durations)
- Preview shows workflow timeline with new configuration
Monitoring System Health
- Status panel auto-refreshes every 2 minutes
- User can click βRefresh Statusβ for immediate update
- Clicking service name opens detailed metrics modal with:
- Response time trends (last 24 hours)
- Error rate breakdown
- Recent error logs
- Historical uptime (30/60/90 days)
- Degraded service displays warning icon with diagnostic information
Saving Changes
- User clicks βSave All Changesβ button
- Validation runs across all modified settings
- If validation fails:
- Errors highlighted inline with specific field messages
- Screen scrolls to first error
- Save button remains disabled until errors resolved
- If validation passes:
- Confirmation modal shows summary of changes
- User confirms or cancels
- On confirm: API calls execute, success notification displays
- On error: Detailed error message with rollback option
Technical Notes
Frontend Implementation
- Framework: React 18.2 with TypeScript, Material-UI components
- State Management: Zustand for local form state, React Query for server state and caching
- Form Handling: React Hook Form with Zod schema validation
- Real-time Updates: Polling (30s interval) for system status, WebSocket for critical alerts
- Responsive Design: Tabs collapse to dropdown on mobile, collapsible sections for small screens
Backend Integration
- Configuration Storage: PostgreSQL
system_configurationtable with JSONB columns for flexible schema - Audit Trail: All changes logged to
configuration_audit_logwith timestamp, user, old/new values - Validation: Server-side validation mirrors client-side rules, business logic validation (e.g., workflow dependencies)
- Caching: Caffeine in-memory cache for read-heavy configuration with 5-minute TTL, cache invalidation on updates
Performance Optimization
- Code Splitting: Each configuration tab lazy-loaded separately
- Debounced Validation: Client-side validation debounced 500ms to reduce unnecessary API calls
- Optimistic Updates: UI updates immediately, rollback on API failure
- Stale-While-Revalidate: React Query serves cached data while revalidating in background
Security Considerations
- Authorization: Admin-only endpoint, JWT role check, additional ADMIN_SETTINGS permission
- Input Sanitization: All inputs sanitized to prevent XSS, SQL injection
- Audit Logging: All configuration changes logged with user ID, timestamp, IP address
- Change Approval: Critical settings (security, integrations) require two-admin approval (future enhancement)
API Requirements
Initial Page Load APIs
-
GET /api/v1/admin/system-config (Story 1.27)
- Consolidation: Unified system configuration endpoint
- Authorization: Requires
ADMIN_SETTINGSpermission - Query Params: None
- Returns: Complete system configuration objectjson
{ "platform": { "name": "BATbern Event Platform", "supportEmail": "info@berner-architekten-treffen.ch", "adminContact": "info@berner-architekten-treffen.ch" }, "i18n": { "defaultLanguage": "de-CH", "supportedLanguages": ["de", "en"], "dateFormat": "DD.MM.YYYY", "timezone": "Europe/Zurich" }, "email": { "provider": "AWS_SES", "senderName": "BATbern Events", "replyToAddress": "noreply@batbern.ch", "dailySendLimit": 50000 }, "storage": { "s3Bucket": "batbern-content-eu-central-1", "cdnDomain": "d3tsrt2aaweqwh.cloudfront.net", "maxFileSizeMB": 200, "allowedFileTypes": ["PDF", "PPTX", "PNG", "JPG", "MP4", "ZIP"], "userStorageQuotaGB": 5 }, "workflow": { "steps": [...], // 16-step workflow configuration "deadlineReminders": true, "autoEscalation": true, "gracePeriodDays": 2 }, "integrations": { "aws": {...}, "swissUid": {...}, "calendar": {...} }, "featureFlags": {...}, "security": {...} } - Used for: Populating all configuration forms with current values
- Performance: <300ms (P95)
- Consolidation Benefit: Single endpoint replaces multiple fragmented config endpoints
-
GET /api/v1/admin/system/status (Story 1.27)
- Consolidation: Part of standardized admin endpoints
- Authorization: Requires
ADMIN_SETTINGSpermission - Query Params: None
- Returns: Real-time system health and metricsjson
{ "services": [ { "name": "API Gateway", "status": "UP", "responseTimeMs": 42, "lastChecked": "2024-03-15T14:23:00Z" }, // ... other services ], "metrics": { "apiRequests24h": 1234567, "avgResponseTimeMs": 145, "errorRate": 0.0012, "activeUsers": 2341, "storageUsedTB": 1.2, "storageLimitTB": 5.0, "cacheHitRate": 0.943 }, "activityLog": [ { "timestamp": "2024-03-15T14:23:00Z", "action": "System settings updated", "userId": "admin@batbern.ch", "details": "Platform configuration changed" }, // ... recent activities ] } - Used for: System Status dashboard, real-time monitoring
- Performance: <200ms (P95)
-
GET /api/v1/admin/feature-flags (Story 1.27)
- Consolidation: Standardized admin feature flags endpoint
- Authorization: Requires
ADMIN_SETTINGSpermission - Query Params:
?environment={dev|staging|production} - Returns: Feature flag states for specified environmentjson
{ "core": { "progressivePublishing": true, "speakerOverflowManagement": true, "multiOrganizerCollaboration": true, "realtimeWorkflowUpdates": true, "topicSimilarityDetection": true }, "beta": { "aiContentRecommendations": false, "automatedReportGeneration": false, "advancedPartnerAnalytics": false, "attendeeCommunityFeatures": false }, "experimental": { "graphqlApiGateway": false, "websocketRealtime": false, "mobilePushNotifications": false } } - Used for: Feature Flags section, environment-specific toggle states
- Performance: <150ms (P95)
-
GET /api/v1/admin/users?filter={βroleβ:βSYSTEM_ADMINβ}&include=security (Story 1.23)
- Consolidation: Uses consolidated Users API with admin filter instead of separate access-control endpoint
- Authorization: Requires
ADMIN_SETTINGSpermission - Query Params:
filter={"role":"SYSTEM_ADMIN"}(filter for admin users)include=security(include security settings)
- Returns: Admin user list and access control settingsjson
{ "adminUsers": [ { "userId": "user-123", "email": "admin@batbern.ch", "name": "Admin User", "roles": ["ORGANIZER", "SYSTEM_ADMIN"], "mfaEnabled": true, "lastLogin": "2024-03-15T08:30:00Z" }, // ... other admin users ], "securitySettings": { "requireMfaForAdmins": true, "auditLoggingEnabled": true, "ipRestrictions": true, "sessionTimeoutMinutes": 30, "passwordPolicy": { "minLength": 12, "requireSymbols": true, "requireNumbers": true, "requireUppercase": true } }, "rateLimits": { "publicApi": 100, "authenticatedApi": 1000, "adminApi": null } } - Used for: Security & Access section
User Action APIs
-
PUT /api/v1/admin/system-config
- Triggered by: βSave All Changesβ button click
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload: Partial or complete system configuration objectjson
{ "platform": { ... }, "i18n": { ... }, "email": { ... }, "storage": { ... }, "workflow": { ... }, "integrations": { ... } } - Validation:
- Email addresses must be valid format
- Storage quotas must be positive integers
- Workflow step durations must be > 0
- Integration credentials validated if changed
- Response:json
{ "success": true, "updatedFields": ["email.senderName", "workflow.gracePeriodDays"], "changeId": "change-789", "auditLogId": "audit-456" } - Error Response (400):json
{ "success": false, "errors": [ { "field": "email.replyToAddress", "message": "Invalid email format" }, { "field": "workflow.steps[2].duration", "message": "Duration must be at least 1 day" } ] } - Used for: Persisting all configuration changes, triggering audit log entry
-
POST /api/v1/admin/test-email-config
- Triggered by: βTest Email Configurationβ button
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload:json
{ "recipientEmail": "test@example.com", "testEmailType": "SYSTEM_TEST" } - Response:json
{ "success": true, "messageId": "ses-msg-123456", "deliveryStatus": "SENT", "timestamp": "2024-03-15T14:30:00Z" } - Error Response (500):json
{ "success": false, "error": "SES_CONNECTION_FAILED", "message": "Unable to connect to AWS SES. Check credentials and region.", "details": "InvalidClientTokenId: The security token included in the request is invalid." } - Used for: Validating AWS SES configuration, testing email delivery
-
POST /api/v1/admin/test-integration
- Triggered by: βTest AWS Connectionsβ, βTest UID Verificationβ buttons
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload:json
{ "integrationType": "AWS_S3" | "AWS_COGNITO" | "SWISS_UID", "testData": { // Integration-specific test parameters } } - Response:json
{ "success": true, "integrationType": "AWS_S3", "testResults": { "connectionStatus": "SUCCESS", "responseTimeMs": 24, "message": "Successfully connected to S3 bucket and verified permissions" } } - Used for: Validating external service integrations, updating connection status indicators
-
PATCH /api/v1/admin/feature-flags
- Triggered by: Feature flag checkbox toggle
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload:json
{ "environment": "production", "flag": "beta.aiContentRecommendations", "enabled": true } - Response:json
{ "success": true, "flag": "beta.aiContentRecommendations", "previousValue": false, "newValue": true, "effectiveTimestamp": "2024-03-15T14:35:00Z" } - Used for: Real-time feature flag updates, propagating changes to all services
-
PUT /api/v1/admin/workflow-config
- Triggered by: βSaveβ in Edit Workflow Steps modal
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload:json
{ "steps": [ { "stepNumber": 1, "name": "Topic Definition", "durationDays": 7, "autoSkip": false, "notificationTemplate": "TOPIC_DEFINITION_REMINDER" }, // ... all 16 steps ], "deadlineReminders": true, "reminderDaysBefore": [7, 3, 1], "autoEscalation": true, "gracePeriodDays": 2 } - Validation:
- Step numbers must be sequential 1-16
- No circular dependencies
- Durations must be positive integers
- Response:json
{ "success": true, "validationWarnings": [ "Step 5 duration increased from 30 to 45 days. Existing events will not be affected." ], "affectedEventsCount": 0 } - Used for: Updating workflow configuration, affecting new events only (existing events retain original workflow)
-
POST /api/v1/admin/access-control/grant
- Triggered by: βAdd Admin Userβ button
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload:json
{ "userId": "user-456", "grantAdminRole": true, "reason": "New platform administrator" } - Response:json
{ "success": true, "userId": "user-456", "rolesGranted": ["SYSTEM_ADMIN"], "auditLogId": "audit-789" } - Used for: Granting system admin access to organizer users
-
DELETE /api/v1/admin/access-control/revoke/{userId}
- Triggered by: Remove icon next to admin user name
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload:json
{ "reason": "User no longer requires admin access" } - Response:json
{ "success": true, "userId": "user-456", "rolesRevoked": ["SYSTEM_ADMIN"], "auditLogId": "audit-790" } - Used for: Revoking system admin privileges
-
PATCH /api/v1/admin/security-settings
- Triggered by: Security settings checkbox or input change + Save
- Authorization: Requires
ADMIN_SETTINGSpermission - Payload:json
{ "requireMfaForAdmins": true, "sessionTimeoutMinutes": 30, "rateLimits": { "publicApi": 100, "authenticatedApi": 1000 } } - Response:json
{ "success": true, "updatedSettings": ["requireMfaForAdmins", "sessionTimeoutMinutes"], "affectedUsersCount": 3 } - Used for: Updating security and access control settings
Navigation Map
Primary Navigation Actions
-
β Back to Dashboard β Navigate to
Event Management Dashboard- Target:
story-1.16-event-management-dashboard.md - Context: None (return to main organizer dashboard)
- Unsaved Changes: Warn user if configuration modified but not saved
- Target:
-
[Save Changes] button β Execute save, remain on current screen
- Action: Triggers
PUT /api/v1/admin/system-config - Success: Toast notification βConfiguration saved successfullyβ, button disabled
- Failure: Inline error messages, scroll to first error field
- Action: Triggers
-
Tab Navigation (6 tabs) β Switch between configuration sections
- Tabs: Platform Configuration, Workflow Configuration, Integration Settings, Feature Flags, System Status, Security & Access
- Behavior: Client-side navigation, no page reload
- State: Preserve scroll position per tab, highlight unsaved changes
Secondary Navigation (Data Interactions)
-
Click service name in System Status β Open service detail modal
- Target: Modal overlay with detailed metrics for selected service
- Content:
- Response time trends (chart)
- Error rate breakdown
- Recent error logs (last 50 entries)
- Historical uptime (30/60/90 days)
- Actions: Export logs, view documentation, restart service (if applicable)
-
[View Full Activity Log] link β Navigate to Activity Log screen
- Target: Dedicated activity log viewer (full-page)
- Context: Pre-filtered to system configuration changes
- Features: Search, date range filter, export to CSV
-
[Edit Workflow Steps] button β Open workflow editor modal
- Target: Modal overlay with draggable workflow step editor
- Content:
- Visual workflow timeline
- Editable step details (name, duration, notifications)
- Conditional logic configuration
- Actions: Save, Cancel, Preview changes
-
[Manage Admin Access] link β Open admin user management modal
- Target: Modal overlay with admin user list and add/remove capabilities
- Content:
- Current admin users (name, email, last login)
- [Add Admin User] button (opens user search)
- Remove icon per user (confirmation required)
- Actions: Add admin, remove admin, view audit log
Event-Driven Navigation
-
Configuration save success β Display toast notification, remain on screen
- Notification: βConfiguration saved successfullyβ (green toast, 5s duration)
- Button State: βSave Changesβ button disabled until next edit
- Audit Log: New entry added to activity log
-
Integration test failure β Display error notification with diagnostic information
- Notification: βIntegration test failedβ (red toast, persistent until dismissed)
- Details Modal: Option to view full error details and suggested fixes
- Connection Status: Update status indicator to red X
-
System status degradation β Display alert banner at top of screen
- Trigger: API polling detects service status change to DOWN or DEGRADED
- Banner: βSystem Alert: {Service Name} is experiencing issues. View details ββ
- Action: Click banner navigates to System Status tab, scrolls to affected service
-
Real-time configuration change β Display notification if another admin modifies settings
- Trigger: WebSocket event
CONFIG_CHANGEDreceived - Notification: βConfiguration updated by {admin@batbern.ch}. Refresh to see latest changes.β
- Action: [Refresh] button reloads configuration, discarding local unsaved changes (with warning)
- Trigger: WebSocket event
Error States & Redirects
-
Unauthorized access (403) β Redirect to Event Management Dashboard
- Condition: User lacks
ADMIN_SETTINGSpermission - Notification: βYou do not have permission to access system settings.β
- Redirect: After 3 seconds, navigate to
Event Management Dashboard
- Condition: User lacks
-
Session timeout (401) β Redirect to login screen
- Condition: JWT token expired during configuration editing
- Notification: βYour session has expired. Please log in again.β
- State Preservation: Save draft configuration to localStorage for recovery after re-login
-
Network error β Display error banner with retry option
- Condition: API request fails due to network issue
- Banner: βNetwork error. Unable to save configuration. [Retry] [Save Offline]β
- Retry: Attempt API call again
- Save Offline: Store changes locally, sync when connection restored
-
Validation error (400) β Highlight fields with errors
- Condition: Server-side validation fails
- Behavior:
- Scroll to first invalid field
- Display inline error messages below each invalid field
- βSave Changesβ button remains enabled for retry
- Example Errors:
- βEmail address is requiredβ
- βWorkflow step duration must be at least 1 dayβ
- βRate limit must be between 10 and 10,000 requests/minuteβ
-
Concurrent modification conflict (409) β Display merge conflict resolution modal
- Condition: Another admin saved changes while current user was editing
- Modal:
- Show current values, other adminβs changes, userβs changes (3-column diff)
- Options: Keep your changes, Accept their changes, Merge manually
- Action: User selects resolution strategy, re-saves with conflict marker
Responsive Design Considerations
Mobile Layout Changes (< 768px)
- Tab Navigation: Converts to dropdown select menu
- Configuration Panels: Stack vertically, full width
- Multi-column Layouts: Collapse to single column (e.g., Integration Settings)
- System Status Table: Horizontal scroll enabled, sticky service name column
- Form Fields: Full width with touch-friendly sizing (min 44px height)
- Save Button: Sticky footer button for easy access while scrolling
Tablet Layout Changes (768px - 1024px)
- Sidebar Navigation: Tabs remain horizontal but with condensed labels
- Configuration Panels: 2-column grid where appropriate (e.g., Platform + i18n side-by-side)
- System Status: Maintain table layout with condensed columns
- Modals: Max-width 90% viewport, centered
Mobile-Specific Interactions
- Swipe Gestures: Swipe left/right to navigate between tabs
- Pull-to-Refresh: Pull down on System Status tab to refresh metrics
- Touch Targets: Minimum 44x44px for all interactive elements
- Keyboard Avoidance: Auto-scroll to keep focused input visible when keyboard opens
Accessibility Notes
- Keyboard Navigation: Full tab navigation support, all interactive elements reachable via keyboard
- Focus Indicators: High-contrast focus rings (3px solid #0066CC) on all interactive elements
- ARIA Labels:
- Tab navigation:
aria-label="Configuration section navigation" - Status indicators:
aria-label="Service API Gateway status: Up, response time 42 milliseconds" - Form inputs: Proper
aria-describedbylinking to help text and error messages
- Tab navigation:
- Screen Reader Announcements:
- Configuration saves: βConfiguration saved successfullyβ via
aria-live="polite" - Errors: βValidation error in email configurationβ via
aria-live="assertive"
- Configuration saves: βConfiguration saved successfullyβ via
- Color Contrast: All text meets WCAG 2.1 AA standards (4.5:1 for normal text, 3:1 for large text)
- Error Messaging: Errors conveyed via text, not color alone (red icon + text message)
- Form Labels: All inputs have associated
<label>elements oraria-labelattributes - Skip Links: βSkip to configuration contentβ link for keyboard users to bypass header/tabs
State Management
Local Component State
currentTab: Active configuration tab (Platform | Workflow | Integrations | Features | Status | Security)isDirty: Boolean indicating unsaved changes presentvalidationErrors: Object mapping field paths to error messagestestResults: Results from integration tests (success/failure, timestamps)isRefreshing: Boolean for System Status refresh loading stateexpandedSections: Array of section IDs that are currently expanded
Global State (Zustand Store)
systemConfiguration: Complete configuration object (mirrored from API)featureFlags: Environment-specific feature flag statesadminUsers: List of users with admin privilegessystemStatus: Latest system health metricslastConfigUpdate: Timestamp of last configuration save (for conflict detection)
Server State (React Query)
-
Query Keys:
['admin', 'system-config']: System configuration (5 min cache)['admin', 'system-status']: System health status (2 min cache, auto-refetch)['admin', 'feature-flags', environment]: Feature flags per environment (10 min cache)['admin', 'access-control']: Admin users and security settings (5 min cache)['admin', 'activity-log']: Recent configuration changes (1 min cache)
-
Mutations:
updateSystemConfig: Invalidatessystem-configquery on successupdateFeatureFlag: Invalidatesfeature-flagsquery, broadcasts change via EventBridgegrantAdminAccess: Invalidatesaccess-controlquery, triggers audit logtestIntegration: No cache invalidation, updates localtestResultsstate
Real-Time Updates
- Polling Strategy: System Status polling every 2 minutes (configurable via
POLL_INTERVAL_MS) - WebSocket Events:
CONFIG_CHANGED: Another admin saved configuration, prompt user to refreshSERVICE_STATUS_CHANGED: Service health degradation, update status panel immediately
- Optimistic Updates: Configuration changes reflected immediately in UI, rolled back on API failure
Form Validation Rules
Field-Level Validations
- Platform Name: Required, 3-100 characters, alphanumeric + spaces
- Support Email: Required, valid email format (RFC 5322), must end with
@batbern.chor approved domain - Admin Contact: Required, valid email format
- Default Language: Required, must be one of supported languages
- Supported Languages: At least one language must be selected
- Date Format: Required, must match predefined format patterns (DD.MM.YYYY, MM/DD/YYYY, YYYY-MM-DD)
- Time Zone: Required, valid IANA timezone identifier (e.g., Europe/Zurich)
- Sender Name: Required, 1-50 characters
- Reply-to Address: Required, valid email format
- Daily Send Limit: Required, integer between 1,000 and 200,000
- Max File Size: Required, integer between 1 and 500 MB
- Storage Quota: Required, integer between 1 and 100 GB
- Workflow Step Duration: Required, integer β₯ 1 day
- Session Timeout: Required, integer between 5 and 480 minutes
- Rate Limit: Optional, if specified must be integer between 10 and 100,000 requests/minute
Form-Level Validations
- Language Consistency: Default language must be included in supported languages list
- Email Configuration: If daily send limit > 50,000, AWS SES must be in production mode (verified)
- Workflow Dependencies: No circular dependencies in conditional workflow steps
- Storage Capacity: Total allocated user quotas cannot exceed available S3 storage capacity
- Security Policy: If MFA required for admins, all current admin users must have MFA enabled
- Rate Limiting: Authenticated rate limit must be β₯ public rate limit
Edge Cases & Error Handling
Empty States
- No Admin Users: System requires at least one admin user. UI prevents removing last admin, displays warning.
- No Workflow Steps: Default 16-step workflow loads if custom workflow deleted. User cannot save with 0 steps.
- No Supported Languages: UI prevents deselecting all languages, enforces minimum of one language.
Loading States
- Initial Load: Display skeleton screens for each configuration section
- Saving Configuration: βSave Changesβ button shows spinner, disabled during save
- Testing Integration: Test buttons show spinner, disabled during test
- Refreshing Status: System Status panel shows βRefreshingβ¦β overlay
Error States
- API Unavailable: Display banner βSystem configuration service unavailable. Your changes are saved locally and will sync when service is restored.β
- Partial Save Failure: If some settings save but others fail, show summary: β3 of 5 settings saved. Failed: email.replyToAddress, workflow.steps[2].duration. Retry failed items?β
- Integration Test Timeout: After 30s, display βIntegration test timed out. Service may be unavailable or experiencing high latency.β
- Invalid Configuration: If server detects invalid configuration state (e.g., corrupted database entry), display full-page error with βReset to Defaultsβ option.
Permission Issues
- Admin Access Revoked Mid-Session: If admin permission revoked while user is on screen, display modal βYour admin access has been revoked. You will be redirected.β β Redirect to Event Management Dashboard after 5s.
- Read-Only Mode: If user has
ADMIN_SETTINGS_READbut notADMIN_SETTINGS_WRITE, display all fields as disabled with info banner βYou have read-only access to system settings.β
Concurrent Editing
- Another Admin Editing: Display info banner βAdmin user {email} is currently editing system settings. Your changes may conflict.β
- Conflict Resolution: On save conflict (409), show 3-column diff (current, their changes, your changes) with merge options.
Data Integrity
- Workflow Step Deletion: If deleting workflow step used by active events, warn β3 events are using this workflow step. Deleting will affect those events. Continue?β
- Integration Credential Rotation: If AWS credentials changed externally, integration tests fail with βCredentials invalid. Please update integration settings.β
- Storage Quota Exceeded: If reducing user storage quota below current usage, warn β12 users exceed new quota. They will be notified to reduce storage usage.β
Change Log
| Date | Version | Description | Author |
|---|---|---|---|
| 2024-03-15 | 1.0 | Initial wireframe creation | Sally (UX) |
Review Notes
Stakeholder Feedback
To be added after stakeholder review
Design Iterations
To be documented as design evolves
Open Questions
-
Two-Admin Approval Workflow: Should critical settings (security, integrations) require approval from a second admin before taking effect?
- Impact: Enhanced security, but adds complexity and potential delays
- Recommendation: Consider for post-MVP security enhancement
-
Rollback Capability: Should admins be able to rollback configuration to a previous version?
- Current: Audit log tracks changes but no one-click rollback
- Recommendation: Add βRevert to Versionβ feature in future iteration
-
Environment-Specific Configuration: Should each environment (dev/staging/production) have fully independent configuration, or shared with overrides?
- Current: Single production configuration, feature flags per environment
- Consideration: Some settings (e.g., storage quotas, rate limits) may need environment-specific values
-
Real-Time Configuration Updates: Should configuration changes propagate immediately to all services, or require a deployment/restart?
- Current: Feature flags update immediately, other config requires service restart
- Recommendation: Evaluate feasibility of hot-reloading for non-critical settings
-
Mobile Admin Access: Should system settings be fully functional on mobile, or recommend desktop-only access?
- Current: Fully responsive design, but complex configuration may be difficult on small screens
- Recommendation: Support mobile for viewing/monitoring, encourage desktop for editing